Database 如何找到由数据库填充的MoveTo目的地?
我需要一些关于Anylogic模型的帮助 模型(简称):订单在单个路线中移动的制造场景。工作空间(WP)是通过模拟启动动态创建的。它们的名称、数量和其他参数存储在数据库中(excel导入)。此外,还将根据导入创建订单。代理填充“顺序”有一个收集路由,其中包含它必须按特定顺序停止的工作区 目标:我想在main中找到一个moveTo块,它可以找到代理订单的下一个目的地。 问题和解决方案路径:Database 如何找到由数据库填充的MoveTo目的地?,database,search,collections,anylogic,population,Database,Search,Collections,Anylogic,Population,我需要一些关于Anylogic模型的帮助 模型(简称):订单在单个路线中移动的制造场景。工作空间(WP)是通过模拟启动动态创建的。它们的名称、数量和其他参数存储在数据库中(excel导入)。此外,还将根据导入创建订单。代理填充“顺序”有一个收集路由,其中包含它必须按特定顺序停止的工作区 目标:我想在main中找到一个moveTo块,它可以找到代理订单的下一个目的地。 问题和解决方案路径: 我将目标类型设置为agent,并在agent字段中键入一个函数agent.getDestination()。
agent.getDestination()
。此函数按顺序返回集合的下一项WP destinationName=routing.get(i)
。有了这个,我得到了一个数据类型错误(在运行而不是编译时)。我怀疑这是因为数据库没有将条目保存为WP类型,而只保存字符串。
是否可以使用Excel中的代理创建集合?谢谢欢迎使用堆栈溢出:)要通过Excel导入创建填充,您必须创建一个方法并调用如下代码。你还需要一个空的人口
int n=excelFile.getLastRowNum(您的工作表名称);
对于(int i=第一行;i w.name.equals(destinationName));
如果(WorkplaceTofId!=null){
//你想干什么就干什么
}
是否可以使用Excel中的代理创建集合
不直接使用集合的属性,并且正如您所看到的,您不能有代理类型的数据库(DB)列类型。1
但直接通过Java代码实现这一点相对简单(您可以使用插入数据库查询向导来为您构建框架代码)
在此之后,我尝试使用与字符串相同的getDestination,通过findFirst查找与返回名称匹配的WP,并将其作为WP返回
是的,这是一种方法。如果您的订单详细信息在Excel/数据库中,则它们可能通过某个字符串ID(这将是您从单独的Excel工作表/数据库表中创建的工作场所代理的参数)引用工作场所。但是,您需要使用Javaequals
方法来比较字符串,而不是=
(用于比较数字或两个对象是否为同一对象)
我想在main中找到一个moveTo块,它可以找到代理订单的下一个目的地
因此,总体解决方案是
- 从数据库中创建一个
代理的总体(主要称为Workplace
),每个代理都有一个字符串参数workplaces
或从数据库列映射的类似参数id
- 从数据库中创建一个
代理群体(比如说,主要称为Order
),然后在其启动操作中,使用另一个数据库表中的数据设置其工作场所ID集合(typeorders
,element classArrayList
;比方说被称为String
)workaceidslist
可能还需要一个工作变量来存储列表中它需要去的下一个索引(比如说一个Order
变量int
,从0开始)nextWorkplaceIndex
- 在Main中编写一个名为
的函数,该函数有一个getWorkplaceByID
参数字符串
,并返回一个id
。这将从与ID匹配的人群中获取工作场所;与您类似的单行方式是Workplace
findFirst(workplaces,w->w.id.equals(id))
- MoveTo块(我假定它在Main中)需要将
移动到由顺序
getWorkplaceByID(agent.workplacedList.get(nextWorkplaceIndex++)定义的代理。(计算表达式后,
位会增加索引,以便下一个工作区可以使用。)++
表:用于订单参数的列(包括一些字符串订单
列),而不是工作区列表。(每行创建一个id
订单
代理。)
表:列order\u workplaces
、order\u id
和sequence\u num
(因此,多行指定订单id的工作场所id顺序)workplace\u id
Order
的启动时操作中,通过插入数据库查询向导设置骨架查询代码,如下所示(在这里,我们希望循环遍历此订单ID的所有行并执行一些操作——我们将更改骨架代码以向集合中添加条目,而不是像骨架代码那样仅通过traceln
打印内容)
然后,我们编辑骨架代码,如下所示。(注意,我们在初始查询中添加了一个orderBy
子句,以确保按升序顺序获取行。)
List rows=selectFrom(订单工作区)
.其中(订单工作场所订单id等式(id))
.orderBy(order\u workplaces.sequence\u num.asc())
.list();
for(元组行:行){
工作场所
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));
}