火力规则:最终版json实体解析定义

This commit is contained in:
MHW
2026-04-04 07:07:20 +08:00
parent 11e25fd0de
commit 50a369c722
59 changed files with 4320 additions and 244 deletions

View File

@@ -39,4 +39,16 @@ public class Task {
//防区经纬高
private List<Coordinate> defZoneLocation;
//阵型类型TRIANGLE/DIAMOND/LINE/COLUMN/WEDGE
private String formationType;
//阵型基础间距(米)
private Integer formationSpacingMeters;
//主僚标准距离(米)
private Integer mainWingDistanceMeters;
//阵型朝向0~359
private Integer formationHeadingDeg;
}

View File

@@ -30,4 +30,13 @@ public class Weapon {
//目标id
private String targetId;
//编队角色MAIN=主机WING=僚机
private String formationRole;
//僚机相对主机距离(米)
private Integer wingRelativeDistanceMeters;
//僚机相对主机方位角(度)
private Integer wingRelativeBearingDeg;
}

View File

@@ -0,0 +1,32 @@
package com.solution.rule.domain.ultimately.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
/**
* 装备组件参数项
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleComponentParamDTO {
/**
* 参数唯一标识
*/
private String uuid;
/**
* 属性默认值
*/
private String attDefaultValue;
/**
* 属性说明
*/
private String attExplain;
/**
* 数量
*/
private Integer number;
}

View File

@@ -0,0 +1,27 @@
package com.solution.rule.domain.ultimately.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
/**
* 经纬高坐标点
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleCoordinateDTO {
/**
* 经度
*/
private Double longitude;
/**
* 纬度
*/
private Double latitude;
/**
* 高程(米)
*/
private Double height;
}

View File

@@ -0,0 +1,13 @@
package com.solution.rule.domain.ultimately.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleInputArithmeticRefDTO {
private String id;
private String name;
}

View File

@@ -0,0 +1,29 @@
package com.solution.rule.domain.ultimately.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.util.List;
/**
* 火力规则输入根文档,与 {@code 火力规则输入-无注释.json} 顶层字段对应。
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleInputDTO {
/**
* 来源场景文件名
*/
private String sourceFile;
/**
* 蓝方任务列表
*/
private List<FireRuleTaskInputDTO> tasks;
/**
* 红方侧异构条目列表(武器、场景任务节点、装备、指挥所、防区等)
*/
private List<FireRuleInputRedWeaponElementDTO> redWeapons;
}

View File

@@ -0,0 +1,15 @@
package com.solution.rule.domain.ultimately.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleInputDeviceRefDTO {
private String id;
private String name;
private String refId;
}

View File

@@ -0,0 +1,17 @@
package com.solution.rule.domain.ultimately.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleInputLauncherConfigurationDTO {
private String classifyName;
private Integer isMount;
private FireRuleInputMountedWeaponRefDTO mountedWeapon;
private Integer number;
}

View File

@@ -0,0 +1,15 @@
package com.solution.rule.domain.ultimately.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleInputMountedWeaponRefDTO {
@JsonProperty("_id")
private String id;
private String name;
}

View File

