/// <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); }