Files
auto-solution/auto-solution-rule/src/main/resources/rules/fire-rule.drl

101 lines
3.5 KiB
Plaintext
Raw Normal View History

2026-03-27 10:27:04 +08:00
package rules;
2026-03-27 11:35:17 +08:00
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
2026-03-27 10:27:04 +08:00
import com.solution.rule.domain.simplerulepojo.Task
2026-03-27 11:35:17 +08:00
import java.util.ArrayList
2026-03-27 10:27:04 +08:00
2026-03-27 11:35:17 +08:00
global java.util.Map globalParams;
rule "任务匹配1"
2026-03-27 10:27:04 +08:00
agenda-group "打击任务"
when
2026-03-27 11:35:17 +08:00
$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
2026-03-27 10:27:04 +08:00
then
2026-03-27 11:35:17 +08:00
Task redTask = $task.getRedTask();
List<Weapon> 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<Weapon> 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);
}