diff --git a/ruoyi-modules/pom.xml b/ruoyi-modules/pom.xml
index b8b532f8..265bb005 100644
--- a/ruoyi-modules/pom.xml
+++ b/ruoyi-modules/pom.xml
@@ -13,6 +13,7 @@
ruoyi-gen
ruoyi-job
ruoyi-file
+ server-xm
ruoyi-modules
diff --git a/ruoyi-modules/server-xm/pom.xml b/ruoyi-modules/server-xm/pom.xml
new file mode 100644
index 00000000..b7c89513
--- /dev/null
+++ b/ruoyi-modules/server-xm/pom.xml
@@ -0,0 +1,104 @@
+
+
+
+ ruoyi-modules
+ com.ruoyi
+ 3.6.1
+
+ 4.0.0
+
+ server-moules-xm
+
+ server-modules-xm脑图模块
+
+
+
+ 8
+ 8
+
+
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-sentinel
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.fox.version}
+
+
+
+
+ mysql
+ mysql-connector-java
+
+
+
+
+ com.ruoyi
+ ruoyi-common-datasource
+
+
+
+
+ com.ruoyi
+ ruoyi-common-datascope
+
+
+
+
+ com.ruoyi
+ ruoyi-common-log
+
+
+
+
+ com.ruoyi
+ ruoyi-common-swagger
+
+
+
+
+
+ ${project.artifactId}
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ repackage
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-modules/server-xm/src/main/java/com/server/xm/ServerXmApplication.java b/ruoyi-modules/server-xm/src/main/java/com/server/xm/ServerXmApplication.java
new file mode 100644
index 00000000..f7450138
--- /dev/null
+++ b/ruoyi-modules/server-xm/src/main/java/com/server/xm/ServerXmApplication.java
@@ -0,0 +1,21 @@
+package com.server.xm;
+
+import com.ruoyi.common.security.annotation.EnableCustomConfig;
+import com.ruoyi.common.security.annotation.EnableRyFeignClients;
+import com.ruoyi.common.swagger.annotation.EnableCustomSwagger2;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+
+@EnableCustomConfig
+@EnableCustomSwagger2
+@EnableRyFeignClients
+@SpringBootApplication
+@MapperScan("com.server.xm.mapper")
+public class ServerXmApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(ServerXmApplication.class, args);
+ System.out.println("Server-XM模块启动成功");
+ }
+}
diff --git a/ruoyi-modules/server-xm/src/main/java/com/server/xm/controller/XmNodeController.java b/ruoyi-modules/server-xm/src/main/java/com/server/xm/controller/XmNodeController.java
new file mode 100644
index 00000000..474cae9e
--- /dev/null
+++ b/ruoyi-modules/server-xm/src/main/java/com/server/xm/controller/XmNodeController.java
@@ -0,0 +1,35 @@
+package com.server.xm.controller;
+
+import com.server.xm.entity.XmNode;
+import com.server.xm.service.XmNodeService;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+/**
+ * Xmind列表(XmNode)表控制层
+ *
+ * @author makejava
+ * @since 2022-10-24 22:16:42
+ */
+@RestController
+@RequestMapping("xmNode")
+public class XmNodeController {
+ /**
+ * 服务对象
+ */
+ @Resource
+ private XmNodeService xmNodeService;
+
+ /**
+ * 通过主键查询单条数据
+ *
+ * @param id 主键
+ * @return 单条数据
+ */
+ @GetMapping("selectOne")
+ public XmNode selectOne(String id) {
+ return this.xmNodeService.queryById(id);
+ }
+
+}
diff --git a/ruoyi-modules/server-xm/src/main/java/com/server/xm/controller/XmNodeStyleController.java b/ruoyi-modules/server-xm/src/main/java/com/server/xm/controller/XmNodeStyleController.java
new file mode 100644
index 00000000..90952c92
--- /dev/null
+++ b/ruoyi-modules/server-xm/src/main/java/com/server/xm/controller/XmNodeStyleController.java
@@ -0,0 +1,35 @@
+package com.server.xm.controller;
+
+import com.server.xm.entity.XmNodeStyle;
+import com.server.xm.service.XmNodeStyleService;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+/**
+ * 样式表(XmNodeStyle)表控制层
+ *
+ * @author makejava
+ * @since 2022-10-24 22:33:28
+ */
+@RestController
+@RequestMapping("xmNodeStyle")
+public class XmNodeStyleController {
+ /**
+ * 服务对象
+ */
+ @Resource
+ private XmNodeStyleService xmNodeStyleService;
+
+ /**
+ * 通过主键查询单条数据
+ *
+ * @param id 主键
+ * @return 单条数据
+ */
+ @GetMapping("selectOne")
+ public XmNodeStyle selectOne(String id) {
+ return this.xmNodeStyleService.queryById(id);
+ }
+
+}
diff --git a/ruoyi-modules/server-xm/src/main/java/com/server/xm/controller/XmTopController.java b/ruoyi-modules/server-xm/src/main/java/com/server/xm/controller/XmTopController.java
new file mode 100644
index 00000000..70b0a02f
--- /dev/null
+++ b/ruoyi-modules/server-xm/src/main/java/com/server/xm/controller/XmTopController.java
@@ -0,0 +1,52 @@
+package com.server.xm.controller;
+
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.web.page.TableDataInfo;
+import com.server.xm.entity.XmTop;
+import com.server.xm.entity.vo.XmTopVo;
+import com.server.xm.service.XmTopService;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * Xmind列表(XmTop)表控制层
+ *
+ * @author makejava
+ * @since 2022-10-23 12:50:31
+ */
+@RestController
+@RequestMapping("/xmTop")
+public class XmTopController extends BaseController {
+ /**
+ * 服务对象
+ */
+ @Resource
+ private XmTopService xmTopService;
+
+ /**
+ * 通过主键查询单条数据
+ *
+ * @param id 主键
+ * @return 单条数据
+ */
+ @GetMapping("/findOne/{id}")
+ public XmTopVo selectOne(@PathVariable("id") String id) {
+ return this.xmTopService.queryById(id);
+ }
+
+ @GetMapping("/page")
+ public TableDataInfo page(XmTop xmTop){
+ startPage();
+ List list = this.xmTopService.queryAll(xmTop);
+ return getDataTable(list);
+ }
+ @PostMapping("/create")
+ public AjaxResult create(@RequestBody XmTopVo xmTopVo){
+ this.xmTopService.insert(xmTopVo);
+ return AjaxResult.success();
+ }
+
+}
diff --git a/ruoyi-modules/server-xm/src/main/java/com/server/xm/entity/XmNode.java b/ruoyi-modules/server-xm/src/main/java/com/server/xm/entity/XmNode.java
new file mode 100644
index 00000000..9c1e40b0
--- /dev/null
+++ b/ruoyi-modules/server-xm/src/main/java/com/server/xm/entity/XmNode.java
@@ -0,0 +1,114 @@
+package com.server.xm.entity;
+
+import com.ruoyi.common.core.utils.bean.BeanUtils;
+import com.ruoyi.common.core.utils.uuid.UUID;
+import com.ruoyi.common.core.web.domain.BaseEntity;
+import com.server.xm.entity.vo.XmTopVo;
+import org.springframework.context.annotation.Bean;
+
+import java.util.Date;
+import java.io.Serializable;
+
+/**
+ * Xmind列表(XmNode)实体类
+ *
+ * @author makejava
+ * @since 2022-10-24 22:16:40
+ */
+public class XmNode extends BaseEntity {
+ private static final long serialVersionUID = 814901162125497459L;
+
+ private String id;
+ /**
+ * 节点名称
+ */
+ private String name;
+ /**
+ * 所属分类
+ */
+ private String typeId;
+ /**
+ * 节点等级
+ */
+ private String nodeLevel;
+ /**
+ * 父节点ID
+ */
+ private String parentId;
+ /**
+ * 一级节点ID
+ */
+ private String topId;
+ /**
+ * 是否删除,1已删除,0未删除
+ */
+ private String delFlag;
+ public XmNode(){}
+ public XmNode(XmTopVo xmTopVo,String level,String parentId,String topId){
+ BeanUtils.copyProperties(xmTopVo,this);
+// if(null == xmTopVo.getId()){
+// this.setId(UUID.randomUUID().toString());
+// }
+ this.setName(xmTopVo.getTopic());
+ this.setNodeLevel(level);
+ this.setParentId(parentId);
+ this.setTopId(topId);
+ }
+
+ public String getId() {
+ return this.id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getTypeId() {
+ return typeId;
+ }
+
+ public void setTypeId(String typeId) {
+ this.typeId = typeId;
+ }
+
+ public String getNodeLevel() {
+ return nodeLevel;
+ }
+
+ public void setNodeLevel(String nodeLevel) {
+ this.nodeLevel = nodeLevel;
+ }
+
+ public String getParentId() {
+ return parentId;
+ }
+
+ public void setParentId(String parentId) {
+ this.parentId = parentId;
+ }
+
+ public String getTopId() {
+ return topId;
+ }
+
+ public void setTopId(String topId) {
+ this.topId = topId;
+ }
+
+ public String getDelFlag() {
+ return null != this.delFlag?this.delFlag : "0";
+ }
+
+ public void setDelFlag(String delFlag) {
+ this.delFlag = delFlag;
+ }
+
+}
diff --git a/ruoyi-modules/server-xm/src/main/java/com/server/xm/entity/XmNodeStyle.java b/ruoyi-modules/server-xm/src/main/java/com/server/xm/entity/XmNodeStyle.java
new file mode 100644
index 00000000..abbc2c7f
--- /dev/null
+++ b/ruoyi-modules/server-xm/src/main/java/com/server/xm/entity/XmNodeStyle.java
@@ -0,0 +1,124 @@
+package com.server.xm.entity;
+
+import com.alibaba.fastjson2.JSON;
+import com.ruoyi.common.core.utils.uuid.UUID;
+import com.ruoyi.common.core.web.domain.BaseEntity;
+import com.server.xm.entity.vo.XmTopVo;
+
+
+/**
+ * 样式表(XmNodeStyle)实体类
+ *
+ * @author makejava
+ * @since 2022-10-24 22:33:26
+ */
+public class XmNodeStyle extends BaseEntity {
+ private static final long serialVersionUID = -43953448497497403L;
+
+ private String id;
+ /**
+ * 内容
+ */
+ private String direction;
+ /**
+ * 所属节点ID
+ */
+ private String hyperLink;
+ /**
+ * 图标
+ */
+ private String icons;
+
+ private String memo;
+ /**
+ * 样式
+ */
+ private String style;
+ /**
+ * 标签
+ */
+ private String tags;
+ /**
+ * 节点ID
+ */
+ private String nodeId;
+
+ public XmNodeStyle(){}
+ public XmNodeStyle(XmTopVo xmTopVo){
+ this.setId(UUID.randomUUID().toString());
+ this.setDirection(xmTopVo.getDirection().toString());
+ this.setIcons(JSON.toJSONString(xmTopVo.getIcons()));
+ this.setTags(JSON.toJSONString(xmTopVo.getTags()));
+ this.setMemo(xmTopVo.getMemo());
+ this.setHyperLink(xmTopVo.getHyperLink());
+ this.setStyle(JSON.toJSONString(xmTopVo.getStyle()));
+ this.setNodeId(xmTopVo.getId());
+ }
+
+
+
+ public String getId() {
+ return this.id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getDirection() {
+ return direction;
+ }
+
+ public void setDirection(String direction) {
+ this.direction = direction;
+ }
+
+ public String getHyperLink() {
+ return hyperLink;
+ }
+
+ public void setHyperLink(String hyperLink) {
+ this.hyperLink = hyperLink;
+ }
+
+ public String getIcons() {
+ return icons;
+ }
+
+ public void setIcons(String icons) {
+ this.icons = icons;
+ }
+
+ public String getMemo() {
+ return memo;
+ }
+
+ public void setMemo(String memo) {
+ this.memo = memo;
+ }
+
+ public String getStyle() {
+ return style;
+ }
+
+ public void setStyle(String style) {
+ this.style = style;
+ }
+
+ public String getTags() {
+ return tags;
+ }
+
+ public void setTags(String tags) {
+ this.tags = tags;
+ }
+
+ public String getNodeId() {
+ return nodeId;
+ }
+
+ public void setNodeId(String nodeId) {
+ this.nodeId = nodeId;
+ }
+
+}
diff --git a/ruoyi-modules/server-xm/src/main/java/com/server/xm/entity/XmTop.java b/ruoyi-modules/server-xm/src/main/java/com/server/xm/entity/XmTop.java
new file mode 100644
index 00000000..09f746f3
--- /dev/null
+++ b/ruoyi-modules/server-xm/src/main/java/com/server/xm/entity/XmTop.java
@@ -0,0 +1,97 @@
+package com.server.xm.entity;
+
+import com.ruoyi.common.core.utils.bean.BeanUtils;
+import com.ruoyi.common.core.web.domain.BaseEntity;
+import com.server.xm.entity.vo.XmTopVo;
+
+import java.util.Date;
+import java.io.Serializable;
+import java.util.UUID;
+
+/**
+ * Xmind列表(XmTop)实体类
+ *
+ * @author makejava
+ * @since 2022-10-23 11:52:10
+ */
+public class XmTop extends BaseEntity {
+ private static final long serialVersionUID = 780186867205672228L;
+
+ private String id;
+ /**
+ * 节点名称
+ */
+ private String name;
+ /**
+ * 所属分类
+ */
+ private String type;
+ /**
+ * 节点等级
+ */
+ private String nodeLevel;
+ private String parentId;
+ /**
+ * 是否删除,1已删除,0未删除
+ */
+ private String delFlag;
+
+ public XmTop(){}
+ public XmTop(XmTopVo xmTopVo,String level,String parentId){
+ BeanUtils.copyProperties(xmTopVo,this);
+// if(null == xmTopVo.getId()){
+// this.setId(UUID.randomUUID().toString());
+// }
+ this.setName(xmTopVo.getTopic());
+ this.setNodeLevel(level);
+ this.setParentId(parentId);
+ }
+
+ public String getId() {
+ return this.id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getTypeId() {
+ return type;
+ }
+
+ public void setTypeId(String typeId) {
+ this.type = typeId;
+ }
+
+ public String getNodeLevel() {
+ return nodeLevel;
+ }
+
+ public void setNodeLevel(String nodeLevel) {
+ this.nodeLevel = nodeLevel;
+ }
+
+ public String getDelFlag() {
+ return null != this.delFlag ? this.delFlag : "0";
+ }
+
+ public void setDelFlag(String delFlag) {
+ this.delFlag = delFlag;
+ }
+
+ public String getParentId() {
+ return parentId;
+ }
+
+ public void setParentId(String parentId) {
+ this.parentId = parentId;
+ }
+}
diff --git a/ruoyi-modules/server-xm/src/main/java/com/server/xm/entity/vo/XmTopVo.java b/ruoyi-modules/server-xm/src/main/java/com/server/xm/entity/vo/XmTopVo.java
new file mode 100644
index 00000000..a49618e9
--- /dev/null
+++ b/ruoyi-modules/server-xm/src/main/java/com/server/xm/entity/vo/XmTopVo.java
@@ -0,0 +1,128 @@
+package com.server.xm.entity.vo;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.nacos.shaded.com.google.gson.JsonArray;
+import com.alibaba.nacos.shaded.com.google.gson.JsonObject;
+import com.ruoyi.common.core.utils.bean.BeanUtils;
+import com.server.xm.entity.XmNodeStyle;
+import com.server.xm.entity.XmTop;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+public class XmTopVo implements Serializable {
+ private static final long serialVersionUID = 814901162125497459L;
+ private String id;
+ private String topic;
+ private Integer direction;
+ private String hyperLink;
+ private String memo;
+ private String nodeLevel;
+ private List icons;
+ private Map style;
+ private List tags;
+ private List children;
+
+ public XmTopVo() {
+ if(null == this.id){
+ this.setId(UUID.randomUUID().toString());
+ }
+ }
+ public XmTopVo(XmTop top, XmNodeStyle style){
+ //基本信息同步
+ BeanUtils.copyProperties(top,this);
+ this.setTopic(top.getName());
+ this.setIcons(JSON.parseObject(style.getIcons(), ArrayList.class));
+ this.setStyle(JSON.parseObject(style.getStyle(),Map.class));
+ this.setTags(JSON.parseObject(style.getTags(),ArrayList.class));
+ this.setDirection(Integer.parseInt(style.getDirection()));
+ this.setHyperLink(style.getHyperLink());
+ this.setMemo(style.getMemo());
+ }
+
+
+
+
+ public String getId() {
+ return this.id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getTopic() {
+ return topic;
+ }
+
+ public void setTopic(String topic) {
+ this.topic = topic;
+ }
+
+ public Integer getDirection() {
+ return direction;
+ }
+
+ public void setDirection(Integer direction) {
+ this.direction = direction;
+ }
+
+ public String getHyperLink() {
+ return hyperLink;
+ }
+
+ public void setHyperLink(String hyperLink) {
+ this.hyperLink = hyperLink;
+ }
+
+ public List getIcons() {
+ return icons;
+ }
+
+ public void setIcons(List icons) {
+ this.icons = icons;
+ }
+
+ public String getMemo() {
+ return memo;
+ }
+
+ public void setMemo(String memo) {
+ this.memo = memo;
+ }
+
+ public Map getStyle() {
+ return style;
+ }
+
+ public void setStyle(Map style) {
+ this.style = style;
+ }
+
+ public List getTags() {
+ return tags;
+ }
+
+ public void setTags(List tags) {
+ this.tags = tags;
+ }
+
+ public List getChildren() {
+ return children;
+ }
+
+ public void setChildren(List children) {
+ this.children = children;
+ }
+
+ public String getNodeLevel() {
+ return nodeLevel;
+ }
+
+ public void setNodeLevel(String nodeLevel) {
+ this.nodeLevel = nodeLevel;
+ }
+}
diff --git a/ruoyi-modules/server-xm/src/main/java/com/server/xm/mapper/XmNodeMapper.java b/ruoyi-modules/server-xm/src/main/java/com/server/xm/mapper/XmNodeMapper.java
new file mode 100644
index 00000000..88943d2f
--- /dev/null
+++ b/ruoyi-modules/server-xm/src/main/java/com/server/xm/mapper/XmNodeMapper.java
@@ -0,0 +1,84 @@
+package com.server.xm.mapper;
+
+
+import com.server.xm.entity.XmNode;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * Xmind列表(XmNode)表数据库访问层
+ *
+ * @author makejava
+ * @since 2022-10-24 22:16:40
+ */
+public interface XmNodeMapper {
+
+ /**
+ * 通过ID查询单条数据
+ *
+ * @param id 主键
+ * @return 实例对象
+ */
+ XmNode queryById(String id);
+
+ /**
+ * 查询指定行数据
+ *
+ * @param offset 查询起始位置
+ * @param limit 查询条数
+ * @return 对象列表
+ */
+ List queryAllByLimit(@Param("offset") int offset, @Param("limit") int limit);
+
+
+ /**
+ * 通过实体作为筛选条件查询
+ *
+ * @param xmNode 实例对象
+ * @return 对象列表
+ */
+ List queryAll(XmNode xmNode);
+
+ /**
+ * 新增数据
+ *
+ * @param xmNode 实例对象
+ * @return 影响行数
+ */
+ int insert(XmNode xmNode);
+
+ /**
+ * 批量新增数据(MyBatis原生foreach方法)
+ *
+ * @param entities List 实例对象列表
+ * @return 影响行数
+ */
+ int insertBatch(@Param("entities") List entities);
+
+ /**
+ * 批量新增或按主键更新数据(MyBatis原生foreach方法)
+ *
+ * @param entities List 实例对象列表
+ * @return 影响行数
+ */
+ int insertOrUpdateBatch(@Param("entities") List entities);
+
+ /**
+ * 修改数据
+ *
+ * @param xmNode 实例对象
+ * @return 影响行数
+ */
+ int update(XmNode xmNode);
+
+ /**
+ * 通过主键删除数据
+ *
+ * @param id 主键
+ * @return 影响行数
+ */
+ int deleteById(String id);
+
+}
+
diff --git a/ruoyi-modules/server-xm/src/main/java/com/server/xm/mapper/XmNodeStyleMapper.java b/ruoyi-modules/server-xm/src/main/java/com/server/xm/mapper/XmNodeStyleMapper.java
new file mode 100644
index 00000000..7b1d3b39
--- /dev/null
+++ b/ruoyi-modules/server-xm/src/main/java/com/server/xm/mapper/XmNodeStyleMapper.java
@@ -0,0 +1,89 @@
+package com.server.xm.mapper;
+
+import com.server.xm.entity.XmNodeStyle;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 样式表(XmNodeStyle)表数据库访问层
+ *
+ * @author makejava
+ * @since 2022-10-24 22:33:26
+ */
+public interface XmNodeStyleMapper {
+
+ /**
+ * 通过ID查询单条数据
+ *
+ * @param id 主键
+ * @return 实例对象
+ */
+ XmNodeStyle queryById(String id);
+
+ /**
+ * 查询指定行数据
+ *
+ * @param offset 查询起始位置
+ * @param limit 查询条数
+ * @return 对象列表
+ */
+ List queryAllByLimit(@Param("offset") int offset, @Param("limit") int limit);
+
+ /**
+ * 根据NodeId查询样式
+ * @param nids
+ * @return
+ */
+ List queryByNid(@Param("nids") List nids);
+
+ /**
+ * 通过实体作为筛选条件查询
+ *
+ * @param xmNodeStyle 实例对象
+ * @return 对象列表
+ */
+ List queryAll(XmNodeStyle xmNodeStyle);
+
+ /**
+ * 新增数据
+ *
+ * @param xmNodeStyle 实例对象
+ * @return 影响行数
+ */
+ int insert(XmNodeStyle xmNodeStyle);
+
+ /**
+ * 批量新增数据(MyBatis原生foreach方法)
+ *
+ * @param entities List 实例对象列表
+ * @return 影响行数
+ */
+ int insertBatch(@Param("entities") List entities);
+
+ /**
+ * 批量新增或按主键更新数据(MyBatis原生foreach方法)
+ *
+ * @param entities List 实例对象列表
+ * @return 影响行数
+ */
+ int insertOrUpdateBatch(@Param("entities") List entities);
+
+ /**
+ * 修改数据
+ *
+ * @param xmNodeStyle 实例对象
+ * @return 影响行数
+ */
+ int update(XmNodeStyle xmNodeStyle);
+
+ /**
+ * 通过主键删除数据
+ *
+ * @param id 主键
+ * @return 影响行数
+ */
+ int deleteById(String id);
+
+}
+
diff --git a/ruoyi-modules/server-xm/src/main/java/com/server/xm/mapper/XmTopMapper.java b/ruoyi-modules/server-xm/src/main/java/com/server/xm/mapper/XmTopMapper.java
new file mode 100644
index 00000000..6cb11f70
--- /dev/null
+++ b/ruoyi-modules/server-xm/src/main/java/com/server/xm/mapper/XmTopMapper.java
@@ -0,0 +1,91 @@
+package com.server.xm.mapper;
+
+
+import com.server.xm.entity.XmTop;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * Xmind列表(XmTop)表数据库访问层
+ *
+ * @author makejava
+ * @since 2022-10-23 12:50:09
+ */
+public interface XmTopMapper {
+
+ /**
+ * 通过ID查询单条数据
+ *
+ * @param id 主键
+ * @return 实例对象
+ */
+ XmTop queryById(String id);
+
+ /**
+ * 根据父节点查询二级节点
+ * @param pid 一级节点ID
+ * @return
+ */
+ List queryByPid(String pid);
+
+ /**
+ * 查询指定行数据
+ *
+ * @param offset 查询起始位置
+ * @param limit 查询条数
+ * @return 对象列表
+ */
+ List queryAllByLimit(@Param("offset") int offset, @Param("limit") int limit);
+
+
+ /**
+ * 通过实体作为筛选条件查询
+ *
+ * @param xmTop 实例对象
+ * @return 对象列表
+ */
+ List queryAll(XmTop xmTop);
+
+ /**
+ * 新增数据
+ *
+ * @param xmTop 实例对象
+ * @return 影响行数
+ */
+ int insert(XmTop xmTop);
+
+ /**
+ * 批量新增数据(MyBatis原生foreach方法)
+ *
+ * @param entities List 实例对象列表
+ * @return 影响行数
+ */
+ int insertBatch(@Param("entities") List entities);
+
+ /**
+ * 批量新增或按主键更新数据(MyBatis原生foreach方法)
+ *
+ * @param entities List 实例对象列表
+ * @return 影响行数
+ */
+ int insertOrUpdateBatch(@Param("entities") List entities);
+
+ /**
+ * 修改数据
+ *
+ * @param xmTop 实例对象
+ * @return 影响行数
+ */
+ int update(XmTop xmTop);
+
+ /**
+ * 通过主键删除数据
+ *
+ * @param id 主键
+ * @return 影响行数
+ */
+ int deleteById(String id);
+
+}
+
diff --git a/ruoyi-modules/server-xm/src/main/java/com/server/xm/service/XmNodeService.java b/ruoyi-modules/server-xm/src/main/java/com/server/xm/service/XmNodeService.java
new file mode 100644
index 00000000..3eb2340f
--- /dev/null
+++ b/ruoyi-modules/server-xm/src/main/java/com/server/xm/service/XmNodeService.java
@@ -0,0 +1,55 @@
+package com.server.xm.service;
+
+import com.server.xm.entity.XmNode;
+import java.util.List;
+
+/**
+ * Xmind列表(XmNode)表服务接口
+ *
+ * @author makejava
+ * @since 2022-10-24 22:16:42
+ */
+public interface XmNodeService {
+
+ /**
+ * 通过ID查询单条数据
+ *
+ * @param id 主键
+ * @return 实例对象
+ */
+ XmNode queryById(String id);
+
+ /**
+ * 查询多条数据
+ *
+ * @param offset 查询起始位置
+ * @param limit 查询条数
+ * @return 对象列表
+ */
+ List queryAllByLimit(int offset, int limit);
+
+ /**
+ * 新增数据
+ *
+ * @param xmNode 实例对象
+ * @return 实例对象
+ */
+ XmNode insert(XmNode xmNode);
+
+ /**
+ * 修改数据
+ *
+ * @param xmNode 实例对象
+ * @return 实例对象
+ */
+ XmNode update(XmNode xmNode);
+
+ /**
+ * 通过主键删除数据
+ *
+ * @param id 主键
+ * @return 是否成功
+ */
+ boolean deleteById(String id);
+
+}
diff --git a/ruoyi-modules/server-xm/src/main/java/com/server/xm/service/XmNodeStyleService.java b/ruoyi-modules/server-xm/src/main/java/com/server/xm/service/XmNodeStyleService.java
new file mode 100644
index 00000000..780cc030
--- /dev/null
+++ b/ruoyi-modules/server-xm/src/main/java/com/server/xm/service/XmNodeStyleService.java
@@ -0,0 +1,56 @@
+package com.server.xm.service;
+
+import com.server.xm.entity.XmNodeStyle;
+
+import java.util.List;
+
+/**
+ * 样式表(XmNodeStyle)表服务接口
+ *
+ * @author makejava
+ * @since 2022-10-24 22:33:28
+ */
+public interface XmNodeStyleService {
+
+ /**
+ * 通过ID查询单条数据
+ *
+ * @param id 主键
+ * @return 实例对象
+ */
+ XmNodeStyle queryById(String id);
+
+ /**
+ * 查询多条数据
+ *
+ * @param offset 查询起始位置
+ * @param limit 查询条数
+ * @return 对象列表
+ */
+ List queryAllByLimit(int offset, int limit);
+
+ /**
+ * 新增数据
+ *
+ * @param xmNodeStyle 实例对象
+ * @return 实例对象
+ */
+ XmNodeStyle insert(XmNodeStyle xmNodeStyle);
+
+ /**
+ * 修改数据
+ *
+ * @param xmNodeStyle 实例对象
+ * @return 实例对象
+ */
+ XmNodeStyle update(XmNodeStyle xmNodeStyle);
+
+ /**
+ * 通过主键删除数据
+ *
+ * @param id 主键
+ * @return 是否成功
+ */
+ boolean deleteById(String id);
+
+}
diff --git a/ruoyi-modules/server-xm/src/main/java/com/server/xm/service/XmTopService.java b/ruoyi-modules/server-xm/src/main/java/com/server/xm/service/XmTopService.java
new file mode 100644
index 00000000..5ae1048b
--- /dev/null
+++ b/ruoyi-modules/server-xm/src/main/java/com/server/xm/service/XmTopService.java
@@ -0,0 +1,63 @@
+package com.server.xm.service;
+import com.server.xm.entity.XmTop;
+import com.server.xm.entity.vo.XmTopVo;
+
+import java.util.List;
+
+/**
+ * Xmind列表(XmTop)表服务接口
+ *
+ * @author makejava
+ * @since 2022-10-23 12:50:29
+ */
+public interface XmTopService {
+
+ /**
+ * 通过ID查询单条数据
+ *
+ * @param id 主键
+ * @return 实例对象
+ */
+ XmTopVo queryById(String id);
+
+ /**
+ * 查询多条数据
+ *
+ * @param offset 查询起始位置
+ * @param limit 查询条数
+ * @return 对象列表
+ */
+ List queryAllByLimit(int offset, int limit);
+
+ /**
+ * 查询所有,不分页
+ * @param xmTop
+ * @return
+ */
+ List queryAll(XmTop xmTop);
+
+ /**
+ * 新增数据
+ *
+ * @param xmTop 实例对象
+ * @return 实例对象
+ */
+ void insert(XmTopVo xmTopVo);
+
+ /**
+ * 修改数据
+ *
+ * @param xmTop 实例对象
+ * @return 实例对象
+ */
+ XmTop update(XmTop xmTop);
+
+ /**
+ * 通过主键删除数据
+ *
+ * @param id 主键
+ * @return 是否成功
+ */
+ boolean deleteById(String id);
+
+}
diff --git a/ruoyi-modules/server-xm/src/main/java/com/server/xm/service/impl/XmNodeServiceImpl.java b/ruoyi-modules/server-xm/src/main/java/com/server/xm/service/impl/XmNodeServiceImpl.java
new file mode 100644
index 00000000..37fb2f99
--- /dev/null
+++ b/ruoyi-modules/server-xm/src/main/java/com/server/xm/service/impl/XmNodeServiceImpl.java
@@ -0,0 +1,79 @@
+package com.server.xm.service.impl;
+
+import com.server.xm.entity.XmNode;
+import com.server.xm.mapper.XmNodeMapper;
+import com.server.xm.service.XmNodeService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * Xmind列表(XmNode)表服务实现类
+ *
+ * @author makejava
+ * @since 2022-10-24 22:16:42
+ */
+@Service("xmNodeService")
+public class XmNodeServiceImpl implements XmNodeService {
+ @Resource
+ private XmNodeMapper xmNodeMapper;
+
+ /**
+ * 通过ID查询单条数据
+ *
+ * @param id 主键
+ * @return 实例对象
+ */
+ @Override
+ public XmNode queryById(String id) {
+ return this.xmNodeMapper.queryById(id);
+ }
+
+ /**
+ * 查询多条数据
+ *
+ * @param offset 查询起始位置
+ * @param limit 查询条数
+ * @return 对象列表
+ */
+ @Override
+ public List queryAllByLimit(int offset, int limit) {
+ return this.xmNodeMapper.queryAllByLimit(offset, limit);
+ }
+
+ /**
+ * 新增数据
+ *
+ * @param xmNode 实例对象
+ * @return 实例对象
+ */
+ @Override
+ public XmNode insert(XmNode xmNode) {
+ this.xmNodeMapper.insert(xmNode);
+ return xmNode;
+ }
+
+ /**
+ * 修改数据
+ *
+ * @param xmNode 实例对象
+ * @return 实例对象
+ */
+ @Override
+ public XmNode update(XmNode xmNode) {
+ this.xmNodeMapper.update(xmNode);
+ return this.queryById(xmNode.getId());
+ }
+
+ /**
+ * 通过主键删除数据
+ *
+ * @param id 主键
+ * @return 是否成功
+ */
+ @Override
+ public boolean deleteById(String id) {
+ return this.xmNodeMapper.deleteById(id) > 0;
+ }
+}
diff --git a/ruoyi-modules/server-xm/src/main/java/com/server/xm/service/impl/XmNodeStyleServiceImpl.java b/ruoyi-modules/server-xm/src/main/java/com/server/xm/service/impl/XmNodeStyleServiceImpl.java
new file mode 100644
index 00000000..527d810b
--- /dev/null
+++ b/ruoyi-modules/server-xm/src/main/java/com/server/xm/service/impl/XmNodeStyleServiceImpl.java
@@ -0,0 +1,79 @@
+package com.server.xm.service.impl;
+
+import com.server.xm.entity.XmNodeStyle;
+import com.server.xm.mapper.XmNodeStyleMapper;
+import com.server.xm.service.XmNodeStyleService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 样式表(XmNodeStyle)表服务实现类
+ *
+ * @author makejava
+ * @since 2022-10-24 22:33:28
+ */
+@Service("xmNodeStyleService")
+public class XmNodeStyleServiceImpl implements XmNodeStyleService {
+ @Resource
+ private XmNodeStyleMapper xmNodeStyleMapper;
+
+ /**
+ * 通过ID查询单条数据
+ *
+ * @param id 主键
+ * @return 实例对象
+ */
+ @Override
+ public XmNodeStyle queryById(String id) {
+ return this.xmNodeStyleMapper.queryById(id);
+ }
+
+ /**
+ * 查询多条数据
+ *
+ * @param offset 查询起始位置
+ * @param limit 查询条数
+ * @return 对象列表
+ */
+ @Override
+ public List queryAllByLimit(int offset, int limit) {
+ return this.xmNodeStyleMapper.queryAllByLimit(offset, limit);
+ }
+
+ /**
+ * 新增数据
+ *
+ * @param xmNodeStyle 实例对象
+ * @return 实例对象
+ */
+ @Override
+ public XmNodeStyle insert(XmNodeStyle xmNodeStyle) {
+ this.xmNodeStyleMapper.insert(xmNodeStyle);
+ return xmNodeStyle;
+ }
+
+ /**
+ * 修改数据
+ *
+ * @param xmNodeStyle 实例对象
+ * @return 实例对象
+ */
+ @Override
+ public XmNodeStyle update(XmNodeStyle xmNodeStyle) {
+ this.xmNodeStyleMapper.update(xmNodeStyle);
+ return this.queryById(xmNodeStyle.getId());
+ }
+
+ /**
+ * 通过主键删除数据
+ *
+ * @param id 主键
+ * @return 是否成功
+ */
+ @Override
+ public boolean deleteById(String id) {
+ return this.xmNodeStyleMapper.deleteById(id) > 0;
+ }
+}
diff --git a/ruoyi-modules/server-xm/src/main/java/com/server/xm/service/impl/XmTopServiceImpl.java b/ruoyi-modules/server-xm/src/main/java/com/server/xm/service/impl/XmTopServiceImpl.java
new file mode 100644
index 00000000..b15370bd
--- /dev/null
+++ b/ruoyi-modules/server-xm/src/main/java/com/server/xm/service/impl/XmTopServiceImpl.java
@@ -0,0 +1,154 @@
+package com.server.xm.service.impl;
+
+
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.server.xm.entity.XmNode;
+import com.server.xm.entity.XmNodeStyle;
+import com.server.xm.entity.XmTop;
+import com.server.xm.entity.vo.XmTopVo;
+import com.server.xm.mapper.XmNodeMapper;
+import com.server.xm.mapper.XmNodeStyleMapper;
+import com.server.xm.mapper.XmTopMapper;
+import com.server.xm.service.XmTopService;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * Xmind列表(XmTop)表服务实现类
+ *
+ * @author makejava
+ * @since 2022-10-23 12:50:29
+ */
+@Service("xmTopService")
+public class XmTopServiceImpl implements XmTopService {
+ @Resource
+ private XmTopMapper xmTopMapper;
+ @Resource
+ private XmNodeStyleMapper styleMapper;
+ @Resource
+ private XmNodeMapper nodeMapper;
+
+ /**
+ * 通过ID查询单条数据
+ *
+ * @param id 主键
+ * @return 实例对象
+ */
+ @Override
+ public XmTopVo queryById(String id) {
+ //查询出节点与父节点数据
+ XmTop top = this.xmTopMapper.queryById(id);
+ //查询出二级ID
+ List secList = this.xmTopMapper.queryByPid(id);
+ List nids = secList.stream().map(e -> e.getId()).collect(Collectors.toList());
+ nids.add(top.getId());
+ List styleList = styleMapper.queryByNid(nids);
+ Map> styleMap = styleList.stream().collect(Collectors.groupingBy(e -> e.getNodeId()));
+ //组装父节点
+ XmTopVo data = new XmTopVo(top,styleMap.get(top.getId()).get(0));
+ //子节点
+ List children = secList.stream().map(e -> new XmTopVo(e,styleMap.get(e.getId()).get(0))).collect(Collectors.toList());
+ data.setChildren(children);
+ return data;
+ }
+
+ /**
+ * 查询多条数据
+ *
+ * @param offset 查询起始位置
+ * @param limit 查询条数
+ * @return 对象列表
+ */
+ @Override
+ public List queryAllByLimit(int offset, int limit) {
+ return this.xmTopMapper.queryAllByLimit(offset, limit);
+ }
+
+ @Override
+ public List queryAll(XmTop xmTop) {
+ return this.xmTopMapper.queryAll(xmTop);
+ }
+
+ /**
+ * 新增数据
+ *
+ * @param xmTopVo 实例对象
+ * @return 实例对象
+ */
+ @Override
+ @Transactional
+ public void insert(XmTopVo xmTopVo) {
+ //查询头两个节点,存入top
+ List topList = new ArrayList<>();
+ XmTop topEntity = new XmTop(xmTopVo,"1","-1");
+ topList.add(topEntity);
+ List secList = xmTopVo.getChildren();
+ //保存前两节点style
+ List styleList = new ArrayList<>();
+ styleList.add(new XmNodeStyle(xmTopVo));
+ if(!CollectionUtils.isEmpty(secList)){
+ List secTopList = secList.stream().map(e -> new XmTop(e,"2",topEntity.getId())).collect(Collectors.toList());
+ topList.addAll(secTopList);
+ //保存节点
+ xmTopMapper.insertBatch(topList);
+ List secStyleList = secList.stream().map(e -> new XmNodeStyle(e)).collect(Collectors.toList());
+ styleList.addAll(secStyleList);
+ //保存syle
+ styleMapper.insertBatch(styleList);
+ //递归下属节点
+ List nodes = new ArrayList<>();
+ List styles = new ArrayList<>();
+ secList.stream().forEach(e -> {
+ if(!CollectionUtils.isEmpty(e.getChildren())){
+ dealInsertNode(e.getChildren(),nodes,styles,3,e.getId(),topEntity.getId());
+ }
+ });
+ //保存
+ nodeMapper.insertBatch(nodes);
+ styleMapper.insertBatch(styles);
+
+ }
+
+ }
+ private void dealInsertNode(List xmTopVoList, List nodeList,List styleList,Integer level,String parentId,String topId){
+ final Integer oldLevel = level;
+ List nodes = xmTopVoList.stream().map(e -> new XmNode(e,oldLevel.toString(),parentId,topId)).collect(Collectors.toList());
+ nodeList.addAll(nodes);
+ List styles = xmTopVoList.stream().map(e -> new XmNodeStyle(e)).collect(Collectors.toList());
+ styleList.addAll(styles);
+ Map> map = xmTopVoList.stream().filter(e -> null != e.getChildren()).collect(Collectors.toMap(e ->e.getId(),e->e.getChildren(),(k1,k2) ->k1));
+ final Integer newLevel = ++level;
+ map.forEach((k,v) -> {
+ if(!CollectionUtils.isEmpty(v)){
+ dealInsertNode(v,nodeList,styleList,newLevel,k,topId);
+ }
+ });
+ }
+ /**
+ * 修改数据
+ *
+ * @param xmTop 实例对象
+ * @return 实例对象
+ */
+ @Override
+ public XmTop update(XmTop xmTop) {
+ this.xmTopMapper.update(xmTop);
+ return null;
+ }
+
+ /**
+ * 通过主键删除数据
+ *
+ * @param id 主键
+ * @return 是否成功
+ */
+ @Override
+ public boolean deleteById(String id) {
+ return this.xmTopMapper.deleteById(id) > 0;
+ }
+}
diff --git a/ruoyi-modules/server-xm/src/main/resources/bootstrap.yml b/ruoyi-modules/server-xm/src/main/resources/bootstrap.yml
new file mode 100644
index 00000000..e8a69a4f
--- /dev/null
+++ b/ruoyi-modules/server-xm/src/main/resources/bootstrap.yml
@@ -0,0 +1,25 @@
+# Tomcat
+server:
+ port: 9204
+
+# Spring
+spring:
+ application:
+ # 应用名称
+ name: server-xm
+ profiles:
+ # 环境配置
+ active: dev
+ cloud:
+ nacos:
+ discovery:
+ # 服务注册地址
+ server-addr: 127.0.0.1:8848
+ config:
+ # 配置中心地址
+ server-addr: 127.0.0.1:8848
+ # 配置文件格式
+ file-extension: yml
+ # 共享配置
+ shared-configs:
+ - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
diff --git a/ruoyi-modules/server-xm/src/main/resources/logback.xml b/ruoyi-modules/server-xm/src/main/resources/logback.xml
new file mode 100644
index 00000000..565ce1c3
--- /dev/null
+++ b/ruoyi-modules/server-xm/src/main/resources/logback.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+ ${log.pattern}
+
+
+
+
+
+ ${log.path}/info.log
+
+
+
+ ${log.path}/info.%d{yyyy-MM-dd}.log
+
+ 60
+
+
+ ${log.pattern}
+
+
+
+ INFO
+
+ ACCEPT
+
+ DENY
+
+
+
+
+ ${log.path}/error.log
+
+
+
+ ${log.path}/error.%d{yyyy-MM-dd}.log
+
+ 60
+
+
+ ${log.pattern}
+
+
+
+ ERROR
+
+ ACCEPT
+
+ DENY
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-modules/server-xm/src/main/resources/mapper/XmNodeMapper.xml b/ruoyi-modules/server-xm/src/main/resources/mapper/XmNodeMapper.xml
new file mode 100644
index 00000000..faa61d03
--- /dev/null
+++ b/ruoyi-modules/server-xm/src/main/resources/mapper/XmNodeMapper.xml
@@ -0,0 +1,174 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ insert into xm_node(ID,NAME, TYPE_ID, NODE_LEVEL, PARENT_ID, TOP_ID, CREATE_TIME, UPDATE_TIME, CREATE_BY,
+ UPDATE_BY, DEL_FLAG)
+ values (#{id},#{name}, #{typeId}, #{nodeLevel}, #{parentId}, #{topId}, #{createTime}, #{updateTime}, #{createBy}, #{updateBy}, #{delFlag})
+
+
+
+ insert into xm_node(ID,NAME, TYPE_ID, NODE_LEVEL, PARENT_ID, TOP_ID, CREATE_TIME, UPDATE_TIME, CREATE_BY,
+ UPDATE_BY, DEL_FLAG)
+ values
+
+ (#{entity.id},#{entity.name}, #{entity.typeId}, #{entity.nodeLevel}, #{entity.parentId}, #{entity.topId},
+ #{entity.createTime}, #{entity.updateTime}, #{entity.createBy}, #{entity.updateBy}, #{entity.delFlag})
+
+
+
+
+ insert into xm_node(NAME, TYPE_ID, NODE_LEVEL, PARENT_ID, TOP_ID, CREATE_TIME, UPDATE_TIME, CREATE_BY,
+ UPDATE_BY, DEL_FLAG)
+ values
+
+ (#{entity.name}, #{entity.typeId}, #{entity.nodeLevel}, #{entity.parentId}, #{entity.topId},
+ #{entity.createTime}, #{entity.updateTime}, #{entity.createBy}, #{entity.updateBy}, #{entity.delFlag})
+
+ on duplicate key update
+ NAME = values(NAME) , TYPE_ID = values(TYPE_ID) , NODE_LEVEL = values(NODE_LEVEL) , PARENT_ID =
+ values(PARENT_ID) , TOP_ID = values(TOP_ID) , CREATE_TIME = values(CREATE_TIME) , UPDATE_TIME =
+ values(UPDATE_TIME) , CREATE_BY = values(CREATE_BY) , UPDATE_BY = values(UPDATE_BY) , DEL_FLAG =
+ values(DEL_FLAG)
+
+
+
+
+ update xm_node
+
+
+ NAME = #{name},
+
+
+ TYPE_ID = #{typeId},
+
+
+ NODE_LEVEL = #{nodeLevel},
+
+
+ PARENT_ID = #{parentId},
+
+
+ TOP_ID = #{topId},
+
+
+ CREATE_TIME = #{createTime},
+
+
+ UPDATE_TIME = #{updateTime},
+
+
+ CREATE_BY = #{createBy},
+
+
+ UPDATE_BY = #{updateBy},
+
+
+ DEL_FLAG = #{delFlag},
+
+
+ where ID = #{id}
+
+
+
+
+ delete
+ from xm_node
+ where ID = #{id}
+
+
+
+
diff --git a/ruoyi-modules/server-xm/src/main/resources/mapper/XmNodeStyleMapper.xml b/ruoyi-modules/server-xm/src/main/resources/mapper/XmNodeStyleMapper.xml
new file mode 100644
index 00000000..00c7c9f2
--- /dev/null
+++ b/ruoyi-modules/server-xm/src/main/resources/mapper/XmNodeStyleMapper.xml
@@ -0,0 +1,157 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ insert into xm_node_style(ID,DIRECTION, HYPER_LINK, ICONS, MEMO, STYLE, TAGS, NODE_ID)
+ values (#{id},#{direction}, #{hyperLink}, #{icons}, #{memo}, #{style}, #{tags}, #{nodeId})
+
+
+
+ insert into xm_node_style(ID,DIRECTION, HYPER_LINK, ICONS, MEMO, STYLE, TAGS, NODE_ID)
+ values
+
+ (#{entity.id},#{entity.direction}, #{entity.hyperLink}, #{entity.icons}, #{entity.memo}, #{entity.style}, #{entity.tags},
+ #{entity.nodeId})
+
+
+
+
+ insert into xm_node_style(DIRECTION, HYPER_LINK, ICONS, MEMO, STYLE, TAGS, NODE_ID)
+ values
+
+ (#{entity.direction}, #{entity.hyperLink}, #{entity.icons}, #{entity.memo}, #{entity.style}, #{entity.tags},
+ #{entity.nodeId})
+
+ on duplicate key update
+ DIRECTION = values(DIRECTION) , HYPER_LINK = values(HYPER_LINK) , ICONS = values(ICONS) , MEMO = values(MEMO) ,
+ STYLE = values(STYLE) , TAGS = values(TAGS) , NODE_ID = values(NODE_ID)
+
+
+
+
+ update xm_node_style
+
+
+ DIRECTION = #{direction},
+
+
+ HYPER_LINK = #{hyperLink},
+
+
+ ICONS = #{icons},
+
+
+ MEMO = #{memo},
+
+
+ STYLE = #{style},
+
+
+ TAGS = #{tags},
+
+
+ NODE_ID = #{nodeId},
+
+
+ where ID = #{id}
+
+
+
+
+ delete
+ from xm_node_style
+ where ID = #{id}
+
+
+
+
diff --git a/ruoyi-modules/server-xm/src/main/resources/mapper/XmTopMapper.xml b/ruoyi-modules/server-xm/src/main/resources/mapper/XmTopMapper.xml
new file mode 100644
index 00000000..5fc87d07
--- /dev/null
+++ b/ruoyi-modules/server-xm/src/main/resources/mapper/XmTopMapper.xml
@@ -0,0 +1,169 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ insert into xm_top(ID,NAME, TYPE_ID, NODE_LEVEL, PARENT_ID,CREATE_TIME, UPDATE_TIME, CREATE_BY, UPDATE_BY,
+ DEL_FLAG)
+ values (#{entity.id},#{name}, #{typeId}, #{nodeLevel},#{entity.parentId}, #{createTime}, #{updateTime}, #{createBy}, #{updateBy}, #{delFlag})
+
+
+
+ insert into xm_top(ID,NAME, TYPE_ID, NODE_LEVEL, PARENT_ID,CREATE_TIME, UPDATE_TIME, CREATE_BY, UPDATE_BY,
+ DEL_FLAG)
+ values
+
+ (#{entity.id},#{entity.name}, #{entity.typeId}, #{entity.nodeLevel},#{entity.parentId}, #{entity.createTime}, #{entity.updateTime},
+ #{entity.createBy}, #{entity.updateBy}, #{entity.delFlag})
+
+
+
+
+ insert into xm_top(NAME, TYPE_ID, NODE_LEVEL, CREATE_TIME, UPDATE_TIME, CREATE_BY, UPDATE_BY,
+ DEL_FLAG)
+ values
+
+ (#{entity.name}, #{entity.typeId}, #{entity.nodeLevel}, #{entity.createTime}, #{entity.updateTime},
+ #{entity.createBy}, #{entity.updateBy}, #{entity.delFlag})
+
+ on duplicate key update
+ NAME = values(NAME) , TYPE_ID = values(TYPE_ID) , NODE_LEVEL = values(NODE_LEVEL) , CREATE_TIME =
+ values(CREATE_TIME) , UPDATE_TIME = values(UPDATE_TIME) , CREATE_BY = values(CREATE_BY) , UPDATE_BY =
+ values(UPDATE_BY) , DEL_FLAG = values(DEL_FLAG)
+
+
+
+
+ update xm_top
+
+
+ NAME = #{name},
+
+
+ TYPE_ID = #{typeId},
+
+
+ NODE_LEVEL = #{nodeLevel},
+
+
+ CREATE_TIME = #{createTime},
+
+
+ UPDATE_TIME = #{updateTime},
+
+
+ CREATE_BY = #{createBy},
+
+
+ UPDATE_BY = #{updateBy},
+
+
+ DEL_FLAG = #{delFlag},
+
+
+ where ID = #{id}
+
+
+
+
+ delete
+ from xm_top
+ where ID = #{id}
+
+
+
+
diff --git a/ruoyi-ui/README.md b/ruoyi-ui/README.md
index ad24b682..f28d783a 100644
--- a/ruoyi-ui/README.md
+++ b/ruoyi-ui/README.md
@@ -27,4 +27,6 @@ npm run build:stage
# 构建生产环境
npm run build:prod
-```
\ No newline at end of file
+```
+
+测试git上传
\ No newline at end of file