Есть ли возможность создать коллекцию с агентами из Excel?
Не использовать напрямую свойства коллекции и, как вы видели, у вас не может быть типов столбцов базы данных (БД), которые являются типами агентов. 1
Но это относительно просто сделать напрямую с помощью кода Java (и вы можете использовать мастер Вставить запрос к базе данных, чтобы создать за вас скелетный код).
После этого я попытался использовать тот же getDestination, что и String, поэтому найдите с помощью findFirst WP, соответствующий возвращаемому имени, и верните его как WP
Да, это один подход. Если детали вашего заказа находятся в Excel / базе данных, они предположительно относятся к рабочим местам через некоторый String ID (который будет параметром агентов рабочего места, которые вы создали из отдельного рабочего листа Excel / таблицы базы данных). Однако для сравнения строк необходимо использовать метод Java equals
, а не ==
(который предназначен для сравнения чисел или того, являются ли два объекта одним и тем же объектом).
Мне нужен блок moveTo в основном, который находит следующий пункт назначения заказа агента
Итак, общее общее решение
Создайте совокупность Workplace
агентов (скажем, называемых workplaces
в Main) из БД, каждый из которых имеет строковый параметр id
или аналогичный, отображаемый из столбца БД.
Создайте совокупность Order
агентов (скажем, называемых orders
в Main) из БД, а затем, в их действии при запуске, настройте их коллекцию идентификаторов рабочих мест (тип ArrayList
, класс элемента String
; скажем, названный workplaceIDsList
) с использованием данных из другой таблицы БД.
Order
, вероятно, также нужна рабочая переменная, хранящая следующий индекс в списке, к которому она должна перейти (так, скажем, int
переменная nextWorkplaceIndex
, которая начинается с 0).
Напишите в Main функцию с именем getWorkplaceByID
, которая имеет единственный String
аргумент id
и возвращает Workplace
. Это получает рабочее место от населения, которое соответствует идентификатору; однострочный способ, похожий на ваш - findFirst(workplaces, w -> w.id.equals(id))
.
Блок MoveTo (который, как я полагаю, находится в Main) должен переместить Order
агенту, определенному getWorkplaceByID(agent.workplaceIDsList.get(nextWorkplaceIndex++))
. (Бит ++
увеличивает индекс после оценки выражения, чтобы оно было готово для перехода к следующему рабочему месту.)
Для заполнения коллекции у вас будет две таблицы, примерно такие, как показано ниже (при условии использования строк в качестве идентификаторов для рабочих мест и заказов):
orders
таблица: столбцы для параметров ваших заказов (включая столбец String id
) другие, кроме списка рабочих мест. (Создайте по одному Order
агенту в каждой строке.)
order_workplaces
таблица: столбцы order_id
, sequence_num
и workplace_id
(то есть с несколькими строками, указывающими последовательность идентификаторов рабочих мест для идентификатора заказа).
В действии При запуске для Order
настройте скелетный код запроса с помощью мастера Вставить запрос к базе данных, как показано ниже (где мы хотим перебрать все строки для идентификатора этого заказа и сделайте что-нибудь --- мы изменим код скелета, чтобы добавить записи в коллекцию, вместо того, чтобы просто печатать материал через traceln
, как это делает код скелета).
![Вставить настройку запроса к базе данных](https://i.stack.imgur.com/lwZEE.png)
Затем мы редактируем код скелета, чтобы он выглядел так, как показано ниже. (Обратите внимание, что мы добавляем предложение orderBy
к исходному запросу, чтобы гарантировать получение строк в порядке возрастания порядковых номеров.)
List<Tuple> rows = selectFrom(order_workplaces)
.where(order_workplaces.order_id.eq(id))
.orderBy(order_workplaces.sequence_num.asc())
.list();
for (Tuple row : rows) {
workplaceIDsList.add(row.get(order_workplaces.workplace_id));
}
1 База данных AnyLogic - это обычная реляционная база данных --- фактически HSQLDB --- а базы данных понимают только свои собственные специфические типы данных, такие как VARCHAR
, а AnyLogic и библиотеки, которые он использует, переводят их в типы Java, такие как String
. В пользовательском интерфейсе AnyLogic создает вид, что вы устанавливаете типы столбцов как int
, String
и т. Д., Но на самом деле это типы Java, в которые в конечном итоге будет переведено содержимое столбцов.
AnyLogic поддерживает столбцы с типами список параметров (и столбец специального типа Code
для столбцов, содержащих исполняемый код Java), но это особые случаи, использующие скрытую под крышкой специальную логику для перевода данные столбца (которые в конечном итоге все еще представляют собой строку символов) в соответствующий экземпляр списка опций или (для Code
столбцов) в скомпилированную на лету и затем выполняемую Java).
person
Stuart Rossiter
schedule
10.01.2020