From ce4c23eff80b3507b2384d1d55b27c44003ae2a9 Mon Sep 17 00:00:00 2001 From: liangyun Date: Tue, 17 Mar 2026 09:19:00 +0800 Subject: [PATCH] save --- .../controller/rule/FireRuleController.java | 7 +- .../src/main/resources/application-druid.yml | 6 +- .../solution/rule/mapper/FireRuleMapper.java | 2 + .../rule/service/FireRuleService.java | 2 + .../service/impl/FireRuleServiceImpl.java | 5 + .../resources/mapper/rule/FireRuleMapper.xml | 5 + auto-solution-scene/pom.xml | 6 + .../scene/controller/SceneController.java | 3 +- .../scene/domain/AfsimScenarioForm.java | 25 +++ .../scene/domain/ScenarioRelation.java | 108 +++++++++++ .../solution/scene/mapper/SceneMapper.java | 5 +- .../solution/scene/service/SceneService.java | 7 +- .../scene/service/impl/SceneServiceImpl.java | 7 +- .../src/views/decision/communication/api.ts | 3 +- .../decision/communication/communication.vue | 13 +- .../src/views/decision/communication/node.vue | 5 +- .../decision/communication/nodes-card.vue | 35 ++-- .../decision/communication/platform-card.vue | 1 + .../views/decision/communication/relation.ts | 134 +++++++++++++ .../src/views/decision/communication/types.ts | 37 ++-- .../src/views/decision/communication/utils.ts | 49 +++++ modeler/src/views/decision/graph/canvas.ts | 2 +- modeler/src/views/decision/graph/element.ts | 2 +- modeler/src/views/decision/graph/hooks.ts | 1 + modeler/src/views/decision/graph/index.ts | 14 +- modeler/src/views/decision/graph/utils.ts | 4 +- .../views/decision/rule/PlatformSelect.vue | 168 +++++++++++++++++ modeler/src/views/decision/rule/api.ts | 4 + .../src/views/decision/rule/management.vue | 176 ++++++++++++++++-- modeler/src/views/decision/rule/types.ts | 7 +- modeler/src/views/decision/types/index.ts | 10 + modeler/src/views/decision/types/platform.ts | 43 +++++ modeler/types/components.d.ts | 4 + 33 files changed, 813 insertions(+), 87 deletions(-) create mode 100644 auto-solution-scene/src/main/java/com/solution/scene/domain/AfsimScenarioForm.java create mode 100644 auto-solution-scene/src/main/java/com/solution/scene/domain/ScenarioRelation.java create mode 100644 modeler/src/views/decision/communication/relation.ts create mode 100644 modeler/src/views/decision/rule/PlatformSelect.vue create mode 100644 modeler/src/views/decision/types/index.ts create mode 100644 modeler/src/views/decision/types/platform.ts diff --git a/auto-solution-admin/src/main/java/com/solution/web/controller/rule/FireRuleController.java b/auto-solution-admin/src/main/java/com/solution/web/controller/rule/FireRuleController.java index 38d186a..e8e8b53 100644 --- a/auto-solution-admin/src/main/java/com/solution/web/controller/rule/FireRuleController.java +++ b/auto-solution-admin/src/main/java/com/solution/web/controller/rule/FireRuleController.java @@ -59,10 +59,15 @@ public class FireRuleController extends BaseController { * @return */ @GetMapping("/platforms/{scenarioId}") - public AjaxResult platforms(@PathVariable Integer scenarioId){ + public AjaxResult platformsScenarioId(@PathVariable Integer scenarioId){ return success(ruleService.findPlatformComponents(scenarioId)); } + @GetMapping("/platforms") + public AjaxResult platforms(){ + return success(ruleService.findAllPlatformComponents()); + } + /** * 根据平台id获取平台下所有组件 * @param platformId diff --git a/auto-solution-admin/src/main/resources/application-druid.yml b/auto-solution-admin/src/main/resources/application-druid.yml index d9bbb1f..3cfb6ea 100644 --- a/auto-solution-admin/src/main/resources/application-druid.yml +++ b/auto-solution-admin/src/main/resources/application-druid.yml @@ -6,11 +6,9 @@ spring: druid: # 主库数据源 master: -# 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 + url: jdbc:mysql://127.0.0.1:3306/autosolution_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root -# password: 123456 - password: 1234 + password: 123456 # 从库数据源 slave: # 从数据源开关/默认关闭 diff --git a/auto-solution-rule/src/main/java/com/solution/rule/mapper/FireRuleMapper.java b/auto-solution-rule/src/main/java/com/solution/rule/mapper/FireRuleMapper.java index 8db0fde..5c821bb 100644 --- a/auto-solution-rule/src/main/java/com/solution/rule/mapper/FireRuleMapper.java +++ b/auto-solution-rule/src/main/java/com/solution/rule/mapper/FireRuleMapper.java @@ -42,4 +42,6 @@ public interface FireRuleMapper { List getComponents(Integer platformId); List findPlatformComponents(Integer scenarioId); + + List findAllPlatformComponents(); } diff --git a/auto-solution-rule/src/main/java/com/solution/rule/service/FireRuleService.java b/auto-solution-rule/src/main/java/com/solution/rule/service/FireRuleService.java index 29dae9f..74f98b6 100644 --- a/auto-solution-rule/src/main/java/com/solution/rule/service/FireRuleService.java +++ b/auto-solution-rule/src/main/java/com/solution/rule/service/FireRuleService.java @@ -45,4 +45,6 @@ public interface FireRuleService { * @return */ List findPlatformComponents(Integer scenarioId); + + List findAllPlatformComponents(); } diff --git a/auto-solution-rule/src/main/java/com/solution/rule/service/impl/FireRuleServiceImpl.java b/auto-solution-rule/src/main/java/com/solution/rule/service/impl/FireRuleServiceImpl.java index 83a727d..33bf00d 100644 --- a/auto-solution-rule/src/main/java/com/solution/rule/service/impl/FireRuleServiceImpl.java +++ b/auto-solution-rule/src/main/java/com/solution/rule/service/impl/FireRuleServiceImpl.java @@ -176,4 +176,9 @@ public class FireRuleServiceImpl implements FireRuleService { return new ArrayList<>(); } + @Override + public List findAllPlatformComponents() { + return ruleMapper.findAllPlatformComponents(); + } + } diff --git a/auto-solution-rule/src/main/resources/mapper/rule/FireRuleMapper.xml b/auto-solution-rule/src/main/resources/mapper/rule/FireRuleMapper.xml index 0477daa..a4c577f 100644 --- a/auto-solution-rule/src/main/resources/mapper/rule/FireRuleMapper.xml +++ b/auto-solution-rule/src/main/resources/mapper/rule/FireRuleMapper.xml @@ -118,4 +118,9 @@ ORDER BY p.name + + \ No newline at end of file diff --git a/auto-solution-scene/pom.xml b/auto-solution-scene/pom.xml index d494b0d..842a4ce 100644 --- a/auto-solution-scene/pom.xml +++ b/auto-solution-scene/pom.xml @@ -18,6 +18,12 @@ + + + com.solution + solution-rule + + com.solution diff --git a/auto-solution-scene/src/main/java/com/solution/scene/controller/SceneController.java b/auto-solution-scene/src/main/java/com/solution/scene/controller/SceneController.java index a255588..5825964 100644 --- a/auto-solution-scene/src/main/java/com/solution/scene/controller/SceneController.java +++ b/auto-solution-scene/src/main/java/com/solution/scene/controller/SceneController.java @@ -6,6 +6,7 @@ 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; @@ -32,7 +33,7 @@ public class SceneController extends BaseController { @ApiOperation("保存场景配置") @PostMapping("/saveSceneConfig") @Log(title = "行为树主", businessType = BusinessType.INSERT) - public AjaxResult saveSceneConfig(@RequestBody AfsimScenario afsimScenario) + public AjaxResult saveSceneConfig(@RequestBody AfsimScenarioForm afsimScenario) { return toAjax(sceneService.saveOrUpdate(afsimScenario)); } diff --git a/auto-solution-scene/src/main/java/com/solution/scene/domain/AfsimScenarioForm.java b/auto-solution-scene/src/main/java/com/solution/scene/domain/AfsimScenarioForm.java new file mode 100644 index 0000000..5d96fd5 --- /dev/null +++ b/auto-solution-scene/src/main/java/com/solution/scene/domain/AfsimScenarioForm.java @@ -0,0 +1,25 @@ +package com.solution.scene.domain; +/* + * This file is part of the kernelstudio package. + * + * (c) 2014-2026 zlin + * + * 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 relations; + + public List getRelations() { + return relations; + } + + public void setRelations(List relations) { + this.relations = relations; + } + +} diff --git a/auto-solution-scene/src/main/java/com/solution/scene/domain/ScenarioRelation.java b/auto-solution-scene/src/main/java/com/solution/scene/domain/ScenarioRelation.java new file mode 100644 index 0000000..cd1ddb0 --- /dev/null +++ b/auto-solution-scene/src/main/java/com/solution/scene/domain/ScenarioRelation.java @@ -0,0 +1,108 @@ +package com.solution.scene.domain; +/* + * This file is part of the kernelstudio package. + * + * (c) 2014-2026 zlin + * + * 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; + } + +} diff --git a/auto-solution-scene/src/main/java/com/solution/scene/mapper/SceneMapper.java b/auto-solution-scene/src/main/java/com/solution/scene/mapper/SceneMapper.java index 4b6585d..03bec24 100644 --- a/auto-solution-scene/src/main/java/com/solution/scene/mapper/SceneMapper.java +++ b/auto-solution-scene/src/main/java/com/solution/scene/mapper/SceneMapper.java @@ -1,6 +1,7 @@ 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; @@ -13,9 +14,9 @@ public interface SceneMapper { * @param afsimScenario * @return */ - int insert(AfsimScenario afsimScenario); + int insert(AfsimScenarioForm afsimScenario); - int update(AfsimScenario afsimScenario); + int update(AfsimScenarioForm afsimScenario); /** diff --git a/auto-solution-scene/src/main/java/com/solution/scene/service/SceneService.java b/auto-solution-scene/src/main/java/com/solution/scene/service/SceneService.java index 67305b3..15a4933 100644 --- a/auto-solution-scene/src/main/java/com/solution/scene/service/SceneService.java +++ b/auto-solution-scene/src/main/java/com/solution/scene/service/SceneService.java @@ -1,6 +1,7 @@ package com.solution.scene.service; import com.solution.scene.domain.AfsimScenario; +import com.solution.scene.domain.AfsimScenarioForm; import java.util.List; @@ -11,11 +12,11 @@ public interface SceneService { * @param afsimScenario * @return */ - int insert(AfsimScenario afsimScenario); + int insert(AfsimScenarioForm afsimScenario); - int update(AfsimScenario afsimScenario); + int update(AfsimScenarioForm afsimScenario); - int saveOrUpdate(AfsimScenario afsimScenario); + int saveOrUpdate(AfsimScenarioForm afsimScenario); /** * 获取场景列表 diff --git a/auto-solution-scene/src/main/java/com/solution/scene/service/impl/SceneServiceImpl.java b/auto-solution-scene/src/main/java/com/solution/scene/service/impl/SceneServiceImpl.java index f1a43fa..75deac0 100644 --- a/auto-solution-scene/src/main/java/com/solution/scene/service/impl/SceneServiceImpl.java +++ b/auto-solution-scene/src/main/java/com/solution/scene/service/impl/SceneServiceImpl.java @@ -1,6 +1,7 @@ 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; @@ -16,17 +17,17 @@ public class SceneServiceImpl implements SceneService { private SceneMapper sceneMapper; @Override - public int insert(AfsimScenario afsimScenario) { + public int insert(AfsimScenarioForm afsimScenario) { return sceneMapper.insert(afsimScenario); } @Override - public int update(AfsimScenario afsimScenario) { + public int update(AfsimScenarioForm afsimScenario) { return sceneMapper.update(afsimScenario); } @Override - public int saveOrUpdate(AfsimScenario afsimScenario) { + public int saveOrUpdate(AfsimScenarioForm afsimScenario) { if (null != afsimScenario.getId() && afsimScenario.getId() > 0) { return sceneMapper.update(afsimScenario); } diff --git a/modeler/src/views/decision/communication/api.ts b/modeler/src/views/decision/communication/api.ts index 9bb20a1..9f41d12 100644 --- a/modeler/src/views/decision/communication/api.ts +++ b/modeler/src/views/decision/communication/api.ts @@ -8,7 +8,8 @@ */ import { HttpRequestClient } from '@/utils/request'; -import type { PlatformWithComponentsResponse, ScenarioPageableResponse, ScenarioRequest, Scenario } from './types'; +import type { Scenario, ScenarioPageableResponse, ScenarioRequest } from './types'; +import type { PlatformWithComponentsResponse } from '../types'; import type { BasicResponse } from '@/types'; const req = HttpRequestClient.create({ diff --git a/modeler/src/views/decision/communication/communication.vue b/modeler/src/views/decision/communication/communication.vue index 061844a..757fe09 100644 --- a/modeler/src/views/decision/communication/communication.vue +++ b/modeler/src/views/decision/communication/communication.vue @@ -63,6 +63,7 @@ import { createGraphScenarioElement, createGraphTaskElementFromScenario } from ' import PlatformCard from './platform-card.vue'; import NodesCard from './nodes-card.vue'; import { saveScenario } from './api'; +import {resolveConnectionRelation} from './relation' const TeleportContainer = defineComponent(getTeleport()); @@ -194,7 +195,6 @@ export default defineComponent({ }; const handleSelect = (scenario: Scenario) => { - console.info('handleSelect', scenario); let nodeGraph: GraphContainer | null = null; try { nodeGraph = JSON.parse(scenario.communicationGraph as unknown as string) as unknown as GraphContainer; @@ -210,10 +210,10 @@ export default defineComponent({ currentScenario.value = { ...scenario, graph: nodeGraph, + relations: [] }; currentScenarioEditing.value = true; createElements(); - }; const createElements = () => { @@ -228,7 +228,6 @@ export default defineComponent({ if (currentScenario.value?.graph.nodes) { currentScenario.value?.graph.nodes.forEach(ele => { const node = createGraphScenarioElement(ele as GraphTaskElement); - console.info('create node: ', ele); // 将节点添加到画布 graph.value?.addNode(node as Node); }); @@ -255,10 +254,11 @@ export default defineComponent({ name: null, description: null, communicationGraph: null, + relations: [], graph: { edges: [], nodes: [], - } + }, }; currentGraph.value = { edges: [], @@ -341,6 +341,10 @@ export default defineComponent({ const handleSave = () => { const graphData: GraphContainer = resolveGraph(graph.value as Graph); + + const relations = resolveConnectionRelation(graph.value as Graph); + console.error('relations',relations) + console.info('handleSave', graphData); if (!currentScenario.value) { message.error('当前决策树不存在'); @@ -350,6 +354,7 @@ export default defineComponent({ ...currentScenario.value, graph: graphData, communicationGraph: JSON.stringify(graphData), + relations: relations }; if (!newScenario.name) { message.error('场景名称不能为空.'); diff --git a/modeler/src/views/decision/communication/node.vue b/modeler/src/views/decision/communication/node.vue index edd3b0f..cc074e7 100644 --- a/modeler/src/views/decision/communication/node.vue +++ b/modeler/src/views/decision/communication/node.vue @@ -23,9 +23,11 @@ >
@@ -38,9 +40,11 @@
@@ -130,7 +134,6 @@ export default defineComponent({ onMounted(() => { _props.node?.on('change:data', handleDataChange); - console.error('element',element.value) }); onUnmounted(() => { diff --git a/modeler/src/views/decision/communication/nodes-card.vue b/modeler/src/views/decision/communication/nodes-card.vue index da38e98..da5ebc1 100644 --- a/modeler/src/views/decision/communication/nodes-card.vue +++ b/modeler/src/views/decision/communication/nodes-card.vue @@ -27,10 +27,11 @@ \ No newline at end of file diff --git a/modeler/src/views/decision/rule/api.ts b/modeler/src/views/decision/rule/api.ts index 30b1d34..d7d2ae3 100644 --- a/modeler/src/views/decision/rule/api.ts +++ b/modeler/src/views/decision/rule/api.ts @@ -9,6 +9,7 @@ import { HttpRequestClient } from '@/utils/request'; import type { FireRule, FireRulePageableResponse, FireRuleRequest } from './types'; +import type { PlatformWithComponentsResponse } from '../types'; import type { BasicResponse } from '@/types'; const req = HttpRequestClient.create({ @@ -31,5 +32,8 @@ export const deleteFireRule = (id: number): Promise => { return req.delete(`/system/rule/${id}`); }; +export const findAllPlatformWithComponents = (): Promise => { + return req.get(`/system/firerule/platforms`); +}; \ No newline at end of file diff --git a/modeler/src/views/decision/rule/management.vue b/modeler/src/views/decision/rule/management.vue index ab2d29a..24d54ad 100644 --- a/modeler/src/views/decision/rule/management.vue +++ b/modeler/src/views/decision/rule/management.vue @@ -75,18 +75,52 @@ - + +
+
+ + + + + + + + + + + +
+
+
- + +
+
+ + + + + + + + + + + +
+
+