Compare commits
98 Commits
577bc3e1c0
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d13359c803 | ||
|
|
65ea1cfd6b | ||
|
|
4455d38a61 | ||
|
|
6dd4392f0c | ||
|
|
974f403784 | ||
|
|
82bbfb83ca | ||
|
|
fc7b5e6c63 | ||
|
|
8dc867acb6 | ||
|
|
c17197d6e5 | ||
| 76022cf09a | |||
| 4ff5bf500c | |||
| be417189e0 | |||
| a88d74ea1d | |||
|
|
c2bfb43d41 | ||
|
|
c5d81a4c52 | ||
|
|
6d76cb8d5e | ||
|
|
b97837ec6a | ||
|
|
f2e81c6e5c | ||
|
|
83a38c6db8 | ||
|
|
22e71a24d3 | ||
|
|
6019738aca | ||
| 7847dbc89f | |||
| cc01c9ece8 | |||
| 8f29e230d0 | |||
| 711d7bf3da | |||
|
|
29e17773af | ||
|
|
db97d8a026 | ||
|
|
2e55254412 | ||
|
|
1504c3fc1b | ||
|
|
0cf4c9b47e | ||
|
|
fa0c93044c | ||
|
|
33a77428db | ||
| 26a89a66d1 | |||
| f72105134f | |||
|
|
2198e108a4 | ||
|
|
fe94cec559 | ||
| af3a97175a | |||
| c1c67e826b | |||
| 8a946c4c84 | |||
| d9a55d0c95 | |||
|
|
7b578f5d63 | ||
| dde470c9da | |||
| 91adb9517e | |||
| 99c100f2ac | |||
|
|
a2f2cbb185 | ||
|
|
d96941ea9b | ||
|
|
5a7b57d603 | ||
|
|
27f8810401 | ||
|
|
4980ba2da4 | ||
|
|
3a086e9405 | ||
| f2f8892276 | |||
| 152a7b59af | |||
| 956d3f69ea | |||
| 6fb020355b | |||
|
|
8b3fe9b548 | ||
|
|
db30244cd1 | ||
|
|
c9bc62fb8c | ||
|
|
9d54395c29 | ||
|
|
35fd1c8937 | ||
|
|
579d0f2bd8 | ||
|
|
7f8abf2ff2 | ||
|
|
f1bcd3812d | ||
|
|
d3fda27bb0 | ||
|
|
538a43f597 | ||
|
|
fcab8585c5 | ||
|
|
0ffc42ab69 | ||
|
|
46bead08a0 | ||
|
|
e07b11ef95 | ||
|
|
a78781782e | ||
|
|
0b55384442 | ||
|
|
43837901f3 | ||
|
|
8898cd2e6f | ||
|
|
f34274ea35 | ||
|
|
5ffdb5e508 | ||
|
|
a5a3c93135 | ||
|
|
af697e9304 | ||
|
|
e7abfca9f7 | ||
|
|
1058d666a0 | ||
|
|
58d36a3d6d | ||
|
|
b544391b5c | ||
|
|
e12c3c0302 | ||
|
|
d8c429d000 | ||
|
|
7909ea8acb | ||
|
|
444c31612d | ||
|
|
a3e34424d8 | ||
|
|
76065ed5c4 | ||
|
|
70de3c68a8 | ||
|
|
3bb9178399 | ||
|
|
82fcedfa97 | ||
|
|
294e5d687e | ||
|
|
a246c88341 | ||
|
|
c9d5c38b52 | ||
|
|
9ded6b757c | ||
|
|
015030d650 | ||
|
|
b67f493678 | ||
| e3be036bd3 | |||
| 0daa1c19cf | |||
|
|
a440094138 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -8,6 +8,8 @@
|
|||||||
target/
|
target/
|
||||||
!.mvn/wrapper/maven-wrapper.jar
|
!.mvn/wrapper/maven-wrapper.jar
|
||||||
|
|
||||||
|
node_modules/
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
# IDE
|
# IDE
|
||||||
|
|
||||||
|
|||||||
@@ -70,6 +70,17 @@
|
|||||||
<groupId>com.solution</groupId>
|
<groupId>com.solution</groupId>
|
||||||
<artifactId>solution-algo</artifactId>
|
<artifactId>solution-algo</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.solution</groupId>
|
||||||
|
<artifactId>solution-rule</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.solution</groupId>
|
||||||
|
<artifactId>solution-scene</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
|||||||
@@ -0,0 +1,158 @@
|
|||||||
|
package com.solution.web.controller.algo;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PutMapping;
|
||||||
|
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
import com.solution.common.annotation.Log;
|
||||||
|
import com.solution.common.core.controller.BaseController;
|
||||||
|
import com.solution.common.core.domain.AjaxResult;
|
||||||
|
import com.solution.common.enums.BusinessType;
|
||||||
|
import com.solution.algo.domain.Algorithm;
|
||||||
|
import com.solution.algo.service.IAlgorithmService;
|
||||||
|
import com.solution.common.utils.poi.ExcelUtil;
|
||||||
|
import com.solution.common.core.page.TableDataInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 规则Controller
|
||||||
|
*
|
||||||
|
* @author zouju
|
||||||
|
* @date 2026-02-06
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@Api("规则模块")
|
||||||
|
@RequestMapping("/api/algo/algorithm")
|
||||||
|
public class AlgorithmController extends BaseController {
|
||||||
|
@Autowired
|
||||||
|
private IAlgorithmService algorithmService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出规则列表
|
||||||
|
*/
|
||||||
|
@ApiOperation("运行python程序")
|
||||||
|
@PostMapping("/run")
|
||||||
|
public Object run(@RequestBody Algorithm algorithm) {
|
||||||
|
List<Algorithm> list = algorithmService.selectAlgorithmList(algorithm);
|
||||||
|
ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
|
||||||
|
for (Algorithm al : list) {
|
||||||
|
String codePath = al.getCodePath();
|
||||||
|
|
||||||
|
try {
|
||||||
|
String jsonInput = objectMapper.writeValueAsString(al);
|
||||||
|
String pythonExe = "E:\\Apps\\anaconda3\\python.exe";
|
||||||
|
ProcessBuilder pb = new ProcessBuilder(pythonExe, codePath);
|
||||||
|
Process process = pb.start();
|
||||||
|
|
||||||
|
try (OutputStream os = process.getOutputStream()) {
|
||||||
|
os.write(jsonInput.getBytes(StandardCharsets.UTF_8));
|
||||||
|
os.flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
String result;
|
||||||
|
// 修改你 Java 代码中的这一段
|
||||||
|
try (BufferedReader reader = new BufferedReader(
|
||||||
|
new InputStreamReader(process.getInputStream(), StandardCharsets.UTF_8))) {
|
||||||
|
result = reader.lines().collect(Collectors.joining("\n"));
|
||||||
|
}
|
||||||
|
|
||||||
|
int exitCode = process.waitFor();
|
||||||
|
if (exitCode != 0) {
|
||||||
|
return "Python执行失败,错误码:" + exitCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
return objectMapper.readTree(result);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return "执行异常: " + e.getMessage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "未找到算法";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询规则列表
|
||||||
|
*/
|
||||||
|
@ApiOperation("查询规则列表")
|
||||||
|
@PreAuthorize("@ss.hasPermi('algo:algorithm:list')")
|
||||||
|
@GetMapping("/list")
|
||||||
|
public TableDataInfo list(Algorithm algorithm) {
|
||||||
|
startPage();
|
||||||
|
List<Algorithm> list = algorithmService.selectAlgorithmList(algorithm);
|
||||||
|
return getDataTable(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出规则列表
|
||||||
|
*/
|
||||||
|
@ApiOperation("导出规则列表")
|
||||||
|
@PreAuthorize("@ss.hasPermi('algo:algorithm:export')")
|
||||||
|
@Log(title = "规则", businessType = BusinessType.EXPORT)
|
||||||
|
@PostMapping("/export")
|
||||||
|
public void export(HttpServletResponse response, @RequestBody Algorithm algorithm) {
|
||||||
|
List<Algorithm> list = algorithmService.selectAlgorithmList(algorithm);
|
||||||
|
ExcelUtil<Algorithm> util = new ExcelUtil<Algorithm>(Algorithm.class);
|
||||||
|
util.exportExcel(response, list, "规则数据");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取规则详细信息
|
||||||
|
*/
|
||||||
|
@ApiOperation("获取规则详细信息")
|
||||||
|
@PreAuthorize("@ss.hasPermi('algo:algorithm:query')")
|
||||||
|
@GetMapping(value = "/{id}")
|
||||||
|
public AjaxResult getInfo(@PathVariable("id") Long id) {
|
||||||
|
return success(algorithmService.selectAlgorithmById(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增规则
|
||||||
|
*/
|
||||||
|
@ApiOperation("新增规则")
|
||||||
|
@PreAuthorize("@ss.hasPermi('algo:algorithm:add')")
|
||||||
|
@Log(title = "规则", businessType = BusinessType.INSERT)
|
||||||
|
@PostMapping
|
||||||
|
public AjaxResult add(@RequestBody Algorithm algorithm) {
|
||||||
|
return toAjax(algorithmService.insertAlgorithm(algorithm));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改规则
|
||||||
|
*/
|
||||||
|
@ApiOperation("修改规则")
|
||||||
|
@PreAuthorize("@ss.hasPermi('algo:algorithm:edit')")
|
||||||
|
@Log(title = "规则", businessType = BusinessType.UPDATE)
|
||||||
|
@PutMapping
|
||||||
|
public AjaxResult edit(@RequestBody Algorithm algorithm) {
|
||||||
|
return toAjax(algorithmService.updateAlgorithm(algorithm));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除规则
|
||||||
|
*/
|
||||||
|
@ApiOperation("删除规则")
|
||||||
|
@PreAuthorize("@ss.hasPermi('algo:algorithm:remove')")
|
||||||
|
@Log(title = "规则", businessType = BusinessType.DELETE)
|
||||||
|
@DeleteMapping("/{ids}")
|
||||||
|
public AjaxResult remove(@PathVariable Long[] ids) {
|
||||||
|
return toAjax(algorithmService.deleteAlgorithmByIds(ids));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,104 +0,0 @@
|
|||||||
package com.solution.web.controller.algo;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.PutMapping;
|
|
||||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
import com.solution.common.annotation.Log;
|
|
||||||
import com.solution.common.core.controller.BaseController;
|
|
||||||
import com.solution.common.core.domain.AjaxResult;
|
|
||||||
import com.solution.common.enums.BusinessType;
|
|
||||||
import com.solution.algo.domain.SysAlgoConfig;
|
|
||||||
import com.solution.algo.service.ISysAlgoConfigService;
|
|
||||||
import com.solution.common.utils.poi.ExcelUtil;
|
|
||||||
import com.solution.common.core.page.TableDataInfo;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 动态规则配置Controller
|
|
||||||
*
|
|
||||||
* @author zouju
|
|
||||||
* @date 2026-02-05
|
|
||||||
*/
|
|
||||||
@RestController
|
|
||||||
@RequestMapping("/algo/algo")
|
|
||||||
public class SysAlgoConfigController extends BaseController
|
|
||||||
{
|
|
||||||
@Autowired
|
|
||||||
private ISysAlgoConfigService sysAlgoConfigService;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询动态规则配置列表
|
|
||||||
*/
|
|
||||||
@PreAuthorize("@ss.hasPermi('algo:algo:list')")
|
|
||||||
@GetMapping("/list")
|
|
||||||
public TableDataInfo list(SysAlgoConfig sysAlgoConfig)
|
|
||||||
{
|
|
||||||
startPage();
|
|
||||||
List<SysAlgoConfig> list = sysAlgoConfigService.selectSysAlgoConfigList(sysAlgoConfig);
|
|
||||||
return getDataTable(list);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 导出动态规则配置列表
|
|
||||||
*/
|
|
||||||
@PreAuthorize("@ss.hasPermi('algo:algo:export')")
|
|
||||||
@Log(title = "动态规则配置", businessType = BusinessType.EXPORT)
|
|
||||||
@PostMapping("/export")
|
|
||||||
public void export(HttpServletResponse response, SysAlgoConfig sysAlgoConfig)
|
|
||||||
{
|
|
||||||
List<SysAlgoConfig> list = sysAlgoConfigService.selectSysAlgoConfigList(sysAlgoConfig);
|
|
||||||
ExcelUtil<SysAlgoConfig> util = new ExcelUtil<SysAlgoConfig>(SysAlgoConfig.class);
|
|
||||||
util.exportExcel(response, list, "动态规则配置数据");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取动态规则配置详细信息
|
|
||||||
*/
|
|
||||||
@PreAuthorize("@ss.hasPermi('algo:algo:query')")
|
|
||||||
@GetMapping(value = "/{id}")
|
|
||||||
public AjaxResult getInfo(@PathVariable("id") Long id)
|
|
||||||
{
|
|
||||||
return success(sysAlgoConfigService.selectSysAlgoConfigById(id));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 新增动态规则配置
|
|
||||||
*/
|
|
||||||
@PreAuthorize("@ss.hasPermi('algo:algo:add')")
|
|
||||||
@Log(title = "动态规则配置", businessType = BusinessType.INSERT)
|
|
||||||
@PostMapping
|
|
||||||
public AjaxResult add(@RequestBody SysAlgoConfig sysAlgoConfig)
|
|
||||||
{
|
|
||||||
return toAjax(sysAlgoConfigService.insertSysAlgoConfig(sysAlgoConfig));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改动态规则配置
|
|
||||||
*/
|
|
||||||
@PreAuthorize("@ss.hasPermi('algo:algo:edit')")
|
|
||||||
@Log(title = "动态规则配置", businessType = BusinessType.UPDATE)
|
|
||||||
@PutMapping
|
|
||||||
public AjaxResult edit(@RequestBody SysAlgoConfig sysAlgoConfig)
|
|
||||||
{
|
|
||||||
return toAjax(sysAlgoConfigService.updateSysAlgoConfig(sysAlgoConfig));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除动态规则配置
|
|
||||||
*/
|
|
||||||
@PreAuthorize("@ss.hasPermi('algo:algo:remove')")
|
|
||||||
@Log(title = "动态规则配置", businessType = BusinessType.DELETE)
|
|
||||||
@DeleteMapping("/{ids}")
|
|
||||||
public AjaxResult remove(@PathVariable Long[] ids)
|
|
||||||
{
|
|
||||||
return toAjax(sysAlgoConfigService.deleteSysAlgoConfigByIds(ids));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -3,6 +3,7 @@ package com.solution.web.controller.behaviour;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import com.solution.web.core.BehaviortreeProcessor;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
@@ -32,12 +33,15 @@ import com.solution.common.core.page.TableDataInfo;
|
|||||||
*/
|
*/
|
||||||
@Api("行为树管理")
|
@Api("行为树管理")
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/system/behaviortree")
|
@RequestMapping("/api/system/behaviortree")
|
||||||
public class BehaviortreeController extends BaseController
|
public class BehaviortreeController extends BaseController
|
||||||
{
|
{
|
||||||
@Autowired
|
@Autowired
|
||||||
private IBehaviortreeService behaviortreeService;
|
private IBehaviortreeService behaviortreeService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private BehaviortreeProcessor behaviortreeProcessor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询行为树主列表
|
* 查询行为树主列表
|
||||||
*/
|
*/
|
||||||
@@ -84,7 +88,7 @@ public class BehaviortreeController extends BaseController
|
|||||||
@PostMapping
|
@PostMapping
|
||||||
public AjaxResult add(@RequestBody Behaviortree behaviortree)
|
public AjaxResult add(@RequestBody Behaviortree behaviortree)
|
||||||
{
|
{
|
||||||
return toAjax(behaviortreeService.insertBehaviortree(behaviortree));
|
return toAjax(behaviortreeProcessor.create(behaviortree));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -96,7 +100,7 @@ public class BehaviortreeController extends BaseController
|
|||||||
@PutMapping
|
@PutMapping
|
||||||
public AjaxResult edit(@RequestBody Behaviortree behaviortree)
|
public AjaxResult edit(@RequestBody Behaviortree behaviortree)
|
||||||
{
|
{
|
||||||
return toAjax(behaviortreeService.updateBehaviortree(behaviortree));
|
return toAjax(behaviortreeProcessor.update(behaviortree));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -110,4 +114,5 @@ public class BehaviortreeController extends BaseController
|
|||||||
{
|
{
|
||||||
return toAjax(behaviortreeService.deleteBehaviortreeByIds(ids));
|
return toAjax(behaviortreeService.deleteBehaviortreeByIds(ids));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ import com.solution.common.core.page.TableDataInfo;
|
|||||||
*/
|
*/
|
||||||
@Api("节点连接管理")
|
@Api("节点连接管理")
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/system/nodeconnection")
|
@RequestMapping("/api/system/nodeconnection")
|
||||||
public class NodeconnectionController extends BaseController
|
public class NodeconnectionController extends BaseController
|
||||||
{
|
{
|
||||||
@Autowired
|
@Autowired
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ import com.solution.common.core.page.TableDataInfo;
|
|||||||
*/
|
*/
|
||||||
@Api("节点参数管理")
|
@Api("节点参数管理")
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/system/nodeparameter")
|
@RequestMapping("/api/system/nodeparameter")
|
||||||
public class NodeparameterController extends BaseController
|
public class NodeparameterController extends BaseController
|
||||||
{
|
{
|
||||||
@Autowired
|
@Autowired
|
||||||
|
|||||||
@@ -7,6 +7,11 @@ import java.util.stream.Collectors;
|
|||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
import com.solution.common.core.domain.R;
|
import com.solution.common.core.domain.R;
|
||||||
|
import com.solution.system.domain.NodeTemplateEntity;
|
||||||
|
import com.solution.system.domain.Nodeparameter;
|
||||||
|
import com.solution.system.domain.Templateparameterdef;
|
||||||
|
import com.solution.system.service.INodeparameterService;
|
||||||
|
import com.solution.system.service.ITemplateparameterdefService;
|
||||||
import com.solution.web.controller.behaviour.vo.NodetemplateDTO;
|
import com.solution.web.controller.behaviour.vo.NodetemplateDTO;
|
||||||
import com.solution.web.controller.behaviour.vo.NodetemplateVO;
|
import com.solution.web.controller.behaviour.vo.NodetemplateVO;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
@@ -14,6 +19,7 @@ import io.swagger.annotations.ApiOperation;
|
|||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.PutMapping;
|
import org.springframework.web.bind.annotation.PutMapping;
|
||||||
@@ -39,11 +45,17 @@ import com.solution.common.core.page.TableDataInfo;
|
|||||||
*/
|
*/
|
||||||
@Api("节点模板管理")
|
@Api("节点模板管理")
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/system/nodetemplate")
|
@RequestMapping("/api/system/nodetemplate")
|
||||||
public class NodetemplateController extends BaseController {
|
public class NodetemplateController extends BaseController {
|
||||||
@Autowired
|
@Autowired
|
||||||
private INodetemplateService nodetemplateService;
|
private INodetemplateService nodetemplateService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private INodeparameterService nodeparameterService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ITemplateparameterdefService templateparameterdefService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询节点模板列表
|
* 查询节点模板列表
|
||||||
*/
|
*/
|
||||||
@@ -55,10 +67,29 @@ public class NodetemplateController extends BaseController {
|
|||||||
return getDataTable(list);
|
return getDataTable(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ApiOperation("节点模板列表")
|
||||||
|
@PreAuthorize("@ss.hasPermi('system:nodetemplate:all')")
|
||||||
|
@GetMapping("/all")
|
||||||
|
public R<List<NodeTemplateEntity>> all() {
|
||||||
|
Nodetemplate nodetemplate = new Nodetemplate();
|
||||||
|
List<Nodetemplate> list = nodetemplateService.selectNodetemplateList(nodetemplate);
|
||||||
|
if (CollectionUtils.isEmpty(list)) {
|
||||||
|
return R.ok(null);
|
||||||
|
}
|
||||||
|
List<NodeTemplateEntity> entities = new ArrayList<>();
|
||||||
|
for (Nodetemplate template : list) {
|
||||||
|
Templateparameterdef def = new Templateparameterdef();
|
||||||
|
def.setTemplateId(template.getId());
|
||||||
|
List<Templateparameterdef> parameters = templateparameterdefService.selectTemplateparameterdefList(def);
|
||||||
|
entities.add(new NodeTemplateEntity(template, parameters));
|
||||||
|
}
|
||||||
|
return R.ok(entities);
|
||||||
|
}
|
||||||
|
|
||||||
@ApiOperation("节点模板列表")
|
@ApiOperation("节点模板列表")
|
||||||
@PreAuthorize("@ss.hasPermi('system:nodetemplate:list')")
|
@PreAuthorize("@ss.hasPermi('system:nodetemplate:list')")
|
||||||
@GetMapping("/listAll")
|
@GetMapping("/listAll")
|
||||||
public R<List<NodetemplateVO>> listAll() {
|
public R<List<Nodetemplate>> listAll() {
|
||||||
Nodetemplate nodetemplate = new Nodetemplate();
|
Nodetemplate nodetemplate = new Nodetemplate();
|
||||||
List<Nodetemplate> list = nodetemplateService.selectNodetemplateList(nodetemplate);
|
List<Nodetemplate> list = nodetemplateService.selectNodetemplateList(nodetemplate);
|
||||||
if (CollectionUtils.isEmpty(list)) {
|
if (CollectionUtils.isEmpty(list)) {
|
||||||
@@ -72,18 +103,19 @@ public class NodetemplateController extends BaseController {
|
|||||||
dto.setDescription(template.getDescription());
|
dto.setDescription(template.getDescription());
|
||||||
dto.setEnglishName(template.getEnglishName());
|
dto.setEnglishName(template.getEnglishName());
|
||||||
dto.setLogicHandler(template.getLogicHandler());
|
dto.setLogicHandler(template.getLogicHandler());
|
||||||
|
dto.setTemplateType(template.getTemplateType());
|
||||||
return dto;
|
return dto;
|
||||||
})
|
})
|
||||||
.collect(Collectors.groupingBy(NodetemplateDTO::getTempleteType));
|
.collect(Collectors.groupingBy(NodetemplateDTO::getTemplateType));
|
||||||
List<NodetemplateVO> vos = new ArrayList<>();
|
List<NodetemplateVO> vos = new ArrayList<>();
|
||||||
groupedByTemplateType.forEach((key, value) -> {
|
groupedByTemplateType.forEach((key, value) -> {
|
||||||
// 处理逻辑
|
// 处理逻辑
|
||||||
NodetemplateVO vo = new NodetemplateVO();
|
NodetemplateVO vo = new NodetemplateVO();
|
||||||
vo.setTempleteType(key);
|
vo.setTemplateType(key);
|
||||||
vo.setDtoList(value);
|
vo.setDtoList(value);
|
||||||
vos.add(vo);
|
vos.add(vo);
|
||||||
});
|
});
|
||||||
return R.ok(vos);
|
return R.ok(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ import com.solution.common.core.page.TableDataInfo;
|
|||||||
* @date 2026-02-05
|
* @date 2026-02-05
|
||||||
*/
|
*/
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/system/templateparameterdef")
|
@RequestMapping("/api/system/templateparameterdef")
|
||||||
public class TemplateparameterdefController extends BaseController
|
public class TemplateparameterdefController extends BaseController
|
||||||
{
|
{
|
||||||
@Autowired
|
@Autowired
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ import com.solution.common.core.page.TableDataInfo;
|
|||||||
*/
|
*/
|
||||||
@Api("行为树实例节点管理")
|
@Api("行为树实例节点管理")
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/system/treenodeinstance")
|
@RequestMapping("/api/system/treenodeinstance")
|
||||||
public class TreenodeinstanceController extends BaseController {
|
public class TreenodeinstanceController extends BaseController {
|
||||||
@Autowired
|
@Autowired
|
||||||
private ITreenodeinstanceService treenodeinstanceService;
|
private ITreenodeinstanceService treenodeinstanceService;
|
||||||
@@ -141,14 +141,15 @@ public class TreenodeinstanceController extends BaseController {
|
|||||||
@PreAuthorize("@ss.hasPermi('system:treenodeinstance:add')")
|
@PreAuthorize("@ss.hasPermi('system:treenodeinstance:add')")
|
||||||
@Log(title = "行为树实例节点", businessType = BusinessType.INSERT)
|
@Log(title = "行为树实例节点", businessType = BusinessType.INSERT)
|
||||||
@PostMapping("/saveOrUpdate")
|
@PostMapping("/saveOrUpdate")
|
||||||
public R<Integer> saveOrUpdate(@RequestBody Treenodeinstance treenodeinstance) {
|
public R<Long> saveOrUpdate(@RequestBody Treenodeinstance treenodeinstance) {
|
||||||
if (null == treenodeinstance.getId()) {
|
if (null == treenodeinstance.getId()) {
|
||||||
//新增
|
//新增
|
||||||
|
treenodeinstanceService.insertTreenodeinstance(treenodeinstance);
|
||||||
Templateparameterdef templateparameterdef = new Templateparameterdef();
|
Templateparameterdef templateparameterdef = new Templateparameterdef();
|
||||||
templateparameterdef.setTemplateId(treenodeinstance.getTemplateId());
|
templateparameterdef.setTemplateId(treenodeinstance.getTemplateId());
|
||||||
List<Templateparameterdef> templateparameterdefs = templateparameterdefService.selectTemplateparameterdefList(templateparameterdef);
|
List<Templateparameterdef> templateparameterdefs = templateparameterdefService.selectTemplateparameterdefList(templateparameterdef);
|
||||||
if (CollectionUtils.isEmpty(templateparameterdefs)) {
|
if (CollectionUtils.isEmpty(templateparameterdefs)) {
|
||||||
return R.ok(treenodeinstanceService.insertTreenodeinstance(treenodeinstance));
|
return R.ok(treenodeinstance.getId());
|
||||||
}
|
}
|
||||||
templateparameterdefs.forEach(t -> {
|
templateparameterdefs.forEach(t -> {
|
||||||
Nodeparameter nodeparameter = new Nodeparameter();
|
Nodeparameter nodeparameter = new Nodeparameter();
|
||||||
@@ -158,7 +159,8 @@ public class TreenodeinstanceController extends BaseController {
|
|||||||
nodeparameterService.insertNodeparameter(nodeparameter);
|
nodeparameterService.insertNodeparameter(nodeparameter);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return R.ok(treenodeinstanceService.updateTreenodeinstance(treenodeinstance));
|
treenodeinstanceService.updateTreenodeinstance(treenodeinstance);
|
||||||
|
return R.ok(treenodeinstance.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ public class NodetemplateDTO {
|
|||||||
@ApiModelProperty("afsim 中转换的节点名")
|
@ApiModelProperty("afsim 中转换的节点名")
|
||||||
private String englishName;
|
private String englishName;
|
||||||
|
|
||||||
private String templeteType;
|
private String templateType;
|
||||||
|
|
||||||
public Long getId() {
|
public Long getId() {
|
||||||
return id;
|
return id;
|
||||||
@@ -65,11 +65,11 @@ public class NodetemplateDTO {
|
|||||||
this.englishName = englishName;
|
this.englishName = englishName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getTempleteType() {
|
public String getTemplateType() {
|
||||||
return templeteType;
|
return templateType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setTempleteType(String templeteType) {
|
public void setTemplateType(String templateType) {
|
||||||
this.templeteType = templeteType;
|
this.templateType = templateType;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,17 +9,17 @@ import java.util.List;
|
|||||||
public class NodetemplateVO {
|
public class NodetemplateVO {
|
||||||
/** 模版类型,节点模版或者条件判断,例如“node”,precondition“ */
|
/** 模版类型,节点模版或者条件判断,例如“node”,precondition“ */
|
||||||
@ApiModelProperty("模版类型,节点模版或者条件判断,例如“node”,precondition“")
|
@ApiModelProperty("模版类型,节点模版或者条件判断,例如“node”,precondition“")
|
||||||
private String templeteType;
|
private String templateType;
|
||||||
|
|
||||||
@ApiModelProperty("节点模板数据")
|
@ApiModelProperty("节点模板数据")
|
||||||
private List<NodetemplateDTO> dtoList;
|
private List<NodetemplateDTO> dtoList;
|
||||||
|
|
||||||
public String getTempleteType() {
|
public String getTemplateType() {
|
||||||
return templeteType;
|
return templateType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setTempleteType(String templeteType) {
|
public void setTemplateType(String templateType) {
|
||||||
this.templeteType = templeteType;
|
this.templateType = templateType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<NodetemplateDTO> getDtoList() {
|
public List<NodetemplateDTO> getDtoList() {
|
||||||
|
|||||||
@@ -0,0 +1,81 @@
|
|||||||
|
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.service.FireRuleService;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Api("火力规则")
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/api/system/firerule")
|
||||||
|
public class FireRuleController extends BaseController {
|
||||||
|
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private FireRuleService ruleService;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 开始执行规则匹配
|
||||||
|
* @param fireRuleExecuteDTO 敌方参数
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@PostMapping("/start")
|
||||||
|
@ApiOperation("开始执行规则匹配")
|
||||||
|
public AjaxResult execute(@RequestBody FireRuleExecuteDTO fireRuleExecuteDTO){
|
||||||
|
return success(ruleService.execute(fireRuleExecuteDTO));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取所有武器平台和组件
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/weapon")
|
||||||
|
@ApiOperation("获取所有武器平台和组件")
|
||||||
|
public AjaxResult getPlatformComponentNames(){
|
||||||
|
return success(ruleService.getPlatformComponentNames());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取通信组件的所有平台和组件
|
||||||
|
* @param scenarioId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/comm")
|
||||||
|
@ApiOperation("获取通信组件的所有平台和组件")
|
||||||
|
public AjaxResult getCommPlatformComponentNames(Integer scenarioId){
|
||||||
|
return success(ruleService.getCommPlatformComponentNames(scenarioId));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据场景id获取所有平台及其组件
|
||||||
|
* @param scenarioId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/platforms/{scenarioId}")
|
||||||
|
public AjaxResult platformsScenarioId(@PathVariable Integer scenarioId){
|
||||||
|
return success(ruleService.findPlatformComponents(scenarioId));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/platforms")
|
||||||
|
public AjaxResult platforms(){
|
||||||
|
return success(ruleService.findAllPlatformComponents());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据平台id获取平台下所有组件
|
||||||
|
* @param platformId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/component/{platformId}")
|
||||||
|
@ApiOperation("根据平台id获取平台下所有组件")
|
||||||
|
public AjaxResult getComponents(@PathVariable Integer platformId){
|
||||||
|
return success(ruleService.getComponents(platformId));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
package com.solution.web.controller.rule;
|
||||||
|
|
||||||
|
import com.solution.common.annotation.Log;
|
||||||
|
import com.solution.common.core.controller.BaseController;
|
||||||
|
import com.solution.common.core.domain.AjaxResult;
|
||||||
|
import com.solution.common.core.page.TableDataInfo;
|
||||||
|
import com.solution.common.enums.BusinessType;
|
||||||
|
import com.solution.rule.domain.Rule;
|
||||||
|
import com.solution.rule.service.IRuleService;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Api("红蓝对抗规则管理")
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/api/system/rule")
|
||||||
|
public class RuleController extends BaseController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IRuleService ruleService;
|
||||||
|
|
||||||
|
@PreAuthorize("@ss.hasPermi('system:rule:list')")
|
||||||
|
@GetMapping("/list")
|
||||||
|
@ApiOperation("查询规则列表")
|
||||||
|
public TableDataInfo list(Rule rule) {
|
||||||
|
startPage();
|
||||||
|
List<Rule> list = ruleService.selectRuleList(rule);
|
||||||
|
return getDataTable(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PreAuthorize("@ss.hasPermi('system:rule:query')")
|
||||||
|
@GetMapping("/{id}")
|
||||||
|
@ApiOperation("获取规则详情")
|
||||||
|
public AjaxResult getInfo(@PathVariable Integer id) {
|
||||||
|
return success(ruleService.selectRuleById(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PreAuthorize("@ss.hasPermi('system:rule:add')")
|
||||||
|
@Log(title = "规则管理", businessType = BusinessType.INSERT)
|
||||||
|
@PostMapping
|
||||||
|
@ApiOperation("新增规则")
|
||||||
|
public AjaxResult add(@RequestBody Rule rule) {
|
||||||
|
return toAjax(ruleService.insertRule(rule));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PreAuthorize("@ss.hasPermi('system:rule:edit')")
|
||||||
|
@Log(title = "规则管理", businessType = BusinessType.UPDATE)
|
||||||
|
@PutMapping
|
||||||
|
@ApiOperation("修改规则")
|
||||||
|
public AjaxResult edit(@RequestBody Rule rule) {
|
||||||
|
return toAjax(ruleService.updateRule(rule));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PreAuthorize("@ss.hasPermi('system:rule:remove')")
|
||||||
|
@Log(title = "规则管理", businessType = BusinessType.DELETE)
|
||||||
|
@DeleteMapping("/{ids}")
|
||||||
|
@ApiOperation("删除规则")
|
||||||
|
public AjaxResult remove(@PathVariable Integer[] ids) {
|
||||||
|
return toAjax(ruleService.deleteRuleByIds(ids));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,174 @@
|
|||||||
|
package com.solution.web.core;
|
||||||
|
/*
|
||||||
|
* This file is part of the kernelstudio package.
|
||||||
|
*
|
||||||
|
* (c) 2014-2026 zlin <admin@kernelstudio.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE file
|
||||||
|
* that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.DeserializationFeature;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.solution.system.domain.*;
|
||||||
|
import com.solution.system.service.IBehaviortreeService;
|
||||||
|
import com.solution.system.service.INodeconnectionService;
|
||||||
|
import com.solution.system.service.INodeparameterService;
|
||||||
|
import com.solution.system.service.ITreenodeinstanceService;
|
||||||
|
import com.solution.web.core.graph.Graph;
|
||||||
|
import com.solution.web.core.graph.GraphEdge;
|
||||||
|
import com.solution.web.core.graph.GraphNode;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class BehaviortreeProcessor {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IBehaviortreeService behaviortreeService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ITreenodeinstanceService treenodeinstanceService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private INodeparameterService nodeparameterService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private INodeconnectionService nodeconnectionService;
|
||||||
|
|
||||||
|
private ObjectMapper objectMapper = createObjectMapper();
|
||||||
|
|
||||||
|
public static ObjectMapper createObjectMapper() {
|
||||||
|
ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
||||||
|
return objectMapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int create(Behaviortree behaviortree) {
|
||||||
|
int result = behaviortreeService.insertBehaviortree(behaviortree);
|
||||||
|
processGraph(behaviortree);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int update(Behaviortree behaviortree) {
|
||||||
|
int result = behaviortreeService.updateBehaviortree(behaviortree);
|
||||||
|
|
||||||
|
// 删除节点实例
|
||||||
|
treenodeinstanceService.deleteByTreeId(behaviortree.getId());
|
||||||
|
|
||||||
|
// 删除参数
|
||||||
|
nodeparameterService.deleteByTreeId(behaviortree.getId());
|
||||||
|
|
||||||
|
// 删除连线
|
||||||
|
nodeconnectionService.deleteByTreeId(behaviortree.getId());
|
||||||
|
|
||||||
|
processGraph(behaviortree);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processGraph(Behaviortree behaviortree) {
|
||||||
|
|
||||||
|
Graph graph = null;
|
||||||
|
try {
|
||||||
|
graph = objectMapper.readValue(behaviortree.getXmlContent(), Graph.class);
|
||||||
|
} catch (Exception e) {
|
||||||
|
// skip
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (null == graph) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入节点 treenodeinstance
|
||||||
|
Map<String, Treenodeinstance> instanceKeyMap = new HashMap<>();
|
||||||
|
Map<String, Long> nodeKeyIndexMap = new HashMap<>();
|
||||||
|
Map<String,GraphNode> nodesMap = new HashMap<>();
|
||||||
|
if (graph.hasNodes()) {
|
||||||
|
Long index = 0L;
|
||||||
|
for (GraphNode node : graph.getNodes()) {
|
||||||
|
nodesMap.put(node.getKey(), node);
|
||||||
|
|
||||||
|
Treenodeinstance instance = createNodeInstance(behaviortree, node);
|
||||||
|
treenodeinstanceService.insertTreenodeinstance(instance);
|
||||||
|
instanceKeyMap.put(node.getKey(), instance);
|
||||||
|
|
||||||
|
if (node.hasParameters()) {
|
||||||
|
// 插入parameter nodeparameter
|
||||||
|
for (Templateparameterdef parameter : node.getParameters()) {
|
||||||
|
Nodeparameter nodeparameter = createNodeParameter(behaviortree, parameter, instance);
|
||||||
|
nodeparameterService.insertNodeparameter(nodeparameter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
nodeKeyIndexMap.put(node.getKey(), index);
|
||||||
|
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入连线 nodeconnection
|
||||||
|
if (graph.hasEdges()) {
|
||||||
|
for (GraphEdge edge : graph.getEdges()) {
|
||||||
|
Nodeconnection connection = createConnection(behaviortree, edge, nodesMap, instanceKeyMap, nodeKeyIndexMap);
|
||||||
|
nodeconnectionService.insertNodeconnection(connection);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Nodeconnection createConnection(Behaviortree behaviortree, GraphEdge edge,
|
||||||
|
Map<String,GraphNode> nodesMap,
|
||||||
|
Map<String, Treenodeinstance> instanceKeyMap,
|
||||||
|
Map<String, Long> nodeKeyIndexMap) {
|
||||||
|
Nodeconnection connection = new Nodeconnection();
|
||||||
|
Long orderIndex = 0L;
|
||||||
|
connection.setTreeId(behaviortree.getId());
|
||||||
|
if (null != instanceKeyMap.get(edge.getSource().getCell())) {
|
||||||
|
Treenodeinstance parent = instanceKeyMap.get(edge.getSource().getCell());
|
||||||
|
connection.setParentNodeId(parent.getId());
|
||||||
|
}
|
||||||
|
if (null != instanceKeyMap.get(edge.getTarget().getCell())) {
|
||||||
|
Treenodeinstance children = instanceKeyMap.get(edge.getTarget().getCell());
|
||||||
|
connection.setChildNodeId(children.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (null != nodesMap.get(edge.getTarget().getCell())) {
|
||||||
|
orderIndex = nodesMap.get(edge.getTarget().getCell()).getOrder();
|
||||||
|
}
|
||||||
|
if(null == orderIndex){
|
||||||
|
orderIndex = 0L;
|
||||||
|
}
|
||||||
|
// if (null != nodeKeyIndexMap.get(edge.getSource().getCell())) {
|
||||||
|
// connection.setOrderIndex(nodeKeyIndexMap.get(edge.getSource().getCell()));
|
||||||
|
// }
|
||||||
|
connection.setOrderIndex(orderIndex);
|
||||||
|
return connection;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Nodeparameter createNodeParameter(Behaviortree behaviortree, Templateparameterdef parameter,
|
||||||
|
Treenodeinstance instance) {
|
||||||
|
Nodeparameter nodeparameter = new Nodeparameter();
|
||||||
|
nodeparameter.setTreeId(behaviortree.getId());
|
||||||
|
nodeparameter.setNodeInstanceId(instance.getId());
|
||||||
|
nodeparameter.setParamDefId(parameter.getId());
|
||||||
|
nodeparameter.setValue(parameter.getDefaultValue());
|
||||||
|
return nodeparameter;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Treenodeinstance createNodeInstance(Behaviortree behaviortree, GraphNode node) {
|
||||||
|
Treenodeinstance instance = new Treenodeinstance();
|
||||||
|
instance.setTreeId(behaviortree.getId());
|
||||||
|
instance.setTemplateId((long) node.getTemplate());
|
||||||
|
instance.setInstanceName(node.getName());
|
||||||
|
instance.setIsRoot((long) (node.isRoot() ? 1 : 0));
|
||||||
|
if ("precondition".equalsIgnoreCase(node.getTemplateType())) {
|
||||||
|
instance.setPreconditionTempleteId((long) node.getTemplate());
|
||||||
|
}
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
package com.solution.web.core.graph;
|
||||||
|
/*
|
||||||
|
* This file is part of the kernelstudio package.
|
||||||
|
*
|
||||||
|
* (c) 2014-2026 zlin <admin@kernelstudio.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE file
|
||||||
|
* that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Graph implements Serializable {
|
||||||
|
|
||||||
|
private List<GraphNode> nodes;
|
||||||
|
|
||||||
|
private List<GraphEdge> edges;
|
||||||
|
|
||||||
|
public boolean hasNodes() {
|
||||||
|
return nodes != null && !nodes.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasEdges() {
|
||||||
|
return edges != null && !edges.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Graph{" +
|
||||||
|
"nodes=" + nodes +
|
||||||
|
", edges=" + edges +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<GraphNode> getNodes() {
|
||||||
|
return nodes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNodes(List<GraphNode> nodes) {
|
||||||
|
this.nodes = nodes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<GraphEdge> getEdges() {
|
||||||
|
return edges;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEdges(List<GraphEdge> edges) {
|
||||||
|
this.edges = edges;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
package com.solution.web.core.graph;
|
||||||
|
/*
|
||||||
|
* This file is part of the kernelstudio package.
|
||||||
|
*
|
||||||
|
* (c) 2014-2026 zlin <admin@kernelstudio.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE file
|
||||||
|
* that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
public class GraphEdge implements Serializable {
|
||||||
|
|
||||||
|
private String key;
|
||||||
|
|
||||||
|
private Line source;
|
||||||
|
|
||||||
|
private Line target;
|
||||||
|
|
||||||
|
public boolean hasSource() {
|
||||||
|
return source != null && StringUtils.hasText(source.cell);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasTarget() {
|
||||||
|
return target != null && StringUtils.hasText(target.cell);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Line implements Serializable {
|
||||||
|
|
||||||
|
private String cell;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Line{" +
|
||||||
|
"cell='" + cell + '\'' +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCell() {
|
||||||
|
return cell;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCell(String cell) {
|
||||||
|
this.cell = cell;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "GraphEdge{" +
|
||||||
|
"key='" + key + '\'' +
|
||||||
|
", source='" + source + '\'' +
|
||||||
|
", target='" + target + '\'' +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getKey() {
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setKey(String key) {
|
||||||
|
this.key = key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Line getSource() {
|
||||||
|
return source;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSource(Line source) {
|
||||||
|
this.source = source;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Line getTarget() {
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTarget(Line target) {
|
||||||
|
this.target = target;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,152 @@
|
|||||||
|
package com.solution.web.core.graph;
|
||||||
|
/*
|
||||||
|
* This file is part of the kernelstudio package.
|
||||||
|
*
|
||||||
|
* (c) 2014-2026 zlin <admin@kernelstudio.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE file
|
||||||
|
* that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import com.solution.system.domain.Templateparameterdef;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class GraphNode implements Serializable {
|
||||||
|
|
||||||
|
private int id;
|
||||||
|
|
||||||
|
private int template;
|
||||||
|
|
||||||
|
private String templateType;
|
||||||
|
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
private Long order;
|
||||||
|
|
||||||
|
private String key;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
private String category;
|
||||||
|
|
||||||
|
private List<Templateparameterdef> parameters;
|
||||||
|
|
||||||
|
private List<GraphVariable> variables;
|
||||||
|
|
||||||
|
public boolean hasParameters() {
|
||||||
|
return parameters != null && !parameters.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasVariables() {
|
||||||
|
return variables != null && !variables.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isRoot() {
|
||||||
|
return "root".equalsIgnoreCase(this.category);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "GraphNode{" +
|
||||||
|
"id=" + id +
|
||||||
|
", key='" + key + '\'' +
|
||||||
|
", name='" + name + '\'' +
|
||||||
|
", description='" + description + '\'' +
|
||||||
|
", parameters=" + parameters +
|
||||||
|
", variables=" + variables +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCategory() {
|
||||||
|
return category;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCategory(String category) {
|
||||||
|
this.category = category;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTemplateType() {
|
||||||
|
return templateType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTemplateType(String templateType) {
|
||||||
|
this.templateType = templateType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(int id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getTemplate() {
|
||||||
|
return template;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTemplate(int template) {
|
||||||
|
this.template = template;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(String type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getKey() {
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setKey(String key) {
|
||||||
|
this.key = key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDescription(String description) {
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Templateparameterdef> getParameters() {
|
||||||
|
return parameters;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setParameters(List<Templateparameterdef> parameters) {
|
||||||
|
this.parameters = parameters;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<GraphVariable> getVariables() {
|
||||||
|
return variables;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setVariables(List<GraphVariable> variables) {
|
||||||
|
this.variables = variables;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getOrder() {
|
||||||
|
return order;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOrder(Long order) {
|
||||||
|
this.order = order;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
package com.solution.web.core.graph;
|
||||||
|
/*
|
||||||
|
* This file is part of the kernelstudio package.
|
||||||
|
*
|
||||||
|
* (c) 2014-2026 zlin <admin@kernelstudio.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE file
|
||||||
|
* that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
public class GraphVariable implements Serializable {
|
||||||
|
|
||||||
|
private String key;
|
||||||
|
|
||||||
|
private String value;
|
||||||
|
|
||||||
|
private String defaults;
|
||||||
|
|
||||||
|
private String unit;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "GraphVariable{" +
|
||||||
|
"key='" + key + '\'' +
|
||||||
|
", value='" + value + '\'' +
|
||||||
|
", defaults='" + defaults + '\'' +
|
||||||
|
", unit='" + unit + '\'' +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getKey() {
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setKey(String key) {
|
||||||
|
this.key = key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(String value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDefaults() {
|
||||||
|
return defaults;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDefaults(String defaults) {
|
||||||
|
this.defaults = defaults;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUnit() {
|
||||||
|
return unit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUnit(String unit) {
|
||||||
|
this.unit = unit;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -6,9 +6,11 @@ spring:
|
|||||||
druid:
|
druid:
|
||||||
# 主库数据源
|
# 主库数据源
|
||||||
master:
|
master:
|
||||||
url: jdbc:mysql://192.168.166.71:3306/behaviortreedb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
# url: jdbc:mysql://192.168.166.71:3306/behaviortreedb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
||||||
|
url: jdbc:mysql://localhost:3306/autosolution_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
||||||
username: root
|
username: root
|
||||||
password: 123456
|
# password: 123456
|
||||||
|
password: 1234
|
||||||
# 从库数据源
|
# 从库数据源
|
||||||
slave:
|
slave:
|
||||||
# 从数据源开关/默认关闭
|
# 从数据源开关/默认关闭
|
||||||
|
|||||||
@@ -67,13 +67,15 @@ spring:
|
|||||||
# redis 配置
|
# redis 配置
|
||||||
redis:
|
redis:
|
||||||
# 地址
|
# 地址
|
||||||
host: 192.168.166.71
|
# host: 192.168.166.71
|
||||||
|
host: 127.0.0.1
|
||||||
# 端口,默认为6379
|
# 端口,默认为6379
|
||||||
port: 6379
|
port: 6379
|
||||||
# 数据库索引
|
# 数据库索引
|
||||||
database: 0
|
database: 0
|
||||||
# 密码
|
# 密码
|
||||||
password:
|
# password:
|
||||||
|
password: 123456
|
||||||
# 连接超时时间
|
# 连接超时时间
|
||||||
timeout: 10s
|
timeout: 10s
|
||||||
lettuce:
|
lettuce:
|
||||||
@@ -104,6 +106,8 @@ mybatis:
|
|||||||
mapperLocations: classpath*:mapper/**/*Mapper.xml
|
mapperLocations: classpath*:mapper/**/*Mapper.xml
|
||||||
# 加载全局的配置文件
|
# 加载全局的配置文件
|
||||||
configLocation: classpath:mybatis/mybatis-config.xml
|
configLocation: classpath:mybatis/mybatis-config.xml
|
||||||
|
configuration:
|
||||||
|
map-underscore-to-camel-case: true
|
||||||
|
|
||||||
# PageHelper分页插件
|
# PageHelper分页插件
|
||||||
pagehelper:
|
pagehelper:
|
||||||
|
|||||||
@@ -0,0 +1,89 @@
|
|||||||
|
package com.solution.algo;
|
||||||
|
/*
|
||||||
|
* This file is part of the kernelstudio package.
|
||||||
|
*
|
||||||
|
* (c) 2014-2026 zlin <admin@kernelstudio.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE file
|
||||||
|
* that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.fasterxml.jackson.databind.type.CollectionType;
|
||||||
|
import com.solution.algo.domain.AlgorithmConfig;
|
||||||
|
import org.apache.ibatis.type.*;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
import java.sql.CallableStatement;
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@MappedTypes(List.class)
|
||||||
|
@MappedJdbcTypes({
|
||||||
|
JdbcType.VARCHAR,
|
||||||
|
JdbcType.BLOB
|
||||||
|
})
|
||||||
|
public class AlgorithmConfigTypeHandler extends BaseTypeHandler<List<AlgorithmConfig>>
|
||||||
|
implements TypeHandler<List<AlgorithmConfig>> {
|
||||||
|
|
||||||
|
private final Logger logger = LoggerFactory.getLogger(getClass());
|
||||||
|
|
||||||
|
private final ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
|
||||||
|
private final CollectionType collectionType = objectMapper.getTypeFactory()
|
||||||
|
.constructCollectionType(List.class, AlgorithmConfig.class);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setNonNullParameter(PreparedStatement ps, int i, List<AlgorithmConfig> parameter, JdbcType jdbcType)
|
||||||
|
throws SQLException {
|
||||||
|
ps.setString(i, serialize(parameter));
|
||||||
|
}
|
||||||
|
|
||||||
|
public String serialize(List<AlgorithmConfig> indicatorConfig) {
|
||||||
|
if (null != indicatorConfig) {
|
||||||
|
try {
|
||||||
|
return objectMapper.writeValueAsString(indicatorConfig);
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error("Can not serialize", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<AlgorithmConfig> deserialize(String config) throws SQLException {
|
||||||
|
if (StringUtils.hasText(config)) {
|
||||||
|
try {
|
||||||
|
return objectMapper.readValue(config, collectionType);
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error("Can not deserialize", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<AlgorithmConfig> getNullableResult(ResultSet rs, String columnName) throws SQLException {
|
||||||
|
String jsonValue = rs.getString(columnName);
|
||||||
|
return deserialize(jsonValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<AlgorithmConfig> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
|
||||||
|
String jsonValue = rs.getString(columnIndex);
|
||||||
|
return deserialize(jsonValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<AlgorithmConfig> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
|
||||||
|
String jsonValue = cs.getString(columnIndex);
|
||||||
|
return deserialize(jsonValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,137 @@
|
|||||||
|
package com.solution.algo.domain;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||||
|
import org.apache.commons.lang3.builder.ToStringStyle;
|
||||||
|
import com.solution.common.annotation.Excel;
|
||||||
|
import com.solution.common.core.domain.BaseEntity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 规则对象 algorithm
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
* @date 2026-02-06
|
||||||
|
*/
|
||||||
|
public class Algorithm
|
||||||
|
{
|
||||||
|
|
||||||
|
/** */
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/** 算法名称 */
|
||||||
|
@Excel(name = "算法名称")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/** 业务类型 */
|
||||||
|
@Excel(name = "业务类型")
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
/** 算法文件路径 */
|
||||||
|
@Excel(name = "算法文件路径")
|
||||||
|
private String codePath;
|
||||||
|
|
||||||
|
/** 算法描述 */
|
||||||
|
@Excel(name = "算法描述")
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
/** 算法配置 */
|
||||||
|
@Excel(name = "算法配置")
|
||||||
|
private String algoConfig;
|
||||||
|
|
||||||
|
/** 算法配置 */
|
||||||
|
private List<AlgorithmConfig> algoConfigList;
|
||||||
|
|
||||||
|
/** 算法参数定义信息 */
|
||||||
|
private List<AlgorithmParam> algorithmParamList;
|
||||||
|
|
||||||
|
public void setId(Long id)
|
||||||
|
{
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getId()
|
||||||
|
{
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name)
|
||||||
|
{
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName()
|
||||||
|
{
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(String type)
|
||||||
|
{
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getType()
|
||||||
|
{
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCodePath(String codePath)
|
||||||
|
{
|
||||||
|
this.codePath = codePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCodePath()
|
||||||
|
{
|
||||||
|
return codePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDescription(String description)
|
||||||
|
{
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription()
|
||||||
|
{
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAlgoConfig(String algoConfig)
|
||||||
|
{
|
||||||
|
this.algoConfig = algoConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAlgoConfig()
|
||||||
|
{
|
||||||
|
return algoConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<AlgorithmParam> getAlgorithmParamList()
|
||||||
|
{
|
||||||
|
return algorithmParamList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAlgorithmParamList(List<AlgorithmParam> algorithmParamList)
|
||||||
|
{
|
||||||
|
this.algorithmParamList = algorithmParamList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<AlgorithmConfig> getAlgoConfigList() {
|
||||||
|
return algoConfigList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAlgoConfigList(List<AlgorithmConfig> algoConfigList) {
|
||||||
|
this.algoConfigList = algoConfigList;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
||||||
|
.append("id", getId())
|
||||||
|
.append("name", getName())
|
||||||
|
.append("type", getType())
|
||||||
|
.append("codePath", getCodePath())
|
||||||
|
.append("description", getDescription())
|
||||||
|
.append("algoConfig", getAlgoConfig())
|
||||||
|
.append("algorithmParamList", getAlgorithmParamList())
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
package com.solution.algo.domain;
|
||||||
|
/*
|
||||||
|
* This file is part of the kernelstudio package.
|
||||||
|
*
|
||||||
|
* (c) 2014-2026 zlin <admin@kernelstudio.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE file
|
||||||
|
* that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
public class AlgorithmConfig implements Serializable {
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private String operation;
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOperation() {
|
||||||
|
return operation;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOperation(String operation) {
|
||||||
|
this.operation = operation;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,92 @@
|
|||||||
|
package com.solution.algo.domain;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||||
|
import org.apache.commons.lang3.builder.ToStringStyle;
|
||||||
|
import com.solution.common.annotation.Excel;
|
||||||
|
import com.solution.common.core.domain.BaseEntity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 算法参数定义对象 algorithm_param
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
* @date 2026-02-06
|
||||||
|
*/
|
||||||
|
public class AlgorithmParam
|
||||||
|
{
|
||||||
|
|
||||||
|
/** $column.columnComment */
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/** 算法ID */
|
||||||
|
@Excel(name = "算法ID")
|
||||||
|
private Long algorithmId;
|
||||||
|
|
||||||
|
/** 参数名 */
|
||||||
|
@Excel(name = "参数名")
|
||||||
|
private String paramName;
|
||||||
|
|
||||||
|
/** 默认值 */
|
||||||
|
@Excel(name = "默认值")
|
||||||
|
private String defaultValue;
|
||||||
|
|
||||||
|
/** 描述 */
|
||||||
|
@Excel(name = "描述")
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
public void setId(Long id)
|
||||||
|
{
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getId()
|
||||||
|
{
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
public void setAlgorithmId(Long algorithmId)
|
||||||
|
{
|
||||||
|
this.algorithmId = algorithmId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getAlgorithmId()
|
||||||
|
{
|
||||||
|
return algorithmId;
|
||||||
|
}
|
||||||
|
public void setParamName(String paramName)
|
||||||
|
{
|
||||||
|
this.paramName = paramName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getParamName()
|
||||||
|
{
|
||||||
|
return paramName;
|
||||||
|
}
|
||||||
|
public void setDefaultValue(String defaultValue)
|
||||||
|
{
|
||||||
|
this.defaultValue = defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDefaultValue()
|
||||||
|
{
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
public void setDescription(String description)
|
||||||
|
{
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription()
|
||||||
|
{
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
||||||
|
.append("id", getId())
|
||||||
|
.append("algorithmId", getAlgorithmId())
|
||||||
|
.append("paramName", getParamName())
|
||||||
|
.append("defaultValue", getDefaultValue())
|
||||||
|
.append("description", getDescription())
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,176 +0,0 @@
|
|||||||
package com.solution.algo.domain;
|
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
|
||||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
|
||||||
import org.apache.commons.lang3.builder.ToStringStyle;
|
|
||||||
import com.solution.common.annotation.Excel;
|
|
||||||
import com.solution.common.core.domain.BaseEntity;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 动态规则配置对象 sys_algo_config
|
|
||||||
*
|
|
||||||
* @author zouju
|
|
||||||
* @date 2026-02-05
|
|
||||||
*/
|
|
||||||
public class SysAlgoConfig extends BaseEntity
|
|
||||||
{
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
/** 主键ID */
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
/** 算法唯一标识(Type),用于接口路由 */
|
|
||||||
@Excel(name = "算法唯一标识(Type),用于接口路由")
|
|
||||||
private String algoType;
|
|
||||||
|
|
||||||
/** 算法名称,后台展示用 */
|
|
||||||
@Excel(name = "算法名称,后台展示用")
|
|
||||||
private String algoName;
|
|
||||||
|
|
||||||
/** 执行引擎类型: GROOVY, PYTHON, JS, LUA等 */
|
|
||||||
@Excel(name = "执行引擎类型: GROOVY, PYTHON, JS, LUA等")
|
|
||||||
private String engineType;
|
|
||||||
|
|
||||||
/** 参数定义模型(JSON Schema),用于自动校验入参 */
|
|
||||||
@Excel(name = "参数定义模型(JSON Schema),用于自动校验入参")
|
|
||||||
private String inputSchema;
|
|
||||||
|
|
||||||
/** 算法脚本代码或规则表达式 */
|
|
||||||
@Excel(name = "算法脚本代码或规则表达式")
|
|
||||||
private String scriptContent;
|
|
||||||
|
|
||||||
/** 算法描述 */
|
|
||||||
@Excel(name = "算法描述")
|
|
||||||
private String description;
|
|
||||||
|
|
||||||
/** 状态: 1-启用, 0-禁用 */
|
|
||||||
@Excel(name = "状态: 1-启用, 0-禁用")
|
|
||||||
private Long status;
|
|
||||||
|
|
||||||
/** 创建时间 */
|
|
||||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
|
||||||
@Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
|
|
||||||
private Date createdAt;
|
|
||||||
|
|
||||||
/** 更新时间 */
|
|
||||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
|
||||||
@Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd")
|
|
||||||
private Date updatedAt;
|
|
||||||
|
|
||||||
public void setId(Long id)
|
|
||||||
{
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getId()
|
|
||||||
{
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setAlgoType(String algoType)
|
|
||||||
{
|
|
||||||
this.algoType = algoType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getAlgoType()
|
|
||||||
{
|
|
||||||
return algoType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setAlgoName(String algoName)
|
|
||||||
{
|
|
||||||
this.algoName = algoName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getAlgoName()
|
|
||||||
{
|
|
||||||
return algoName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setEngineType(String engineType)
|
|
||||||
{
|
|
||||||
this.engineType = engineType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getEngineType()
|
|
||||||
{
|
|
||||||
return engineType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setInputSchema(String inputSchema)
|
|
||||||
{
|
|
||||||
this.inputSchema = inputSchema;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getInputSchema()
|
|
||||||
{
|
|
||||||
return inputSchema;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setScriptContent(String scriptContent)
|
|
||||||
{
|
|
||||||
this.scriptContent = scriptContent;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getScriptContent()
|
|
||||||
{
|
|
||||||
return scriptContent;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDescription(String description)
|
|
||||||
{
|
|
||||||
this.description = description;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDescription()
|
|
||||||
{
|
|
||||||
return description;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStatus(Long status)
|
|
||||||
{
|
|
||||||
this.status = status;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getStatus()
|
|
||||||
{
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCreatedAt(Date createdAt)
|
|
||||||
{
|
|
||||||
this.createdAt = createdAt;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getCreatedAt()
|
|
||||||
{
|
|
||||||
return createdAt;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUpdatedAt(Date updatedAt)
|
|
||||||
{
|
|
||||||
this.updatedAt = updatedAt;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getUpdatedAt()
|
|
||||||
{
|
|
||||||
return updatedAt;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
|
||||||
.append("id", getId())
|
|
||||||
.append("algoType", getAlgoType())
|
|
||||||
.append("algoName", getAlgoName())
|
|
||||||
.append("engineType", getEngineType())
|
|
||||||
.append("inputSchema", getInputSchema())
|
|
||||||
.append("scriptContent", getScriptContent())
|
|
||||||
.append("description", getDescription())
|
|
||||||
.append("status", getStatus())
|
|
||||||
.append("createdAt", getCreatedAt())
|
|
||||||
.append("updatedAt", getUpdatedAt())
|
|
||||||
.toString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
package com.solution.algo.mapper;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import com.solution.algo.domain.Algorithm;
|
||||||
|
import com.solution.algo.domain.AlgorithmParam;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 规则Mapper接口
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
* @date 2026-02-06
|
||||||
|
*/
|
||||||
|
public interface AlgorithmMapper
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 查询规则
|
||||||
|
*
|
||||||
|
* @param id 规则主键
|
||||||
|
* @return 规则
|
||||||
|
*/
|
||||||
|
public Algorithm selectAlgorithmById(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询规则列表
|
||||||
|
*
|
||||||
|
* @param algorithm 规则
|
||||||
|
* @return 规则集合
|
||||||
|
*/
|
||||||
|
public List<Algorithm> selectAlgorithmList(Algorithm algorithm);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增规则
|
||||||
|
*
|
||||||
|
* @param algorithm 规则
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
public int insertAlgorithm(Algorithm algorithm);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改规则
|
||||||
|
*
|
||||||
|
* @param algorithm 规则
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
public int updateAlgorithm(Algorithm algorithm);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除规则
|
||||||
|
*
|
||||||
|
* @param id 规则主键
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
public int deleteAlgorithmById(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除规则
|
||||||
|
*
|
||||||
|
* @param ids 需要删除的数据主键集合
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
public int deleteAlgorithmByIds(Long[] ids);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除算法参数定义
|
||||||
|
*
|
||||||
|
* @param ids 需要删除的数据主键集合
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
public int deleteAlgorithmParamByAlgorithmIds(Long[] ids);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量新增算法参数定义
|
||||||
|
*
|
||||||
|
* @param algorithmParamList 算法参数定义列表
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
public int batchAlgorithmParam(List<AlgorithmParam> algorithmParamList);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过规则主键删除算法参数定义信息
|
||||||
|
*
|
||||||
|
* @param id 规则ID
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
public int deleteAlgorithmParamByAlgorithmId(Long id);
|
||||||
|
}
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
package com.solution.algo.mapper;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import com.solution.algo.domain.SysAlgoConfig;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 动态规则配置Mapper接口
|
|
||||||
*
|
|
||||||
* @author zouju
|
|
||||||
* @date 2026-02-05
|
|
||||||
*/
|
|
||||||
public interface SysAlgoConfigMapper
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* 查询动态规则配置
|
|
||||||
*
|
|
||||||
* @param id 动态规则配置主键
|
|
||||||
* @return 动态规则配置
|
|
||||||
*/
|
|
||||||
public SysAlgoConfig selectSysAlgoConfigById(Long id);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询动态规则配置列表
|
|
||||||
*
|
|
||||||
* @param sysAlgoConfig 动态规则配置
|
|
||||||
* @return 动态规则配置集合
|
|
||||||
*/
|
|
||||||
public List<SysAlgoConfig> selectSysAlgoConfigList(SysAlgoConfig sysAlgoConfig);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 新增动态规则配置
|
|
||||||
*
|
|
||||||
* @param sysAlgoConfig 动态规则配置
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
public int insertSysAlgoConfig(SysAlgoConfig sysAlgoConfig);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改动态规则配置
|
|
||||||
*
|
|
||||||
* @param sysAlgoConfig 动态规则配置
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
public int updateSysAlgoConfig(SysAlgoConfig sysAlgoConfig);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除动态规则配置
|
|
||||||
*
|
|
||||||
* @param id 动态规则配置主键
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
public int deleteSysAlgoConfigById(Long id);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 批量删除动态规则配置
|
|
||||||
*
|
|
||||||
* @param ids 需要删除的数据主键集合
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
public int deleteSysAlgoConfigByIds(Long[] ids);
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
package com.solution.algo.service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import com.solution.algo.domain.Algorithm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 规则Service接口
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
* @date 2026-02-06
|
||||||
|
*/
|
||||||
|
public interface IAlgorithmService
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 查询规则
|
||||||
|
*
|
||||||
|
* @param id 规则主键
|
||||||
|
* @return 规则
|
||||||
|
*/
|
||||||
|
public Algorithm selectAlgorithmById(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询规则列表
|
||||||
|
*
|
||||||
|
* @param algorithm 规则
|
||||||
|
* @return 规则集合
|
||||||
|
*/
|
||||||
|
public List<Algorithm> selectAlgorithmList(Algorithm algorithm);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增规则
|
||||||
|
*
|
||||||
|
* @param algorithm 规则
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
public int insertAlgorithm(Algorithm algorithm);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改规则
|
||||||
|
*
|
||||||
|
* @param algorithm 规则
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
public int updateAlgorithm(Algorithm algorithm);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除规则
|
||||||
|
*
|
||||||
|
* @param ids 需要删除的规则主键集合
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
public int deleteAlgorithmByIds(Long[] ids);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除规则信息
|
||||||
|
*
|
||||||
|
* @param id 规则主键
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
public int deleteAlgorithmById(Long id);
|
||||||
|
}
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
package com.solution.algo.service;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import com.solution.algo.domain.SysAlgoConfig;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 动态规则配置Service接口
|
|
||||||
*
|
|
||||||
* @author zouju
|
|
||||||
* @date 2026-02-05
|
|
||||||
*/
|
|
||||||
public interface ISysAlgoConfigService
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* 查询动态规则配置
|
|
||||||
*
|
|
||||||
* @param id 动态规则配置主键
|
|
||||||
* @return 动态规则配置
|
|
||||||
*/
|
|
||||||
public SysAlgoConfig selectSysAlgoConfigById(Long id);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询动态规则配置列表
|
|
||||||
*
|
|
||||||
* @param sysAlgoConfig 动态规则配置
|
|
||||||
* @return 动态规则配置集合
|
|
||||||
*/
|
|
||||||
public List<SysAlgoConfig> selectSysAlgoConfigList(SysAlgoConfig sysAlgoConfig);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 新增动态规则配置
|
|
||||||
*
|
|
||||||
* @param sysAlgoConfig 动态规则配置
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
public int insertSysAlgoConfig(SysAlgoConfig sysAlgoConfig);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改动态规则配置
|
|
||||||
*
|
|
||||||
* @param sysAlgoConfig 动态规则配置
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
public int updateSysAlgoConfig(SysAlgoConfig sysAlgoConfig);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 批量删除动态规则配置
|
|
||||||
*
|
|
||||||
* @param ids 需要删除的动态规则配置主键集合
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
public int deleteSysAlgoConfigByIds(Long[] ids);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除动态规则配置信息
|
|
||||||
*
|
|
||||||
* @param id 动态规则配置主键
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
public int deleteSysAlgoConfigById(Long id);
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,131 @@
|
|||||||
|
package com.solution.algo.service.impl;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import com.solution.common.utils.StringUtils;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
import com.solution.algo.domain.AlgorithmParam;
|
||||||
|
import com.solution.algo.mapper.AlgorithmMapper;
|
||||||
|
import com.solution.algo.domain.Algorithm;
|
||||||
|
import com.solution.algo.service.IAlgorithmService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 规则Service业务层处理
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
* @date 2026-02-06
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class AlgorithmServiceImpl implements IAlgorithmService
|
||||||
|
{
|
||||||
|
@Autowired
|
||||||
|
private AlgorithmMapper algorithmMapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询规则
|
||||||
|
*
|
||||||
|
* @param id 规则主键
|
||||||
|
* @return 规则
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Algorithm selectAlgorithmById(Long id)
|
||||||
|
{
|
||||||
|
return algorithmMapper.selectAlgorithmById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询规则列表
|
||||||
|
*
|
||||||
|
* @param algorithm 规则
|
||||||
|
* @return 规则
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<Algorithm> selectAlgorithmList(Algorithm algorithm)
|
||||||
|
{
|
||||||
|
return algorithmMapper.selectAlgorithmList(algorithm);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增规则
|
||||||
|
*
|
||||||
|
* @param algorithm 规则
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
@Transactional
|
||||||
|
@Override
|
||||||
|
public int insertAlgorithm(Algorithm algorithm)
|
||||||
|
{
|
||||||
|
int rows = algorithmMapper.insertAlgorithm(algorithm);
|
||||||
|
insertAlgorithmParam(algorithm);
|
||||||
|
return rows;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改规则
|
||||||
|
*
|
||||||
|
* @param algorithm 规则
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
@Transactional
|
||||||
|
@Override
|
||||||
|
public int updateAlgorithm(Algorithm algorithm)
|
||||||
|
{
|
||||||
|
algorithmMapper.deleteAlgorithmParamByAlgorithmId(algorithm.getId());
|
||||||
|
insertAlgorithmParam(algorithm);
|
||||||
|
return algorithmMapper.updateAlgorithm(algorithm);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除规则
|
||||||
|
*
|
||||||
|
* @param ids 需要删除的规则主键
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
@Transactional
|
||||||
|
@Override
|
||||||
|
public int deleteAlgorithmByIds(Long[] ids)
|
||||||
|
{
|
||||||
|
algorithmMapper.deleteAlgorithmParamByAlgorithmIds(ids);
|
||||||
|
return algorithmMapper.deleteAlgorithmByIds(ids);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除规则信息
|
||||||
|
*
|
||||||
|
* @param id 规则主键
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
@Transactional
|
||||||
|
@Override
|
||||||
|
public int deleteAlgorithmById(Long id)
|
||||||
|
{
|
||||||
|
algorithmMapper.deleteAlgorithmParamByAlgorithmId(id);
|
||||||
|
return algorithmMapper.deleteAlgorithmById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增算法参数定义信息
|
||||||
|
*
|
||||||
|
* @param algorithm 规则对象
|
||||||
|
*/
|
||||||
|
public void insertAlgorithmParam(Algorithm algorithm)
|
||||||
|
{
|
||||||
|
List<AlgorithmParam> algorithmParamList = algorithm.getAlgorithmParamList();
|
||||||
|
Long id = algorithm.getId();
|
||||||
|
if (StringUtils.isNotNull(algorithmParamList))
|
||||||
|
{
|
||||||
|
List<AlgorithmParam> list = new ArrayList<AlgorithmParam>();
|
||||||
|
for (AlgorithmParam algorithmParam : algorithmParamList)
|
||||||
|
{
|
||||||
|
algorithmParam.setAlgorithmId(id);
|
||||||
|
list.add(algorithmParam);
|
||||||
|
}
|
||||||
|
if (list.size() > 0)
|
||||||
|
{
|
||||||
|
algorithmMapper.batchAlgorithmParam(list);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,93 +0,0 @@
|
|||||||
package com.solution.algo.service.impl;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
import com.solution.algo.mapper.SysAlgoConfigMapper;
|
|
||||||
import com.solution.algo.domain.SysAlgoConfig;
|
|
||||||
import com.solution.algo.service.ISysAlgoConfigService;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 动态规则配置Service业务层处理
|
|
||||||
*
|
|
||||||
* @author zouju
|
|
||||||
* @date 2026-02-05
|
|
||||||
*/
|
|
||||||
@Service
|
|
||||||
public class SysAlgoConfigServiceImpl implements ISysAlgoConfigService
|
|
||||||
{
|
|
||||||
@Autowired
|
|
||||||
private SysAlgoConfigMapper sysAlgoConfigMapper;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询动态规则配置
|
|
||||||
*
|
|
||||||
* @param id 动态规则配置主键
|
|
||||||
* @return 动态规则配置
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public SysAlgoConfig selectSysAlgoConfigById(Long id)
|
|
||||||
{
|
|
||||||
return sysAlgoConfigMapper.selectSysAlgoConfigById(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询动态规则配置列表
|
|
||||||
*
|
|
||||||
* @param sysAlgoConfig 动态规则配置
|
|
||||||
* @return 动态规则配置
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public List<SysAlgoConfig> selectSysAlgoConfigList(SysAlgoConfig sysAlgoConfig)
|
|
||||||
{
|
|
||||||
return sysAlgoConfigMapper.selectSysAlgoConfigList(sysAlgoConfig);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 新增动态规则配置
|
|
||||||
*
|
|
||||||
* @param sysAlgoConfig 动态规则配置
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int insertSysAlgoConfig(SysAlgoConfig sysAlgoConfig)
|
|
||||||
{
|
|
||||||
return sysAlgoConfigMapper.insertSysAlgoConfig(sysAlgoConfig);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改动态规则配置
|
|
||||||
*
|
|
||||||
* @param sysAlgoConfig 动态规则配置
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int updateSysAlgoConfig(SysAlgoConfig sysAlgoConfig)
|
|
||||||
{
|
|
||||||
return sysAlgoConfigMapper.updateSysAlgoConfig(sysAlgoConfig);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 批量删除动态规则配置
|
|
||||||
*
|
|
||||||
* @param ids 需要删除的动态规则配置主键
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int deleteSysAlgoConfigByIds(Long[] ids)
|
|
||||||
{
|
|
||||||
return sysAlgoConfigMapper.deleteSysAlgoConfigByIds(ids);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除动态规则配置信息
|
|
||||||
*
|
|
||||||
* @param id 动态规则配置主键
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int deleteSysAlgoConfigById(Long id)
|
|
||||||
{
|
|
||||||
return sysAlgoConfigMapper.deleteSysAlgoConfigById(id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,117 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper
|
||||||
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.solution.algo.mapper.AlgorithmMapper">
|
||||||
|
|
||||||
|
<resultMap type="Algorithm" id="AlgorithmResult">
|
||||||
|
<result property="id" column="id" />
|
||||||
|
<result property="name" column="name" />
|
||||||
|
<result property="type" column="type" />
|
||||||
|
<result property="codePath" column="code_path" />
|
||||||
|
<result property="description" column="description" />
|
||||||
|
<result property="algoConfig" column="algo_config" />
|
||||||
|
<result property="algoConfigList" column="algo_config_list" typeHandler="com.solution.algo.AlgorithmConfigTypeHandler" />
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<resultMap id="AlgorithmAlgorithmParamResult" type="Algorithm" extends="AlgorithmResult">
|
||||||
|
<collection property="algorithmParamList" ofType="AlgorithmParam" column="id" select="selectAlgorithmParamList" />
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<resultMap type="AlgorithmParam" id="AlgorithmParamResult">
|
||||||
|
<result property="id" column="id" />
|
||||||
|
<result property="algorithmId" column="algorithm_id" />
|
||||||
|
<result property="paramName" column="param_name" />
|
||||||
|
<result property="defaultValue" column="default_value" />
|
||||||
|
<result property="description" column="description" />
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<sql id="selectAlgorithmVo">
|
||||||
|
select id, name, type, code_path, description, algo_config, algo_config_list from algorithm
|
||||||
|
</sql>
|
||||||
|
|
||||||
|
<select id="selectAlgorithmList" parameterType="Algorithm" resultMap="AlgorithmAlgorithmParamResult">
|
||||||
|
<include refid="selectAlgorithmVo"/>
|
||||||
|
<where>
|
||||||
|
<if test="name != null and name != ''"> and name like concat('%', #{name}, '%')</if>
|
||||||
|
<if test="type != null and type != ''"> and type = #{type}</if>
|
||||||
|
<if test="codePath != null and codePath != ''"> and code_path = #{codePath}</if>
|
||||||
|
<if test="description != null and description != ''"> and description = #{description}</if>
|
||||||
|
<if test="algoConfig != null and algoConfig != ''"> and algo_config = #{algoConfig}</if>
|
||||||
|
</where>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectAlgorithmById" parameterType="Long" resultMap="AlgorithmAlgorithmParamResult">
|
||||||
|
select id, name, type, code_path, description, algo_config
|
||||||
|
from algorithm
|
||||||
|
where id = #{id}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectAlgorithmParamList" resultMap="AlgorithmParamResult">
|
||||||
|
select id, algorithm_id, param_name, default_value, description
|
||||||
|
from algorithm_param
|
||||||
|
where algorithm_id = #{algorithm_id}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<insert id="insertAlgorithm" parameterType="Algorithm" useGeneratedKeys="true" keyProperty="id">
|
||||||
|
insert into algorithm
|
||||||
|
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||||
|
<if test="name != null and name != ''">name,</if>
|
||||||
|
<if test="type != null and type != ''">type,</if>
|
||||||
|
<if test="codePath != null">code_path,</if>
|
||||||
|
<if test="description != null">description,</if>
|
||||||
|
<if test="algoConfig != null">algo_config,</if>
|
||||||
|
<if test="algoConfigList != null">algo_config_list,</if>
|
||||||
|
</trim>
|
||||||
|
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||||
|
<if test="name != null and name != ''">#{name},</if>
|
||||||
|
<if test="type != null and type != ''">#{type},</if>
|
||||||
|
<if test="codePath != null">#{codePath},</if>
|
||||||
|
<if test="description != null">#{description},</if>
|
||||||
|
<if test="algoConfig != null">#{algoConfig},</if>
|
||||||
|
<if test="algoConfigList != null">#{algoConfigList,typeHandler=com.solution.algo.AlgorithmConfigTypeHandler},</if>
|
||||||
|
</trim>
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
<update id="updateAlgorithm" parameterType="Algorithm">
|
||||||
|
update algorithm
|
||||||
|
<trim prefix="SET" suffixOverrides=",">
|
||||||
|
<if test="name != null and name != ''">name = #{name},</if>
|
||||||
|
<if test="type != null and type != ''">type = #{type},</if>
|
||||||
|
<if test="codePath != null">code_path = #{codePath},</if>
|
||||||
|
<if test="description != null">description = #{description},</if>
|
||||||
|
<if test="algoConfig != null">algo_config = #{algoConfig},</if>
|
||||||
|
<if test="algoConfigList != null">algo_config_list = #{algoConfigList,typeHandler=com.solution.algo.AlgorithmConfigTypeHandler},</if>
|
||||||
|
</trim>
|
||||||
|
where id = #{id}
|
||||||
|
</update>
|
||||||
|
|
||||||
|
<delete id="deleteAlgorithmById" parameterType="Long">
|
||||||
|
delete from algorithm where id = #{id}
|
||||||
|
</delete>
|
||||||
|
|
||||||
|
<delete id="deleteAlgorithmByIds" parameterType="String">
|
||||||
|
delete from algorithm where id in
|
||||||
|
<foreach item="id" collection="array" open="(" separator="," close=")">
|
||||||
|
#{id}
|
||||||
|
</foreach>
|
||||||
|
</delete>
|
||||||
|
|
||||||
|
<delete id="deleteAlgorithmParamByAlgorithmIds" parameterType="String">
|
||||||
|
delete from algorithm_param where algorithm_id in
|
||||||
|
<foreach item="algorithmId" collection="array" open="(" separator="," close=")">
|
||||||
|
#{algorithmId}
|
||||||
|
</foreach>
|
||||||
|
</delete>
|
||||||
|
|
||||||
|
<delete id="deleteAlgorithmParamByAlgorithmId" parameterType="Long">
|
||||||
|
delete from algorithm_param where algorithm_id = #{algorithmId}
|
||||||
|
</delete>
|
||||||
|
|
||||||
|
<insert id="batchAlgorithmParam">
|
||||||
|
insert into algorithm_param( id, algorithm_id, param_name, default_value, description) values
|
||||||
|
<foreach item="item" index="index" collection="list" separator=",">
|
||||||
|
( #{item.id}, #{item.algorithmId}, #{item.paramName}, #{item.defaultValue}, #{item.description})
|
||||||
|
</foreach>
|
||||||
|
</insert>
|
||||||
|
</mapper>
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
|
||||||
<!DOCTYPE mapper
|
|
||||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|
||||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
|
||||||
<mapper namespace="com.solution.algo.mapper.SysAlgoConfigMapper">
|
|
||||||
|
|
||||||
<resultMap type="SysAlgoConfig" id="SysAlgoConfigResult">
|
|
||||||
<result property="id" column="id" />
|
|
||||||
<result property="algoType" column="algo_type" />
|
|
||||||
<result property="algoName" column="algo_name" />
|
|
||||||
<result property="engineType" column="engine_type" />
|
|
||||||
<result property="inputSchema" column="input_schema" />
|
|
||||||
<result property="scriptContent" column="script_content" />
|
|
||||||
<result property="description" column="description" />
|
|
||||||
<result property="status" column="status" />
|
|
||||||
<result property="createdAt" column="created_at" />
|
|
||||||
<result property="updatedAt" column="updated_at" />
|
|
||||||
</resultMap>
|
|
||||||
|
|
||||||
<sql id="selectSysAlgoConfigVo">
|
|
||||||
select id, algo_type, algo_name, engine_type, input_schema, script_content, description, status, created_at, updated_at from sys_algo_config
|
|
||||||
</sql>
|
|
||||||
|
|
||||||
<select id="selectSysAlgoConfigList" parameterType="SysAlgoConfig" resultMap="SysAlgoConfigResult">
|
|
||||||
<include refid="selectSysAlgoConfigVo"/>
|
|
||||||
<where>
|
|
||||||
<if test="algoType != null and algoType != ''"> and algo_type = #{algoType}</if>
|
|
||||||
<if test="algoName != null and algoName != ''"> and algo_name like concat('%', #{algoName}, '%')</if>
|
|
||||||
<if test="engineType != null and engineType != ''"> and engine_type = #{engineType}</if>
|
|
||||||
<if test="inputSchema != null and inputSchema != ''"> and input_schema = #{inputSchema}</if>
|
|
||||||
<if test="scriptContent != null and scriptContent != ''"> and script_content = #{scriptContent}</if>
|
|
||||||
<if test="description != null and description != ''"> and description = #{description}</if>
|
|
||||||
<if test="status != null "> and status = #{status}</if>
|
|
||||||
<if test="createdAt != null "> and created_at = #{createdAt}</if>
|
|
||||||
<if test="updatedAt != null "> and updated_at = #{updatedAt}</if>
|
|
||||||
</where>
|
|
||||||
</select>
|
|
||||||
|
|
||||||
<select id="selectSysAlgoConfigById" parameterType="Long" resultMap="SysAlgoConfigResult">
|
|
||||||
<include refid="selectSysAlgoConfigVo"/>
|
|
||||||
where id = #{id}
|
|
||||||
</select>
|
|
||||||
|
|
||||||
<insert id="insertSysAlgoConfig" parameterType="SysAlgoConfig" useGeneratedKeys="true" keyProperty="id">
|
|
||||||
insert into sys_algo_config
|
|
||||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
|
||||||
<if test="algoType != null and algoType != ''">algo_type,</if>
|
|
||||||
<if test="algoName != null and algoName != ''">algo_name,</if>
|
|
||||||
<if test="engineType != null and engineType != ''">engine_type,</if>
|
|
||||||
<if test="inputSchema != null">input_schema,</if>
|
|
||||||
<if test="scriptContent != null">script_content,</if>
|
|
||||||
<if test="description != null">description,</if>
|
|
||||||
<if test="status != null">status,</if>
|
|
||||||
<if test="createdAt != null">created_at,</if>
|
|
||||||
<if test="updatedAt != null">updated_at,</if>
|
|
||||||
</trim>
|
|
||||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
|
||||||
<if test="algoType != null and algoType != ''">#{algoType},</if>
|
|
||||||
<if test="algoName != null and algoName != ''">#{algoName},</if>
|
|
||||||
<if test="engineType != null and engineType != ''">#{engineType},</if>
|
|
||||||
<if test="inputSchema != null">#{inputSchema},</if>
|
|
||||||
<if test="scriptContent != null">#{scriptContent},</if>
|
|
||||||
<if test="description != null">#{description},</if>
|
|
||||||
<if test="status != null">#{status},</if>
|
|
||||||
<if test="createdAt != null">#{createdAt},</if>
|
|
||||||
<if test="updatedAt != null">#{updatedAt},</if>
|
|
||||||
</trim>
|
|
||||||
</insert>
|
|
||||||
|
|
||||||
<update id="updateSysAlgoConfig" parameterType="SysAlgoConfig">
|
|
||||||
update sys_algo_config
|
|
||||||
<trim prefix="SET" suffixOverrides=",">
|
|
||||||
<if test="algoType != null and algoType != ''">algo_type = #{algoType},</if>
|
|
||||||
<if test="algoName != null and algoName != ''">algo_name = #{algoName},</if>
|
|
||||||
<if test="engineType != null and engineType != ''">engine_type = #{engineType},</if>
|
|
||||||
<if test="inputSchema != null">input_schema = #{inputSchema},</if>
|
|
||||||
<if test="scriptContent != null">script_content = #{scriptContent},</if>
|
|
||||||
<if test="description != null">description = #{description},</if>
|
|
||||||
<if test="status != null">status = #{status},</if>
|
|
||||||
<if test="createdAt != null">created_at = #{createdAt},</if>
|
|
||||||
<if test="updatedAt != null">updated_at = #{updatedAt},</if>
|
|
||||||
</trim>
|
|
||||||
where id = #{id}
|
|
||||||
</update>
|
|
||||||
|
|
||||||
<delete id="deleteSysAlgoConfigById" parameterType="Long">
|
|
||||||
delete from sys_algo_config where id = #{id}
|
|
||||||
</delete>
|
|
||||||
|
|
||||||
<delete id="deleteSysAlgoConfigByIds" parameterType="String">
|
|
||||||
delete from sys_algo_config where id in
|
|
||||||
<foreach item="id" collection="array" open="(" separator="," close=")">
|
|
||||||
#{id}
|
|
||||||
</foreach>
|
|
||||||
</delete>
|
|
||||||
</mapper>
|
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
package com.solution.system.domain;
|
||||||
|
/*
|
||||||
|
* This file is part of the kernelstudio package.
|
||||||
|
*
|
||||||
|
* (c) 2014-2026 zlin <admin@kernelstudio.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE file
|
||||||
|
* that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class NodeTemplateEntity extends Nodetemplate {
|
||||||
|
|
||||||
|
private List<Templateparameterdef> parameters = new ArrayList<>();
|
||||||
|
|
||||||
|
public NodeTemplateEntity() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public NodeTemplateEntity(List<Templateparameterdef> parameters) {
|
||||||
|
this.parameters = parameters;
|
||||||
|
}
|
||||||
|
|
||||||
|
public NodeTemplateEntity(NodeTemplateEntity entity) {
|
||||||
|
super(entity);
|
||||||
|
this.parameters = entity.getParameters();
|
||||||
|
}
|
||||||
|
|
||||||
|
public NodeTemplateEntity(Nodetemplate entity, List<Templateparameterdef> parameters) {
|
||||||
|
super(entity);
|
||||||
|
this.parameters = parameters;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Templateparameterdef> getParameters() {
|
||||||
|
return parameters;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setParameters(List<Templateparameterdef> parameters) {
|
||||||
|
this.parameters = parameters;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -18,6 +18,8 @@ public class Nodeconnection extends BaseEntity
|
|||||||
/** 连接ID (主键) */
|
/** 连接ID (主键) */
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
|
private Long treeId;
|
||||||
|
|
||||||
/** 父节点 (外键: TreeInstanceNode.id) */
|
/** 父节点 (外键: TreeInstanceNode.id) */
|
||||||
@Excel(name = "父节点 (外键: TreeInstanceNode.id)")
|
@Excel(name = "父节点 (外键: TreeInstanceNode.id)")
|
||||||
private Long parentNodeId;
|
private Long parentNodeId;
|
||||||
@@ -40,6 +42,14 @@ public class Nodeconnection extends BaseEntity
|
|||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Long getTreeId() {
|
||||||
|
return treeId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTreeId(Long treeId) {
|
||||||
|
this.treeId = treeId;
|
||||||
|
}
|
||||||
|
|
||||||
public void setParentNodeId(Long parentNodeId)
|
public void setParentNodeId(Long parentNodeId)
|
||||||
{
|
{
|
||||||
this.parentNodeId = parentNodeId;
|
this.parentNodeId = parentNodeId;
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ public class Nodeparameter extends BaseEntity
|
|||||||
/** 节点参数ID (主键) */
|
/** 节点参数ID (主键) */
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
|
private Long treeId;
|
||||||
|
|
||||||
/** 关联到哪个节点实例 (外键: TreeInstanceNode.id) */
|
/** 关联到哪个节点实例 (外键: TreeInstanceNode.id) */
|
||||||
@Excel(name = "关联到哪个节点实例 (外键: TreeInstanceNode.id)")
|
@Excel(name = "关联到哪个节点实例 (外键: TreeInstanceNode.id)")
|
||||||
private Long nodeInstanceId;
|
private Long nodeInstanceId;
|
||||||
@@ -40,6 +42,14 @@ public class Nodeparameter extends BaseEntity
|
|||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Long getTreeId() {
|
||||||
|
return treeId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTreeId(Long treeId) {
|
||||||
|
this.treeId = treeId;
|
||||||
|
}
|
||||||
|
|
||||||
public void setNodeInstanceId(Long nodeInstanceId)
|
public void setNodeInstanceId(Long nodeInstanceId)
|
||||||
{
|
{
|
||||||
this.nodeInstanceId = nodeInstanceId;
|
this.nodeInstanceId = nodeInstanceId;
|
||||||
|
|||||||
@@ -40,7 +40,20 @@ public class Nodetemplate extends BaseEntity
|
|||||||
|
|
||||||
/** 模版类型,节点模版或者条件判断,例如“node”,precondition“ */
|
/** 模版类型,节点模版或者条件判断,例如“node”,precondition“ */
|
||||||
@Excel(name = "模版类型,节点模版或者条件判断,例如“node”,precondition“")
|
@Excel(name = "模版类型,节点模版或者条件判断,例如“node”,precondition“")
|
||||||
private String templeteType;
|
private String templateType;
|
||||||
|
|
||||||
|
public Nodetemplate() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Nodetemplate(Nodetemplate template) {
|
||||||
|
this.id = template.id;
|
||||||
|
this.type = template.type;
|
||||||
|
this.name = template.name;
|
||||||
|
this.logicHandler = template.logicHandler;
|
||||||
|
this.description = template.description;
|
||||||
|
this.englishName = template.englishName;
|
||||||
|
this.templateType = template.templateType;
|
||||||
|
}
|
||||||
|
|
||||||
public void setId(Long id)
|
public void setId(Long id)
|
||||||
{
|
{
|
||||||
@@ -102,14 +115,14 @@ public class Nodetemplate extends BaseEntity
|
|||||||
return englishName;
|
return englishName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setTempleteType(String templeteType)
|
public void setTemplateType(String templateType)
|
||||||
{
|
{
|
||||||
this.templeteType = templeteType;
|
this.templateType = templateType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getTempleteType()
|
public String getTemplateType()
|
||||||
{
|
{
|
||||||
return templeteType;
|
return templateType;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -121,7 +134,7 @@ public class Nodetemplate extends BaseEntity
|
|||||||
.append("logicHandler", getLogicHandler())
|
.append("logicHandler", getLogicHandler())
|
||||||
.append("description", getDescription())
|
.append("description", getDescription())
|
||||||
.append("englishName", getEnglishName())
|
.append("englishName", getEnglishName())
|
||||||
.append("templeteType", getTempleteType())
|
.append("templateType", getTemplateType())
|
||||||
.toString();
|
.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.solution.system.mapper;
|
package com.solution.system.mapper;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.solution.system.domain.Behaviortree;
|
import com.solution.system.domain.Behaviortree;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.solution.system.mapper;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import com.solution.system.domain.Nodeconnection;
|
import com.solution.system.domain.Nodeconnection;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 节点连接Mapper接口
|
* 节点连接Mapper接口
|
||||||
@@ -11,6 +12,8 @@ import com.solution.system.domain.Nodeconnection;
|
|||||||
*/
|
*/
|
||||||
public interface NodeconnectionMapper
|
public interface NodeconnectionMapper
|
||||||
{
|
{
|
||||||
|
void deleteByTreeId(@Param("treeId") Long treeId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询节点连接
|
* 查询节点连接
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.solution.system.mapper;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import com.solution.system.domain.Nodeparameter;
|
import com.solution.system.domain.Nodeparameter;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 节点参数Mapper接口
|
* 节点参数Mapper接口
|
||||||
@@ -11,6 +12,8 @@ import com.solution.system.domain.Nodeparameter;
|
|||||||
*/
|
*/
|
||||||
public interface NodeparameterMapper
|
public interface NodeparameterMapper
|
||||||
{
|
{
|
||||||
|
void deleteByTreeId(@Param("treeId") Long treeId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询节点参数
|
* 查询节点参数
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.solution.system.mapper;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import com.solution.system.domain.Treenodeinstance;
|
import com.solution.system.domain.Treenodeinstance;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 行为树实例节点Mapper接口
|
* 行为树实例节点Mapper接口
|
||||||
@@ -11,6 +12,8 @@ import com.solution.system.domain.Treenodeinstance;
|
|||||||
*/
|
*/
|
||||||
public interface TreenodeinstanceMapper
|
public interface TreenodeinstanceMapper
|
||||||
{
|
{
|
||||||
|
void deleteByTreeId(@Param(value = "treeId") Long treeId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询行为树实例节点
|
* 查询行为树实例节点
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.solution.system.service;
|
package com.solution.system.service;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.solution.system.domain.Behaviortree;
|
import com.solution.system.domain.Behaviortree;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.solution.system.service;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import com.solution.system.domain.Nodeconnection;
|
import com.solution.system.domain.Nodeconnection;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 节点连接Service接口
|
* 节点连接Service接口
|
||||||
@@ -11,6 +12,9 @@ import com.solution.system.domain.Nodeconnection;
|
|||||||
*/
|
*/
|
||||||
public interface INodeconnectionService
|
public interface INodeconnectionService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
void deleteByTreeId(@Param("treeId") Long treeId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询节点连接
|
* 查询节点连接
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -11,6 +11,9 @@ import com.solution.system.domain.Nodeparameter;
|
|||||||
*/
|
*/
|
||||||
public interface INodeparameterService
|
public interface INodeparameterService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
void deleteByTreeId(Long treeId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询节点参数
|
* 查询节点参数
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -11,6 +11,9 @@ import com.solution.system.domain.Treenodeinstance;
|
|||||||
*/
|
*/
|
||||||
public interface ITreenodeinstanceService
|
public interface ITreenodeinstanceService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
void deleteByTreeId(Long treeId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询行为树实例节点
|
* 查询行为树实例节点
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
package com.solution.system.service.impl;
|
package com.solution.system.service.impl;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import com.solution.common.constant.ExceptionConstants;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import com.solution.system.mapper.BehaviortreeMapper;
|
import com.solution.system.mapper.BehaviortreeMapper;
|
||||||
|
|||||||
@@ -19,6 +19,11 @@ public class NodeconnectionServiceImpl implements INodeconnectionService
|
|||||||
@Autowired
|
@Autowired
|
||||||
private NodeconnectionMapper nodeconnectionMapper;
|
private NodeconnectionMapper nodeconnectionMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteByTreeId(Long treeId) {
|
||||||
|
nodeconnectionMapper.deleteByTreeId(treeId);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询节点连接
|
* 查询节点连接
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -19,6 +19,11 @@ public class NodeparameterServiceImpl implements INodeparameterService
|
|||||||
@Autowired
|
@Autowired
|
||||||
private NodeparameterMapper nodeparameterMapper;
|
private NodeparameterMapper nodeparameterMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteByTreeId(Long treeId) {
|
||||||
|
nodeparameterMapper.deleteByTreeId(treeId);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询节点参数
|
* 查询节点参数
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -19,6 +19,11 @@ public class TreenodeinstanceServiceImpl implements ITreenodeinstanceService
|
|||||||
@Autowired
|
@Autowired
|
||||||
private TreenodeinstanceMapper treenodeinstanceMapper;
|
private TreenodeinstanceMapper treenodeinstanceMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteByTreeId(Long treeId) {
|
||||||
|
treenodeinstanceMapper.deleteByTreeId(treeId);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询行为树实例节点
|
* 查询行为树实例节点
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -55,6 +55,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
</trim>
|
</trim>
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
|
<insert id="insert" parameterType="com.solution.scene.domain.AfsimScenario">
|
||||||
|
INSERT INTO afsim_scenario (name, description, scenario_path, communication_graph)
|
||||||
|
VALUES (#{name}, #{description}, #{scenarioPath}, #{communicationGraph})
|
||||||
|
</insert>
|
||||||
|
|
||||||
<update id="updateBehaviortree" parameterType="Behaviortree">
|
<update id="updateBehaviortree" parameterType="Behaviortree">
|
||||||
update behaviortree
|
update behaviortree
|
||||||
<trim prefix="SET" suffixOverrides=",">
|
<trim prefix="SET" suffixOverrides=",">
|
||||||
|
|||||||
@@ -6,18 +6,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
|
|
||||||
<resultMap type="Nodeconnection" id="NodeconnectionResult">
|
<resultMap type="Nodeconnection" id="NodeconnectionResult">
|
||||||
<result property="id" column="id" />
|
<result property="id" column="id" />
|
||||||
|
<result property="treeId" column="tree_id" />
|
||||||
<result property="parentNodeId" column="parent_node_id" />
|
<result property="parentNodeId" column="parent_node_id" />
|
||||||
<result property="childNodeId" column="child_node_id" />
|
<result property="childNodeId" column="child_node_id" />
|
||||||
<result property="orderIndex" column="order_index" />
|
<result property="orderIndex" column="order_index" />
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
|
<delete id="deleteByTreeId">
|
||||||
|
delete from nodeconnection where tree_id=#{treeId}
|
||||||
|
</delete>
|
||||||
|
|
||||||
<sql id="selectNodeconnectionVo">
|
<sql id="selectNodeconnectionVo">
|
||||||
select id, parent_node_id, child_node_id, order_index from nodeconnection
|
select id, tree_id, parent_node_id, child_node_id, order_index from nodeconnection
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
<select id="selectNodeconnectionList" parameterType="Nodeconnection" resultMap="NodeconnectionResult">
|
<select id="selectNodeconnectionList" parameterType="Nodeconnection" resultMap="NodeconnectionResult">
|
||||||
<include refid="selectNodeconnectionVo"/>
|
<include refid="selectNodeconnectionVo"/>
|
||||||
<where>
|
<where>
|
||||||
|
<if test="treeId != null "> and tree_id = #{treeId}</if>
|
||||||
<if test="parentNodeId != null "> and parent_node_id = #{parentNodeId}</if>
|
<if test="parentNodeId != null "> and parent_node_id = #{parentNodeId}</if>
|
||||||
<if test="childNodeId != null "> and child_node_id = #{childNodeId}</if>
|
<if test="childNodeId != null "> and child_node_id = #{childNodeId}</if>
|
||||||
<if test="orderIndex != null "> and order_index = #{orderIndex}</if>
|
<if test="orderIndex != null "> and order_index = #{orderIndex}</if>
|
||||||
@@ -32,11 +38,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<insert id="insertNodeconnection" parameterType="Nodeconnection" useGeneratedKeys="true" keyProperty="id">
|
<insert id="insertNodeconnection" parameterType="Nodeconnection" useGeneratedKeys="true" keyProperty="id">
|
||||||
insert into nodeconnection
|
insert into nodeconnection
|
||||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||||
|
<if test="treeId != null">tree_id,</if>
|
||||||
<if test="parentNodeId != null">parent_node_id,</if>
|
<if test="parentNodeId != null">parent_node_id,</if>
|
||||||
<if test="childNodeId != null">child_node_id,</if>
|
<if test="childNodeId != null">child_node_id,</if>
|
||||||
<if test="orderIndex != null">order_index,</if>
|
<if test="orderIndex != null">order_index,</if>
|
||||||
</trim>
|
</trim>
|
||||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||||
|
<if test="treeId != null">#{treeId},</if>
|
||||||
<if test="parentNodeId != null">#{parentNodeId},</if>
|
<if test="parentNodeId != null">#{parentNodeId},</if>
|
||||||
<if test="childNodeId != null">#{childNodeId},</if>
|
<if test="childNodeId != null">#{childNodeId},</if>
|
||||||
<if test="orderIndex != null">#{orderIndex},</if>
|
<if test="orderIndex != null">#{orderIndex},</if>
|
||||||
@@ -46,6 +54,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<update id="updateNodeconnection" parameterType="Nodeconnection">
|
<update id="updateNodeconnection" parameterType="Nodeconnection">
|
||||||
update nodeconnection
|
update nodeconnection
|
||||||
<trim prefix="SET" suffixOverrides=",">
|
<trim prefix="SET" suffixOverrides=",">
|
||||||
|
<if test="treeId != null">tree_id = #{treeId},</if>
|
||||||
<if test="parentNodeId != null">parent_node_id = #{parentNodeId},</if>
|
<if test="parentNodeId != null">parent_node_id = #{parentNodeId},</if>
|
||||||
<if test="childNodeId != null">child_node_id = #{childNodeId},</if>
|
<if test="childNodeId != null">child_node_id = #{childNodeId},</if>
|
||||||
<if test="orderIndex != null">order_index = #{orderIndex},</if>
|
<if test="orderIndex != null">order_index = #{orderIndex},</if>
|
||||||
|
|||||||
@@ -6,13 +6,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
|
|
||||||
<resultMap type="Nodeparameter" id="NodeparameterResult">
|
<resultMap type="Nodeparameter" id="NodeparameterResult">
|
||||||
<result property="id" column="id" />
|
<result property="id" column="id" />
|
||||||
|
<result property="treeId" column="tree_id" />
|
||||||
<result property="nodeInstanceId" column="node_instance_id" />
|
<result property="nodeInstanceId" column="node_instance_id" />
|
||||||
<result property="paramDefId" column="param_def_id" />
|
<result property="paramDefId" column="param_def_id" />
|
||||||
<result property="value" column="value" />
|
<result property="value" column="value" />
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
|
<delete id="deleteByTreeId">
|
||||||
|
delete from nodeparameter where tree_id=#{treeId}
|
||||||
|
</delete>
|
||||||
|
|
||||||
<sql id="selectNodeparameterVo">
|
<sql id="selectNodeparameterVo">
|
||||||
select id, node_instance_id, param_def_id, value from nodeparameter
|
select id, treeId, node_instance_id, param_def_id, value from nodeparameter
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
<select id="selectNodeparameterList" parameterType="Nodeparameter" resultMap="NodeparameterResult">
|
<select id="selectNodeparameterList" parameterType="Nodeparameter" resultMap="NodeparameterResult">
|
||||||
@@ -32,11 +37,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<insert id="insertNodeparameter" parameterType="Nodeparameter" useGeneratedKeys="true" keyProperty="id">
|
<insert id="insertNodeparameter" parameterType="Nodeparameter" useGeneratedKeys="true" keyProperty="id">
|
||||||
insert into nodeparameter
|
insert into nodeparameter
|
||||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||||
|
<if test="treeId != null">tree_id,</if>
|
||||||
<if test="nodeInstanceId != null">node_instance_id,</if>
|
<if test="nodeInstanceId != null">node_instance_id,</if>
|
||||||
<if test="paramDefId != null">param_def_id,</if>
|
<if test="paramDefId != null">param_def_id,</if>
|
||||||
<if test="value != null">value,</if>
|
<if test="value != null">value,</if>
|
||||||
</trim>
|
</trim>
|
||||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||||
|
<if test="treeId != null">#{treeId},</if>
|
||||||
<if test="nodeInstanceId != null">#{nodeInstanceId},</if>
|
<if test="nodeInstanceId != null">#{nodeInstanceId},</if>
|
||||||
<if test="paramDefId != null">#{paramDefId},</if>
|
<if test="paramDefId != null">#{paramDefId},</if>
|
||||||
<if test="value != null">#{value},</if>
|
<if test="value != null">#{value},</if>
|
||||||
@@ -46,6 +53,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<update id="updateNodeparameter" parameterType="Nodeparameter">
|
<update id="updateNodeparameter" parameterType="Nodeparameter">
|
||||||
update nodeparameter
|
update nodeparameter
|
||||||
<trim prefix="SET" suffixOverrides=",">
|
<trim prefix="SET" suffixOverrides=",">
|
||||||
|
<if test="treeId != null">tree_id = #{treeId},</if>
|
||||||
<if test="nodeInstanceId != null">node_instance_id = #{nodeInstanceId},</if>
|
<if test="nodeInstanceId != null">node_instance_id = #{nodeInstanceId},</if>
|
||||||
<if test="paramDefId != null">param_def_id = #{paramDefId},</if>
|
<if test="paramDefId != null">param_def_id = #{paramDefId},</if>
|
||||||
<if test="value != null">value = #{value},</if>
|
<if test="value != null">value = #{value},</if>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<result property="logicHandler" column="logic_handler" />
|
<result property="logicHandler" column="logic_handler" />
|
||||||
<result property="description" column="description" />
|
<result property="description" column="description" />
|
||||||
<result property="englishName" column="english_name" />
|
<result property="englishName" column="english_name" />
|
||||||
<result property="templeteType" column="templete_type" />
|
<result property="templateType" column="templete_type" />
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<sql id="selectNodetemplateVo">
|
<sql id="selectNodetemplateVo">
|
||||||
@@ -26,7 +26,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<if test="logicHandler != null and logicHandler != ''"> and logic_handler = #{logicHandler}</if>
|
<if test="logicHandler != null and logicHandler != ''"> and logic_handler = #{logicHandler}</if>
|
||||||
<if test="description != null and description != ''"> and description = #{description}</if>
|
<if test="description != null and description != ''"> and description = #{description}</if>
|
||||||
<if test="englishName != null and englishName != ''"> and english_name like concat('%', #{englishName}, '%')</if>
|
<if test="englishName != null and englishName != ''"> and english_name like concat('%', #{englishName}, '%')</if>
|
||||||
<if test="templeteType != null and templeteType != ''"> and templete_type = #{templeteType}</if>
|
<if test="templateType != null and templateType != ''"> and templete_type = #{templateType}</if>
|
||||||
</where>
|
</where>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
@@ -43,7 +43,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<if test="logicHandler != null">logic_handler,</if>
|
<if test="logicHandler != null">logic_handler,</if>
|
||||||
<if test="description != null">description,</if>
|
<if test="description != null">description,</if>
|
||||||
<if test="englishName != null">english_name,</if>
|
<if test="englishName != null">english_name,</if>
|
||||||
<if test="templeteType != null and templeteType != ''">templete_type,</if>
|
<if test="templateType != null and templateType != ''">templete_type,</if>
|
||||||
</trim>
|
</trim>
|
||||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||||
<if test="type != null and type != ''">#{type},</if>
|
<if test="type != null and type != ''">#{type},</if>
|
||||||
@@ -51,7 +51,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<if test="logicHandler != null">#{logicHandler},</if>
|
<if test="logicHandler != null">#{logicHandler},</if>
|
||||||
<if test="description != null">#{description},</if>
|
<if test="description != null">#{description},</if>
|
||||||
<if test="englishName != null">#{englishName},</if>
|
<if test="englishName != null">#{englishName},</if>
|
||||||
<if test="templeteType != null and templeteType != ''">#{templeteType},</if>
|
<if test="templateType != null and templateType != ''">#{templateType},</if>
|
||||||
</trim>
|
</trim>
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
@@ -63,7 +63,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<if test="logicHandler != null">logic_handler = #{logicHandler},</if>
|
<if test="logicHandler != null">logic_handler = #{logicHandler},</if>
|
||||||
<if test="description != null">description = #{description},</if>
|
<if test="description != null">description = #{description},</if>
|
||||||
<if test="englishName != null">english_name = #{englishName},</if>
|
<if test="englishName != null">english_name = #{englishName},</if>
|
||||||
<if test="templeteType != null and templeteType != ''">templete_type = #{templeteType},</if>
|
<if test="templateType != null and templateType != ''">templete_type = #{templateType},</if>
|
||||||
</trim>
|
</trim>
|
||||||
where id = #{id}
|
where id = #{id}
|
||||||
</update>
|
</update>
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
select id, template_id, param_key, data_type, default_value, description, template_type from templateparameterdef
|
select id, template_id, param_key, data_type, default_value, description, template_type from templateparameterdef
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
<select id="selectTemplateparameterdefList" parameterType="Templateparameterdef" resultMap="TemplateparameterdefResult">
|
<select id="selectTemplateparameterdefList" parameterType="templateparameterdef" resultMap="TemplateparameterdefResult">
|
||||||
<include refid="selectTemplateparameterdefVo"/>
|
<include refid="selectTemplateparameterdefVo"/>
|
||||||
<where>
|
<where>
|
||||||
<if test="templateId != null "> and template_id = #{templateId}</if>
|
<if test="templateId != null "> and template_id = #{templateId}</if>
|
||||||
|
|||||||
@@ -15,6 +15,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<result property="desciption" column="desciption" />
|
<result property="desciption" column="desciption" />
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
|
<delete id="deleteByTreeId">
|
||||||
|
delete from treenodeinstance where tree_id=#{treeId}
|
||||||
|
</delete>
|
||||||
|
|
||||||
<sql id="selectTreenodeinstanceVo">
|
<sql id="selectTreenodeinstanceVo">
|
||||||
select id, tree_id, template_id, instance_name, is_root, precondition_templete_id, uuid,desciption from treenodeinstance
|
select id, tree_id, template_id, instance_name, is_root, precondition_templete_id, uuid,desciption from treenodeinstance
|
||||||
</sql>
|
</sql>
|
||||||
|
|||||||
@@ -113,6 +113,12 @@
|
|||||||
<artifactId>javax.servlet-api</artifactId>
|
<artifactId>javax.servlet-api</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>cn.hutool</groupId>
|
||||||
|
<artifactId>hutool-all</artifactId>
|
||||||
|
<version>5.8.25</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package com.solution.common.constant;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 火力规则常量
|
||||||
|
*/
|
||||||
|
public class ExceptionConstants {
|
||||||
|
|
||||||
|
public static final String PARAMETER_EXCEPTION = "参数异常";
|
||||||
|
|
||||||
|
public static final String RESULT_EXCEPTION = "结果异常";
|
||||||
|
|
||||||
|
public static final String NOT_FOUND_CARRIAGE_CHAIN_HANDLER = "not found carriage chain handler!";
|
||||||
|
|
||||||
|
public static final String NOT_FOUND_F22_COMPONENT = "未找到 F-22 组件";
|
||||||
|
|
||||||
|
public static final String SCENE_CONFIG_NOT_NULL = "场景配置不能为空";
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package com.solution.common.constant;
|
||||||
|
|
||||||
|
|
||||||
|
public class PlatformAndModuleConstants {
|
||||||
|
|
||||||
|
public static final String RED_NEBO_M_1 = "red_nebo_m_1";
|
||||||
|
|
||||||
|
public static final String RED_NEBO_M_2 = "red_nebo_m_2";
|
||||||
|
}
|
||||||
@@ -63,7 +63,7 @@ public class SysLoginService
|
|||||||
public String login(String username, String password, String code, String uuid)
|
public String login(String username, String password, String code, String uuid)
|
||||||
{
|
{
|
||||||
// 验证码校验
|
// 验证码校验
|
||||||
validateCaptcha(username, code, uuid);
|
// validateCaptcha(username, code, uuid);
|
||||||
// 登录前置校验
|
// 登录前置校验
|
||||||
loginPreCheck(username, password);
|
loginPreCheck(username, password);
|
||||||
// 用户验证
|
// 用户验证
|
||||||
|
|||||||
39
auto-solution-rule/pom.xml
Normal file
39
auto-solution-rule/pom.xml
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<parent>
|
||||||
|
<artifactId>solution</artifactId>
|
||||||
|
<groupId>com.solution</groupId>
|
||||||
|
<version>3.9.1</version>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>solution-rule</artifactId>
|
||||||
|
|
||||||
|
<description>
|
||||||
|
rule模块
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
|
||||||
|
<!-- 通用工具-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.solution</groupId>
|
||||||
|
<artifactId>solution-common</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.springfox</groupId>
|
||||||
|
<artifactId>springfox-boot-starter</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
</project>
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.solution.rule.domain;
|
||||||
|
|
||||||
|
import com.solution.rule.domain.dto.WeaponModelDTO;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class FireRuleExecuteDTO {
|
||||||
|
|
||||||
|
@ApiModelProperty("场景类型")
|
||||||
|
private Integer sceneType;
|
||||||
|
|
||||||
|
@ApiModelProperty("武器模型数据")
|
||||||
|
private List<WeaponModelDTO> weaponModelDTOs;
|
||||||
|
}
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
package com.solution.rule.domain;
|
||||||
|
/*
|
||||||
|
* This file is part of the kernelstudio package.
|
||||||
|
*
|
||||||
|
* (c) 2014-2026 zlin <admin@kernelstudio.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE file
|
||||||
|
* that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Platform implements Serializable {
|
||||||
|
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
private List<PlatformComponent> components;
|
||||||
|
|
||||||
|
public Integer getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Integer id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDescription(String description) {
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<PlatformComponent> getComponents() {
|
||||||
|
return components;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setComponents(List<PlatformComponent> components) {
|
||||||
|
this.components = components;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package com.solution.rule.domain;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 平台挂载的组件实体类
|
||||||
|
* 对应表 platform_component
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel(value = "平台组件对象", description = "平台所挂载的武器、雷达、通信等组件")
|
||||||
|
public class PlatformComponent {
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "组件ID,主键自增")
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "组件名称(具体型号)")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "组件类型:weapon(武器)、radar(雷达)、comm(通信)")
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "组件描述信息")
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "所属平台ID,关联platform表")
|
||||||
|
private Integer platformId;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "组件数量")
|
||||||
|
private Long num;
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
package com.solution.rule.domain;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@ApiModel("红蓝对抗规则")
|
||||||
|
public class Rule {
|
||||||
|
@ApiModelProperty("规则ID")
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
@ApiModelProperty("规则名称")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@ApiModelProperty("场景类型:0-防御,1-空降,null表示通用")
|
||||||
|
private Integer sceneType;
|
||||||
|
|
||||||
|
@ApiModelProperty("触发条件(JSON格式)")
|
||||||
|
private String conditions;
|
||||||
|
|
||||||
|
@ApiModelProperty("响应动作(JSON格式)")
|
||||||
|
private String actions;
|
||||||
|
|
||||||
|
@ApiModelProperty("优先级(数值越小优先级越高)")
|
||||||
|
private Integer priority;
|
||||||
|
|
||||||
|
@ApiModelProperty("是否启用(0禁用,1启用)")
|
||||||
|
private Boolean enabled;
|
||||||
|
|
||||||
|
@ApiModelProperty("创建时间")
|
||||||
|
private Date createdTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("更新时间")
|
||||||
|
private Date updatedTime;
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package com.solution.rule.domain;
|
||||||
|
|
||||||
|
import com.solution.rule.domain.dto.WeaponModelDTO;
|
||||||
|
import com.solution.rule.domain.vo.ComponentCountVO;
|
||||||
|
import com.solution.rule.domain.vo.PlatformWeaponAggregateVO;
|
||||||
|
import com.solution.rule.domain.vo.WeaponModelVO;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class RuleParam {
|
||||||
|
|
||||||
|
private List<PlatformWeaponAggregateVO> resultWeapons;
|
||||||
|
|
||||||
|
private WeaponModelVO weaponModelVO;
|
||||||
|
|
||||||
|
private List<WeaponModelDTO> weaponModelDTOList;
|
||||||
|
|
||||||
|
private List<ComponentCountVO> databaseWeapons;
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
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;
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
package com.solution.rule.domain.dto;
|
||||||
|
|
||||||
|
import com.solution.rule.domain.PlatformComponent;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class WeaponModelDTO {
|
||||||
|
|
||||||
|
@ApiModelProperty("平台id")
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
@ApiModelProperty("平台名称")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@ApiModelProperty("平台描述")
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
@ApiModelProperty("平台组件")
|
||||||
|
private List<PlatformComponent> components;
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package com.solution.rule.domain.vo;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
// 组件计数VO
|
||||||
|
@Data
|
||||||
|
@ApiModel("组件计数信息")
|
||||||
|
public class ComponentCountVO {
|
||||||
|
@ApiModelProperty("组件名称")
|
||||||
|
private String componentName;
|
||||||
|
|
||||||
|
@ApiModelProperty("组件数量")
|
||||||
|
private Long count;
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package com.solution.rule.domain.vo;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@ApiModel("平台组件名称聚合")
|
||||||
|
public class PlatformComponentNamesVO {
|
||||||
|
@ApiModelProperty("平台名称")
|
||||||
|
private String platformName;
|
||||||
|
|
||||||
|
@ApiModelProperty("该平台下的组件名称列表(去重)")
|
||||||
|
private List<String> componentNames;
|
||||||
|
|
||||||
|
@ApiModelProperty("平台描述")
|
||||||
|
private String platformDescription;
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package com.solution.rule.domain.vo;
|
||||||
|
|
||||||
|
import com.solution.rule.domain.PlatformComponent;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
// 平台武器聚合VO
|
||||||
|
@Data
|
||||||
|
@ApiModel("平台武器聚合信息")
|
||||||
|
public class PlatformWeaponAggregateVO {
|
||||||
|
@ApiModelProperty("平台名称")
|
||||||
|
private String platformName;
|
||||||
|
|
||||||
|
@ApiModelProperty("该平台下的组件列表")
|
||||||
|
private List<PlatformComponent> components;
|
||||||
|
|
||||||
|
@ApiModelProperty("返回数据库数据")
|
||||||
|
private List<ComponentCountVO> componentCountVOS;
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package com.solution.rule.domain.vo;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class WeaponModelVO {
|
||||||
|
|
||||||
|
@ApiModelProperty("平台名称")
|
||||||
|
private String platformName;
|
||||||
|
|
||||||
|
@ApiModelProperty("组件名称")
|
||||||
|
private String componentName;
|
||||||
|
|
||||||
|
@ApiModelProperty("组件数量")
|
||||||
|
private Long count;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
package com.solution.rule.enums;
|
||||||
|
|
||||||
|
public enum SceneType {
|
||||||
|
|
||||||
|
DEFENSE(0, "防御"),
|
||||||
|
AIRBORNE(1, "空降");
|
||||||
|
|
||||||
|
private final int code;
|
||||||
|
private final String description;
|
||||||
|
|
||||||
|
SceneType(int code, String description) {
|
||||||
|
this.code = code;
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCode() {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据数字编码获取对应的枚举
|
||||||
|
* @param code 前端传递的数字
|
||||||
|
* @return 枚举实例
|
||||||
|
* @throws IllegalArgumentException 如果找不到对应枚举
|
||||||
|
*/
|
||||||
|
public static SceneType fromCode(int code) {
|
||||||
|
for (SceneType type : values()) {
|
||||||
|
if (type.code == code) {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new IllegalArgumentException("未知的场景类型编码: " + code);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
package com.solution.rule.handler;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import com.solution.rule.domain.RuleParam;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 规则链抽象类
|
||||||
|
*/
|
||||||
|
public abstract class AbstractRuleChainHandler {
|
||||||
|
|
||||||
|
|
||||||
|
private AbstractRuleChainHandler nextHandler;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 执行过滤方法
|
||||||
|
* @param ruleParam
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public abstract RuleParam doHandler(RuleParam ruleParam);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 执行下一个处理器
|
||||||
|
* @param ruleParam
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public RuleParam doNextHandler(RuleParam ruleParam){
|
||||||
|
if(ObjectUtil.isEmpty(nextHandler) || ObjectUtil.isNotEmpty(ruleParam)){
|
||||||
|
return ruleParam;
|
||||||
|
}
|
||||||
|
return nextHandler.doHandler(ruleParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置下游handler
|
||||||
|
* @param nextHandler
|
||||||
|
*/
|
||||||
|
public void setNextHandler(AbstractRuleChainHandler nextHandler) {
|
||||||
|
this.nextHandler = nextHandler;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
package com.solution.rule.handler;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import com.solution.common.constant.ExceptionConstants;
|
||||||
|
import com.solution.rule.domain.RuleParam;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 封装规则处理链
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class RuleChainHandler {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private List<AbstractRuleChainHandler> chainHandlers;
|
||||||
|
|
||||||
|
private AbstractRuleChainHandler firstHandler;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 组装处理链
|
||||||
|
*/
|
||||||
|
@PostConstruct
|
||||||
|
private void constructChain(){
|
||||||
|
if (CollUtil.isEmpty(chainHandlers)) {
|
||||||
|
throw new RuntimeException(ExceptionConstants.NOT_FOUND_CARRIAGE_CHAIN_HANDLER);
|
||||||
|
}
|
||||||
|
this.firstHandler = chainHandlers.get(0);
|
||||||
|
for (int i = 0; i < chainHandlers.size(); i++) {
|
||||||
|
if(i == (chainHandlers.size() - 1)){
|
||||||
|
chainHandlers.get(i).setNextHandler(null);
|
||||||
|
}else {
|
||||||
|
chainHandlers.get(i).setNextHandler(chainHandlers.get(i + 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public RuleParam findRuleParam(RuleParam ruleParam){
|
||||||
|
return firstHandler.doHandler(ruleParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
package com.solution.rule.handler;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import com.solution.common.constant.ExceptionConstants;
|
||||||
|
import com.solution.common.constant.PlatformAndModuleConstants;
|
||||||
|
import com.solution.rule.domain.PlatformComponent;
|
||||||
|
import com.solution.rule.domain.RuleParam;
|
||||||
|
import com.solution.rule.domain.dto.WeaponModelDTO;
|
||||||
|
import com.solution.rule.domain.vo.ComponentCountVO;
|
||||||
|
import com.solution.rule.domain.vo.PlatformWeaponAggregateVO;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 战斗机处理链
|
||||||
|
* 规则:针对 F22 平台,后端返回的组件数量比前端传递的大1,
|
||||||
|
* 如果数据库中 F22 平台所有组件总数小于前端数量+1,则返回该总数。
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class WarplaneHandler extends AbstractRuleChainHandler {
|
||||||
|
|
||||||
|
// 组件数量增量常量
|
||||||
|
private static final long COMPONENT_COUNT_INCREMENT = 1;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RuleParam doHandler(RuleParam ruleParam) {
|
||||||
|
// 1. 参数校验
|
||||||
|
if (ObjectUtil.isEmpty(ruleParam) || CollUtil.isEmpty(ruleParam.getWeaponModelDTOList())) {
|
||||||
|
throw new RuntimeException(ExceptionConstants.PARAMETER_EXCEPTION);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<WeaponModelDTO> dtoList = ruleParam.getWeaponModelDTOList();
|
||||||
|
List<ComponentCountVO> databaseWeapons = ruleParam.getDatabaseWeapons();
|
||||||
|
|
||||||
|
List<PlatformWeaponAggregateVO> resultWeapons = new ArrayList<>();
|
||||||
|
|
||||||
|
//TODO获取所有组件以及count
|
||||||
|
|
||||||
|
Iterator<WeaponModelDTO> iterator = dtoList.iterator();
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
WeaponModelDTO dto = iterator.next();
|
||||||
|
if(PlatformAndModuleConstants.RED_NEBO_M_1.equals(dto.getName())){
|
||||||
|
List<PlatformComponent> components = dto.getComponents();
|
||||||
|
List<PlatformComponent> componentList = new ArrayList<>();
|
||||||
|
|
||||||
|
//遍历前端数据的组件
|
||||||
|
for (PlatformComponent component : components) {
|
||||||
|
//遍历数据库数据
|
||||||
|
for (ComponentCountVO databaseWeapon : databaseWeapons) {
|
||||||
|
if(component.getName().equals(databaseWeapon.getComponentName())){
|
||||||
|
PlatformComponent component1 = new PlatformComponent();
|
||||||
|
component1.setName(databaseWeapon.getComponentName());
|
||||||
|
if(databaseWeapon.getCount() > component.getNum()){
|
||||||
|
component1.setNum(component.getNum() + COMPONENT_COUNT_INCREMENT);
|
||||||
|
}else {
|
||||||
|
component1.setNum(databaseWeapon.getCount());
|
||||||
|
}
|
||||||
|
//TODO 补充基本信息 暂未完成
|
||||||
|
componentList.add(component1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PlatformWeaponAggregateVO platformVO = new PlatformWeaponAggregateVO();
|
||||||
|
platformVO.setPlatformName(dto.getName());
|
||||||
|
platformVO.setComponents(componentList);
|
||||||
|
resultWeapons.add(platformVO);
|
||||||
|
iterator.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ruleParam.setResultWeapons(resultWeapons);
|
||||||
|
return ruleParam;
|
||||||
|
|
||||||
|
// return super.doNextHandler(ruleParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
package com.solution.rule.mapper;
|
||||||
|
|
||||||
|
import com.solution.rule.domain.Platform;
|
||||||
|
import com.solution.rule.domain.PlatformComponent;
|
||||||
|
import com.solution.rule.domain.vo.ComponentCountVO;
|
||||||
|
import com.solution.rule.domain.vo.PlatformComponentNamesVO;
|
||||||
|
import com.solution.rule.domain.vo.WeaponModelVO;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface FireRuleMapper {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取所有武器平台和组件
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<WeaponModelVO> getWeapon();
|
||||||
|
|
||||||
|
List<WeaponModelVO> getPlatformComponentNames();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取所有组件以及数量
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<ComponentCountVO> getModuleAndCount();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取通信组件的所有平台和组件
|
||||||
|
* @param scenarioId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<PlatformComponentNamesVO> getCommPlatformComponentNames(Integer scenarioId);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据平台id获取平台下所有组件
|
||||||
|
* @param platformId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<PlatformComponent> getComponents(Integer platformId);
|
||||||
|
|
||||||
|
List<Platform> findPlatformComponents(Integer scenarioId);
|
||||||
|
|
||||||
|
List<Platform> findAllPlatformComponents();
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package com.solution.rule.mapper;
|
||||||
|
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface ModelDetailMapper {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package com.solution.rule.mapper;
|
||||||
|
|
||||||
|
import com.solution.rule.domain.Rule;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface RuleMapper {
|
||||||
|
/**
|
||||||
|
* 根据ID查询规则
|
||||||
|
*/
|
||||||
|
Rule selectRuleById(Integer id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询规则列表(支持分页)
|
||||||
|
*/
|
||||||
|
List<Rule> selectRuleList(Rule rule);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增规则
|
||||||
|
*/
|
||||||
|
int insertRule(Rule rule);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改规则
|
||||||
|
*/
|
||||||
|
int updateRule(Rule rule);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除规则
|
||||||
|
*/
|
||||||
|
int deleteRuleById(Integer id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除规则
|
||||||
|
*/
|
||||||
|
int deleteRuleByIds(@Param("ids")Integer[] ids);
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
package com.solution.rule.service;
|
||||||
|
|
||||||
|
import com.solution.rule.domain.FireRuleExecuteDTO;
|
||||||
|
import com.solution.rule.domain.Platform;
|
||||||
|
import com.solution.rule.domain.PlatformComponent;
|
||||||
|
import com.solution.rule.domain.vo.PlatformComponentNamesVO;
|
||||||
|
import com.solution.rule.domain.vo.PlatformWeaponAggregateVO;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface FireRuleService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 开始执行规则匹配
|
||||||
|
* @param fireRuleExecuteDTO
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<PlatformWeaponAggregateVO> execute(FireRuleExecuteDTO fireRuleExecuteDTO);
|
||||||
|
|
||||||
|
List<PlatformWeaponAggregateVO> getWeapon();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取所有武器平台和组件
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<PlatformComponentNamesVO> getPlatformComponentNames();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取通信组件的所有平台和组件
|
||||||
|
* @param scenarioId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<PlatformComponentNamesVO> getCommPlatformComponentNames(Integer scenarioId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据平台id获取平台下所有组件
|
||||||
|
* @param platformId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<PlatformComponent> getComponents(Integer platformId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据场景id获取所有平台及其组件
|
||||||
|
* @param scenarioId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<Platform> findPlatformComponents(Integer scenarioId);
|
||||||
|
|
||||||
|
List<Platform> findAllPlatformComponents();
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package com.solution.rule.service;
|
||||||
|
|
||||||
|
import com.solution.rule.domain.Rule;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface IRuleService {
|
||||||
|
/**
|
||||||
|
* 根据ID查询规则
|
||||||
|
*/
|
||||||
|
Rule selectRuleById(Integer id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询规则列表
|
||||||
|
*/
|
||||||
|
List<Rule> selectRuleList(Rule rule);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增规则
|
||||||
|
*/
|
||||||
|
int insertRule(Rule rule);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改规则
|
||||||
|
*/
|
||||||
|
int updateRule(Rule rule);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除规则
|
||||||
|
*/
|
||||||
|
int deleteRuleById(Integer id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除规则
|
||||||
|
*/
|
||||||
|
int deleteRuleByIds(Integer[] ids);
|
||||||
|
}
|
||||||
@@ -0,0 +1,184 @@
|
|||||||
|
package com.solution.rule.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import com.solution.common.constant.ExceptionConstants;
|
||||||
|
import com.solution.rule.domain.FireRuleExecuteDTO;
|
||||||
|
import com.solution.rule.domain.Platform;
|
||||||
|
import com.solution.rule.domain.PlatformComponent;
|
||||||
|
import com.solution.rule.domain.RuleParam;
|
||||||
|
import com.solution.rule.domain.dto.WeaponModelDTO;
|
||||||
|
import com.solution.rule.domain.vo.ComponentCountVO;
|
||||||
|
import com.solution.rule.domain.vo.PlatformComponentNamesVO;
|
||||||
|
import com.solution.rule.domain.vo.PlatformWeaponAggregateVO;
|
||||||
|
import com.solution.rule.domain.vo.WeaponModelVO;
|
||||||
|
import com.solution.rule.mapper.FireRuleMapper;
|
||||||
|
import com.solution.rule.service.FireRuleService;
|
||||||
|
import com.solution.rule.strategy.SceneStrategy;
|
||||||
|
import com.solution.rule.strategy.SceneStrategyFactory;
|
||||||
|
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.stream.Collectors;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class FireRuleServiceImpl implements FireRuleService {
|
||||||
|
|
||||||
|
private static final long COMPONENT_QUANTITY_THRESHOLD = 1;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SceneStrategyFactory strategyFactory;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private FireRuleMapper ruleMapper;
|
||||||
|
|
||||||
|
/* @Override
|
||||||
|
public WeaponModelVO execute(Integer sceneType, WeaponModelDTO weaponModelDTO) {
|
||||||
|
if(ObjectUtil.isNull(sceneType) || ObjectUtil.isEmpty(weaponModelDTO)){
|
||||||
|
throw new RuntimeException(ExceptionConstants.PARAMETER_EXCEPTION);
|
||||||
|
}
|
||||||
|
//TODO 查数据库获取我方装备
|
||||||
|
List<PlatformWeaponAggregateVO> weapon = this.getWeapon();
|
||||||
|
|
||||||
|
SceneStrategy strategy = strategyFactory.getStrategy(sceneType);
|
||||||
|
WeaponModelVO result = strategy.execute(weaponModelDTO);
|
||||||
|
if(ObjectUtil.isEmpty(result)){
|
||||||
|
throw new RuntimeException(ExceptionConstants.RESULT_EXCEPTION);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<PlatformWeaponAggregateVO> execute(FireRuleExecuteDTO fireRuleExecuteDTO) {
|
||||||
|
if(ObjectUtil.isEmpty(fireRuleExecuteDTO)){
|
||||||
|
throw new RuntimeException(ExceptionConstants.PARAMETER_EXCEPTION);
|
||||||
|
}
|
||||||
|
List<WeaponModelDTO> weaponModelDTOs = fireRuleExecuteDTO.getWeaponModelDTOs();
|
||||||
|
Integer sceneType = fireRuleExecuteDTO.getSceneType();
|
||||||
|
// 查数据库获取我方装备
|
||||||
|
List<ComponentCountVO> weapon = this.getModuleAndCount();
|
||||||
|
|
||||||
|
// 创建RuleParam并设置数据
|
||||||
|
RuleParam ruleParam = new RuleParam();
|
||||||
|
ruleParam.setWeaponModelDTOList(weaponModelDTOs);
|
||||||
|
ruleParam.setDatabaseWeapons(weapon);
|
||||||
|
|
||||||
|
// 执行策略
|
||||||
|
SceneStrategy strategy = strategyFactory.getStrategy(sceneType);
|
||||||
|
List<PlatformWeaponAggregateVO> result = strategy.execute(ruleParam);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<PlatformWeaponAggregateVO> getWeapon() {
|
||||||
|
List<WeaponModelVO> flatList = ruleMapper.getWeapon();
|
||||||
|
if (CollUtil.isEmpty(flatList)) {
|
||||||
|
throw new RuntimeException(ExceptionConstants.RESULT_EXCEPTION);
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, List<WeaponModelVO>> groupByPlatform = flatList.stream()
|
||||||
|
.collect(Collectors.groupingBy(WeaponModelVO::getPlatformName));
|
||||||
|
|
||||||
|
List<PlatformWeaponAggregateVO> result = new ArrayList<>();
|
||||||
|
for (Map.Entry<String, List<WeaponModelVO>> entry : groupByPlatform.entrySet()) {
|
||||||
|
PlatformWeaponAggregateVO platformVO = new PlatformWeaponAggregateVO();
|
||||||
|
platformVO.setPlatformName(entry.getKey());
|
||||||
|
|
||||||
|
List<ComponentCountVO> components = entry.getValue().stream()
|
||||||
|
.map(item -> {
|
||||||
|
ComponentCountVO comp = new ComponentCountVO();
|
||||||
|
comp.setComponentName(item.getComponentName());
|
||||||
|
comp.setCount(item.getCount());
|
||||||
|
return comp;
|
||||||
|
})
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
platformVO.setComponentCountVOS(components);
|
||||||
|
|
||||||
|
result.add(platformVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取所有武器平台和组件
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<PlatformComponentNamesVO> getPlatformComponentNames() {
|
||||||
|
List<WeaponModelVO> flatList = ruleMapper.getPlatformComponentNames();
|
||||||
|
if (CollUtil.isEmpty(flatList)) {
|
||||||
|
throw new RuntimeException(ExceptionConstants.RESULT_EXCEPTION);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Map<String, List<String>> groupByPlatform = flatList.stream()
|
||||||
|
.collect(Collectors.groupingBy(
|
||||||
|
WeaponModelVO::getPlatformName,
|
||||||
|
Collectors.mapping(WeaponModelVO::getComponentName, Collectors.toList())
|
||||||
|
));
|
||||||
|
|
||||||
|
return groupByPlatform.entrySet().stream()
|
||||||
|
.map(entry -> {
|
||||||
|
PlatformComponentNamesVO vo = new PlatformComponentNamesVO();
|
||||||
|
vo.setPlatformName(entry.getKey());
|
||||||
|
vo.setComponentNames(entry.getValue());
|
||||||
|
return vo;
|
||||||
|
})
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取通信组件的所有平台和组件
|
||||||
|
* @param scenarioId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<PlatformComponentNamesVO> getCommPlatformComponentNames(Integer scenarioId) {
|
||||||
|
return ruleMapper.getCommPlatformComponentNames(scenarioId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据平台id获取平台下所有组件
|
||||||
|
* @param platformId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<PlatformComponent> getComponents(Integer platformId) {
|
||||||
|
return ruleMapper.getComponents(platformId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取所有组件以及数量
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private List<ComponentCountVO> getModuleAndCount(){
|
||||||
|
List<ComponentCountVO> componentCountVOS = ruleMapper.getModuleAndCount();
|
||||||
|
if(CollUtil.isEmpty(componentCountVOS)){
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
return componentCountVOS;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Platform> findPlatformComponents(Integer scenarioId) {
|
||||||
|
List<Platform> platforms = ruleMapper.findPlatformComponents(scenarioId);
|
||||||
|
if(!CollUtil.isEmpty(platforms)){
|
||||||
|
return platforms;
|
||||||
|
}
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Platform> findAllPlatformComponents() {
|
||||||
|
return ruleMapper.findAllPlatformComponents();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
package com.solution.rule.service.impl;
|
||||||
|
|
||||||
|
import com.solution.rule.domain.Rule;
|
||||||
|
import com.solution.rule.mapper.RuleMapper;
|
||||||
|
import com.solution.rule.service.IRuleService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class RuleServiceImpl implements IRuleService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private RuleMapper ruleMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Rule selectRuleById(Integer id) {
|
||||||
|
return ruleMapper.selectRuleById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Rule> selectRuleList(Rule rule) {
|
||||||
|
return ruleMapper.selectRuleList(rule);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int insertRule(Rule rule) {
|
||||||
|
return ruleMapper.insertRule(rule);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int updateRule(Rule rule) {
|
||||||
|
return ruleMapper.updateRule(rule);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int deleteRuleById(Integer id) {
|
||||||
|
return ruleMapper.deleteRuleById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int deleteRuleByIds(Integer[] ids) {
|
||||||
|
return ruleMapper.deleteRuleByIds(ids);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
package com.solution.rule.strategy;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import com.solution.common.constant.ExceptionConstants;
|
||||||
|
import com.solution.rule.domain.RuleParam;
|
||||||
|
import com.solution.rule.domain.vo.PlatformWeaponAggregateVO;
|
||||||
|
import com.solution.rule.enums.SceneType;
|
||||||
|
import com.solution.rule.handler.RuleChainHandler;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class AirborneStrategy implements SceneStrategy{
|
||||||
|
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private RuleChainHandler ruleChainHandler;
|
||||||
|
/**
|
||||||
|
* 空降场景处理
|
||||||
|
* @param ruleParam
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<PlatformWeaponAggregateVO> execute(RuleParam ruleParam) {
|
||||||
|
if(ObjectUtil.isEmpty(ruleParam) || CollUtil.isEmpty(ruleParam.getWeaponModelDTOList())){
|
||||||
|
throw new RuntimeException(ExceptionConstants.PARAMETER_EXCEPTION);
|
||||||
|
}
|
||||||
|
|
||||||
|
ruleParam = ruleChainHandler.findRuleParam(ruleParam);
|
||||||
|
|
||||||
|
return ruleParam.getResultWeapons();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SceneType getSceneType() {
|
||||||
|
return SceneType.AIRBORNE;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
package com.solution.rule.strategy;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import com.solution.common.constant.ExceptionConstants;
|
||||||
|
import com.solution.rule.domain.RuleParam;
|
||||||
|
import com.solution.rule.domain.vo.PlatformWeaponAggregateVO;
|
||||||
|
import com.solution.rule.enums.SceneType;
|
||||||
|
import com.solution.rule.handler.RuleChainHandler;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class DefenseStrategy implements SceneStrategy{
|
||||||
|
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private RuleChainHandler ruleChainHandler;
|
||||||
|
/**
|
||||||
|
* 防御场景处理
|
||||||
|
* @param
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<PlatformWeaponAggregateVO> execute(RuleParam ruleParam) {
|
||||||
|
if(ObjectUtil.isEmpty(ruleParam) || CollUtil.isEmpty(ruleParam.getWeaponModelDTOList())){
|
||||||
|
throw new RuntimeException(ExceptionConstants.PARAMETER_EXCEPTION);
|
||||||
|
}
|
||||||
|
|
||||||
|
ruleParam = ruleChainHandler.findRuleParam(ruleParam);
|
||||||
|
|
||||||
|
|
||||||
|
return ruleParam.getResultWeapons();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SceneType getSceneType() {
|
||||||
|
return SceneType.DEFENSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.solution.rule.strategy;
|
||||||
|
|
||||||
|
import com.solution.rule.domain.RuleParam;
|
||||||
|
import com.solution.rule.domain.vo.PlatformWeaponAggregateVO;
|
||||||
|
import com.solution.rule.enums.SceneType;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface SceneStrategy {
|
||||||
|
|
||||||
|
List<PlatformWeaponAggregateVO> execute(RuleParam ruleParam);
|
||||||
|
|
||||||
|
SceneType getSceneType();
|
||||||
|
}
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
package com.solution.rule.strategy;
|
||||||
|
|
||||||
|
import com.solution.rule.enums.SceneType;
|
||||||
|
import com.solution.rule.strategy.SceneStrategy;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
import java.util.EnumMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class SceneStrategyFactory {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private List<SceneStrategy> strategyList;
|
||||||
|
|
||||||
|
private final Map<SceneType, SceneStrategy> strategyMap = new EnumMap<>(SceneType.class);
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void init() {
|
||||||
|
for (SceneStrategy strategy : strategyList) {
|
||||||
|
SceneType type = strategy.getSceneType();
|
||||||
|
if (strategyMap.containsKey(type)) {
|
||||||
|
throw new IllegalStateException("重复的场景类型: " + type);
|
||||||
|
}
|
||||||
|
strategyMap.put(type, strategy);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据前端传递的数字编码获取对应的策略
|
||||||
|
* @param code 前端传递的数字
|
||||||
|
* @return 策略实现
|
||||||
|
* @throws IllegalArgumentException 如果编码无效或策略未注册
|
||||||
|
*/
|
||||||
|
public SceneStrategy getStrategy(int code) {
|
||||||
|
SceneType type = SceneType.fromCode(code);
|
||||||
|
SceneStrategy strategy = strategyMap.get(type);
|
||||||
|
if (strategy == null) {
|
||||||
|
throw new IllegalArgumentException("未找到编码 " + code + " 对应的策略实现");
|
||||||
|
}
|
||||||
|
return strategy;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,114 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper
|
||||||
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.solution.rule.mapper.FireRuleMapper">
|
||||||
|
|
||||||
|
|
||||||
|
<resultMap id="platformComponentCountMap" type="com.solution.rule.domain.vo.WeaponModelVO">
|
||||||
|
<result property="platformName" column="platform_name"/>
|
||||||
|
<result property="componentName" column="component_name"/>
|
||||||
|
<result property="count" column="count"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<resultMap id="PlatformComponentNamesVOResultMap" type="com.solution.rule.domain.vo.PlatformComponentNamesVO">
|
||||||
|
<result property="platformName" column="platformName"/>
|
||||||
|
<result property="platformDescription" column="description"/>
|
||||||
|
<collection property="componentNames" ofType="java.lang.String">
|
||||||
|
<result column="componentName"/>
|
||||||
|
</collection>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<select id="getWeapon" resultMap="platformComponentCountMap">
|
||||||
|
SELECT
|
||||||
|
p.name AS platform_name,
|
||||||
|
pc.name AS component_name,
|
||||||
|
COUNT(pc.name) AS count
|
||||||
|
FROM platform p
|
||||||
|
LEFT JOIN platform_component pc ON p.id = pc.platform_id
|
||||||
|
GROUP BY p.id, p.name, pc.name
|
||||||
|
ORDER BY p.id, pc.name
|
||||||
|
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="getPlatformComponentNames" resultType="com.solution.rule.domain.vo.WeaponModelVO">
|
||||||
|
SELECT DISTINCT
|
||||||
|
p.name AS platformName,
|
||||||
|
pc.name AS componentName
|
||||||
|
FROM platform p
|
||||||
|
INNER JOIN platform_component pc ON p.id = pc.platform_id
|
||||||
|
WHERE pc.name IS NOT NULL
|
||||||
|
ORDER BY p.name, pc.name
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
<select id="getModuleAndCount" resultType="com.solution.rule.domain.vo.ComponentCountVO">
|
||||||
|
SELECT
|
||||||
|
name AS componentName,
|
||||||
|
COUNT(*) AS count
|
||||||
|
FROM platform_component
|
||||||
|
WHERE name IS NOT NULL
|
||||||
|
GROUP BY name
|
||||||
|
ORDER BY count DESC;
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="getCommPlatformComponentNames" resultMap="PlatformComponentNamesVOResultMap"
|
||||||
|
parameterType="java.lang.Integer">
|
||||||
|
SELECT
|
||||||
|
p.name AS platformName,
|
||||||
|
pc.name AS componentName,
|
||||||
|
p.description AS description
|
||||||
|
FROM platform p
|
||||||
|
INNER JOIN platform_component pc ON p.id = pc.platform_id
|
||||||
|
WHERE pc.type = 'comm'
|
||||||
|
AND p.scenario_id = #{scenarioId}
|
||||||
|
</select>
|
||||||
|
<select id="getComponents" resultType="com.solution.rule.domain.PlatformComponent"
|
||||||
|
parameterType="java.lang.Integer">
|
||||||
|
SELECT id,name,type,description,platform_id
|
||||||
|
FROM platform_component
|
||||||
|
WHERE platform_id = #{platformId}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<resultMap id="VPlatformComponentMap" type="com.solution.rule.domain.PlatformComponent">
|
||||||
|
<result property="id" column="id"/>
|
||||||
|
<result property="name" column="name"/>
|
||||||
|
<result property="type" column="type"/>
|
||||||
|
<result property="description" column="description"/>
|
||||||
|
<result property="platformId" column="platform_id"/>
|
||||||
|
<result property="num" column="num"/>
|
||||||
|
</resultMap>
|
||||||
|
<select id="findComponentsByPlatformId" resultMap="VPlatformComponentMap">
|
||||||
|
SELECT * FROM platform_component
|
||||||
|
WHERE platform_id=#{platformId}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<resultMap id="VPlatformMap" type="com.solution.rule.domain.Platform">
|
||||||
|
<result property="id" column="id"/>
|
||||||
|
<result property="name" column="name"/>
|
||||||
|
<result property="description" column="description"/>
|
||||||
|
<collection property="components"
|
||||||
|
ofType="com.solution.rule.domain.PlatformComponent"
|
||||||
|
column="id"
|
||||||
|
select="findComponentsByPlatformId"/>
|
||||||
|
</resultMap>
|
||||||
|
<select id="findPlatformComponents" resultMap="VPlatformMap"
|
||||||
|
parameterType="java.lang.Integer">
|
||||||
|
SELECT DISTINCT
|
||||||
|
p.*,
|
||||||
|
pc.*
|
||||||
|
FROM platform p
|
||||||
|
LEFT JOIN platform_component pc ON p.id = pc.platform_id
|
||||||
|
WHERE pc.type = 'comm'
|
||||||
|
AND p.scenario_id = #{scenarioId}
|
||||||
|
ORDER BY p.name,pc.name
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="findAllPlatformComponents" resultMap="VPlatformMap">
|
||||||
|
SELECT *
|
||||||
|
FROM platform
|
||||||
|
</select>
|
||||||
|
|
||||||
|
</mapper>
|
||||||
@@ -0,0 +1,97 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.solution.rule.mapper.RuleMapper">
|
||||||
|
|
||||||
|
<resultMap id="RuleResult" type="com.solution.rule.domain.Rule">
|
||||||
|
<id property="id" column="id"/>
|
||||||
|
<result property="name" column="name"/>
|
||||||
|
<result property="sceneType" column="scene_type"/>
|
||||||
|
<result property="conditions" column="conditions"/>
|
||||||
|
<result property="actions" column="actions"/>
|
||||||
|
<result property="priority" column="priority"/>
|
||||||
|
<result property="enabled" column="enabled"/>
|
||||||
|
<result property="createdTime" column="created_time"/>
|
||||||
|
<result property="updatedTime" column="updated_time"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<sql id="selectRuleVo">
|
||||||
|
select id, name, scene_type, conditions, actions, priority, enabled, created_time, updated_time
|
||||||
|
from rule
|
||||||
|
</sql>
|
||||||
|
|
||||||
|
<select id="selectRuleById" parameterType="Integer" resultMap="RuleResult">
|
||||||
|
<include refid="selectRuleVo"/>
|
||||||
|
where id = #{id}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectRuleList" parameterType="com.solution.rule.domain.Rule" resultMap="RuleResult">
|
||||||
|
<include refid="selectRuleVo"/>
|
||||||
|
<where>
|
||||||
|
<if test="name != null and name != ''">
|
||||||
|
AND name like concat('%', #{name}, '%')
|
||||||
|
</if>
|
||||||
|
<if test="sceneType != null">
|
||||||
|
AND scene_type = #{sceneType}
|
||||||
|
</if>
|
||||||
|
<if test="enabled != null">
|
||||||
|
AND enabled = #{enabled}
|
||||||
|
</if>
|
||||||
|
</where>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<insert id="insertRule" parameterType="com.solution.rule.domain.Rule" useGeneratedKeys="true" keyProperty="id">
|
||||||
|
insert into rule
|
||||||
|
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||||
|
<if test="name != null and name != ''">name,</if>
|
||||||
|
<if test="sceneType != null">scene_type,</if>
|
||||||
|
<if test="conditions != null">conditions,</if>
|
||||||
|
<if test="actions != null">actions,</if>
|
||||||
|
<if test="priority != null">priority,</if>
|
||||||
|
<if test="enabled != null">enabled,</if>
|
||||||
|
created_time,
|
||||||
|
updated_time
|
||||||
|
</trim>
|
||||||
|
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||||
|
<if test="name != null and name != ''">#{name},</if>
|
||||||
|
<if test="sceneType != null">#{sceneType},</if>
|
||||||
|
<if test="conditions != null">#{conditions},</if>
|
||||||
|
<if test="actions != null">#{actions},</if>
|
||||||
|
<if test="priority != null">#{priority},</if>
|
||||||
|
<if test="enabled != null">#{enabled},</if>
|
||||||
|
now(),
|
||||||
|
now()
|
||||||
|
</trim>
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
<update id="updateRule" parameterType="com.solution.rule.domain.Rule">
|
||||||
|
update rule
|
||||||
|
<set>
|
||||||
|
<if test="name != null and name != ''">name = #{name},</if>
|
||||||
|
<if test="sceneType != null">scene_type = #{sceneType},</if>
|
||||||
|
<if test="conditions != null">conditions = #{conditions},</if>
|
||||||
|
<if test="actions != null">actions = #{actions},</if>
|
||||||
|
<if test="priority != null">priority = #{priority},</if>
|
||||||
|
<if test="enabled != null">enabled = #{enabled},</if>
|
||||||
|
updated_time = now()
|
||||||
|
</set>
|
||||||
|
where id = #{id}
|
||||||
|
</update>
|
||||||
|
|
||||||
|
<delete id="deleteRuleById" parameterType="Integer">
|
||||||
|
delete from rule where id = #{id}
|
||||||
|
</delete>
|
||||||
|
|
||||||
|
<!--<delete id="deleteRuleByIds" parameterType="String">
|
||||||
|
delete from rule where id in
|
||||||
|
<foreach item="id" collection="array" open="(" separator="," close=")">
|
||||||
|
#{id}
|
||||||
|
</foreach>
|
||||||
|
</delete>-->
|
||||||
|
<delete id="deleteRuleByIds">
|
||||||
|
delete from rule where id in
|
||||||
|
<foreach item="id" collection="ids" open="(" separator="," close=")">
|
||||||
|
#{id}
|
||||||
|
</foreach>
|
||||||
|
</delete>
|
||||||
|
|
||||||
|
</mapper>
|
||||||
45
auto-solution-scene/pom.xml
Normal file
45
auto-solution-scene/pom.xml
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<parent>
|
||||||
|
<artifactId>solution</artifactId>
|
||||||
|
<groupId>com.solution</groupId>
|
||||||
|
<version>3.9.1</version>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>solution-scene</artifactId>
|
||||||
|
|
||||||
|
<description>
|
||||||
|
scene模块
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.solution</groupId>
|
||||||
|
<artifactId>solution-rule</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- 通用工具-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.solution</groupId>
|
||||||
|
<artifactId>solution-common</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.springfox</groupId>
|
||||||
|
<artifactId>springfox-boot-starter</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
</project>
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
package com.solution.scene.controller;
|
||||||
|
|
||||||
|
import com.solution.common.annotation.Log;
|
||||||
|
import com.solution.common.core.controller.BaseController;
|
||||||
|
import com.solution.common.core.domain.AjaxResult;
|
||||||
|
import com.solution.common.core.page.TableDataInfo;
|
||||||
|
import com.solution.common.enums.BusinessType;
|
||||||
|
import com.solution.scene.domain.AfsimScenario;
|
||||||
|
import com.solution.scene.domain.AfsimScenarioForm;
|
||||||
|
import com.solution.scene.service.SceneService;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 场景管理
|
||||||
|
*/
|
||||||
|
@Api("场景管理")
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/api/system/scene")
|
||||||
|
public class SceneController extends BaseController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SceneService sceneService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存场景配置
|
||||||
|
*/
|
||||||
|
@ApiOperation("保存场景配置")
|
||||||
|
@PostMapping("/saveSceneConfig")
|
||||||
|
@Log(title = "行为树主", businessType = BusinessType.INSERT)
|
||||||
|
public AjaxResult saveSceneConfig(@RequestBody AfsimScenarioForm afsimScenario)
|
||||||
|
{
|
||||||
|
return toAjax(sceneService.saveOrUpdate(afsimScenario));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取场景列表
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/list")
|
||||||
|
@ApiOperation("获取场景列表")
|
||||||
|
public TableDataInfo list(){
|
||||||
|
startPage();
|
||||||
|
List<AfsimScenario> list = sceneService.selectSceneList();
|
||||||
|
return getDataTable(list);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
package com.solution.scene.domain;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 场景配置表
|
||||||
|
* 对应表 afsim_scenario
|
||||||
|
*/
|
||||||
|
public class AfsimScenario {
|
||||||
|
private Integer id;
|
||||||
|
private String name;
|
||||||
|
private String description;
|
||||||
|
private String scenarioPath;
|
||||||
|
private String communicationGraph; // 用于存储场景中的通讯关系
|
||||||
|
|
||||||
|
public Integer getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Integer id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDescription(String description) {
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getScenarioPath() {
|
||||||
|
return scenarioPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setScenarioPath(String scenarioPath) {
|
||||||
|
this.scenarioPath = scenarioPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCommunicationGraph() {
|
||||||
|
return communicationGraph;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCommunicationGraph(String communicationGraph) {
|
||||||
|
this.communicationGraph = communicationGraph;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "AfsimScenario{" +
|
||||||
|
"id=" + id +
|
||||||
|
", name='" + name + '\'' +
|
||||||
|
", description='" + description + '\'' +
|
||||||
|
", scenarioPath='" + scenarioPath + '\'' +
|
||||||
|
", communicationGraph='" + communicationGraph + '\'' +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package com.solution.scene.domain;
|
||||||
|
/*
|
||||||
|
* This file is part of the kernelstudio package.
|
||||||
|
*
|
||||||
|
* (c) 2014-2026 zlin <admin@kernelstudio.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE file
|
||||||
|
* that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class AfsimScenarioForm extends AfsimScenario {
|
||||||
|
|
||||||
|
private List<ScenarioRelation> relations;
|
||||||
|
|
||||||
|
public List<ScenarioRelation> getRelations() {
|
||||||
|
return relations;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRelations(List<ScenarioRelation> relations) {
|
||||||
|
this.relations = relations;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,108 @@
|
|||||||
|
package com.solution.scene.domain;
|
||||||
|
/*
|
||||||
|
* This file is part of the kernelstudio package.
|
||||||
|
*
|
||||||
|
* (c) 2014-2026 zlin <admin@kernelstudio.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE file
|
||||||
|
* that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import com.solution.rule.domain.Platform;
|
||||||
|
import com.solution.rule.domain.PlatformComponent;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
public class ScenarioRelation implements Serializable {
|
||||||
|
|
||||||
|
private String edgeId;
|
||||||
|
|
||||||
|
private String sourceId;
|
||||||
|
|
||||||
|
private String sourcePort;
|
||||||
|
|
||||||
|
private Platform sourcePlatform;
|
||||||
|
|
||||||
|
private PlatformComponent sourceComponent;
|
||||||
|
|
||||||
|
private String targetId;
|
||||||
|
|
||||||
|
private String targetPort;
|
||||||
|
|
||||||
|
private Platform targetPlatform;
|
||||||
|
|
||||||
|
private PlatformComponent targetComponent;
|
||||||
|
|
||||||
|
public String getEdgeId() {
|
||||||
|
return edgeId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEdgeId(String edgeId) {
|
||||||
|
this.edgeId = edgeId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSourceId() {
|
||||||
|
return sourceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSourceId(String sourceId) {
|
||||||
|
this.sourceId = sourceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSourcePort() {
|
||||||
|
return sourcePort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSourcePort(String sourcePort) {
|
||||||
|
this.sourcePort = sourcePort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Platform getSourcePlatform() {
|
||||||
|
return sourcePlatform;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSourcePlatform(Platform sourcePlatform) {
|
||||||
|
this.sourcePlatform = sourcePlatform;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PlatformComponent getSourceComponent() {
|
||||||
|
return sourceComponent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSourceComponent(PlatformComponent sourceComponent) {
|
||||||
|
this.sourceComponent = sourceComponent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTargetId() {
|
||||||
|
return targetId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTargetId(String targetId) {
|
||||||
|
this.targetId = targetId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTargetPort() {
|
||||||
|
return targetPort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTargetPort(String targetPort) {
|
||||||
|
this.targetPort = targetPort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Platform getTargetPlatform() {
|
||||||
|
return targetPlatform;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTargetPlatform(Platform targetPlatform) {
|
||||||
|
this.targetPlatform = targetPlatform;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PlatformComponent getTargetComponent() {
|
||||||
|
return targetComponent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTargetComponent(PlatformComponent targetComponent) {
|
||||||
|
this.targetComponent = targetComponent;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package com.solution.scene.mapper;
|
||||||
|
|
||||||
|
import com.solution.scene.domain.AfsimScenario;
|
||||||
|
import com.solution.scene.domain.AfsimScenarioForm;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface SceneMapper {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存场景配置
|
||||||
|
* @param afsimScenario
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
int insert(AfsimScenarioForm afsimScenario);
|
||||||
|
|
||||||
|
int update(AfsimScenarioForm afsimScenario);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取场景列表
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<AfsimScenario> selectSceneList();
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package com.solution.scene.service;
|
||||||
|
|
||||||
|
import com.solution.scene.domain.AfsimScenario;
|
||||||
|
import com.solution.scene.domain.AfsimScenarioForm;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface SceneService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存场景配置
|
||||||
|
* @param afsimScenario
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
int insert(AfsimScenarioForm afsimScenario);
|
||||||
|
|
||||||
|
int update(AfsimScenarioForm afsimScenario);
|
||||||
|
|
||||||
|
int saveOrUpdate(AfsimScenarioForm afsimScenario);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取场景列表
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<AfsimScenario> selectSceneList();
|
||||||
|
}
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
package com.solution.scene.service.impl;
|
||||||
|
|
||||||
|
import com.solution.scene.domain.AfsimScenario;
|
||||||
|
import com.solution.scene.domain.AfsimScenarioForm;
|
||||||
|
import com.solution.scene.mapper.SceneMapper;
|
||||||
|
import com.solution.scene.service.SceneService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class SceneServiceImpl implements SceneService {
|
||||||
|
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SceneMapper sceneMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int insert(AfsimScenarioForm afsimScenario) {
|
||||||
|
return sceneMapper.insert(afsimScenario);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int update(AfsimScenarioForm afsimScenario) {
|
||||||
|
return sceneMapper.update(afsimScenario);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int saveOrUpdate(AfsimScenarioForm afsimScenario) {
|
||||||
|
if (null != afsimScenario.getId() && afsimScenario.getId() > 0) {
|
||||||
|
return sceneMapper.update(afsimScenario);
|
||||||
|
}
|
||||||
|
return insert(afsimScenario);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取场景列表
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<AfsimScenario> selectSceneList() {
|
||||||
|
return sceneMapper.selectSceneList();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper
|
||||||
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.solution.scene.mapper.SceneMapper">
|
||||||
|
|
||||||
|
<resultMap id="SceneMap" type="com.solution.scene.domain.AfsimScenario">
|
||||||
|
<result property="id" column="id" />
|
||||||
|
<result property="name" column="name" />
|
||||||
|
<result property="description" column="description" />
|
||||||
|
<result property="scenarioPath" column="scenario_path" />
|
||||||
|
<result property="communicationGraph" column="communication_graph" />
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<insert id="insert" parameterType="com.solution.scene.domain.AfsimScenario">
|
||||||
|
INSERT INTO afsim_scenario (name, description, scenario_path, communication_graph)
|
||||||
|
VALUES (#{name}, #{description}, #{scenarioPath}, #{communicationGraph})
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
<select id="selectSceneList" resultMap="SceneMap">
|
||||||
|
SELECT id, name, description, scenario_path, communication_graph FROM afsim_scenario
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<insert id="update" parameterType="com.solution.scene.domain.AfsimScenario">
|
||||||
|
update afsim_scenario
|
||||||
|
set name=#{name},
|
||||||
|
description=#{description},
|
||||||
|
scenario_path=#{scenarioPath},
|
||||||
|
communication_graph=#{communicationGraph}
|
||||||
|
where id=#{id}
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
</mapper>
|
||||||
1184
modeler/.editorconfig
Normal file
1184
modeler/.editorconfig
Normal file
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user