From 3b15de686c8be13a37627d15ab3b94a0182db108 Mon Sep 17 00:00:00 2001 From: tanghao Date: Wed, 19 May 2021 09:32:10 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0project=5Ftopo?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=95=B0=E6=8D=AE=E5=B9=B3=E7=A7=BB=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/nis/dao/ProjectTopoDao.java | 27 ++ .../java/com/nis/dao/ProjectTopoIconDao.java | 25 ++ src/main/java/com/nis/entity/ProjectTopo.java | 22 ++ .../java/com/nis/entity/ProjectTopoIcon.java | 24 ++ src/main/java/com/nis/handler/SqlHandler.java | 11 +- .../nis/service/ProjectTopoIconService.java | 13 + .../com/nis/service/ProjectTopoService.java | 13 + .../impl/ProjectTopoIconServiceImpl.java | 23 ++ .../service/impl/ProjectTopoServiceImpl.java | 344 ++++++++++++++++++ 9 files changed, 501 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/nis/dao/ProjectTopoDao.java create mode 100644 src/main/java/com/nis/dao/ProjectTopoIconDao.java create mode 100644 src/main/java/com/nis/entity/ProjectTopo.java create mode 100644 src/main/java/com/nis/entity/ProjectTopoIcon.java create mode 100644 src/main/java/com/nis/service/ProjectTopoIconService.java create mode 100644 src/main/java/com/nis/service/ProjectTopoService.java create mode 100644 src/main/java/com/nis/service/impl/ProjectTopoIconServiceImpl.java create mode 100644 src/main/java/com/nis/service/impl/ProjectTopoServiceImpl.java diff --git a/src/main/java/com/nis/dao/ProjectTopoDao.java b/src/main/java/com/nis/dao/ProjectTopoDao.java new file mode 100644 index 0000000..df959d0 --- /dev/null +++ b/src/main/java/com/nis/dao/ProjectTopoDao.java @@ -0,0 +1,27 @@ +/** + + * + + * + + */ + +package com.nis.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.nis.entity.Dc; +import com.nis.entity.Idc; +import com.nis.entity.Project; +import com.nis.entity.ProjectTopo; + +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + + +@Mapper +@Repository +public interface ProjectTopoDao extends BaseMapper { + +} diff --git a/src/main/java/com/nis/dao/ProjectTopoIconDao.java b/src/main/java/com/nis/dao/ProjectTopoIconDao.java new file mode 100644 index 0000000..e50be28 --- /dev/null +++ b/src/main/java/com/nis/dao/ProjectTopoIconDao.java @@ -0,0 +1,25 @@ +/** + + * + + * + + */ + +package com.nis.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.nis.entity.Dc; +import com.nis.entity.Idc; +import com.nis.entity.Project; +import com.nis.entity.ProjectTopoIcon; + +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + + +@Mapper +@Repository +public interface ProjectTopoIconDao extends BaseMapper { + +} diff --git a/src/main/java/com/nis/entity/ProjectTopo.java b/src/main/java/com/nis/entity/ProjectTopo.java new file mode 100644 index 0000000..331fb01 --- /dev/null +++ b/src/main/java/com/nis/entity/ProjectTopo.java @@ -0,0 +1,22 @@ +package com.nis.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +@Data +@TableName("project_topo") +public class ProjectTopo { + @TableId + private Integer id; + + private Integer projectId; + + private Object topo; + + private Date updateAt; + + private Integer updateBy; +} \ No newline at end of file diff --git a/src/main/java/com/nis/entity/ProjectTopoIcon.java b/src/main/java/com/nis/entity/ProjectTopoIcon.java new file mode 100644 index 0000000..c5f6f02 --- /dev/null +++ b/src/main/java/com/nis/entity/ProjectTopoIcon.java @@ -0,0 +1,24 @@ +package com.nis.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +@Data +@TableName("project_topo_icon") +public class ProjectTopoIcon { + @TableId + private Integer id; + + private String name; + + private String bytes; + + private String type; + + private String unit; + + private Integer width; + + private Integer height; +} diff --git a/src/main/java/com/nis/handler/SqlHandler.java b/src/main/java/com/nis/handler/SqlHandler.java index ebc973c..0b815f7 100644 --- a/src/main/java/com/nis/handler/SqlHandler.java +++ b/src/main/java/com/nis/handler/SqlHandler.java @@ -34,6 +34,7 @@ import com.nis.service.AssetModelService; import com.nis.service.ChartService; import com.nis.service.DcService; import com.nis.service.EndpointService; +import com.nis.service.ProjectTopoService; import com.nis.service.SysConfigService; import com.nis.service.SysUserService; import com.nis.util.Constant; @@ -86,6 +87,9 @@ public class SqlHandler { @Autowired private SysConfigService sysConfigService; + @Autowired + private ProjectTopoService projectTopoService; + public void removeData() { String assetPing = "delete from asset_ping"; sqlDao.execute(assetPing); @@ -1039,9 +1043,12 @@ public class SqlHandler { // 图表相关数据同步 chartService.handler(); - + // 将原来数据库的数据数据还原 this.dataRestore(); + + // project topo相关图表数据同步 + projectTopoService.handler(); } public void dataRestore() { @@ -1078,6 +1085,8 @@ public class SqlHandler { data.setParamValue(oldDataMap.get("scrape_timeout")); }else if(data.getParamKey().equals("timezone")) { data.setParamValue("Asia/Shanghai"); + }else if(data.getParamKey().endsWith("confagent_path") || data.getParamKey().equals("system_version")){ + continue; }else { String value = oldDataMap.get(data.getParamKey()); if(value!=null) { diff --git a/src/main/java/com/nis/service/ProjectTopoIconService.java b/src/main/java/com/nis/service/ProjectTopoIconService.java new file mode 100644 index 0000000..8831c9c --- /dev/null +++ b/src/main/java/com/nis/service/ProjectTopoIconService.java @@ -0,0 +1,13 @@ +package com.nis.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.nis.entity.Dc; +import com.nis.entity.Idc; +import com.nis.entity.Project; +import com.nis.entity.ProjectTopo; +import com.nis.entity.ProjectTopoIcon; + + +public interface ProjectTopoIconService extends IService { + +} \ No newline at end of file diff --git a/src/main/java/com/nis/service/ProjectTopoService.java b/src/main/java/com/nis/service/ProjectTopoService.java new file mode 100644 index 0000000..1b165dd --- /dev/null +++ b/src/main/java/com/nis/service/ProjectTopoService.java @@ -0,0 +1,13 @@ +package com.nis.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.nis.entity.Dc; +import com.nis.entity.Idc; +import com.nis.entity.Project; +import com.nis.entity.ProjectTopo; + + +public interface ProjectTopoService extends IService { + + public void handler(); +} \ No newline at end of file diff --git a/src/main/java/com/nis/service/impl/ProjectTopoIconServiceImpl.java b/src/main/java/com/nis/service/impl/ProjectTopoIconServiceImpl.java new file mode 100644 index 0000000..91859ac --- /dev/null +++ b/src/main/java/com/nis/service/impl/ProjectTopoIconServiceImpl.java @@ -0,0 +1,23 @@ +package com.nis.service.impl; + +import cn.hutool.log.Log; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.nis.dao.DcDao; +import com.nis.dao.IdcDao; +import com.nis.dao.ProjectDao; +import com.nis.dao.ProjectTopoIconDao; +import com.nis.entity.Dc; +import com.nis.entity.Idc; +import com.nis.entity.Project; +import com.nis.entity.ProjectTopoIcon; +import com.nis.service.DcService; +import com.nis.service.IdcService; +import com.nis.service.ProjectService; +import com.nis.service.ProjectTopoIconService; + +import org.springframework.stereotype.Service; + +@Service +public class ProjectTopoIconServiceImpl extends ServiceImpl implements ProjectTopoIconService { + +} diff --git a/src/main/java/com/nis/service/impl/ProjectTopoServiceImpl.java b/src/main/java/com/nis/service/impl/ProjectTopoServiceImpl.java new file mode 100644 index 0000000..49f353b --- /dev/null +++ b/src/main/java/com/nis/service/impl/ProjectTopoServiceImpl.java @@ -0,0 +1,344 @@ +package com.nis.service.impl; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.log.Log; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.nis.dao.DcDao; +import com.nis.dao.IdcDao; +import com.nis.dao.ProjectDao; +import com.nis.dao.ProjectTopoDao; +import com.nis.entity.Dc; +import com.nis.entity.Idc; +import com.nis.entity.Module; +import com.nis.entity.Project; +import com.nis.entity.ProjectTopo; +import com.nis.service.DcService; +import com.nis.service.IdcService; +import com.nis.service.ModuleService; +import com.nis.service.ProjectService; +import com.nis.service.ProjectTopoService; +import com.nis.util.ToolUtil; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class ProjectTopoServiceImpl extends ServiceImpl implements ProjectTopoService { + + @Autowired + private ProjectService projectService; + + @Autowired + private ModuleService moduleService; + + @Override + public void handler() { + // 处理project_topo中的数据 + List projectTopos = this.list(); + for(ProjectTopo projectTopo : projectTopos) { + Project project = projectService.getById(projectTopo.getProjectId()); + Map topoData =new LinkedHashMap(); + List pens = new ArrayList(); + Map topo = JSONObject.parseObject(projectTopo.getTopo().toString(), Map.class); + List nodes = JSONObject.parseArray(topo.get("nodes").toString(),Map.class); + List lines = JSONObject.parseArray(topo.get("lines").toString(),Map.class); + Map moduleAndNode = new HashMap(); + for(Map node : nodes) { + Map result = this.createNodeOrLine(0, node,moduleAndNode); + pens.add(result); + } + for(Map line : lines) { + Map result = this.createNodeOrLine(1, line,moduleAndNode); + pens.add(result); + } + topoData.put("pens", pens); + topoData.put("lineName", "curve"); + topoData.put("scale", 1); + topoData.put("locked", 0); + Map mqttOptions =new HashMap(); + mqttOptions.put("clientId", ""); + topoData.put("mqttOptions", mqttOptions); + topoData.put("lineWidth", 1); + topoData.put("bkColor", "#FFFFFF"); + topoData.put("gridColor", "#ededed"); + topoData.put("gridSize", 0); + topoData.put("ruleColor", "#4e4e4e"); + topoData.put("data", new HashMap()); + topoData.put("name", project.getName()); + topoData.put("projectId", projectTopo.getProjectId()); + topoData.put("rule", false); + topoData.put("grid", false); + projectTopo.setTopo(JSON.toJSONString(topoData)); + } + + if(ToolUtil.isNotEmpty(projectTopos)) { + this.updateBatchById(projectTopos); + } + } + + + public Map createNodeOrLine(Integer type,Map object,Map moduleAndNode) { + Module module = null; + if(type==0) { + Integer moduleId = (Integer) object.get("moduleId"); + module = moduleService.getById(moduleId); + moduleAndNode.put(moduleId, object); + } + String colorData = null; + if(type==1) { + Object colorObject = object.get("color"); + if(colorObject instanceof java.util.Map) { + colorData = (String) ((Map)colorObject).get("color"); + }else { + if(ToolUtil.isNotEmpty(colorObject)) { + colorData = (String)colorObject; + } + } + if(StrUtil.isBlank(colorData)) { + colorData = "#222222"; + } + } + + Map result =new LinkedHashMap(); + result.put("type", type==0 ? 0:1); + Integer x = (Integer)object.get("x"); + Integer y = (Integer)object.get("y"); + Map rect =new HashMap(); + rect.put("x", type==0 ? x : 0); + rect.put("y", type==0 ? y : 0); + rect.put("width", type==0 ? 100 : 0); + rect.put("height", type==0 ? 100 : 0); + /*if(type==1) { + rect.put("ex", 0); + rect.put("ey", 0); + }*/ + Map center = new HashMap(); + center.put("x", type==0 ? x+50 : 0); + center.put("y", type==0 ? y+50 : 0); + rect.put("center", center); + result.put("rect", rect); + + result.put("lineWidth", 1); + result.put("rotate", 0); + result.put("offsetRotate", 0); + result.put("globalAlpha",1); + result.put("dash",0); + result.put("strokeStyle",type==0 ? "#222222" : colorData); + + Map font =new HashMap(); + font.put("color", type==0 ? "#222222" : colorData); + font.put("fontSize", 12); + font.put("lineHeight", 1.5); + font.put("fontStyle", "normal"); + font.put("fontWeight", "normal"); + font.put("textAlign", "center"); + font.put("textBaseline", "middle"); + if(type==1) { + font.put("background","#fff"); + } + result.put("font",font); + result.put("animatePos",0); + result.put("events",new ArrayList()); + + List eventFns =new ArrayList(); + eventFns.add("link"); + eventFns.add("doStartAnimate"); + eventFns.add("doFn"); + eventFns.add("doWindowFn"); + eventFns.add(""); + eventFns.add("doPauseAnimate"); + eventFns.add("doStopAnimate"); + result.put("eventFns",eventFns); + + String name = "rectangleImg"; + if(type==1) { + Map smooth = (Map) object.get("smooth"); + String smoothType = (String) smooth.get("type"); + if(StrUtil.isNotBlank(smoothType)) { + name = "curve"; + }else { + name = "line"; + } + + } + result.put("id", type == 0 ? module.getId() : ""); + result.put("name", name); + result.put("tags",new ArrayList()); + result.put("lineDashOffset", 0); + result.put("textOffsetX", 0); + result.put("textOffsetY", 0); + result.put("visible", true); + if(type==0) { + result.put("text", module.getName()); + } + + Map data = new HashMap(); + if(type==0) { + data.put("imageId", object.get("iconId")); + data.put("moduleId", module.getId()); + data.put("moduleName", module.getName()); + data.put("show", false); + data.put("error", false); + data.put("fillStyle", ""); + data.put("strokeStyle", "#000000"); + data.put("gradientColor", "#bae7ff"); + data.put("gradientType", 0); + data.put("lineWidth", 0); + data.put("iconToolState", true); + }else if(type==1) { + data.put("strokeStyle", "#222222"); + data.put("animateColor", "#FA901C"); + data.put("arrowColor", "#000000"); + data.put("fromArrowColor", "#000000"); + data.put("toArrowColor", "#000000"); + data.put("lineWidth", 1); + data.put("moduleName", ""); + } + data.put("animatePlay", false); + + List valueMapping =new ArrayList(); + Map vm =new HashMap(); + Map color =new HashMap(); + color.put("line","#000000"); + color.put("fill","#ffffff"); + color.put("text","#000000"); + vm.put("color", color); + vm.put("value", "base"); + vm.put("animateType", "base"); + vm.put("level", 0); + vm.put("base", true); + valueMapping.add(vm); + data.put("valueMapping", valueMapping); + data.put("valueMappingSort", "asc"); + data.put("expressArr",new ArrayList()); + data.put("legends",new ArrayList()); + data.put("tooltipShow", true); + data.put("panelName", "topologyName"); + data.put("unit", 2); + data.put("type", "line"); + data.put("displayChart", true); + data.put("aggregation", "last"); + data.put("title", type==0 ? module.getName() : ""); + data.put("url", ""); + result.put("data", data); + + if(type==0) { + result.put("zRotate", 0); + result.put("imageRatio", true); + result.put("animateDuration", 0); + result.put("animateFrames", new ArrayList()); + result.put("animateFrame", 0); + result.put("borderRadius", 0); + result.put("icon", ""); + result.put("image", ""); + result.put("imageAlign", "center"); + result.put("bkType", 0); + result.put("gradientAngle", 0); + result.put("gradientRadius", 0.01); + result.put("paddingTop", 5); + result.put("paddingBottom", 5); + result.put("paddingLeft", 5); + result.put("paddingRight", 5); + result.put("paddingLeftNum", 5); + result.put("paddingRightNum", 5); + result.put("paddingTopNum", 5); + result.put("paddingBottomNum", 5); + result.put("animatePlay", false); + result.put("animateReady", null); + }else if(type==1) { + Integer sourceId = (Integer) object.get("source"); + Integer targetId = (Integer) object.get("target"); + Map sourceNode = (Map) moduleAndNode.get(sourceId); + Map targetNode = (Map) moduleAndNode.get(targetId); + + Integer sourceX = (Integer) sourceNode.get("x"); + Integer sourceY = (Integer) sourceNode.get("y"); + Integer targetX = (Integer) targetNode.get("x"); + Integer targetY = (Integer) targetNode.get("y"); + + List controlPoints =new ArrayList(); + Map m1 =new HashMap(); + m1.put("x", sourceX+50); + m1.put("y", sourceY+50); + m1.put("direction", 0); + m1.put("anchorIndex", 0); + m1.put("id", sourceId); + Map m2 =new HashMap(); + m2.put("x", targetX+50); + m2.put("y", targetY+50); + m2.put("direction", 0); + m2.put("anchorIndex", 0); + m2.put("id", targetId); + controlPoints.add(m1); + controlPoints.add(m2); + + result.put("controlPoints",controlPoints); + result.put("fromArrowSize",5); + result.put("toArrowSize",5); + result.put("toArrowColor", colorData); + result.put("fromArrowColor", colorData); + result.put("borderWidth",0); + result.put("borderColor","#000000"); + result.put("animateColor","#FA901C"); + result.put("animateSpan",1); + result.put("isAnimate",false); + result.put("animateFromSize",0); + result.put("animateToSize",0); + result.put("animateDotSize",3); + Map from = new HashMap(); + from.put("x", sourceX+50); + from.put("y", sourceY+50); + from.put("direction", 0); + from.put("anchorIndex", 0); + from.put("id", sourceId); + from.put("autoAnchor", true); + + result.put("from", from); + Map to = new HashMap(); + to.put("x", targetX+50); + to.put("y", targetY+50); + to.put("direction", 0); + to.put("anchorIndex", 0); + to.put("id", targetId); + to.put("autoAnchor", true); + result.put("to", to); + + //判断是否之前为虚线 + if(type==1) { + Object dash = object.get("dashes"); + if(!dash.equals(false)) { + result.put("dash", 2); + } + } + if(type==1) { + //判断arrow 空 from to from to + String arrows = (String) object.get("arrows"); + if(arrows.equals("0")) { + result.put("toArrow",""); + result.put("fromArrow", ""); + }else if(arrows.equals("to")) { + result.put("toArrow","triangleSolid"); + result.put("fromArrow", ""); + }else if(arrows.equals("from")) { + result.put("toArrow",""); + result.put("fromArrow", "triangleSolid"); + }else { + result.put("toArrow","triangleSolid"); + result.put("fromArrow", "triangleSolid"); + } + } + result.put("animatePlay",false); + } + + return result; + } +}