Merge branch 'master' of http://101.43.238.71:3000/zouju/auto-solution
This commit is contained in:
@@ -20,8 +20,11 @@ import com.solution.web.core.graph.GraphEdge;
|
|||||||
import com.solution.web.core.graph.GraphNode;
|
import com.solution.web.core.graph.GraphNode;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@@ -98,10 +101,17 @@ public class BehaviortreeProcessor {
|
|||||||
instanceKeyMap.put(node.getKey(), instance);
|
instanceKeyMap.put(node.getKey(), instance);
|
||||||
|
|
||||||
if (node.hasParameters()) {
|
if (node.hasParameters()) {
|
||||||
// 插入parameter nodeparameter
|
if (node.isMultiable()) {
|
||||||
for (Templateparameterdef parameter : node.getParameters()) {
|
List<Nodeparameter> nodeparameters = createMultiableNodeparameter(behaviortree, node, instance);
|
||||||
Nodeparameter nodeparameter = createNodeParameter(behaviortree, parameter, instance);
|
for (Nodeparameter nodeparameter : nodeparameters) {
|
||||||
nodeparameterService.insertNodeparameter(nodeparameter);
|
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);
|
nodeKeyIndexMap.put(node.getKey(), index);
|
||||||
@@ -148,6 +158,47 @@ public class BehaviortreeProcessor {
|
|||||||
return connection;
|
return connection;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<Nodeparameter> createMultiableNodeparameter(Behaviortree behaviortree, GraphNode node,
|
||||||
|
Treenodeinstance instance) {
|
||||||
|
|
||||||
|
List<Nodeparameter> nodeparameters = new ArrayList<>();
|
||||||
|
|
||||||
|
Map<Long, List<String>> idValues = new HashMap<>();
|
||||||
|
List<String> tmpValues = null;
|
||||||
|
Map<Long, List<Templateparameterdef>> mappedValues = new HashMap<>();
|
||||||
|
List<Templateparameterdef> 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,
|
private Nodeparameter createNodeParameter(Behaviortree behaviortree, Templateparameterdef parameter,
|
||||||
Treenodeinstance instance) {
|
Treenodeinstance instance) {
|
||||||
Nodeparameter nodeparameter = new Nodeparameter();
|
Nodeparameter nodeparameter = new Nodeparameter();
|
||||||
@@ -155,6 +206,7 @@ public class BehaviortreeProcessor {
|
|||||||
nodeparameter.setNodeInstanceId(instance.getId());
|
nodeparameter.setNodeInstanceId(instance.getId());
|
||||||
nodeparameter.setParamDefId(parameter.getId());
|
nodeparameter.setParamDefId(parameter.getId());
|
||||||
nodeparameter.setValue(parameter.getDefaultValue());
|
nodeparameter.setValue(parameter.getDefaultValue());
|
||||||
|
nodeparameter.setGroupIndex(parameter.getGroupIndex());
|
||||||
return nodeparameter;
|
return nodeparameter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
21
modeler/src/views/decision/api.ts
Normal file
21
modeler/src/views/decision/api.ts
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the kernelstudio package.
|
||||||
|
*
|
||||||
|
* (c) 2014-2025 zlin <admin@kernelstudio.com>
|
||||||
|
*
|
||||||
|
* 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<BasicResponse>({
|
||||||
|
baseURL: '/api',
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
export const findAllBasicPlatforms = (): Promise<PlatformListableResponse> => {
|
||||||
|
return req.get<PlatformListableResponse>('/system/firerule/platforms/basic');
|
||||||
|
};
|
||||||
@@ -7,8 +7,9 @@
|
|||||||
* that was distributed with this source code.
|
* that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Graph, Node,Edge } from '@antv/x6';
|
import { Edge, Graph, Node } from '@antv/x6';
|
||||||
import type { Platform, PlatformComponent, PlatformRelation } from './types';
|
import type { PlatformRelation } from './types';
|
||||||
|
import type { Platform, PlatformComponent } from '../types';
|
||||||
import type { GraphTaskElement } from '../graph';
|
import type { GraphTaskElement } from '../graph';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<Properties
|
<Properties
|
||||||
v-if="graph"
|
v-if="graph"
|
||||||
|
:platforms="platforms"
|
||||||
:element="selectedNodeTaskElement"
|
:element="selectedNodeTaskElement"
|
||||||
:graph="graph as any"
|
:graph="graph as any"
|
||||||
:node="selectedModelNode as any"
|
:node="selectedModelNode as any"
|
||||||
@@ -65,7 +66,8 @@ import { createGraphTaskElementFromTemplate } from './utils';
|
|||||||
|
|
||||||
import { createGraphTaskElement, createLineOptions, type GraphContainer, type GraphTaskElement, hasElements, hasRootElementNode, resolveGraph, useGraphCanvas } from '../graph';
|
import { createGraphTaskElement, createLineOptions, type GraphContainer, type GraphTaskElement, hasElements, hasRootElementNode, resolveGraph, useGraphCanvas } from '../graph';
|
||||||
import { registerNodeElement } from './register';
|
import { registerNodeElement } from './register';
|
||||||
|
import { findAllBasicPlatforms } from '../api';
|
||||||
|
import type { Platform } from '../types';
|
||||||
import { createTree, findOneTreeById, updateTree } from './api';
|
import { createTree, findOneTreeById, updateTree } from './api';
|
||||||
import TressCard from './trees-card.vue';
|
import TressCard from './trees-card.vue';
|
||||||
import NodesCard from './nodes-card.vue';
|
import NodesCard from './nodes-card.vue';
|
||||||
@@ -100,6 +102,7 @@ export default defineComponent({
|
|||||||
const selectedNodeTaskElement = ref<GraphTaskElement | null>(null);
|
const selectedNodeTaskElement = ref<GraphTaskElement | null>(null);
|
||||||
const changed = ref<boolean>(false);
|
const changed = ref<boolean>(false);
|
||||||
const treesCardRef = ref<InstanceType<typeof TressCard> | null>(null);
|
const treesCardRef = ref<InstanceType<typeof TressCard> | null>(null);
|
||||||
|
const platforms = ref<Platform[]>([]);
|
||||||
|
|
||||||
const {
|
const {
|
||||||
handleGraphEvent,
|
handleGraphEvent,
|
||||||
@@ -111,6 +114,13 @@ export default defineComponent({
|
|||||||
resizeCanvas,
|
resizeCanvas,
|
||||||
} = useGraphCanvas();
|
} = useGraphCanvas();
|
||||||
|
|
||||||
|
const loadPlatforms = () => {
|
||||||
|
platforms.value = [];
|
||||||
|
findAllBasicPlatforms().then(r => {
|
||||||
|
platforms.value = r.data ?? [];
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
// 处理拖动开始
|
// 处理拖动开始
|
||||||
const handleDragStart = (nm: NodeDragTemplate) => {
|
const handleDragStart = (nm: NodeDragTemplate) => {
|
||||||
draggedNodeData.value = nm;
|
draggedNodeData.value = nm;
|
||||||
@@ -393,6 +403,7 @@ export default defineComponent({
|
|||||||
// 初始化
|
// 初始化
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
init();
|
init();
|
||||||
|
loadPlatforms();
|
||||||
});
|
});
|
||||||
|
|
||||||
// 清理
|
// 清理
|
||||||
@@ -410,6 +421,7 @@ export default defineComponent({
|
|||||||
});
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
platforms,
|
||||||
treesCardRef,
|
treesCardRef,
|
||||||
handleCreateTree,
|
handleCreateTree,
|
||||||
currentTreeEditing,
|
currentTreeEditing,
|
||||||
|
|||||||
@@ -103,9 +103,16 @@
|
|||||||
@edit="onEditParameterTab">
|
@edit="onEditParameterTab">
|
||||||
<a-tab-pane v-for="(grouped,index) in groupedParameters" :key="index" :tab="`平台 ${index + 1}`" :closable="true">
|
<a-tab-pane v-for="(grouped,index) in groupedParameters" :key="index" :tab="`平台 ${index + 1}`" :closable="true">
|
||||||
<a-form-item v-for="setting in grouped" :label="setting.description">
|
<a-form-item v-for="setting in grouped" :label="setting.description">
|
||||||
<a-input-number v-if="setting.dataType === 'double'" v-model:value="setting.defaultValue"
|
<a-input-number v-if="setting.dataType === 'double'"
|
||||||
|
v-model:value="setting.defaultValue"
|
||||||
:placeholder="setting.description" size="small" style="width:100%;" />
|
:placeholder="setting.description" size="small" style="width:100%;" />
|
||||||
<a-input v-else v-model:value="setting.defaultValue" :placeholder="setting.description" size="small" />
|
<a-select :placeholder="`请选择${setting.description}`"
|
||||||
|
allow-clear
|
||||||
|
v-else-if="setting.paramKey === 'platforms'" v-model:value="setting.defaultValue">
|
||||||
|
<a-select-option v-for="pl in platforms" :value="pl.name">{{pl.description}}</a-select-option>
|
||||||
|
</a-select>
|
||||||
|
<a-input v-else v-model:value="setting.defaultValue"
|
||||||
|
:placeholder="setting.description" size="small" />
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-tab-pane>
|
</a-tab-pane>
|
||||||
<!-- <template #leftExtra>-->
|
<!-- <template #leftExtra>-->
|
||||||
@@ -154,6 +161,7 @@ import type { ElementParameter, ElementVariable, GraphTaskElement } from '../gra
|
|||||||
import type { BehaviorTree } from './tree';
|
import type { BehaviorTree } from './tree';
|
||||||
import type { Graph, Node, NodeProperties } from '@antv/x6';
|
import type { Graph, Node, NodeProperties } from '@antv/x6';
|
||||||
import { generateKey } from '@/utils/strings';
|
import { generateKey } from '@/utils/strings';
|
||||||
|
import type { Platform } from '@/views/decision/types';
|
||||||
|
|
||||||
const actionSpaceColumns = [
|
const actionSpaceColumns = [
|
||||||
{ title: '序号', dataIndex: 'index', key: 'index', width: 40 },
|
{ title: '序号', dataIndex: 'index', key: 'index', width: 40 },
|
||||||
@@ -170,9 +178,12 @@ export default defineComponent({
|
|||||||
treeEditing: { type: Boolean as PropType<boolean>, required: true, default: false },
|
treeEditing: { type: Boolean as PropType<boolean>, required: true, default: false },
|
||||||
node: { type: [Object, null] as PropType<Node<NodeProperties> | null | undefined>, required: false },
|
node: { type: [Object, null] as PropType<Node<NodeProperties> | null | undefined>, required: false },
|
||||||
graph: { type: [Object, null] as PropType<Graph | null | undefined>, required: true },
|
graph: { type: [Object, null] as PropType<Graph | null | undefined>, required: true },
|
||||||
|
platforms: { type: Array as PropType<Platform[]>, required: true },
|
||||||
},
|
},
|
||||||
emits: ['update-element', 'update-tree'],
|
emits: ['update-element', 'update-tree'],
|
||||||
setup(props, { emit }) {
|
setup(props, { emit }) {
|
||||||
|
const platforms = ref<Platform[]>(props.platforms ?? []);
|
||||||
|
|
||||||
const activeTopTabsKey = ref<string>('1');
|
const activeTopTabsKey = ref<string>('1');
|
||||||
const activeBottomTabsKey = ref<string>('1');
|
const activeBottomTabsKey = ref<string>('1');
|
||||||
const activeBottomTabs2Key = ref<string>('1');
|
const activeBottomTabs2Key = ref<string>('1');
|
||||||
@@ -187,6 +198,8 @@ export default defineComponent({
|
|||||||
const multiableParameters = ref<boolean>(false);
|
const multiableParameters = ref<boolean>(false);
|
||||||
const groupedParametersActiveTab = ref<number>(0);
|
const groupedParametersActiveTab = ref<number>(0);
|
||||||
|
|
||||||
|
console.error(platforms.value)
|
||||||
|
|
||||||
const createEmptyParameters = (): ElementParameter[] => {
|
const createEmptyParameters = (): ElementParameter[] => {
|
||||||
try {
|
try {
|
||||||
return JSON.parse(JSON.stringify(currentElement.value?.parameters ?? [])) as ElementParameter[];
|
return JSON.parse(JSON.stringify(currentElement.value?.parameters ?? [])) as ElementParameter[];
|
||||||
@@ -359,9 +372,12 @@ export default defineComponent({
|
|||||||
|
|
||||||
watch(() => currentElement.value, () => updateNode(), { deep: true });
|
watch(() => currentElement.value, () => updateNode(), { deep: true });
|
||||||
|
|
||||||
|
watch(() => props.platforms, (n: Platform[] | null | undefined) => platforms.value = n ?? [], { deep: true, immediate: true });
|
||||||
|
|
||||||
onMounted(() => load());
|
onMounted(() => load());
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
platforms,
|
||||||
addParameterTab,
|
addParameterTab,
|
||||||
groupedParametersActiveTab,
|
groupedParametersActiveTab,
|
||||||
multiableParameters,
|
multiableParameters,
|
||||||
|
|||||||
@@ -18,6 +18,10 @@ export interface Platform {
|
|||||||
[key: string]: unknown;
|
[key: string]: unknown;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface PlatformListableResponse extends ApiDataResponse<Platform[]> {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
export interface PlatformComponent {
|
export interface PlatformComponent {
|
||||||
id: number,
|
id: number,
|
||||||
name: NullableString,
|
name: NullableString,
|
||||||
|
|||||||
Reference in New Issue
Block a user