// расчёт времени, вычисление времени завершения процеса private string СalculationTime(Machine_tools machine, Nomenclatures item, ObservableCollection <Times> times) { // перебор времен for (int i = 0; i < times.Count; i++) { // совпадение по ид машины и номенклатуры if (times[i].machine_tool_id == machine.id && times[i].nomenclature_id == item.Id) { // перебор машин for (int k = 0; k < machine_Tools.Count; k++) { // совпадение по ид if (machine_Tools[k].id == machine.id) { machine.time += int.Parse(times[i].operation_time); return(machine.time.ToString()); } } break; } } return(null); }
// по номенклатуре, списку машин и времени получаем нужную машину (ближайшую свободную) private Machine_tools GetMachine(Nomenclatures nomenclatures, ObservableCollection <Machine_tools> machine_Tools, ObservableCollection <Times> times) { // поиск ид возможных машин ObservableCollection <string> posMachines = new ObservableCollection <string>(); foreach (var item in times) { if (nomenclatures.Id == item.nomenclature_id) { posMachines.Add(item.machine_tool_id); } } Machine_tools result = null; int min = int.MaxValue; foreach (var item in posMachines) { Machine_tools buff = null; foreach (var o in machine_Tools) { if (o.id == item) { buff = o; break; } } if (min > buff.time) { min = buff.time; result = buff; } } return(result); }
// распределение private void Distribution() { // партия -> номенклатура -> машина -> вычисление -> расписание while (party.Count > 0) { // берём следующую партию и возвращаем оставшиеся Parties current_party = GetParties(party, out var newParties); // определяем номенклатуру Nomenclatures current_nomenclature = GetNomenclature(current_party, nomenclatures); // выбираем для номенклатуры машину Machine_tools current_machine = GetMachine(current_nomenclature, machine_Tools, times); string partyName = current_nomenclature.Nomenclature; string equipmentName = current_machine.name; string tStart = current_machine.time.ToString(); string tStop = СalculationTime(current_machine, current_nomenclature, times); Raspisanies.Add(new Raspisanie { Party = partyName, Equipment = equipmentName, TStart = tStart, TStop = tStop }); } }