diff --git a/auto-solution-admin/src/main/java/com/solution/web/controller/rule/FireRuleController.java b/auto-solution-admin/src/main/java/com/solution/web/controller/rule/FireRuleController.java
index 38d186a..0a0f7e2 100644
--- a/auto-solution-admin/src/main/java/com/solution/web/controller/rule/FireRuleController.java
+++ b/auto-solution-admin/src/main/java/com/solution/web/controller/rule/FireRuleController.java
@@ -3,6 +3,7 @@ package com.solution.web.controller.rule;
import com.solution.common.core.controller.BaseController;
import com.solution.common.core.domain.AjaxResult;
import com.solution.rule.domain.FireRuleExecuteDTO;
+import com.solution.rule.domain.simplerulepojo.Task;
import com.solution.rule.service.FireRuleService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -73,4 +74,15 @@ public class FireRuleController extends BaseController {
public AjaxResult getComponents(@PathVariable Integer platformId){
return success(ruleService.getComponents(platformId));
}
+
+ /**
+ * 开始执行规则匹配
+ * @param task 敌方参数
+ * @return
+ */
+ @PostMapping("/rule")
+ @ApiOperation("开始执行规则匹配")
+ public AjaxResult execute(@RequestBody Task task){
+ return success(ruleService.executeTask(task));
+ }
}
diff --git a/auto-solution-rule/pom.xml b/auto-solution-rule/pom.xml
index 33757b0..05399c5 100644
--- a/auto-solution-rule/pom.xml
+++ b/auto-solution-rule/pom.xml
@@ -16,8 +16,55 @@
rule模块
+
+
+ 7.74.1.Final
+
+
+
+
+ org.drools
+ drools-core
+ ${drools.version}
+
+
+
+
+ org.drools
+ drools-templates
+ ${drools.version}
+
+
+
+
+ org.kie
+ kie-api
+ ${drools.version}
+
+
+
+
+ org.drools
+ drools-compiler
+ ${drools.version}
+
+
+
+
+ org.kie
+ kie-spring
+ ${drools.version}
+
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ 2.15.2
+
+
com.solution
diff --git a/auto-solution-rule/src/main/java/com/solution/rule/config/DroolsConfig.java b/auto-solution-rule/src/main/java/com/solution/rule/config/DroolsConfig.java
new file mode 100644
index 0000000..f2b74e1
--- /dev/null
+++ b/auto-solution-rule/src/main/java/com/solution/rule/config/DroolsConfig.java
@@ -0,0 +1,91 @@
+package com.solution.rule.config;
+
+import org.kie.api.KieBase;
+import org.kie.api.KieServices;
+import org.kie.api.builder.KieBuilder;
+import org.kie.api.builder.KieFileSystem;
+import org.kie.api.builder.KieRepository;
+import org.kie.api.builder.Message;
+import org.kie.api.runtime.KieContainer;
+import org.kie.api.runtime.KieSession;
+import org.kie.internal.io.ResourceFactory;
+import org.kie.spring.KModuleBeanFactoryPostProcessor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.core.io.support.ResourcePatternResolver;
+
+import java.io.IOException;
+
+@Configuration
+public class DroolsConfig {
+
+ private static final String RULE_PATH = "classpath*:rules/**/*.drl";
+
+ private final KieServices kieServices = KieServices.Factory.get();
+
+ /**
+ * 加载规则文件
+ */
+ @Bean
+ public KieFileSystem kieFileSystem() throws IOException {
+ KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
+
+ ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
+ Resource[] resources = resolver.getResources(RULE_PATH);
+
+ for (Resource resource : resources) {
+ kieFileSystem.write(
+ ResourceFactory.newInputStreamResource(resource.getInputStream())
+ .setSourcePath("rules/" + resource.getFilename())
+ );
+ }
+
+ return kieFileSystem;
+ }
+
+ /**
+ * 构建 KieContainer
+ */
+ @Bean
+ public KieContainer kieContainer(KieFileSystem kieFileSystem) {
+
+ KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem);
+ kieBuilder.buildAll();
+
+ // 检查错误
+ if (kieBuilder.getResults().hasMessages(Message.Level.ERROR)) {
+ throw new RuntimeException("Drools规则编译错误:\n" +
+ kieBuilder.getResults().toString());
+ }
+
+ KieRepository repository = kieServices.getRepository();
+
+ return kieServices.newKieContainer(repository.getDefaultReleaseId());
+ }
+
+ /**
+ * KieBase
+ */
+ @Bean
+ public KieBase kieBase(KieContainer kieContainer) {
+ return kieContainer.getKieBase();
+ }
+
+ /**
+ * KieSession(推荐加)
+ */
+ @Bean
+ public KieSession kieSession(KieContainer kieContainer) {
+ return kieContainer.newKieSession();
+ }
+
+ /**
+ * 必须是 static
+ */
+ @Bean
+ public static KModuleBeanFactoryPostProcessor kiePostProcessor() {
+ return new KModuleBeanFactoryPostProcessor();
+ }
+}
\ No newline at end of file
diff --git a/auto-solution-rule/src/main/java/com/solution/rule/domain/PlatformComponent.java b/auto-solution-rule/src/main/java/com/solution/rule/domain/PlatformComponent.java
index dd66e3a..2ec21b2 100644
--- a/auto-solution-rule/src/main/java/com/solution/rule/domain/PlatformComponent.java
+++ b/auto-solution-rule/src/main/java/com/solution/rule/domain/PlatformComponent.java
@@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import java.util.List;
+
/**
* 平台挂载的组件实体类
* 对应表 platform_component
@@ -29,4 +31,7 @@ public class PlatformComponent {
@ApiModelProperty(value = "组件数量")
private Long num;
+
+ @ApiModelProperty(value = "平台参数(List)")
+ private List platformParams;
}
\ No newline at end of file
diff --git a/auto-solution-rule/src/main/java/com/solution/rule/domain/dto/ComponentJsonDTO.java b/auto-solution-rule/src/main/java/com/solution/rule/domain/dto/ComponentJsonDTO.java
new file mode 100644
index 0000000..05a59e6
--- /dev/null
+++ b/auto-solution-rule/src/main/java/com/solution/rule/domain/dto/ComponentJsonDTO.java
@@ -0,0 +1,18 @@
+package com.solution.rule.domain.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ComponentJsonDTO {
+
+ //组件类型
+ private String type;
+ //组件名称
+ private String name;
+
+ //组件参数列表
+ private List parameters;
+
+}
diff --git a/auto-solution-rule/src/main/java/com/solution/rule/domain/dto/ComponentParamJsonDTO.java b/auto-solution-rule/src/main/java/com/solution/rule/domain/dto/ComponentParamJsonDTO.java
new file mode 100644
index 0000000..5887d60
--- /dev/null
+++ b/auto-solution-rule/src/main/java/com/solution/rule/domain/dto/ComponentParamJsonDTO.java
@@ -0,0 +1,18 @@
+package com.solution.rule.domain.dto;
+
+import lombok.Data;
+
+@Data
+public class ComponentParamJsonDTO {
+
+ // 参数名称
+ private String name;
+
+ private String def;
+
+ // 参数值
+ private String value;
+
+ // 参数单位
+ private String unit;
+}
diff --git a/auto-solution-rule/src/main/java/com/solution/rule/domain/dto/PlatformJsonDTO.java b/auto-solution-rule/src/main/java/com/solution/rule/domain/dto/PlatformJsonDTO.java
new file mode 100644
index 0000000..978879a
--- /dev/null
+++ b/auto-solution-rule/src/main/java/com/solution/rule/domain/dto/PlatformJsonDTO.java
@@ -0,0 +1,21 @@
+package com.solution.rule.domain.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class PlatformJsonDTO {
+ // 装备ID
+ private String id;
+
+ // 装备名称
+ private String name;
+
+ // 平台类型 (Platform_type)
+ private String type;
+
+ // 子组件列表(武器、传感器、通信等)
+ private List components;
+
+}
\ No newline at end of file
diff --git a/auto-solution-rule/src/main/java/com/solution/rule/domain/dto/RequestDTO.java b/auto-solution-rule/src/main/java/com/solution/rule/domain/dto/RequestDTO.java
deleted file mode 100644
index f2cdeeb..0000000
--- a/auto-solution-rule/src/main/java/com/solution/rule/domain/dto/RequestDTO.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.solution.rule.domain.dto;
-
-import lombok.Data;
-
-/**
- * 规则请求参数
- */
-@Data
-public class RequestDTO {
-
- //编队数量
- private Long formationNum;
-
- //武装直升机数量
- private Long gunshipNum;
-
- //无人机数量
- private Long droneNum;
-
- //单兵武器数量
- private Long singleWeaponNum;
-}
diff --git a/auto-solution-rule/src/main/java/com/solution/rule/domain/dto/TaskJsonDTO.java b/auto-solution-rule/src/main/java/com/solution/rule/domain/dto/TaskJsonDTO.java
new file mode 100644
index 0000000..1898312
--- /dev/null
+++ b/auto-solution-rule/src/main/java/com/solution/rule/domain/dto/TaskJsonDTO.java
@@ -0,0 +1,25 @@
+package com.solution.rule.domain.dto;
+
+import lombok.Data;
+
+import javax.sound.midi.Track;
+import java.util.List;
+
+@Data
+public class TaskJsonDTO {
+
+ //任务id
+ private Long attackId;
+
+ //任务名称
+ private String name;
+
+ //任务类型
+ private String dataType;
+
+ //任务下的平台
+ private List platforms;
+
+ //任务轨迹
+ private List