diff --git a/auto-solution-scene/src/main/java/com/solution/scene/controller/SceneController.java b/auto-solution-admin/src/main/java/com/solution/web/controller/scene/SceneController.java similarity index 96% rename from auto-solution-scene/src/main/java/com/solution/scene/controller/SceneController.java rename to auto-solution-admin/src/main/java/com/solution/web/controller/scene/SceneController.java index 5825964..aacdd55 100644 --- a/auto-solution-scene/src/main/java/com/solution/scene/controller/SceneController.java +++ b/auto-solution-admin/src/main/java/com/solution/web/controller/scene/SceneController.java @@ -1,4 +1,4 @@ -package com.solution.scene.controller; +package com.solution.web.controller.scene; import com.solution.common.annotation.Log; import com.solution.common.core.controller.BaseController; @@ -33,7 +33,7 @@ public class SceneController extends BaseController { @ApiOperation("保存场景配置") @PostMapping("/saveSceneConfig") @Log(title = "行为树主", businessType = BusinessType.INSERT) - public AjaxResult saveSceneConfig(@RequestBody AfsimScenarioForm afsimScenario) + public AjaxResult saveSceneConfig(@RequestBody AfsimScenario afsimScenario) { return toAjax(sceneService.saveOrUpdate(afsimScenario)); } diff --git a/auto-solution-common/pom.xml b/auto-solution-common/pom.xml index 0b387a9..402b1e4 100644 --- a/auto-solution-common/pom.xml +++ b/auto-solution-common/pom.xml @@ -113,6 +113,12 @@ javax.servlet-api + + org.projectlombok + lombok + 1.18.34 + + cn.hutool hutool-all diff --git a/auto-solution-common/src/main/java/com/solution/common/constant/PlatformAndModuleConstants.java b/auto-solution-common/src/main/java/com/solution/common/constant/PlatformAndModuleConstants.java index 26181cf..ad01ca2 100644 --- a/auto-solution-common/src/main/java/com/solution/common/constant/PlatformAndModuleConstants.java +++ b/auto-solution-common/src/main/java/com/solution/common/constant/PlatformAndModuleConstants.java @@ -6,4 +6,6 @@ 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"; + + public static final String RED_TANK_1 = "red_tank_1"; } diff --git a/auto-solution-rule/pom.xml b/auto-solution-rule/pom.xml index 33757b0..b0b0238 100644 --- a/auto-solution-rule/pom.xml +++ b/auto-solution-rule/pom.xml @@ -24,10 +24,6 @@ solution-common - - org.projectlombok - lombok - io.springfox diff --git a/auto-solution-rule/src/main/java/com/solution/rule/handler/WarplaneHandler.java b/auto-solution-rule/src/main/java/com/solution/rule/handler/WarplaneHandler.java index 759102f..c921f2a 100644 --- a/auto-solution-rule/src/main/java/com/solution/rule/handler/WarplaneHandler.java +++ b/auto-solution-rule/src/main/java/com/solution/rule/handler/WarplaneHandler.java @@ -38,8 +38,6 @@ public class WarplaneHandler extends AbstractRuleChainHandler { List resultWeapons = new ArrayList<>(); - //TODO获取所有组件以及count - Iterator iterator = dtoList.iterator(); while (iterator.hasNext()) { WeaponModelDTO dto = iterator.next(); diff --git a/auto-solution-scene/pom.xml b/auto-solution-scene/pom.xml index 842a4ce..a06d4fe 100644 --- a/auto-solution-scene/pom.xml +++ b/auto-solution-scene/pom.xml @@ -30,10 +30,6 @@ solution-common - - org.projectlombok - lombok - io.springfox diff --git a/auto-solution-scene/src/main/java/com/solution/scene/domain/AfsimScenario.java b/auto-solution-scene/src/main/java/com/solution/scene/domain/AfsimScenario.java index 0074f13..535b674 100644 --- a/auto-solution-scene/src/main/java/com/solution/scene/domain/AfsimScenario.java +++ b/auto-solution-scene/src/main/java/com/solution/scene/domain/AfsimScenario.java @@ -1,5 +1,7 @@ package com.solution.scene.domain; +import java.util.List; + /** * 场景配置表 * 对应表 afsim_scenario @@ -11,6 +13,16 @@ public class AfsimScenario { private String scenarioPath; private String communicationGraph; // 用于存储场景中的通讯关系 + public List getRelations() { + return relations; + } + + public void setRelations(List relations) { + this.relations = relations; + } + + private List relations; + public Integer getId() { return id; } diff --git a/auto-solution-scene/src/main/java/com/solution/scene/mapper/PlatFormCommunicationMapper.java b/auto-solution-scene/src/main/java/com/solution/scene/mapper/PlatFormCommunicationMapper.java new file mode 100644 index 0000000..71e6aac --- /dev/null +++ b/auto-solution-scene/src/main/java/com/solution/scene/mapper/PlatFormCommunicationMapper.java @@ -0,0 +1,27 @@ +package com.solution.scene.mapper; + +import com.solution.scene.domain.AfsimScenarioForm; +import com.solution.scene.domain.ScenarioRelation; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface PlatFormCommunicationMapper { + + /** + * 存储通信关系 + * @param scenaryId,afsimScenarios + */ + int insert(@Param("scenaryId") Integer scenaryId, + @Param("afsimScenarios") List afsimScenarios); + + + /** + * 删除通信关系 + * @param scenaryId + * @return + */ + int delete(Integer scenaryId); +} 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 03bec24..d1c2569 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 @@ -14,9 +14,9 @@ public interface SceneMapper { * @param afsimScenario * @return */ - int insert(AfsimScenarioForm afsimScenario); + int insert(AfsimScenario afsimScenario); - int update(AfsimScenarioForm afsimScenario); + int update(AfsimScenario 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 15a4933..ea06aad 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 @@ -12,11 +12,11 @@ public interface SceneService { * @param afsimScenario * @return */ - int insert(AfsimScenarioForm afsimScenario); + int insert(AfsimScenario afsimScenario); int update(AfsimScenarioForm afsimScenario); - int saveOrUpdate(AfsimScenarioForm afsimScenario); + int saveOrUpdate(AfsimScenario 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 75deac0..7669444 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 @@ -2,10 +2,12 @@ package com.solution.scene.service.impl; import com.solution.scene.domain.AfsimScenario; import com.solution.scene.domain.AfsimScenarioForm; +import com.solution.scene.mapper.PlatFormCommunicationMapper; 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 org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -16,8 +18,11 @@ public class SceneServiceImpl implements SceneService { @Autowired private SceneMapper sceneMapper; + @Autowired + private PlatFormCommunicationMapper platFormCommunicationMapper; + @Override - public int insert(AfsimScenarioForm afsimScenario) { + public int insert(AfsimScenario afsimScenario) { return sceneMapper.insert(afsimScenario); } @@ -26,12 +31,29 @@ public class SceneServiceImpl implements SceneService { return sceneMapper.update(afsimScenario); } + @Transactional(rollbackFor = Exception.class) @Override - public int saveOrUpdate(AfsimScenarioForm afsimScenario) { + public int saveOrUpdate(AfsimScenario afsimScenario) { if (null != afsimScenario.getId() && afsimScenario.getId() > 0) { - return sceneMapper.update(afsimScenario); + // 更新场景 + int updated = sceneMapper.update(afsimScenario); + // 先删除通信关系 + platFormCommunicationMapper.delete(afsimScenario.getId()); + // 再插入通信关系 + if (afsimScenario.getRelations() != null && !afsimScenario.getRelations().isEmpty()) { + platFormCommunicationMapper.insert(afsimScenario.getId(), afsimScenario.getRelations()); + } + return updated; + } else { + // 新增场景 + int inserted = sceneMapper.insert(afsimScenario); + // 确保获取到生成的 ID + if (afsimScenario.getId() != null && afsimScenario.getRelations() != null && !afsimScenario.getRelations().isEmpty()) { + // 存储通信关系 + platFormCommunicationMapper.insert(afsimScenario.getId(), afsimScenario.getRelations()); + } + return inserted; } - return insert(afsimScenario); } /** diff --git a/auto-solution-scene/src/main/resources/mapper/scene/PlatFormCommunicationMapper.xml b/auto-solution-scene/src/main/resources/mapper/scene/PlatFormCommunicationMapper.xml new file mode 100644 index 0000000..d745257 --- /dev/null +++ b/auto-solution-scene/src/main/resources/mapper/scene/PlatFormCommunicationMapper.xml @@ -0,0 +1,19 @@ + + + + + + + INSERT INTO platform_communication (scenary_id, command_platform, subordinate_platform, command_comm, subordinate_comm) + VALUES + + (#{scenaryId}, #{item.sourcePlatform.name}, #{item.targetPlatform.name}, #{item.sourceComponent.name}, #{item.targetComponent.name}) + + + + DELETE FROM platform_communication + WHERE scenary_id = #{scenaryId} + + \ No newline at end of file diff --git a/auto-solution-scene/src/main/resources/mapper/scene/SceneMapper.xml b/auto-solution-scene/src/main/resources/mapper/scene/SceneMapper.xml index b21489a..9044c61 100644 --- a/auto-solution-scene/src/main/resources/mapper/scene/SceneMapper.xml +++ b/auto-solution-scene/src/main/resources/mapper/scene/SceneMapper.xml @@ -12,7 +12,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + INSERT INTO afsim_scenario (name, description, scenario_path, communication_graph) VALUES (#{name}, #{description}, #{scenarioPath}, #{communicationGraph}) diff --git a/modeler/src/style.less b/modeler/src/style.less index 48e7e4c..ad463ef 100644 --- a/modeler/src/style.less +++ b/modeler/src/style.less @@ -1291,6 +1291,10 @@ } } +.ant-select:not(.ant-select-customize-input) .ant-select-selector{ + border: 1px solid #475f71 +} + .ant-input-affix-wrapper.ant-input-password input:-webkit-autofill, .ant-input-affix-wrapper.ant-input-password input:-webkit-autofill:hover, .ant-input-affix-wrapper.ant-input-password input:-webkit-autofill:focus, @@ -1504,9 +1508,7 @@ border-inline-end-width: 1px; } } -.ant-select:not(.ant-select-customize-input) .ant-select-selector{ - border: 1px solid #2c2a2a; -} + .ant-select .ant-select-selection-placeholder, .ant-select .ant-select-selection-search-input{ background: transparent diff --git a/modeler/src/views/decision/algorithm/management.vue b/modeler/src/views/decision/algorithm/management.vue index d47e326..193ec07 100644 --- a/modeler/src/views/decision/algorithm/management.vue +++ b/modeler/src/views/decision/algorithm/management.vue @@ -274,8 +274,11 @@ const getAlgorithmTypeName = (type: NullableString): NullableString => { const load = () => { algorithms.value = []; algorithmsTotal.value = 0; - formRef.value?.resetFields(); - selectedAlgorithm.value = resolveItem(defaultAlgorithm); + + if(selectedAlgorithm.value.id <= 0){ + formRef.value?.resetFields(); + selectedAlgorithm.value = resolveItem(defaultAlgorithm); + } findAlgorithmsByQuery(query.value).then(r => { algorithms.value = r.rows ?? []; diff --git a/modeler/src/views/decision/rule/PlatformSelect.vue b/modeler/src/views/decision/rule/PlatformSelect.vue index 5aa60af..0b3ddb6 100644 --- a/modeler/src/views/decision/rule/PlatformSelect.vue +++ b/modeler/src/views/decision/rule/PlatformSelect.vue @@ -3,12 +3,13 @@ {{ item.description || item.name || '未命名平台' }} @@ -18,13 +19,13 @@ {{ item.description || item.name || '未命名组件' }} @@ -34,135 +35,84 @@ \ 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 24d54ad..c802453 100644 --- a/modeler/src/views/decision/rule/management.vue +++ b/modeler/src/views/decision/rule/management.vue @@ -32,9 +32,7 @@
- -
- 通用 @@ -73,23 +70,32 @@ +
-
+
- + + - - + + @@ -98,23 +104,32 @@ +
-
+
- + + - - + + @@ -126,24 +141,21 @@ - + 保存规则 - 删除规则 - - -
- -
\ No newline at end of file diff --git a/modeler/src/views/decision/rule/store.ts b/modeler/src/views/decision/rule/store.ts new file mode 100644 index 0000000..5b688b9 --- /dev/null +++ b/modeler/src/views/decision/rule/store.ts @@ -0,0 +1,64 @@ +/* + * 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 { onMounted, ref, type Ref } from 'vue'; +import type { Platform, PlatformComponent, PlatformWithComponents, PlatformWithComponentsResponse } from '../types'; +import { findAllPlatformWithComponents } from './api'; + +const loading: Ref = ref(true); +const platforms: Ref = ref([]); +const platformMap: Ref> = ref>(new Map()); +const componentMap: Ref> = ref>(new Map()); +const loaded: Ref = ref(false); + +export interface UsePlatformComponentsReturn { + loading: Ref; + platforms: Ref; + platformMap: Ref>; + componentMap: Ref>; + loaded: Ref; +} + +export const usePlatformComponents = (): UsePlatformComponentsReturn => { + const load = () => { + if (!loaded.value) { + loading.value = true; + platformMap.value.clear(); + componentMap.value.clear(); + + findAllPlatformWithComponents() + .then((res: PlatformWithComponentsResponse) => { // 显式标注响应类型 + platforms.value = res.data || []; + platforms.value.forEach(platform => { + platformMap.value.set(platform.id, platform); + platform.components?.forEach(component => { + componentMap.value.set(component.id, component); + }); + }); + loaded.value = true; + }) + .catch((err: unknown) => { + console.error('加载平台组件失败:', err); + }) + .finally(() => { + loading.value = false; + }); + } + }; + + onMounted(() => load()); + + return { + loading, + platforms, + platformMap, + componentMap, + loaded, + }; +}; \ No newline at end of file diff --git a/pom.xml b/pom.xml index 9cd896a..c510c05 100644 --- a/pom.xml +++ b/pom.xml @@ -274,6 +274,29 @@ ${project.build.sourceEncoding} + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + 11 + 11 + + + + org.projectlombok + lombok + 1.18.34 + + + org.mapstruct + mapstruct-processor + 1.5.5.Final + + + + +