@@ -0,0 +1,20 @@
package com.solution.rule.domain.ultimately.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
/**
* 防区圆形条目中 isWing 为对象时的样式字段
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleInputRedCircleStyleDTO {
private String outlineWidth;
private String lineType;
private String outlineColor;
private String color;
}

View File

@@ -0,0 +1,37 @@
package com.solution.rule.domain.ultimately.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
import java.util.Map;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleInputRedCommSlotDTO {
@JsonProperty("ObjectHandle")
private String objectHandle;
private FireRuleInputArithmeticRefDTO arithmetic;
private FireRuleInputDeviceRefDTO device;
private String deviceId;
private String deviceName;
private Boolean employLabel;
private String facilityName;
private String soleId;
private Map<String, Object> twiceModified;
private List<Object> zLists;
@JsonProperty("ParentPlat")
private String parentPlat;
}

View File

@@ -0,0 +1,34 @@
package com.solution.rule.domain.ultimately.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.util.List;
/**
* redWeapons 条目中 isLead可能是长机编队参数也可能是圆形防区参数字段并集
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleInputRedLeadPayloadDTO {
private String leader;
private String side;
private String supportType;
private List<FireRuleInputRedLeadPositionDTO> positions;
private String drawName;
private String airspaceType;
private String selectLonLat;
private String radius;
private String height;
private String extrudedHeight;
}

View File

@@ -0,0 +1,18 @@
package com.solution.rule.domain.ultimately.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
/**
* 长机/圆形等结构中的坐标点(示例中可能为数值或占位字符串)
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleInputRedLeadPositionDTO {
private String longitude;
private String latitude;
private String height;
}

View File

@@ -0,0 +1,33 @@
package com.solution.rule.domain.ultimately.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
import java.util.Map;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleInputRedMotorizedSlotDTO {
@JsonProperty("ObjectHandle")
private String objectHandle;
private FireRuleInputArithmeticRefDTO arithmetic;
private FireRuleInputDeviceRefDTO device;
private String deviceId;
private String deviceName;
private String soleId;
@JsonProperty("ParentPlat")
private String parentPlat;
private Map<String, Object> twiceModified;
private List<Object> zLists;
}

View File

@@ -0,0 +1,42 @@
package com.solution.rule.domain.ultimately.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
import java.util.Map;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleInputRedPlatformSlotDTO {
@JsonProperty("ObjectHandle")
private String objectHandle;
private FireRuleInputArithmeticRefDTO arithmetic;
private FireRuleInputDeviceRefDTO device;
private String deviceId;
private String deviceName;
private Boolean employLabel;
private String facilityName;
private String soleId;
private Map<String, Object> twiceModified;
private List<Object> zLists;
@JsonProperty("TrackParamId")
private String trackParamId;
private List<Double> positions;
@JsonProperty("ParentPlat")
private String parentPlat;
}

View File

@@ -0,0 +1,21 @@
package com.solution.rule.domain.ultimately.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleInputRedSubComponentsDTO {
private List<FireRuleInputRedCommSlotDTO> communication;
@JsonProperty("motorized_assembly")
private List<FireRuleInputRedMotorizedSlotDTO> motorizedAssembly;
private List<FireRuleInputRedPlatformSlotDTO> platform;
private List<FireRuleInputRedWeaponSlotDTO> weapon;
}

View File

@@ -0,0 +1,70 @@
package com.solution.rule.domain.ultimately.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
import java.util.Map;
/**
* 输入 JSON 中 {@code redWeapons} 数组元素并集:武器摘要、红方装备、营指挥所、防区圆形等形态共用此类。
* <p>
* {@code isWing} 在 JSON 中可能为僚机数组或圆形样式对象,故使用 {@link Object} 承接;可结合
* {@link FireRuleInputRedWingItemDTO}、{@link FireRuleInputRedCircleStyleDTO} 在业务层转型。
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleInputRedWeaponElementDTO {
private String name;
@JsonProperty("Name")
private String displayName;
private String id;
@JsonProperty("EquipmentID")
private String equipmentId;
private List<FireRuleWeaponComponentDTO> components;
private Object number;
private String successTargetRad;
private FireRuleInputRedLeadPayloadDTO isLead;
private Object isWing;
/**
* 装备类条目中为 {@code equipment} 等
*/
private String groupType;
@JsonProperty("SupportType")
private String supportType;
@JsonProperty("TroopsDetail")
private Map<String, Object> troopsDetail;
@JsonProperty("Platform_type")
private String platformType;
private Boolean isStrikeTarget;
private Boolean isReconTarget;
private Boolean isInterferenceTarget;
private Boolean isDefendImportantPlace;
@JsonProperty("OwnerForceSide")
private String ownerForceSide;
@JsonProperty("PlatID")
private String platId;
@JsonProperty("SubComponents")
private FireRuleInputRedSubComponentsDTO subComponents;
}

View File

