规则展示,bug修复
This commit is contained in:
@@ -171,4 +171,13 @@
|
||||
ORDER BY sort_no ASC, id ASC
|
||||
</select>
|
||||
|
||||
<select id="selectEnabledParamsForGlobal" resultMap="RuleConfigParamMap">
|
||||
SELECT p.rule_code, p.param_key, p.param_val, p.val_type, p.param_name, p.sort_no, p.enabled, p.remark
|
||||
FROM rule_item_param p
|
||||
INNER JOIN rule_item r ON p.rule_code = r.rule_code
|
||||
WHERE r.enabled = 1
|
||||
AND p.enabled = 1
|
||||
ORDER BY r.priority_no ASC, p.sort_no ASC, p.id ASC
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -78,7 +78,7 @@ function Map buildParam(){
|
||||
param.put("redMatchKeywords_missile", "防空,导弹,导弹发射");
|
||||
param.put("missileScore", 1);
|
||||
|
||||
// ===================== 目标分配参数(写入 Tasks.task.execute) =====================
|
||||
// ===================== 目标分配参数(写入 Tasks.task.execute) =====================
|
||||
// executeTypeDefault:生成 execute[0] 的类型字段 取值:strike_test/assault
|
||||
param.put("executeTypeDefault", "assault");
|
||||
// targetPickMode:roundRobin(稳定轮询) / random(伪随机但同输入稳定)
|
||||
@@ -200,16 +200,111 @@ function Map buildParam(){
|
||||
param.put("wingmanAltBaseMeters", 40);
|
||||
param.put("wingmanAltScale", 1.0);
|
||||
|
||||
// ===== 以下由规则配置表自动同步生成(请勿手改 param.put 段) =====
|
||||
param.put("groupRuleEnabled", true);
|
||||
param.put("groupDrawNameSuffix", "编组");
|
||||
param.put("groupDrawNameWithIndex", false);
|
||||
param.put("groupFormationMode", "onePerRed");
|
||||
param.put("groupClusterSize", 3);
|
||||
param.put("groupLeaderPickMode", "byHitRateThenId");
|
||||
param.put("groupMinMembersForWingman", 2);
|
||||
param.put("wingmanDistanceBaseMeters", 100);
|
||||
param.put("wingmanDistanceStepMeters", 50);
|
||||
param.put("wingmanAngleBaseDeg", 50);
|
||||
param.put("wingmanAngleStepDeg", 15);
|
||||
param.put("wingmanAltBaseMeters", 40);
|
||||
param.put("wingmanAltScale", 1.0);
|
||||
param.put("enableTrackWarZoneClamp", true);
|
||||
param.put("trackRuleEnabled", true);
|
||||
param.put("trackRouteAlgorithm", "followBlue");
|
||||
param.put("trackRouteNameSuffix", "航迹");
|
||||
param.put("trackAirDataTypeCsv", "taskPlane,air,plane,flight");
|
||||
param.put("trackAirKeywordsCsv", "机,飞,空,J-,F-,无人机,直升机");
|
||||
param.put("trackGroundTrackType", "routeLineGround");
|
||||
param.put("trackFallbackBearingDeg", 0);
|
||||
param.put("trackExtraNodesMax", 0);
|
||||
param.put("trackShortPathSegments", 3);
|
||||
param.put("trackFlankOffsetMeters", 800);
|
||||
param.put("trackFlankSideMode", "alternate");
|
||||
param.put("trackJamWobbleMeters", 400);
|
||||
param.put("trackJamSegments", 4);
|
||||
param.put("enableWarZoneClamp", true);
|
||||
param.put("positionRuleEnabled", true);
|
||||
param.put("positionAnchorMode", "hybrid");
|
||||
param.put("trackPointDirectionMode", "head2next");
|
||||
param.put("fallbackBearingDeg", 0);
|
||||
param.put("deployDistanceKmMin", 8);
|
||||
param.put("deployDistanceKmMax", 30);
|
||||
param.put("deployDistanceKmDefault", 15);
|
||||
param.put("distanceByPlatformCsv", "");
|
||||
param.put("formationType", "line");
|
||||
param.put("formationSpacingMeters", 300);
|
||||
param.put("formationHeadingOffsetDeg", 15);
|
||||
param.put("defaultDeployHeight", 30);
|
||||
param.put("heightFollowBlueRatio", 0.0);
|
||||
param.put("warZoneClampMode", "nearestInside");
|
||||
param.put("minInterPlatformDistanceMeters", 80);
|
||||
param.put("redHitRateThreshold", 0.6);
|
||||
param.put("maxExtraWeaponsPerTask", 2);
|
||||
param.put("maxSupplementRounds", 2);
|
||||
param.put("extraPickMinScore", 1);
|
||||
param.put("executeTypeDefault", "assault");
|
||||
param.put("targetPickMode", "roundRobin");
|
||||
param.put("minTargetsPerRed", 1);
|
||||
param.put("maxTargetsPerRedCap", 3);
|
||||
param.put("radToTargetsCsv", "0.8:1,0.5:2,0.2:3");
|
||||
param.put("rangeParseRegex", "(\\\\d+(?:\\\\.\\\\d+)?)");
|
||||
param.put("rangeUnit", "km");
|
||||
param.put("minRangeToAllowAssignKm", 0);
|
||||
param.put("weight", 1);
|
||||
param.put("minSelectedScore", 1);
|
||||
param.put("tieBreak", "equipmentId");
|
||||
param.put("outputDrawNameSuffix", "打击任务");
|
||||
param.put("ruleSlotCount", 3);
|
||||
param.put("blueRuleKeywords_1", "F-16,F-35");
|
||||
param.put("redRuleKeywords_1", "防空,导弹,无人机");
|
||||
param.put("ruleScore_1", 5);
|
||||
param.put("blueRuleKeywords_2", "坦克,装甲");
|
||||
param.put("redRuleKeywords_2", "反坦克");
|
||||
param.put("ruleScore_2", 4);
|
||||
param.put("blueRuleKeywords_3", "地面,突击");
|
||||
param.put("redRuleKeywords_3", "远火,榴弹,炮");
|
||||
param.put("ruleScore_3", 2);
|
||||
param.put("bluePlatformKeywords_air", "F-16,J-10,F-35");
|
||||
param.put("redPreferredWhenBlueAir", "防空,导弹,无人机,直升机,空空");
|
||||
param.put("airScore", 2);
|
||||
param.put("airTaskKeywords", "空中,制空,拦截,空战");
|
||||
param.put("airTaskScore", 10);
|
||||
param.put("groundTaskKeywords", "地面,突击,登陆");
|
||||
param.put("redPreferredWhenGround", "远火,榴弹,炮,火箭");
|
||||
param.put("groundScore", 1);
|
||||
param.put("tankKeywords", "坦克,装甲");
|
||||
param.put("redMatchKeywords_tank", "反坦克");
|
||||
param.put("tankScore", 1);
|
||||
param.put("missileKeywords", "导弹,火箭弹,巡航");
|
||||
param.put("redMatchKeywords_missile", "防空,导弹,导弹发射");
|
||||
param.put("missileScore", 1);
|
||||
|
||||
return param;
|
||||
}
|
||||
|
||||
function void mergeDefaultParams(Map current){
|
||||
Map defaults = buildParam();
|
||||
for (Object k : defaults.keySet()) {
|
||||
if (!current.containsKey(k)) {
|
||||
current.put(k, defaults.get(k));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rule "装备匹配"
|
||||
salience 100
|
||||
when
|
||||
$fact : DroolsFact(task != null)
|
||||
then
|
||||
// 以本文件 buildParam 为真源覆盖同名键,再执行 Java 侧匹配逻辑
|
||||
globalParams.putAll(buildParam());
|
||||
// globalParams.putAll(buildParam());
|
||||
mergeDefaultParams(globalParams);
|
||||
equipmentRule($fact, globalParams);
|
||||
end
|
||||
|
||||
@@ -219,7 +314,8 @@ when
|
||||
$fact : DroolsFact(task != null)
|
||||
then
|
||||
// 显式目标分配规则:填充 Tasks.task.execute.targetList[*].targetId
|
||||
globalParams.putAll(buildParam());
|
||||
// globalParams.putAll(buildParam());
|
||||
mergeDefaultParams(globalParams);
|
||||
target($fact, globalParams);
|
||||
end
|
||||
|
||||
@@ -229,7 +325,8 @@ when
|
||||
$fact : DroolsFact(task != null)
|
||||
then
|
||||
// 显式阵位规则:填充 redWeapons.SubComponents.platform[].positions
|
||||
globalParams.putAll(buildParam());
|
||||
// globalParams.putAll(buildParam());
|
||||
mergeDefaultParams(globalParams);
|
||||
position($fact, globalParams);
|
||||
end
|
||||
|
||||
@@ -239,7 +336,8 @@ when
|
||||
$fact : DroolsFact(task != null)
|
||||
then
|
||||
// 显式航迹规则:填充 TrackParam 下各航迹 id,并绑定 execute[0].targetList[*].moveRouteId
|
||||
globalParams.putAll(buildParam());
|
||||
// globalParams.putAll(buildParam());
|
||||
mergeDefaultParams(globalParams);
|
||||
trackRoute($fact, globalParams);
|
||||
end
|
||||
|
||||
@@ -249,6 +347,7 @@ when
|
||||
$fact : DroolsFact(task != null)
|
||||
then
|
||||
// 显式编组规则:填充 TrackParam.Groups(groupType=addGroup)与 wingmanData
|
||||
globalParams.putAll(buildParam());
|
||||
// globalParams.putAll(buildParam());
|
||||
mergeDefaultParams(globalParams);
|
||||
groupFormation($fact, globalParams);
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user