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);
|
|
|
|
|
|
}
|