diff --git a/auto-solution-admin/src/main/java/com/solution/web/controller/behaviour/BehaviortreeController.java b/auto-solution-admin/src/main/java/com/solution/web/controller/behaviour/BehaviortreeController.java index be0323a..9af1ee2 100644 --- a/auto-solution-admin/src/main/java/com/solution/web/controller/behaviour/BehaviortreeController.java +++ b/auto-solution-admin/src/main/java/com/solution/web/controller/behaviour/BehaviortreeController.java @@ -97,6 +97,18 @@ public class BehaviortreeController extends BaseController return toAjax(behaviortreeProcessor.create(behaviortree)); } + /** + * 复制行为树 + */ + @ApiOperation("复制行为树") + @PreAuthorize("@ss.hasPermi('system:behaviortree:add')") + @Log(title = "行为树主", businessType = BusinessType.INSERT) + @PostMapping("/copy") + public AjaxResult copy(@RequestBody Behaviortree behaviortree) + { + return toAjax(behaviortreeService.copy(behaviortree)); + } + /** * 修改行为树主 */ 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 2c41d49..52f3bb2 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,6 +20,7 @@ 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.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import java.util.ArrayList; @@ -56,6 +57,7 @@ public class BehaviortreeProcessor { return result; } + @Transactional(rollbackFor = Exception.class) public int update(Behaviortree behaviortree) { int result = behaviortreeService.updateBehaviortree(behaviortree); @@ -75,58 +77,6 @@ public class BehaviortreeProcessor { private void processGraph(Behaviortree behaviortree) { - Graph graph = null; - try { - graph = objectMapper.readValue(behaviortree.getXmlContent(), Graph.class); - } catch (Exception e) { - // skip - e.printStackTrace(); - } - - if (null == graph) { - return; - } - - // 插入节点 treenodeinstance - Map instanceKeyMap = new HashMap<>(); - Map nodeKeyIndexMap = new HashMap<>(); - Map nodesMap = new HashMap<>(); - if (graph.hasNodes()) { - Long index = 0L; - for (GraphNode node : graph.getNodes()) { - nodesMap.put(node.getKey(), node); - - Treenodeinstance instance = createNodeInstance(behaviortree, node); - treenodeinstanceService.insertTreenodeinstance(instance); - instanceKeyMap.put(node.getKey(), instance); - - if (node.hasParameters()) { - 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); - - index++; - } - } - - // 插入连线 nodeconnection - if (graph.hasEdges()) { - for (GraphEdge edge : graph.getEdges()) { - Nodeconnection connection = createConnection(behaviortree, edge, nodesMap, instanceKeyMap, nodeKeyIndexMap); - nodeconnectionService.insertNodeconnection(connection); - } - } } private Nodeconnection createConnection(Behaviortree behaviortree, GraphEdge edge, diff --git a/auto-solution-behaviour/src/main/java/com/solution/system/service/IBehaviortreeService.java b/auto-solution-behaviour/src/main/java/com/solution/system/service/IBehaviortreeService.java index 583124e..8e1479d 100644 --- a/auto-solution-behaviour/src/main/java/com/solution/system/service/IBehaviortreeService.java +++ b/auto-solution-behaviour/src/main/java/com/solution/system/service/IBehaviortreeService.java @@ -62,4 +62,11 @@ public interface IBehaviortreeService * @return 结果 */ public int deleteBehaviortreeById(Long id); + + /** + * 复制行为树 + * @param behaviortree + * @return + */ + int copy(Behaviortree behaviortree); } diff --git a/auto-solution-behaviour/src/main/java/com/solution/system/service/impl/BehaviortreeServiceImpl.java b/auto-solution-behaviour/src/main/java/com/solution/system/service/impl/BehaviortreeServiceImpl.java index 07b58ad..ebc3904 100644 --- a/auto-solution-behaviour/src/main/java/com/solution/system/service/impl/BehaviortreeServiceImpl.java +++ b/auto-solution-behaviour/src/main/java/com/solution/system/service/impl/BehaviortreeServiceImpl.java @@ -99,4 +99,24 @@ public class BehaviortreeServiceImpl implements IBehaviortreeService { return behaviortreeMapper.deleteBehaviortreeById(id); } + + /** + * 复制行为树 + * @param behaviortree + * @return + */ + @Override + public int copy(Behaviortree behaviortree) { + if(ObjectUtil.isEmpty(behaviortree)){ + throw new RuntimeException(ExceptionConstants.PARAMETER_EXCEPTION); + } + String name = behaviortree.getName(); + String newName = name + "_" + behaviortree.getId(); + + String englishName = behaviortree.getEnglishName(); + String newEnglishName = englishName + "_" + behaviortree.getId(); + behaviortree.setEnglishName(newEnglishName); + behaviortree.setName(newName); + return behaviortreeMapper.insertBehaviortree(behaviortree); + } }