/// <summary>
        /// 寻找工作计划中结束时间最早的台座
        /// </summary>
        /// <param name="pedestalWorkPlanList">新生成的台座工作计划List</param>
        /// <param name="pedestalType">台座类型</param>
        /// <returns>台座工作计划Item</returns>
        public PedestalWorkPlan GetFirstWorkPlanPedestal(List <PedestalWorkPlan> pedestalWorkPlanList, string pedestalType)
        {
            List <PedestalWorkPlan> pedestalInProductWorkPlanList = new List <PedestalWorkPlan>();//状态为生产中的生产计划List

            GetPedestalWorkPlanListByStatus(BeamProductionPlanStatus.InProduction, ref pedestalInProductWorkPlanList);

            if (!pedestalInProductWorkPlanList.IsEmpty())
            {
                pedestalInProductWorkPlanList.AddRange(pedestalWorkPlanList);
            }

            var list = from a in pedestalInProductWorkPlanList
                       group a by a.PedestalId into b
                       select new
            {
                PedestalId = b.Key,
                EndTime    = b.Max(a => a.EndTime)
            };

            var item = list.OrderBy(f => f.EndTime).FirstOrDefault();

            PedestalWorkPlan pedestalWorkPlanItem = pedestalInProductWorkPlanList.FirstOrDefault(f => f.PedestalId == item.PedestalId && f.EndTime == item.EndTime);

            return(pedestalWorkPlanItem);
        }
        /// <summary>
        /// 台座工作计划
        /// </summary>
        /// <param name="orderDetail">订单详情</param>
        /// <param name="startTime">开始时间</param>
        /// <param name="pedestalDic">台座字典信息</param>
        /// <param name="pedestalExistList">当前已经使用的台座列表,用来过滤数据</param>
        /// <param name="pedestalWorkPlanList">台座工作计划List</param>
        /// <param name="message">信息</param>
        /// <returns></returns>
        public bool PedestalScheduleWork(OrderDetail orderDetail, PedestalDic pedestalDic, ref List <Pedestal> pedestalExistList, ref List <PedestalWorkPlan> pedestalWorkPlanList, ref string message)
        {
            Pedestal         pedestalItem              = new Pedestal();    //台座Item
            DateTime         startTime                 = DateTime.MinValue; //台座开始时间
            DateTime         endTime                   = DateTime.MinValue; //台座结束时间
            DateTime         lastProductTime           = DateTime.MinValue; //最晚生产时间
            PedestalWorkPlan pedestalWorkPlanItem      = null;              //台座工作计划Item
            PedestalWorkPlan firstPedestalWorkPlanItem = null;              //台座工作计划中结束时间最早的台座
            string           pedestalId;                                    //台座Id
            string           pedestalNumber;                                //台座编号
            string           pedestalType  = pedestalDic.PedestalType;      //台座类型
            List <NoWorkDay> noWorkDayList = new List <NoWorkDay>();        //非工作日期列表

            GetNoWorkDayList(ref noWorkDayList);                            //获取非工作日列表

            startTime = CheckCreateTime(orderDetail.CreateTime);
            if (pedestalDic.PedestalType == "预制")
            {
                startTime = startTime.AddDays(0.5);
            }

            lastProductTime = GetBackTime(orderDetail.DeliveryTime, pedestalDic.BackwardDays, noWorkDayList);

            if (!CanProduct(startTime, lastProductTime, ref message)) //没有时间安排生产
            {
                return(false);
            }

            if (GetFreePedestalByPedestalType(pedestalDic.PedestalType, pedestalExistList, ref pedestalItem))//有对应台座类型的空闲台座,并去除掉这个台座
            {
                pedestalId     = pedestalItem.PedestalId;
                pedestalNumber = pedestalItem.PedestalNumber;

                pedestalExistList.Add(pedestalItem);//添加已使用台座
            }
            else//没有对应台座类型的空闲台座,寻找结束时间最早的台座
            {
                firstPedestalWorkPlanItem = GetFirstWorkPlanPedestal(pedestalWorkPlanList, pedestalDic.PedestalType);

                startTime = CheckCreateTime(firstPedestalWorkPlanItem.EndTime);
                if (!CanProduct(startTime, lastProductTime, ref message)) //没有时间安排生产
                {
                    return(false);
                }
                pedestalId     = firstPedestalWorkPlanItem.PedestalId;
                pedestalNumber = firstPedestalWorkPlanItem.PedestalNumber;
            }
            endTime = GetEndTime(startTime, pedestalDic.ProcessDays, noWorkDayList);//增加对应工序所需天数

            pedestalWorkPlanItem = CreatePedestalWorkPlanItem(orderDetail.OrderNo, orderDetail.OrderDetailNo, orderDetail.BeamNo, orderDetail.BeamName, pedestalId, pedestalNumber, pedestalType, startTime, endTime);

            pedestalWorkPlanList.Add(pedestalWorkPlanItem);//添加台座计划

            return(true);
        }
        /// <summary>
        /// 创建台座工作计划Item
        /// </summary>
        /// <param name="orderNo">订单编号</param>
        /// <param name="beamNo">梁片编号</param>
        /// <param name="beamName">梁片名称</param>
        /// <param name="pedestalId">台座Id</param>
        /// <param name="pedestalNumber">台座编号</param>
        /// <param name="pedestalType">台座类型</param>
        /// <param name="startTime">开始时间</param>
        /// <param name="endTime">结束时间</param>
        /// <returns></returns>
        public PedestalWorkPlan CreatePedestalWorkPlanItem(string orderNo, string orderDetailNo, string beamNo, string beamName, string pedestalId, string pedestalNumber, string pedestalType, DateTime startTime, DateTime endTime)
        {
            PedestalWorkPlan pedestalWorkPlanItem = null;//台座工作计划Item

            pedestalWorkPlanItem = new PedestalWorkPlan()
            {
                Id             = Guid.NewGuid().ToString(),
                OrderNo        = orderNo,
                OrderDetailNo  = orderDetailNo,
                PedestalId     = pedestalId,
                PedestalNumber = pedestalNumber,
                PedestalType   = pedestalType,
                BeamNo         = beamNo,
                BeamName       = beamName,
                //Status = "未生产",
                StartTime = startTime,
                EndTime   = endTime
            };
            return(pedestalWorkPlanItem);
        }