zhaoyk 3 лет назад
Родитель
Сommit
f8229956ab

+ 32 - 35
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/controller/DiagramController.java

@@ -13,7 +13,7 @@ import com.persagy.adm.diagram.core.model.base.Container;
 import com.persagy.adm.diagram.core.model.base.IComponent;
 import com.persagy.adm.diagram.core.model.template.DiagramTemplate;
 import com.persagy.adm.diagram.frame.BdtpRequest;
-import com.persagy.adm.diagram.manage.DemoDiagramManager;
+import com.persagy.adm.diagram.manage.DiagramManager;
 import com.persagy.dmp.common.constant.ResponseCode;
 import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.common.model.response.CommonResult;
@@ -21,18 +21,9 @@ import com.persagy.dmp.common.utils.ResultHelper;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
+import java.util.*;
 
 /**
  * 系统图相关接口
@@ -48,7 +39,7 @@ public class DiagramController {
     @Qualifier("dataStrategyImpl")
     private DataStrategy dataStrategy;
     @Autowired
-    private DemoDiagramManager diagramManager;
+    private DiagramManager diagramManager;
     @Autowired
     private ContentParser parser;
 
@@ -84,29 +75,31 @@ public class DiagramController {
     public CommonResult<Diagram> newDiagram(@RequestBody Map<String, Object> params,
                                             @RequestParam String projectId,
                                             @RequestParam String groupCode) {
-        Diagram diagram = new Diagram();
+        Diagram diagram = diagramManager.fromMapData(params);
         diagram.setGroupCode(groupCode);
         diagram.setProjectId(projectId);
 
-        Optional.ofNullable(params).ifPresent(map -> {
-            Optional.ofNullable(map.get("id")).ifPresent(o -> diagram.setId(String.valueOf(o)));
-            Optional.ofNullable(map.get("type")).ifPresent(o -> {
-                if (String.valueOf(o).length() < 4) {
-                    throw new BusinessException(ResponseCode.A0400.getCode(), "type参数非法");
-                }
-                diagram.setType(String.valueOf(o));
-                diagram.setSystem(String.valueOf(o).substring(0, 4));
-            });
-            Optional.ofNullable(map.get("systemId")).ifPresent(o -> diagram.setSystemId(String.valueOf(o)));
-            Optional.ofNullable(map.get("name")).ifPresent(o -> diagram.setName(String.valueOf(o)));
-            Optional.ofNullable(map.get("remark")).ifPresent(o -> diagram.setRemark(String.valueOf(o)));
-            Optional.ofNullable(map.get("templateId")).ifPresent(o -> diagram.setTemplateId(String.valueOf(o)));
-            Optional.ofNullable(map.get("extraProps")).ifPresent(s -> {
-                Map<String, Object> m = parser.parseContent(parser.toJson(s), Map.class);
-                diagram.setExtraProp("state", m.get("state"));
-            });
-            buildLinesAndNodes(diagram, map);
-        });
+        diagramManager.buildDiagram(diagram);
+
+//        Optional.ofNullable(params).ifPresent(map -> {
+//            Optional.ofNullable(map.get("id")).ifPresent(o -> diagram.setId(String.valueOf(o)));
+//            Optional.ofNullable(map.get("type")).ifPresent(o -> {
+//                if (String.valueOf(o).length() < 4) {
+//                    throw new BusinessException(ResponseCode.A0400.getCode(), "type参数非法");
+//                }
+//                diagram.setType(String.valueOf(o));
+//                diagram.setSystem(String.valueOf(o).substring(0, 4));
+//            });
+//            Optional.ofNullable(map.get("systemId")).ifPresent(o -> diagram.setSystemId(String.valueOf(o)));
+//            Optional.ofNullable(map.get("name")).ifPresent(o -> diagram.setName(String.valueOf(o)));
+//            Optional.ofNullable(map.get("remark")).ifPresent(o -> diagram.setRemark(String.valueOf(o)));
+//            Optional.ofNullable(map.get("templateId")).ifPresent(o -> diagram.setTemplateId(String.valueOf(o)));
+//            Optional.ofNullable(map.get("extraProps")).ifPresent(s -> {
+//                Map<String, Object> m = parser.parseContent(parser.toJson(s), Map.class);
+//                diagram.setExtraProp("state", m.get("state"));
+//            });
+//            buildLinesAndNodes(diagram, map);
+//        });
 
         return ResultHelper.single(dataStrategy.saveDiagram(diagram));
     }
@@ -166,7 +159,7 @@ public class DiagramController {
     @GetMapping("/getDiagram")
     public CommonResult<Diagram> getDiagram(String diagramId) {
         Diagram diagram = dataStrategy.getDiagram(diagramId);
-        diagramManager.buildDiagram(diagram, true);
+        diagramManager.buildDiagram(diagram);
         return ResultHelper.single(diagram);
     }
 
@@ -250,7 +243,11 @@ public class DiagramController {
     @ApiOperation("加载数据")
     @PostMapping("/loadData")
     public CommonResult<Diagram> loadData(@RequestBody Diagram diagram) {
-        return ResultHelper.single(diagramManager.loadData(diagram.getId(), true));
+        diagram = dataStrategy.getDiagram(diagram.getId());
+        if(diagram == null) {
+            throw new BusinessException(ResponseCode.A0400.getCode(), "系统图id不存在");
+        }
+        return ResultHelper.single(diagramManager.loadData(diagram));
     }
 
     /**

+ 2 - 3
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/core/model/Diagram.java

@@ -87,7 +87,6 @@ public class Diagram {
 	@Expose
 	private XY size;
 
-
 	/**
 	 * 节点列表,运行时&显示态数据结构
 	 */