@@ -0,0 +1,43 @@
package com.solution.rule.domain.ultimately.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
import java.util.Map;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleInputRedWeaponSlotDTO {
@JsonProperty("ObjectHandle")
private String objectHandle;
private FireRuleInputArithmeticRefDTO arithmetic;
private String codedQueue;
private FireRuleInputLauncherConfigurationDTO configuration;
private FireRuleInputDeviceRefDTO device;
private String deviceId;
private String deviceName;
private Boolean employLabel;
private String facilityName;
private String serialNumber;
private String soleId;
private Map<String, Object> twiceModified;
private List<Object> zLists;
@JsonProperty("ParentPlat")
private String parentPlat;
}

View File

@@ -0,0 +1,17 @@
package com.solution.rule.domain.ultimately.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleInputRedWingItemDTO {
private String name;
private String distance;
private String angle;
private String alt;
}

View File

@@ -0,0 +1,59 @@
package com.solution.rule.domain.ultimately.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.util.List;
/**
* 单条火力规则任务输入(蓝方多任务时为列表中的一项)
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleTaskInputDTO {
/**
* 任务唯一标识
*/
private String id;
/**
* 任务名称
*/
private String drawName;
/**
* 任务类型
*/
private String dataType;
/**
* 任务所属阵营
*/
private String side;
/**
* 航迹所属实体或阵营标识
*/
private String trackPointsId;
/**
* 任务航迹点列表
*/
private List<FireRuleTrackPointDTO> trackPoints;
/**
* 任务武器配置列表
*/
private List<FireRuleTaskWeaponDTO> taskWeapons;
/**
* 任务目标 id
*/
private String targetId;
/**
* 作战区经纬高坐标列表
*/
private List<FireRuleCoordinateDTO> warZoneLocation;
}

View File

@@ -0,0 +1,50 @@
package com.solution.rule.domain.ultimately.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.util.List;
/**
* 任务挂载的武器配置
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleTaskWeaponDTO {
/**
* 装备 id武器唯一标识
*/
private String equipmentId;
/**
* 装备名称
*/
private String name;
/**
* 装备类型
*/
private String supportType;
/**
* 装备组件列表
*/
private List<FireRuleWeaponComponentDTO> components;
/**
* 装备部署位置
*/
private FireRuleCoordinateDTO coordinate;
/**
* 武器数量;对应 JSON 键 {@code number}。{@code _comment_number} 为注释键,不映射。
* 可为数值或业务文案(如「最大载弹量」)。
*/
private Object number;
/**
* 该武器打击目标 id
*/
private String targetId;
}

View File

@@ -0,0 +1,37 @@
package com.solution.rule.domain.ultimately.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
/**
* 任务航迹点
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleTrackPointDTO {
/**
* 航迹点序号
*/
private Integer index;
/**
* 经度
*/
private Double longitude;
/**
* 纬度
*/
private Double latitude;
/**
* 高度
*/
private Double height;
/**
* 速度
*/
private Double speed;
}

View File

@@ -0,0 +1,29 @@
package com.solution.rule.domain.ultimately.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.util.List;
/**
* 任务武器下的设备组件
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleWeaponComponentDTO {
/**
* 设备 id
*/
private String deviceId;
/**
* 设备名称
*/
private String deviceName;
/**
* 组件参数列表
*/
private List<FireRuleComponentParamDTO> componentParams;
}

View File

@@ -0,0 +1,7 @@
/**
* 火力规则输入侧 DTO与 {@code resources/json/火力规则输入-无注释.json} 对齐。
* <p>
* {@code redWeapons} 数组元素为并集类型 {@link com.solution.rule.domain.ultimately.dto.FireRuleInputRedWeaponElementDTO}
* 常见形态包括:武器摘要、红方装备(含子组件)、营指挥所、防区圆形等。
*/
package com.solution.rule.domain.ultimately.dto;

View File

@@ -0,0 +1,22 @@
package com.solution.rule.domain.ultimately.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
/**
* 算法引用id / 名称)
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleArithmeticRefVO {
/**
* 算法 id
*/
private String id;
/**
* 算法名称
*/
private String name;
}

View File

