Example #1
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public Data PrepearingData()
        {
            //Импортируем данные из эксель.
            NomenclaturesList = _dataService.Import <Nomenclature>(_filesSettings.NomenclatureFile).ToList();
            MachinesList      = _dataService.Import <Machine>(_filesSettings.MachinesFile).ToList();
            TimesList         = _dataService.Import <Time>(_filesSettings.TimesFile).ToList();
            var batches = _dataService.Import <Batch>(_filesSettings.BatchesFile).ToList();

            //Заполняем очередь партий, проставляем ссылки на нужные объекты при необходимости.
            batches.ForEach(b => b.Nomenclature = NomenclaturesList.Find(n => n.Id == b.NomenclatureId));
            BatchesQueue = new Queue <Batch>(batches);

            TimesList.ForEach(t => t.Nomenclature = NomenclaturesList.Find(n => n.Id == t.Nomenclatureid));

            foreach (var machine in MachinesList)
            {
                var times = TimesList.Where(tl => tl.MachineId == machine.Id);
                machine.TimeDictionary = times.ToDictionary(t => t.Nomenclatureid, o => o.OperationTime);
            }
            var data = new Data(MachinesList, BatchesQueue);

            Log.Information("Данные подготовлены.");
            //Возвращаем подготовленные данные.
            return(data);
        }
Example #2
0
        public List <ScheduleItem> MakeSchedule()
        {
            ScheduleCalculator calculator     = new ScheduleCalculator(TimesList, MachineToolsList, PartiesList, NomenclaturesList);
            ProductionLine     productionLine = new ProductionLine();

            productionLine = calculator.MakeProductionLine();
            Clock clock = new Clock();


            do                             //начинаем перебор значений списка партий
            {
                int currentMachineId = -1; //номер текущего станка

                do                         //перебираем, пока не будут заняты все станки
                {
                    int    i        = 0;   //всегда берем только первую по очереди партию
                    string material = "";

                    //ищем название материала по id, чтобы загрузить в станок
                    for (int j = 0; j < NomenclaturesList.Count; j++)
                    {
                        //если материал в списке материалов найден
                        if (NomenclaturesList.ElementAt(j).id == PartiesList.ElementAt(i).nomenclatureId)
                        {
                            //присваиваем переменной строковое значение
                            material         = NomenclaturesList.ElementAt(j).nomenclature;
                            currentMachineId = -1;//номер текущего станка
                            //пытаемся установить партию в линию
                            currentMachineId = productionLine.insertMaterial(material);
                            //установка прошла успешно
                            if (currentMachineId >= 0)
                            {
                                ScheduleItem scheduleItem = new ScheduleItem();
                                scheduleItem.partiesId      = i.ToString();                //Записываем id загруженной партии
                                scheduleItem.startTime      = clock.GetValue().ToString(); //Записываем время начала работы
                                scheduleItem.machineToolsId = currentMachineId.ToString(); //Записываем Id станка
                                scheduleItem.partiesId      = PartiesList.ElementAt(i).id; //Записываем Id партии
                                //Записываем название станка
                                scheduleItem.machineTools = MachineToolsList.ElementAt(currentMachineId).name;
                                //Записываем название материала
                                scheduleItem.partiesName = NomenclaturesList.ElementAt(j).nomenclature;
                                //Записываем время окончания
                                scheduleItem.endTime = (Convert.ToInt32(clock.GetValue() +
                                                                        Convert.ToInt32(productionLine.GetWorkingTime().ElementAt(currentMachineId)))).ToString();
                                //i++;//переходим к следующей партии
                                PartiesList.RemoveAt(i);    //удаляем элемент из списка, он ушел в работу
                                schedule.Add(scheduleItem); //Добавляем строку расписания
                                break;
                            }
                        }
                    } //if (material == "") return null;
                } while ((currentMachineId >= 0) && (PartiesList.Count > 0));
                productionLine.workStep();//Запускаем рабочую линию
                clock.Step();//Отсчитываем единицу времени
            } while (PartiesList.Count > 0);
            return(schedule);
        }
Example #3
0
        public void AddWork(int partyId, string nomenclatureName, TimeSpan workTime)
        {
            PartyIdList.Add(partyId);

            NomenclaturesList.Add(nomenclatureName);

            GeneralWorkTime += workTime;
            WorkTimeList.Add(workTime);
        }