@@ -126,14 +125,14 @@ public class Diagram {
 	public void layout(CalcContext context){
 		if(template != null) {
 			template.layout(new XY(0, 0));
+
+			size = template.getFrame().getSize();
 		}
 
 		LineLayoutManager lineLayoutManager = new LineLayoutManager(context);
 		for(Line line : lines) {
 			line.layout(lineLayoutManager);
 		}
-
-		this.size = template.getFrame().getSize();
 	}
 
 	public void clearLayout(){

+ 0 - 1
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/frame/EditRequest.java

@@ -1,7 +1,6 @@
 package com.persagy.adm.diagram.frame;
 
 import com.persagy.adm.diagram.core.model.base.XY;
-import com.persagy.adm.diagram.core.model.legend.Legend;
 import com.persagy.adm.diagram.core.model.logic.DynGroup;
 import com.persagy.adm.diagram.core.model.logic.EquipPack;
 import lombok.Data;

+ 8 - 47
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/manage/DemoDiagramManager.java

@@ -28,7 +28,7 @@ public class DemoDiagramManager {
 	private final DataStrategy dataStrategy;
 
 	@Autowired
-	private ContentParser parser;
+	private DiagramManager manager;
 
 	@Autowired
 	public DemoDiagramManager(@Qualifier(DataStrategy.IMPL_QUALIFIER) DataStrategy dataStrategy) {
@@ -42,7 +42,7 @@ public class DemoDiagramManager {
 		List<DiagramType> types = dataStrategy.getDiagramTypes();
 		List<Diagram> diagrams = dataStrategy.getDiagrams(projectId, systemId, groupCode);
 		for(Diagram diagram : diagrams) {
-			buildDiagram(diagram, true);
+			manager.buildDiagram(diagram);
 		}
 
 		BdtpRequest req = BdtpRequest.getCurrent();
@@ -73,22 +73,6 @@ public class DemoDiagramManager {
 		return folders;
 	}
 
-	private void loadTemplate(Diagram diagram){
-		if (diagram.getTemplateId() != null) {
-			diagram.setTemplate(dataStrategy.getTemplate(diagram.getTemplateId()));
-		}
-	}
-
-	public void buildDiagram(Diagram diagram, boolean layout){
-		loadTemplate(diagram);
-		diagram.init();
-		new DiagramDataLoader(diagram, dataStrategy).initLoad();
-
-		if(layout) {
-			diagram.layout(new CalcContext(diagram));
-		}
-	}
-
 	/**
 	 * 创建新的系统图
 	 */
@@ -105,7 +89,7 @@ public class DemoDiagramManager {
 		diagram.setGroupCode(groupCode);
 
 		diagram = dataStrategy.saveDiagram(diagram);
-		buildDiagram(diagram, true);
+		manager.buildDiagram(diagram);
 
 		return diagram;
 	}
@@ -124,44 +108,21 @@ public class DemoDiagramManager {
 		Diagram diagram = dataStrategy.getDiagram(diagramId);
 		diagram.setTemplateId(templateId);
 
-		//重设模板时,清空节点和连线
-		diagram.getNodes().clear();
-		diagram.getLines().clear();
+		//重设模板时,重置系统图
+		manager.resetDiagram(diagram);
 
 		dataStrategy.saveDiagram(diagram);
-		buildDiagram(diagram, true);
+		manager.buildDiagram(diagram);
 
 		return diagram;
 	}
 
-	@Autowired
-	private MyObjectMapper myObjectMapper;
 	/**
 	 * 加载数据
 	 */
 	public Diagram loadData(String diagramId, boolean autoLoad){
 		Diagram diagram = dataStrategy.getDiagram(diagramId);
-		buildDiagram(diagram, false);
-
-		CalcContext context = new CalcContext(diagram);
-		new DiagramDataLoader(diagram, dataStrategy).autoLoad(context);
-
-		diagram.layout(context);
-
-		//test 输出数据结构
-//		try {
-//			System.out.println("----------------------------------------------");
-//			System.out.println("edit json : ");
-//			System.out.println(myObjectMapper.mapper4Edit().writeValueAsString(diagram));
-//
-//			System.out.println("----------------------------------------------");
-//			System.out.println("view json : ");
-//			diagram.toAbsoluteLocation();
-//			System.out.println(myObjectMapper.mapper4View().writeValueAsString(diagram));
-//		}catch (Exception e){
-//			e.printStackTrace();
-//		}
-
+		manager.loadData(diagram);
 		return diagram;
 	}
 
@@ -169,7 +130,7 @@ public class DemoDiagramManager {
 	 * 保存系统图
 	 */
 	public Diagram saveDiagram(Map<String, Object> diagramMap) {
-		Diagram diagram = parser.parseContent(parser.toJson(diagramMap), Diagram.class);
+		Diagram diagram = manager.fromMapData(diagramMap);
 		return dataStrategy.saveDiagram(diagram);
 	}
 

+ 124 - 0
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/manage/DiagramManager.java

@@ -0,0 +1,124 @@
+package com.persagy.adm.diagram.manage;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.persagy.adm.diagram.core.ContentParser;
+import com.persagy.adm.diagram.core.DataStrategy;
+import com.persagy.adm.diagram.core.DiagramDataLoader;
+import com.persagy.adm.diagram.core.model.Diagram;
+import com.persagy.adm.diagram.core.model.logic.CalcContext;
+import com.persagy.adm.diagram.core.util.MyObjectMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
+
+/**
+ * 系统图的相关操作
+ * @author zhaoyk
+ */
+@Service
+public class DiagramManager {
+
+	private final DataStrategy dataStrategy;
+
+	@Autowired
+	private ContentParser parser;
+
+	@Autowired
+	private MyObjectMapper myObjectMapper;
+
+	@Autowired
+	public DiagramManager(@Qualifier(DataStrategy.IMPL_QUALIFIER) DataStrategy dataStrategy) {
+		this.dataStrategy = dataStrategy;
+	}
+
+	/**
+	 * 对系统图进行初始化构建操作
+	 */
+	public void buildDiagram(Diagram diagram){
+		boolean autoLayout = diagram.getTemplate() == null;
+
+		if(diagram.getTemplate() == null){
+			loadTemplate(diagram);
+		}
+
+		diagram.init();
+		new DiagramDataLoader(diagram, dataStrategy).initLoad();
+
+		if(autoLayout) {
+			diagram.layout(new CalcContext(diagram));
+		}
+	}
+
+	private void loadTemplate(Diagram diagram){
+		if (diagram.getTemplateId() != null) {
+			diagram.setTemplate(dataStrategy.getTemplate(diagram.getTemplateId()));
+		}
+	}
+
+	/**
+	 * 重置diagram
+	 */
+	public void resetDiagram(Diagram diagram) {
+		diagram.setTemplate(null);
+		diagram.getLines().clear();
+		diagram.getNodes().clear();
+	}
+
+	/**
+	 * 系统图自动布局计算
+	 */
+	public void layout(Diagram diagram) {
+		diagram.clearLayout();
+		diagram.layout(new CalcContext(diagram));
+	}
+
+	/**
+	 * 自动加载数据(设备、关系)
+	 */
+	public Diagram loadData(Diagram diagram){
+		if(diagram.getTemplate() == null){
+			loadTemplate(diagram);//先加载template,避免buildDiagram时执行layout
+		}
+
+		buildDiagram(diagram);
+
+		CalcContext context = new CalcContext(diagram);
+		new DiagramDataLoader(diagram, dataStrategy).autoLoad(context);
+
+		diagram.layout(context);
+
+		return diagram;
+	}
+
+	/**
+	 * 给显示层的json数据
+	 */
+	public String json4View(Object data){
+		try{
+			return myObjectMapper.mapper4View().writeValueAsString(data);
+		}catch (JsonProcessingException e){
+			throw new RuntimeException(e);
+		}
+	}
+
+	/**
+	 * 给编辑层的json数据
+	 */
+	public String json4Edit(Object data){
+		try{
+			return myObjectMapper.mapper4Edit().writeValueAsString(data);
+		}catch (JsonProcessingException e){
+			throw new RuntimeException(e);
+		}
+	}
+
+	/**
+	 * 解析Map格式的数据(来自web端编辑器),转换为Diagram对象
+	 */
+	public Diagram fromMapData(Map<String, Object> map){
+		return parser.parseContent(parser.toJson(map), Diagram.class);
+	}
+
+}