///// <summary> ///// 已经排到的最后一天 ///// </summary> //public DateTime? CapEndTime { get; set; } ///// <summary> ///// 最后一天剩余的能力值 ///// </summary> //public double LastCap { get; set; } ///// <summary> ///// 添加Step到数组中,并记录最后的完成时间 ///// </summary> ///// <param name="step"></param> //public DateTime? AddStep(MOItemTask step) //{ // DateTime? EndTime = null ; // if (!StepList.Where(p => p.MOItemTaskId == step.MOItemTaskId).Any()) // { // StepList.Add(step); // this.endTime = step.PlannedDateTo; // EndTime = this.endTime; // } // SetTimeslice(); // return EndTime; //} //public void AddStep(MOItemTask step,double cap) //{ // double sum = LastCap + cap; // double maxcap = VentureCap * 1.2; // if (sum <= maxcap) // { // LastCap = VentureCap - sum; // } // else // { // LastCap = VentureCap - cap; // if(CapEndTime == null) // { // CapEndTime = DateTime.Now; // } // do // { // CapEndTime = CapEndTime.Value.AddDays(1); // } // while (IsWorkTime(CapEndTime.Value)); // } // step.PlannedDateFrom = new DateTime(CapEndTime.Value.Year, CapEndTime.Value.Month, CapEndTime.Value.Day, 8, 0, 0); // step.PlannedDateTo = new DateTime(CapEndTime.Value.Year, CapEndTime.Value.Month, CapEndTime.Value.Day, 17, 0, 0); // StepList.Add(step); //} public DateTime?AddStep(MOItemTask step, DateTime?lastTime, double cap) { if (lastTime != null) { var workTime = VenTureDayModel.GetWorkTime((DateTime)lastTime, VentureId); var venTureDayModel = this.VenTureDayModelList.Where(p => p.DayDate.Year == workTime.Year && p.DayDate.Month == workTime.Month && p.DayDate.Day == workTime.Day && p.LastCap > 0).FirstOrDefault(); if (venTureDayModel == null) { this.VenTureDayModelList.Add(new VenTureDayModel(workTime, VentureCap, new List <MOItemTask>())); venTureDayModel = this.VenTureDayModelList.Where(p => p.DayDate >= lastTime).FirstOrDefault(); } if (venTureDayModel.LastCap < cap && VentureCap * 0.25 < cap) { } var retModel = venTureDayModel.AddStep(step, cap, lastTime, this.VentureId); StepList.Add(retModel.MOItemTask); return(retModel.EndTime); } else { return(null); } }
/// <summary> /// 找到Moitemid对应的计划及后续计划移除出经营体列表,并返回该计划列表 /// </summary> /// <param name="mitsId"></param> /// <returns></returns> public List <MOItemTask> RemoveMOItemTaskById(string mitsId, double cap) { List <MOItemTask> returnMitsList = new List <MOItemTask>(); if (StepList.Where(p => p.MOItemTaskId == mitsId).Any()) { MOItemTask step = StepList.Where(p => p.MOItemTaskId == mitsId).FirstOrDefault(); int index = StepList.IndexOf(step); returnMitsList = StepList.Skip(index).Take(StepList.Count - index).ToList(); //排除不是已登记状态的计划 for (int i = 0; i < returnMitsList.Count; i++) { if (returnMitsList[i].TaskStatus != "已登记") { returnMitsList.Remove(returnMitsList[i]); } } //StepList.RemoveRange(index, StepList.Count - index); foreach (var returnMits in returnMitsList) { StepList.Remove(returnMits); } } //重新计划时间片 SetTimeslice(); return(returnMitsList); }
/// <summary> /// 添加Step到数组中,并记录最后的完成时间 /// </summary> /// <param name="step"></param> public RetureVentureDayModel AddStep(MOItemTask step, double cap, DateTime?priviousLastTime, string VentureID) { RetureVentureDayModel retModel = new RetureVentureDayModel(); DateTime?EndTime = null; if (!StepList.Where(p => p.MOItemTaskId == step.MOItemTaskId).Any()) { //if(this.LastEndTime == null) //{ // step.PlannedDateFrom = new DateTime(priviousLastTime.Value.Year, priviousLastTime.Value.Month, priviousLastTime.Value.Day, 8,30,0) ; //} //else //{ // step.PlannedDateFrom = this.LastEndTime; //} step.PlannedDateFrom = new DateTime(priviousLastTime.Value.Year, priviousLastTime.Value.Month, priviousLastTime.Value.Day, 8, 30, 0); DateTime temp = ((DateTime)step.PlannedDateFrom).AddMinutes(cap); step.PlannedDateTo = temp; step.TaskStatus = "被排产"; step.VentureId = VentureID; StepList.Add(step); this.LastEndTime = step.PlannedDateTo; EndTime = this.LastEndTime; } //SetTimeslice(); SetLastCap(); retModel.EndTime = EndTime; retModel.MOItemTask = step; return(retModel); }
/// <summary> /// 添加Step到开始时间最靠前的经营体List里 /// </summary> /// <param name="step"></param> /// <param name="standardWorkingTime">标准工时</param> /// <param name="lastTime">最后时间,如果不为null,放置在List中的位置必须在此时间之后</param> public DateTime?AddStep(MOItemTask step, double standardWorkingTime, DateTime?lastTime, bool isFirstStep, bool isFuji) { DateTime?EndTime = null; if (lastTime != null && !isFirstStep && isFuji) { lastTime = new DateTime(lastTime.Value.Year, lastTime.Value.Month, lastTime.Value.Day, 9, 0, 0); lastTime = lastTime.Value.AddDays(1); } List <string> ventureIdList = GetVentureIDBYProductFamily(step.ProductId, step.SpecificationID); ////寻找时间片满足的经营体 //VentureModel ventureModel = null; //if(ventureIdList.Any()) //{ // ventureModel = this.VentureModelList.Where(p => ventureIdList.Contains(p.VentureId) && p.VenTureDayModelList.Where(a => a.Timeslice > standardWorkingTime && a.LastCap >= standardWorkingTime).Any()).FirstOrDefault(); //} //else //{ // ventureModel = this.VentureModelList.Where(p => p.VenTureDayModelList.Where(a => a.Timeslice > standardWorkingTime && a.LastCap >= standardWorkingTime).Any()).FirstOrDefault(); //} ////存在于时间片的经营体 就把工序插入 //if(ventureModel != null) //{ // var vdm = ventureModel.VenTureDayModelList.Where(p => p.TimesliceStartTime > lastTime && p.LastCap >= standardWorkingTime).FirstOrDefault(); // var PlannedDateFrom = GetWorkTime((DateTime)vdm.TimesliceStartTime, ventureModel.VentureId); // EndTime = ventureModel.AddStep(step, PlannedDateFrom, standardWorkingTime); //} ////寻找最后时间靠前的经营体 //VentureModel ventureModel2 = null; //if (ventureIdList.Any()) //{ // ventureModel2 = this.VentureModelList.Where(p => ventureIdList.Contains(p.VentureId) && p.VenTureDayModelList.Where(a => !a.StepList.Any()).Any()).FirstOrDefault(); // if (ventureModel2 == null) // ventureModel2 = this.VentureModelList.Where(p => ventureIdList.Contains(p.VentureId)).OrderBy(p => p.VenTureDayModelList.OrderBy(a=> a.LastEndTime)).FirstOrDefault(); //} //else //{ // ventureModel2 = this.VentureModelList.Where(p => p.VenTureDayModelList.Where(a => !a.StepList.Any()).Any()).FirstOrDefault(); // if (ventureModel2 == null) // ventureModel2 = this.VentureModelList.OrderBy(p => p.VenTureDayModelList.OrderBy(a => a.LastEndTime)).FirstOrDefault(); //} //if(ventureModel2 != null) //{ // var vdm = ventureModel2.VenTureDayModelList.Where(p => p.LastEndTime > lastTime).FirstOrDefault(); // if (vdm != null) // { // var PlannedDateFrom = GetWorkTime((DateTime)vdm.LastEndTime, ventureModel2.VentureId); // EndTime = ventureModel2.AddStep(step, PlannedDateFrom, standardWorkingTime); // } // else // { // var PlannedDateFrom = GetWorkTime((DateTime)lastTime, ventureModel2.VentureId); // EndTime = ventureModel2.AddStep(step, PlannedDateFrom, standardWorkingTime); // } //} VentureModel ventureModel2 = null; if (ventureIdList.Any()) { var minPlanCapCount = this.VentureModelList.Where(p => ventureIdList.Contains(p.VentureId)).Min(p => p.PlanCapCount); ventureModel2 = this.VentureModelList.Where(p => ventureIdList.Contains(p.VentureId) && p.PlanCapCount == minPlanCapCount).FirstOrDefault(); } else { var minPlanCapCount = this.VentureModelList.Min(p => p.PlanCapCount); ventureModel2 = this.VentureModelList.Where(p => p.PlanCapCount == minPlanCapCount).FirstOrDefault(); } if (ventureModel2 != null) { var PlannedDateFrom = GetWorkTime((DateTime)lastTime, ventureModel2.VentureId); EndTime = ventureModel2.AddStep(step, PlannedDateFrom, standardWorkingTime); } if (ventureModel2 == null) { throw new Exception(SpecificationId + "工序未绑定经营体,请检查!"); } //首先比较时间片,如果不满足就比较最后时间,加入满足的经营体 //if (ventureModel != null) //{ // if (lastTime != null) // { // if(ventureModel.VenTureDayModelList.Where(p => p.TimesliceStartTime > lastTime && p.LastCap >= standardWorkingTime).Any()) // { // step.PlannedDateFrom = GetWorkTime((DateTime)ventureModel.TimesliceEndTime, ventureModel.VentureId); // DateTime temp = ((DateTime)step.PlannedDateFrom).AddMinutes(standardWorkingTime); // step.PlannedDateTo = temp; // EndTime = ventureModel.AddStep(step, ventureModel.VenTureDayModelList.Where(p => p.TimesliceStartTime > lastTime && p.LastCap >= standardWorkingTime).FirstOrDefault().TimesliceStartTime,standardWorkingTime); // } // else // { // if (ventureModel2.endTime > lastTime) // { // step.PlannedDateFrom = GetWorkTime((DateTime)ventureModel2.endTime, ventureModel2.VentureId); // DateTime temp = ((DateTime)step.PlannedDateFrom).AddMinutes(standardWorkingTime); // step.PlannedDateTo = temp; // } // else // { // step.PlannedDateFrom = GetWorkTime((DateTime)lastTime, ventureModel2.VentureId); // DateTime temp = ((DateTime)step.PlannedDateFrom).AddMinutes(standardWorkingTime); // step.PlannedDateTo = temp; // } // EndTime = ventureModel2.AddStep(step); // } // } // else // { // step.PlannedDateFrom = GetWorkTime((DateTime)ventureModel.TimesliceEndTime, ventureModel.VentureId); // DateTime temp = ((DateTime)step.PlannedDateFrom).AddMinutes(standardWorkingTime); // step.PlannedDateTo = temp; // EndTime = ventureModel.AddStep(step); // } //} //else //{ // if (lastTime != null) // { // if (ventureModel2.endTime > lastTime) // { // step.PlannedDateFrom = GetWorkTime((DateTime)ventureModel2.endTime, ventureModel2.VentureId); // DateTime temp = ((DateTime)step.PlannedDateFrom).AddMinutes(standardWorkingTime); // step.PlannedDateTo = temp; // } // else // { // step.PlannedDateFrom = GetWorkTime((DateTime)lastTime, ventureModel2.VentureId); // DateTime temp = ((DateTime)step.PlannedDateFrom).AddMinutes(standardWorkingTime); // step.PlannedDateTo = temp; // } // } // else // { // if(ventureModel2.endTime != null) // { // step.PlannedDateFrom = GetWorkTime((DateTime)ventureModel2.endTime, ventureModel2.VentureId); // DateTime temp = ((DateTime)step.PlannedDateFrom).AddMinutes(standardWorkingTime); // step.PlannedDateTo = temp; // } // else // { // step.PlannedDateFrom = GetWorkTime(DateTime.Now, ventureModel2.VentureId); // DateTime temp = ((DateTime)step.PlannedDateFrom).AddMinutes(standardWorkingTime); // step.PlannedDateTo = temp; // } // } // EndTime = ventureModel2.AddStep(step); //} return(EndTime); }