コード例 #1
0
        /// <summary>
        /// Поиск свободного оборудования в списке; (возвращаем true, если находим свободное оборудование, false - иначе);
        /// Доп. выходные параметры:
        /// operationtime - время окончания операции (для первого случая) или  ближайшее время начала операции (для второго случая);
        /// </summary>
        public bool IsFree(DateTime T, IOperation o, out DateTime operationtime, out SingleEquipment equip)
        {
            TimeSpan t = o.GetDuration();
            int      intervalindex;

            foreach (SingleEquipment e in o.GetEquipment())
            {
                if ((e.IsNotOccupied(T)) && (e.GetCalendar().IsInterval(T, out intervalindex)))
                {
                    equip         = e;
                    operationtime = e.GetCalendar().GetTimeofRelease(T, t, intervalindex);
                    return(true);
                }
            }

            equip = null;
            DateTime mintime = DateTime.MaxValue;

            foreach (SingleEquipment e in o.GetEquipment())
            {
                if (e.GetCalendar().GetNearestStart(T) <= mintime)
                {
                    mintime = e.GetCalendar().GetNearestStart(T);
                }
            }
            operationtime = mintime;

            return(false);
        }
コード例 #2
0
ファイル: Decision.cs プロジェクト: mmikhey/SchedulerTask
        private Operation op;                 //операция, для которой созданно данное решение

        public Decision(DateTime start_time_, DateTime end_time_, SingleEquipment equipment_id_, Operation op_)
        {
            start_time   = start_time_;
            end_time     = end_time_;
            equipment_id = equipment_id_;
            op           = op_;
        }
コード例 #3
0
        public Dictionary <int, IEquipment> ReadSystemData() //чтение данных по расписанию и станкам
        {
            List <Interval> intlist     = new List <Interval>();
            List <Interval> doneintlist = new List <Interval>();

            eqdic = new Dictionary <int, IEquipment>();

            DateTime start = new DateTime();
            DateTime end   = new DateTime();
            XElement root  = sdata.Root;

            df = sdata.Root.Name.Namespace;

            foreach (XElement elm in root.Descendants(df + "CalendarInformation"))
            {
                if (elm.Attribute("date_begin") != null)
                {
                    string date = elm.Attribute("date_begin").Value;
                    DateTime.TryParseExact(date, datapattern, null, DateTimeStyles.None, out start);
                }
                if (elm.Attribute("date_end") != null)
                {
                    string date = elm.Attribute("date_end").Value;
                    DateTime.TryParseExact(date, datapattern, null, DateTimeStyles.None, out end);
                }
                foreach (XElement eg in elm.Elements(df + "EquipmentGroup"))
                {
                    foreach (XElement inc in eg.Elements(df + "Include"))
                    {
                        DateTime tmpdata = start;
                        while (tmpdata != end)
                        {
                            if ((int)tmpdata.DayOfWeek == int.Parse(inc.Attribute("day_of_week").Value))
                            {
                                int ind = inc.Attribute("time_period").Value.IndexOf("-");
                                int sh  = int.Parse(inc.Attribute("time_period").Value.Substring(0, 1));
                                int eh  = int.Parse(inc.Attribute("time_period").Value.Substring(ind + 1, 2));

                                intlist.Add(new Interval(new DateTime(tmpdata.Year, tmpdata.Month, tmpdata.Day, sh, 0, 0), new DateTime(tmpdata.Year, tmpdata.Month, tmpdata.Day, eh, 0, 0)));
                            }
                            tmpdata = tmpdata.AddDays(1);
                        }
                    }
                    foreach (XElement exc in eg.Elements(df + "Exclude"))
                    {
                        foreach (Interval t in intlist)
                        {
                            if ((int)t.GetStartTime().DayOfWeek == int.Parse(exc.Attribute("day_of_week").Value))
                            {
                                int ind = exc.Attribute("time_period").Value.IndexOf("-");
                                int sh  = int.Parse(exc.Attribute("time_period").Value.Substring(0, 2));
                                int eh  = int.Parse(exc.Attribute("time_period").Value.Substring(ind + 1, 2));

                                DateTime dt = t.GetStartTime().AddHours(-t.GetStartTime().Hour);
                                Interval tmpint;
                                doneintlist.Add(SeparateInterval(t, dt.AddHours(sh), dt.AddHours(eh), out tmpint));
                                doneintlist.Add(tmpint);
                            }
                        }
                    }
                }
            }

            Calendar calendar = new Calendar(doneintlist);

            foreach (XElement elm in root.Descendants(df + "EquipmentInformation").Elements(df + "EquipmentGroup"))
            {
                GroupEquipment tmp = new GroupEquipment(calendar, int.Parse(elm.Attribute("id").Value), elm.Attribute("name").Value);
                foreach (XElement eg in elm.Elements(df + "EquipmentGroup"))
                {
                    GroupEquipment gtmp = new GroupEquipment(calendar, int.Parse(eg.Attribute("id").Value), eg.Attribute("name").Value);
                    foreach (XElement eq in eg.Elements(df + "Equipment"))
                    {
                        SingleEquipment stmp = new SingleEquipment(calendar, int.Parse(eq.Attribute("id").Value), eq.Attribute("name").Value);
                        eqdic.Add(stmp.GetID(), stmp);
                        gtmp.AddEquipment(stmp);
                    }
                    tmp.AddEquipment(gtmp);
                    eqdic.Add(gtmp.GetID(), gtmp);
                }
                eqdic.Add(tmp.GetID(), tmp);
            }



            return(eqdic);
        }
コード例 #4
0
ファイル: Operation.cs プロジェクト: mmikhey/SchedulerTask
 /// <summary>
 /// поставить операцию в расписание и создать решение
 /// </summary>
 public void SetOperationInPlan(DateTime real_start_time, DateTime real_end_time, SingleEquipment real_equipment_id)
 {
     enable   = true;
     decision = new Decision(real_start_time, real_end_time, real_equipment_id, this);
 }