@@ -0,0 +1,32 @@
package com.solution.rule.domain.ultimately.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
/**
* 装备组件参数项
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleComponentParamVO {
/**
* 参数唯一标识
*/
private String uuid;
/**
* 属性默认值
*/
private String attDefaultValue;
/**
* 属性说明
*/
private String attExplain;
/**
* 数量或序号
*/
private Integer number;
}

View File

@@ -0,0 +1,27 @@
package com.solution.rule.domain.ultimately.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
/**
* 经纬高坐标点
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleCoordinateVO {
/**
* 经度
*/
private Double longitude;
/**
* 纬度
*/
private Double latitude;
/**
* 高程(米)
*/
private Double height;
}

View File

@@ -0,0 +1,27 @@
package com.solution.rule.domain.ultimately.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
/**
* 巡航航线偏移量项(上下 / 前后 / 左右 三选一与取值)
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleCruiseRouteOffsetItemVO {
@JsonProperty("UpOrDown")
private Boolean upOrDown;
@JsonProperty("BeforeOrAfter")
private Boolean beforeOrAfter;
@JsonProperty("LeftOrRight")
private Boolean leftOrRight;
/**
* 偏移数值
*/
private Number value;
}

View File

@@ -0,0 +1,27 @@
package com.solution.rule.domain.ultimately.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
/**
* 设备引用
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleDeviceRefVO {
/**
* 设备 id
*/
private String id;
/**
* 设备名称
*/
private String name;
/**
* 引用 id
*/
private String refId;
}

View File

@@ -0,0 +1,21 @@
package com.solution.rule.domain.ultimately.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.util.List;
/**
* 任务载荷中的单次执行块(含目标列表与类型)
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleExecuteBlockVO {
private List<FireRuleExecuteTargetItemVO> targetList;
/**
* 执行类型,如 assault
*/
private String type;
}

View File

@@ -0,0 +1,63 @@
package com.solution.rule.domain.ultimately.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
/**
* 打击执行块中单个目标条目
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleExecuteTargetItemVO {
@JsonProperty("ID")
private String id;
/**
* 阵列位置 id
*/
private Integer arrayPositionId;
/**
* 阵列位置 id 备份
*/
private String arrayPositionIdBak;
/**
* 到达时间配置
*/
@JsonProperty("at_time")
private FireRuleTargetAttTimeVO atTime;
@JsonProperty("times_interval")
private Integer timesInterval;
private String attackType;
private String boost;
private String bootTime;
private String companion;
private String cruiseRouteId;
private List<FireRuleCruiseRouteOffsetItemVO> cruiseRouteOffset;
private String fireType;
private List<Object> strategy;
private String targetId;
private String weaponId;
private String weaponRelease;
private String weaponType;
private Integer weaponUseCount;
}

View File

@@ -0,0 +1,32 @@
package com.solution.rule.domain.ultimately.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
/**
* 发射架配置块
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleLauncherConfigurationVO {
/**
* 分类名称
*/
private String classifyName;
/**
* 是否挂载
*/
private Integer isMount;
/**
* 已挂载武器
*/
private FireRuleMountedWeaponRefVO mountedWeapon;
/**
* 数量
*/
private Integer number;
}

View File

@@ -0,0 +1,23 @@
package com.solution.rule.domain.ultimately.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
/**
* 任务载荷中的挂载/任务清单项
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleMissionListItemVO {
private String label;
/**
* 发射器类型,如 sam
*/
private String launcherType;
private Integer number;
private String value;
}

View File

@@ -0,0 +1,24 @@
package com.solution.rule.domain.ultimately.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
/**
* 挂载武器简要信息
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleMountedWeaponRefVO {
/**
* 武器文档 id
*/
@JsonProperty("_id")
private String id;
/**
* 武器名称
*/
private String name;
}

View File

