Example #1
0
        ///// <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);
            }
        }
Example #2
0
            /// <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);
            }
Example #3
0
            /// <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);
            }
Example #4
0
        /// <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);
        }