新增通信关系

This commit is contained in:
MHW
2026-03-17 10:49:21 +08:00
parent d13359c803
commit b63ad360d0
10 changed files with 95 additions and 13 deletions

View File

@@ -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));
}

View File

@@ -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";
}

View File

@@ -38,8 +38,6 @@ public class WarplaneHandler extends AbstractRuleChainHandler {
List<PlatformWeaponAggregateVO> resultWeapons = new ArrayList<>();
//TODO获取所有组件以及count
Iterator<WeaponModelDTO> iterator = dtoList.iterator();
while (iterator.hasNext()) {
WeaponModelDTO dto = iterator.next();

View File

@@ -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<ScenarioRelation> getRelations() {
return relations;
}
public void setRelations(List<ScenarioRelation> relations) {
this.relations = relations;
}
private List<ScenarioRelation> relations;
public Integer getId() {
return id;
}

View File

@@ -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<ScenarioRelation> afsimScenarios);
/**
* 删除通信关系
* @param scenaryId
* @return
*/
int delete(Integer scenaryId);
}

View File

@@ -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);
/**

View File

@@ -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);
/**
* 获取场景列表

View File

@@ -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,30 @@ public class SceneServiceImpl implements SceneService {
return sceneMapper.update(afsimScenario);
}
@Transactional(rollbackFor = Exception.class)
@Override
public int saveOrUpdate(AfsimScenarioForm afsimScenario) {
public int saveOrUpdate(AfsimScenario afsimScenario) {
//TODO 报错待修改
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);
}
/**

View File

@@ -0,0 +1,20 @@
<?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.PlatFormCommunicationMapper">
<insert id="insert" parameterType="com.solution.scene.domain.AfsimScenarioForm">
INSERT INTO platform_communication (scenary_id, command_platform, subordinate_platform, command_comm, subordinate_comm)
VALUES
<foreach collection="afsimScenarios" item="item" separator=",">
(#{scenaryId}, #{item.sourcePlatform}, #{item.targetPlatform}, #{item.sourceComponent}, #{item.targetComponent})
</foreach>
</insert>
<delete id="delete" parameterType="java.lang.Integer">
DELETE FROM platform_communication
WHERE scenary_id = #{scenaryId}
</delete>
</mapper>

View File

@@ -12,7 +12,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="communicationGraph" column="communication_graph" />
</resultMap>
<insert id="insert" parameterType="com.solution.scene.domain.AfsimScenario">
<insert id="insert" parameterType="com.solution.scene.domain.AfsimScenario" useGeneratedKeys="true" keyProperty="id">
INSERT INTO afsim_scenario (name, description, scenario_path, communication_graph)
VALUES (#{name}, #{description}, #{scenarioPath}, #{communicationGraph})
</insert>