@@ -0,0 +1,42 @@
package com.solution.rule.domain.ultimately.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
/**
* 火力规则输出根文档(与 {@code 火力规则输出.json} 字段一一对应)。
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleOutputVO {
/**
* 来源场景文件名
*/
private String sourceFile;
/**
* 火力规则任务列表(可含防区等输出字段)
*/
private List<FireRuleTaskInputVO> fireRuleInputs;
/**
* 场景任务节点列表
*/
@JsonProperty("Tasks")
private List<FireRuleSceneTaskNodeVO> tasks;
/**
* 编组列表
*/
@JsonProperty("Groups")
private List<FireRuleSceneGroupNodeVO> groups;
/**
* 红方装备列表
*/
private List<FireRuleRedWeaponEquipmentVO> redWeapons;
}

View File

@@ -0,0 +1,40 @@
package com.solution.rule.domain.ultimately.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
import java.util.Map;
/**
* 红方装备子组件:通信类数组元素
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleRedCommunicationSlotVO {
@JsonProperty("ObjectHandle")
private String objectHandle;
private FireRuleArithmeticRefVO arithmetic;
private FireRuleDeviceRefVO device;
private String deviceId;
private String deviceName;
private Boolean employLabel;
private String facilityName;
private String soleId;
private Map<String, Object> twiceModified;
private List<Object> zLists;
@JsonProperty("ParentPlat")
private String parentPlat;
}

View File

@@ -0,0 +1,36 @@
package com.solution.rule.domain.ultimately.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
import java.util.Map;
/**
* 红方装备子组件:机动组件数组元素
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleRedMotorizedSlotVO {
@JsonProperty("ObjectHandle")
private String objectHandle;
private FireRuleArithmeticRefVO arithmetic;
private FireRuleDeviceRefVO device;
private String deviceId;
private String deviceName;
private String soleId;
@JsonProperty("ParentPlat")
private String parentPlat;
private Map<String, Object> twiceModified;
private List<Object> zLists;
}

View File

@@ -0,0 +1,45 @@
package com.solution.rule.domain.ultimately.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
import java.util.Map;
/**
* 红方装备子组件:平台数组元素
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleRedPlatformSlotVO {
@JsonProperty("ObjectHandle")
private String objectHandle;
private FireRuleArithmeticRefVO arithmetic;
private FireRuleDeviceRefVO device;
private String deviceId;
private String deviceName;
private Boolean employLabel;
private String facilityName;
private String soleId;
private Map<String, Object> twiceModified;
private List<Object> zLists;
@JsonProperty("TrackParamId")
private String trackParamId;
private List<Double> positions;
@JsonProperty("ParentPlat")
private String parentPlat;
}

View File

@@ -0,0 +1,24 @@
package com.solution.rule.domain.ultimately.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
/**
* 红方装备子组件分组(按 communication / motorized_assembly / platform / weapon
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleRedSubComponentsVO {
private List<FireRuleRedCommunicationSlotVO> communication;
@JsonProperty("motorized_assembly")
private List<FireRuleRedMotorizedSlotVO> motorizedAssembly;
private List<FireRuleRedPlatformSlotVO> platform;
private List<FireRuleRedWeaponSlotVO> weapon;
}

View File

@@ -0,0 +1,49 @@
package com.solution.rule.domain.ultimately.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.Map;
/**
* 火力规则输出中 redWeapons 数组的单项(红方装备/平台)
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleRedWeaponEquipmentVO {
@JsonProperty("SupportType")
private String supportType;
@JsonProperty("TroopsDetail")
private Map<String, Object> troopsDetail;
@JsonProperty("Platform_type")
private String platformType;
private Boolean isStrikeTarget;
private Boolean isReconTarget;
private Boolean isInterferenceTarget;
private Boolean isDefendImportantPlace;
private String groupType;
@JsonProperty("EquipmentID")
private String equipmentId;
@JsonProperty("Name")
private String name;
@JsonProperty("OwnerForceSide")
private String ownerForceSide;
@JsonProperty("PlatID")
private String platId;
@JsonProperty("SubComponents")
private FireRuleRedSubComponentsVO subComponents;
}

View File

@@ -0,0 +1,46 @@
package com.solution.rule.domain.ultimately.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
import java.util.Map;
/**
* 红方装备子组件:武器 / 发射架子项
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleRedWeaponSlotVO {
@JsonProperty("ObjectHandle")
private String objectHandle;
private FireRuleArithmeticRefVO arithmetic;
private String codedQueue;
private FireRuleLauncherConfigurationVO configuration;
private FireRuleDeviceRefVO device;
private String deviceId;
private String deviceName;
private Boolean employLabel;
private String facilityName;
private String serialNumber;
private String soleId;
private Map<String, Object> twiceModified;
private List<Object> zLists;
@JsonProperty("ParentPlat")
private String parentPlat;
}

View File

@@ -0,0 +1,44 @@
package com.solution.rule.domain.ultimately.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.util.List;
/**
* 火力规则输出中 Groups 数组的单项
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleSceneGroupNodeVO {
private Number allAngle;
private String drawName;
private List<Object> editPermission;
private String groupType;
private String id;
private String idKey;
private Boolean isSelected;
private Boolean isShow;
private String leader;
private String name;
private String parentId;
private List<String> permission;
private Boolean show;
private Long sort;
private List<FireRuleWingmanDataVO> wingmanData;
}

View File

@@ -0,0 +1,42 @@
package com.solution.rule.domain.ultimately.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.util.List;
/**
* 火力规则输出中 Tasks 数组的单项(场景树任务节点)
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleSceneTaskNodeVO {
private String color;
private String dataType;
private String drawName;
private String groupType;
private String id;
private String idKey;
private Boolean isSelected;
private String name;
private String parentId;
private List<String> permission;
private Boolean show;
private String side;
private Long sort;
private FireRuleSceneTaskPayloadVO task;
}

View File

@@ -0,0 +1,42 @@
package com.solution.rule.domain.ultimately.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
/**
* 场景任务节点中的内层 task 对象
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleSceneTaskPayloadVO {
@JsonProperty("at_time")
private String atTime;
private String attackId;
private String color;
private String departureAirport;
private List<FireRuleExecuteBlockVO> execute;
private String landAirport;
private List<FireRuleMissionListItemVO> missionList;
private String name;
private String side;
private String sideId;
private Integer speed;
private String type;
private String weaponId;
}

View File

@@ -0,0 +1,22 @@
package com.solution.rule.domain.ultimately.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
/**
* 目标项中的到达时间开关与取值
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleTargetAttTimeVO {
/**
* 时间上限是否为真
*/
private Boolean timeUp;
/**
* 时间值
*/
private Number value;
}

