diff --git a/auto-solution-admin/src/main/java/com/solution/web/core/BehaviortreeProcessor.java b/auto-solution-admin/src/main/java/com/solution/web/core/BehaviortreeProcessor.java index d51d846..2c41d49 100644 --- a/auto-solution-admin/src/main/java/com/solution/web/core/BehaviortreeProcessor.java +++ b/auto-solution-admin/src/main/java/com/solution/web/core/BehaviortreeProcessor.java @@ -20,8 +20,11 @@ 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 org.springframework.util.StringUtils; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; @Component @@ -98,10 +101,17 @@ public class BehaviortreeProcessor { instanceKeyMap.put(node.getKey(), instance); if (node.hasParameters()) { - // 插入parameter nodeparameter - for (Templateparameterdef parameter : node.getParameters()) { - Nodeparameter nodeparameter = createNodeParameter(behaviortree, parameter, instance); - nodeparameterService.insertNodeparameter(nodeparameter); + if (node.isMultiable()) { + List nodeparameters = createMultiableNodeparameter(behaviortree, node, instance); + for (Nodeparameter nodeparameter : nodeparameters) { + nodeparameterService.insertNodeparameter(nodeparameter); + } + } else { + // 插入parameter nodeparameter + for (Templateparameterdef parameter : node.getParameters()) { + Nodeparameter nodeparameter = createNodeParameter(behaviortree, parameter, instance); + nodeparameterService.insertNodeparameter(nodeparameter); + } } } nodeKeyIndexMap.put(node.getKey(), index); @@ -148,6 +158,47 @@ public class BehaviortreeProcessor { return connection; } + private List createMultiableNodeparameter(Behaviortree behaviortree, GraphNode node, + Treenodeinstance instance) { + + List nodeparameters = new ArrayList<>(); + + Map> idValues = new HashMap<>(); + List tmpValues = null; + Map> mappedValues = new HashMap<>(); + List tmpDefs = null; + + for (Templateparameterdef parameter : node.getParameters()) { + tmpDefs = mappedValues.get(parameter.getId() ); + if (null == tmpDefs) { + tmpDefs = new ArrayList<>(); + } + tmpDefs.add(parameter); + mappedValues.put(parameter.getId(), tmpDefs); + + tmpValues = idValues.get(parameter.getId() ); + if (null == tmpValues) { + tmpValues = new ArrayList<>(); + } + tmpValues.add(parameter.getDefaultValue()); + idValues.put(parameter.getId(), tmpValues); + } + + int index = 0; + for (Long id : idValues.keySet()) { + tmpValues = idValues.get(id); + Nodeparameter nodeparameter = new Nodeparameter(); + nodeparameter.setTreeId(behaviortree.getId()); + nodeparameter.setNodeInstanceId(instance.getId()); + nodeparameter.setParamDefId(id); + nodeparameter.setValue(StringUtils.collectionToCommaDelimitedString(tmpValues)); + nodeparameter.setGroupIndex(index); + nodeparameters.add(nodeparameter); + index++; + } + return nodeparameters; + } + private Nodeparameter createNodeParameter(Behaviortree behaviortree, Templateparameterdef parameter, Treenodeinstance instance) { Nodeparameter nodeparameter = new Nodeparameter(); @@ -155,6 +206,7 @@ public class BehaviortreeProcessor { nodeparameter.setNodeInstanceId(instance.getId()); nodeparameter.setParamDefId(parameter.getId()); nodeparameter.setValue(parameter.getDefaultValue()); + nodeparameter.setGroupIndex(parameter.getGroupIndex()); return nodeparameter; } diff --git a/modeler/src/views/decision/api.ts b/modeler/src/views/decision/api.ts new file mode 100644 index 0000000..b1a4096 --- /dev/null +++ b/modeler/src/views/decision/api.ts @@ -0,0 +1,21 @@ +/* + * This file is part of the kernelstudio package. + * + * (c) 2014-2025 zlin + * + * For the full copyright and license information, please view the LICENSE file + * that was distributed with this source code. + */ + +import { HttpRequestClient } from '@/utils/request'; +import type { BasicResponse } from '@/types'; +import type { PlatformListableResponse } from './types'; + +const req = HttpRequestClient.create({ + baseURL: '/api', +}); + + +export const findAllBasicPlatforms = (): Promise => { + return req.get('/system/firerule/platforms/basic'); +}; \ No newline at end of file diff --git a/modeler/src/views/decision/communication/relation.ts b/modeler/src/views/decision/communication/relation.ts index 1fe271e..72e8226 100644 --- a/modeler/src/views/decision/communication/relation.ts +++ b/modeler/src/views/decision/communication/relation.ts @@ -7,8 +7,9 @@ * that was distributed with this source code. */ -import { Graph, Node,Edge } from '@antv/x6'; -import type { Platform, PlatformComponent, PlatformRelation } from './types'; +import { Edge, Graph, Node } from '@antv/x6'; +import type { PlatformRelation } from './types'; +import type { Platform, PlatformComponent } from '../types'; import type { GraphTaskElement } from '../graph'; /** diff --git a/modeler/src/views/decision/designer/designer.vue b/modeler/src/views/decision/designer/designer.vue index 8364d4e..177e3cc 100644 --- a/modeler/src/views/decision/designer/designer.vue +++ b/modeler/src/views/decision/designer/designer.vue @@ -37,6 +37,7 @@ (null); const changed = ref(false); const treesCardRef = ref | null>(null); + const platforms = ref([]); const { handleGraphEvent, @@ -111,6 +114,13 @@ export default defineComponent({ resizeCanvas, } = useGraphCanvas(); + const loadPlatforms = () => { + platforms.value = []; + findAllBasicPlatforms().then(r => { + platforms.value = r.data ?? []; + }); + }; + // 处理拖动开始 const handleDragStart = (nm: NodeDragTemplate) => { draggedNodeData.value = nm; @@ -393,6 +403,7 @@ export default defineComponent({ // 初始化 onMounted(() => { init(); + loadPlatforms(); }); // 清理 @@ -410,6 +421,7 @@ export default defineComponent({ }); return { + platforms, treesCardRef, handleCreateTree, currentTreeEditing, diff --git a/modeler/src/views/decision/designer/properties.vue b/modeler/src/views/decision/designer/properties.vue index 9f96f84..32443a0 100644 --- a/modeler/src/views/decision/designer/properties.vue +++ b/modeler/src/views/decision/designer/properties.vue @@ -103,9 +103,16 @@ @edit="onEditParameterTab"> - - + + {{pl.description}} + + @@ -154,6 +161,7 @@ import type { ElementParameter, ElementVariable, GraphTaskElement } from '../gra import type { BehaviorTree } from './tree'; import type { Graph, Node, NodeProperties } from '@antv/x6'; import { generateKey } from '@/utils/strings'; +import type { Platform } from '@/views/decision/types'; const actionSpaceColumns = [ { title: '序号', dataIndex: 'index', key: 'index', width: 40 }, @@ -170,9 +178,12 @@ export default defineComponent({ treeEditing: { type: Boolean as PropType, required: true, default: false }, node: { type: [Object, null] as PropType | null | undefined>, required: false }, graph: { type: [Object, null] as PropType, required: true }, + platforms: { type: Array as PropType, required: true }, }, emits: ['update-element', 'update-tree'], setup(props, { emit }) { + const platforms = ref(props.platforms ?? []); + const activeTopTabsKey = ref('1'); const activeBottomTabsKey = ref('1'); const activeBottomTabs2Key = ref('1'); @@ -187,6 +198,8 @@ export default defineComponent({ const multiableParameters = ref(false); const groupedParametersActiveTab = ref(0); + console.error(platforms.value) + const createEmptyParameters = (): ElementParameter[] => { try { return JSON.parse(JSON.stringify(currentElement.value?.parameters ?? [])) as ElementParameter[]; @@ -359,9 +372,12 @@ export default defineComponent({ watch(() => currentElement.value, () => updateNode(), { deep: true }); + watch(() => props.platforms, (n: Platform[] | null | undefined) => platforms.value = n ?? [], { deep: true, immediate: true }); + onMounted(() => load()); return { + platforms, addParameterTab, groupedParametersActiveTab, multiableParameters, diff --git a/modeler/src/views/decision/types/platform.ts b/modeler/src/views/decision/types/platform.ts index a3a137d..ab834a5 100644 --- a/modeler/src/views/decision/types/platform.ts +++ b/modeler/src/views/decision/types/platform.ts @@ -18,6 +18,10 @@ export interface Platform { [key: string]: unknown; } +export interface PlatformListableResponse extends ApiDataResponse { + +} + export interface PlatformComponent { id: number, name: NullableString,