考虑如下情形:实现根据航班信息schedule(主要是行李数量)自动生成行李运输任务mission(规则简化为每180件行李算作一个行李运输任务),并把生成的任务分配给空闲的司机driver运输(规则简化为比较空闲司机和任务数量进行分配)。
考虑实现:传入未分配行李运输任务的航班对象集合schedules,空闲司机对象集合drivers,空的行李运输任务对象集合missionlist(也就是三个Fact对象,均为List)返回生成的任务集合以及将未分配行李运输任务航班对象属性更改为为已分配,空闲司机对象属性更改为工作中。
在实现的时候就会发现在一个Drools规则文件中无法准确区分传入的三个Fact对象并进行遍历,这个时候该怎么做呢
我这里一个比较好的解决方案就是:将规则文件一分为二,一个用于任务生成,一个用于任务分配,且将在LHS需要进行判断的对象集合设置为插入kSession.insert(),在LHS中不需要判断的对象集合设置为全局变量kSession.setGlobal(),这样做的好处是又可以避免在LHS对多个List集合进行判断,代码如下:
KieServices ks = KieServices.Factory.get(); KieContainer kieContainer = ks.getKieClasspathContainer(); // 获取kmodule.xml中