View File

@@ -0,0 +1,64 @@
package com.solution.rule.domain.ultimately.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.util.List;
/**
* 单条火力规则任务输出(相对输入增加防区坐标)
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleTaskInputVO {
/**
* 任务唯一标识
*/
private String id;
/**
* 任务名称
*/
private String drawName;
/**
* 任务类型
*/
private String dataType;
/**
* 任务所属阵营
*/
private String side;
/**
* 航迹所属实体或阵营标识
*/
private String trackPointsId;
/**
* 任务航迹点列表
*/
private List<FireRuleTrackPointVO> trackPoints;
/**
* 任务武器配置列表
*/
private List<FireRuleTaskWeaponVO> taskWeapons;
/**
* 任务目标 id
*/
private String targetId;
/**
* 作战区经纬高坐标列表
*/
private List<FireRuleCoordinateVO> warZoneLocation;
/**
* 防区经纬高坐标列表
*/
private List<FireRuleCoordinateVO> defZoneLocation;
}

View File

@@ -0,0 +1,49 @@
package com.solution.rule.domain.ultimately.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.util.List;
/**
* 任务挂载的武器配置
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleTaskWeaponVO {
/**
* 装备 id武器唯一标识
*/
private String equipmentId;
/**
* 装备名称
*/
private String name;
/**
* 装备类型编码
*/
private String supportType;
/**
* 装备组件列表
*/
private List<FireRuleWeaponComponentVO> components;
/**
* 装备部署位置
*/
private FireRuleCoordinateVO coordinate;
/**
* 武器数量;可为数值或业务文案(如「最大载弹量」)
*/
private Object number;
/**
* 该武器打击目标 id
*/
private String targetId;
}

