package rules; import com.solution.rule.domain.simplerulepojo.fact.FactTask; import com.solution.rule.domain.simplerulepojo.Task; import com.solution.rule.domain.simplerulepojo.Weapon; import java.util.List import java.util.Map import com.solution.rule.domain.simplerulepojo.Task import java.util.ArrayList global java.util.Map globalParams; rule "任务匹配1" agenda-group "打击任务" when $task : FactTask(blueTask.side == "蓝方", blueTask.drawName contains "F-16--7") $redTask : FactTask(redTask.side == "红方") then // 直接修改红方任务对象 Task redTask = $redTask.getRedTask(); redTask.setDrawName("F-16打击任务"); redTask.setDataType("plane"); end //------------------------------------------------------------------------------- rule "任务匹配2" agenda-group "打击任务" when $task : FactTask(blueTask.side == "蓝方", blueTask.drawName contains "驱逐舰任务") $redTask : FactTask(redTask.side == "红方") then // 直接修改红方任务对象 Task redTask = $redTask.getRedTask(); redTask.setDrawName("导弹发射车打击任务"); redTask.setDataType("ground"); end //------------------------------------------------------------------------------- rule "威胁等级规则" agenda-group "打击任务" when //如果蓝方威胁等级大于等于3,则全局武器数量为3,添加插入导弹发射车辆和防空导弹武器 $task : FactTask(blueTask.side == "蓝方",blueTask.threatLevel >= 3) $redTask : FactTask(redTask.side == "红方") then //设置平台下组件的数量 globalParams.put("platNum",3); //威胁等级大于等于3固定插入导弹发射车辆 // ========== 调用函数 ========== threatLevel($redTask, globalParams); end //------------------------------------------------------------------------------- rule "地面类型匹配规则" agenda-group "打击任务" when //如果蓝方武器为地面类型且高度不超过500米,则使用插入空中力量打击 $task : FactTask(blueTask.side == "蓝方") $weapons : List() from $task.blueTask.taskWeapons $weapon : Weapon(supportType == "ground") from $weapons then Task redTask = $task.getRedTask(); List taskWeapons = redTask.getTaskWeapons(); Weapon weapon = new Weapon(); weapon.setName("F-16"); weapon.setNumber((Integer) globalParams.get("platNum")); weapon.setSupportType("plane"); taskWeapons.add(weapon); end //------------------------------------------------------------------------------- // kcontext.getKieRuntime().getAgenda() // .getAgendaGroup("MATCH") // .setFocus(); // ========== 定义函数 ========== //威胁等级添加武器函数 function void threatLevel(FactTask redFact, Map params) { // 创建武器列表 List weapons = new ArrayList<>(); // 创建导弹发射车 Weapon weapon1 = new Weapon(); weapon1.setNumber((Integer) params.get("platNum")); weapon1.setSupportType("ground"); weapon1.setEquipmentId("1"); weapon1.setName("missile-launching-vehicle"); // 创建防空导弹武器 Weapon weapon2 = new Weapon(); weapon2.setNumber((Integer) params.get("platNum")); weapon2.setSupportType("antiaircraft"); weapon2.setEquipmentId("2"); weapon2.setName("Anti-aircraft-missile-weapon"); // 添加到列表 weapons.add(weapon1); weapons.add(weapon2); // 设置到红方任务 redFact.getRedTask().setTaskWeapons(weapons); }