View File

@@ -0,0 +1,37 @@
package com.solution.rule.domain.ultimately.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
/**
* 任务航迹点
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleTrackPointVO {
/**
* 航迹点序号
*/
private Integer index;
/**
* 经度
*/
private Double longitude;
/**
* 纬度
*/
private Double latitude;
/**
* 高度
*/
private Double height;
/**
* 速度
*/
private Double speed;
}

View File

@@ -0,0 +1,29 @@
package com.solution.rule.domain.ultimately.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.util.List;
/**
* 任务武器下的设备组件
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleWeaponComponentVO {
/**
* 设备 id
*/
private String deviceId;
/**
* 设备名称
*/
private String deviceName;
/**
* 组件参数列表
*/
private List<FireRuleComponentParamVO> componentParams;
}

View File

@@ -0,0 +1,22 @@
package com.solution.rule.domain.ultimately.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
/**
* 编组中的僚机相对参数
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FireRuleWingmanDataVO {
private Integer alt;
private String angle;
private Integer distance;
private Integer key;
private String name;
}

View File

@@ -5,6 +5,8 @@ import com.solution.rule.domain.FireRuleExecuteDTO;
import com.solution.rule.domain.Platform;
import com.solution.rule.domain.PlatformComponent;
import com.solution.rule.domain.simplerulepojo.Task;
import com.solution.rule.domain.ultimately.dto.FireRuleInputDTO;
import com.solution.rule.domain.ultimately.vo.FireRuleOutputVO;
import com.solution.rule.domain.vo.PlatformComponentNamesVO;
import com.solution.rule.domain.vo.PlatformWeaponAggregateVO;
@@ -58,4 +60,11 @@ public interface FireRuleService {
* @return
*/
Task executeTask(Task task);
/**
* 火力规则
* @param task
* @return
*/
FireRuleOutputVO rule(FireRuleInputDTO task);
}

View File

@@ -7,6 +7,10 @@ import com.solution.rule.domain.*;
import com.solution.rule.domain.dto.WeaponModelDTO;
import com.solution.rule.domain.simplerulepojo.Task;
import com.solution.rule.domain.simplerulepojo.Weapon;
import com.solution.rule.domain.simplerulepojo.fact.FactTask;
import com.solution.rule.domain.ultimately.dto.FireRuleInputDTO;
import com.solution.rule.domain.ultimately.dto.FireRuleTaskInputDTO;
import com.solution.rule.domain.ultimately.vo.FireRuleOutputVO;
import com.solution.rule.domain.vo.ComponentCountVO;
import com.solution.rule.domain.vo.PlatformComponentNamesVO;
import com.solution.rule.domain.vo.PlatformWeaponAggregateVO;
@@ -19,13 +23,11 @@ import com.solution.rule.simpstrategy.FireRuleStrategyFactory;
import com.solution.rule.strategy.SceneStrategy;
import com.solution.rule.strategy.SceneStrategyFactory;
import org.kie.api.KieBase;
import org.kie.api.runtime.KieSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
@Service
@@ -186,6 +188,32 @@ public class FireRuleServiceImpl implements FireRuleService {
return task;
}
/**
* 执行任务
* @param task
* @return
*/
@Override
public FireRuleOutputVO rule(FireRuleInputDTO task) {
if(ObjectUtil.isEmpty(task)){
throw new RuntimeException(ExceptionConstants.PARAMETER_EXCEPTION);
}
List<FireRuleTaskInputDTO> tasks = task.getTasks();
if(CollUtil.isEmpty( tasks)){
throw new RuntimeException(ExceptionConstants.PARAMETER_EXCEPTION);
}
KieSession kieSession = kieBase.newKieSession();
Map<String, Object> globalParams = new HashMap<>();
kieSession.setGlobal("globalParams", globalParams);
for (FireRuleTaskInputDTO fireRuleTaskInputDTO : tasks) {
}
FireRuleOutputVO FireRuleOutputVO = new FireRuleOutputVO();
return FireRuleOutputVO;
}
/**
* 获取所有组件以及数量
* @return