Forráskód Böngészése

1230,增加设备打包和动态组模型,图例对应的系统图类型可以是多个

zhaoyk 3 éve
szülő
commit
4b47e7cdcd
21 módosított fájl, 336 hozzáadás és 32 törlés
  1. 2 0
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/controller/CommonController.java
  2. 5 0
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/controller/LegendController.java
  3. 24 5
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/controller/TemplateController.java
  4. 2 0
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/core/DataStrategy.java
  5. 20 0
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/core/DiagramBuilder.java
  6. 3 4
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/core/DiagramDataLoader.java
  7. 2 0
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/core/model/Const.java
  8. 1 1
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/core/model/Diagram.java
  9. 3 1
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/core/model/Label.java
  10. 33 4
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/core/model/base/Container.java
  11. 2 1
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/core/model/legend/Anchor.java
  12. 5 5
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/core/model/legend/Legend.java
  13. 39 0
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/core/model/logic/DynGroup.java
  14. 53 0
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/core/model/logic/EquipPack.java
  15. 43 0
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/core/model/virtual/PackNode.java
  16. 9 0
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/core/util/GsonUtil.java
  17. 2 0
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/demo/DemoDataStrategy.java
  18. 6 0
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/frame/EditRequest.java
  19. 8 1
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/manage/DemoDiagramManager.java
  20. 40 8
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/manage/LegendManager.java
  21. 34 2
      adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/manage/TemplateManager.java

+ 2 - 0
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/controller/CommonController.java

@@ -8,6 +8,7 @@ import com.persagy.adm.diagram.frame.BdtpRequest;
 import com.persagy.adm.diagram.service.BdtpDataService;
 import com.persagy.dmp.common.model.response.CommonResult;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.web.bind.annotation.CrossOrigin;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -24,6 +25,7 @@ public class CommonController {
 	private BdtpDataService bdtpDataService;
 
 	@Autowired
+	@Qualifier(DataStrategy.implQualifier)
 	private DataStrategy dataStrategy;
 
 	@RequestMapping("equipTypes")

+ 5 - 0
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/controller/LegendController.java

@@ -37,4 +37,9 @@ public class LegendController {
 //		return CommonResult.success(legendManager.fixRel());
 //	}
 
+	@RequestMapping("fixDiagramType")
+	public CommonResult<Boolean> fixDiagramType(){
+		return CommonResult.success(legendManager.fixDiagramType());
+	}
+
 }

+ 24 - 5
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/controller/TemplateController.java

@@ -49,11 +49,6 @@ public class TemplateController {
         return CommonResult.success(templateManager.delCon(params.getCurrentCompId(), params.getTemplateId()));
     }
 
-    @RequestMapping("delLine")
-    public CommonResult<DiagramTemplate> delLine(@RequestBody EditRequest params){
-        return CommonResult.success(templateManager.delMainPipe(params.getCurrentCompId(), params.getTemplateId()));
-    }
-
     @RequestMapping("moveCon")
     public CommonResult<DiagramTemplate> moveCon(@RequestBody EditRequest params){
         return CommonResult.success(templateManager.moveCon(params.getCurrentCompId(), params.getTemplateId(), params.getMoveOffset()));
@@ -64,6 +59,11 @@ public class TemplateController {
         return CommonResult.success(templateManager.addMainPipe(params.getLines(), params.getTemplateId()));
     }
 
+    @RequestMapping("delLine")
+    public CommonResult<DiagramTemplate> delLine(@RequestBody EditRequest params){
+        return CommonResult.success(templateManager.delMainPipe(params.getCurrentCompId(), params.getTemplateId()));
+    }
+
     @RequestMapping("modifyCon")
     public CommonResult<DiagramTemplate> modifyCon(@RequestBody EditRequest params){
         return CommonResult.success(templateManager.modifyCon(params.getTemplatePropsData(), params.getCurrentCompId(), params.getTemplateId()));
@@ -74,9 +74,28 @@ public class TemplateController {
         return CommonResult.success(templateManager.modifyMainPipe(params.getTemplatePropsData(), params.getCurrentCompId(), params.getTemplateId()));
     }
 
+    /**
+     * 编辑设备过滤条件
+     */
     @RequestMapping("modifyFilter")
     public CommonResult<DiagramTemplate> modifyFilter(@RequestBody EditRequest params){
         return CommonResult.success(templateManager.modifyFilter(params.getDataFilter(), params.getCurrentCompId(), params.getTemplateId()));
     }
 
+    /**
+     * 编辑设备打包配置
+     */
+    @RequestMapping("modifyPack")
+    public CommonResult<DiagramTemplate> modifyPack(@RequestBody EditRequest params){
+        return CommonResult.success(templateManager.modifyPack(params.getEquipPack(), params.getCurrentCompId(), params.getTemplateId()));
+    }
+
+    /**
+     * 编辑容器的动态组配置
+     */
+    @RequestMapping("modifyDynGroup")
+    public CommonResult<DiagramTemplate> modifyDynGroup(@RequestBody EditRequest params){
+        return CommonResult.success(templateManager.modifyDynGroup(params.getDynGroup(), params.getCurrentCompId(), params.getTemplateId()));
+    }
+
 }

+ 2 - 0
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/core/DataStrategy.java

@@ -14,6 +14,8 @@ import java.util.List;
  */
 public interface DataStrategy {
 
+	String implQualifier = "demo";
+
 	List<DiagramType> getDiagramTypes();
 
 	//模板

+ 20 - 0
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/core/DiagramBuilder.java

@@ -0,0 +1,20 @@
+package com.persagy.adm.diagram.core;
+
+import com.persagy.adm.diagram.core.model.base.Container;
+import com.persagy.adm.diagram.core.model.virtual.PackNode;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 处理系统图的计算逻辑
+ * @author zhaoyk
+ */
+public class DiagramBuilder {
+
+	private Map<Container, List<PackNode>> packNodes = new HashMap<>();
+
+
+
+}

+ 3 - 4
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/core/DiagramDataLoader.java

@@ -61,7 +61,7 @@ public class DiagramDataLoader {
 		for (DiagramNode node : diagram.getNodes()) {
 			ObjectNode obj = null;
 
-			if(node instanceof EquipmentNode) { //设备节点
+			if(EquipmentNode.TYPE.equals(node.getCompType())) { //设备节点
 				EquipmentNode en = (EquipmentNode) node;
 				obj = objMap.get(en.getObjId());
 
@@ -93,9 +93,8 @@ public class DiagramDataLoader {
 		//去掉已经使用的数据项
 		HashMap<String, DiagramNode> nodeMap = new HashMap<>();
 		diagram.getNodes().forEach(node -> {
-			if(node instanceof EquipmentNode) {
+			if(EquipmentNode.TYPE.equals(node.getCompType()))
 				nodeMap.put(((EquipmentNode) node).getObjId(), node);
-			}
 		});
 		if(nodeMap.size() > 0) {
 			Iterator<ObjectNode> iter = optionalObjs.iterator();
@@ -249,7 +248,7 @@ public class DiagramDataLoader {
 		}
 		if(legends.size() > 0) {
 			for(Legend legend : legends) {
-				if(diagram.getType().equals(legend.getDiagramType()))
+				if(CollUtil.isNotEmpty(legend.getDiagramTypes()) && legend.getDiagramTypes().contains(diagram.getType()))
 					return legend; //优先返回适配系统图类型的图例
 			}
 			return legends.get(0); //缺省取第一个

+ 2 - 0
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/core/model/Const.java

@@ -14,4 +14,6 @@ public interface Const {
 
 	String RIGHT = "right";
 
+	String NON = "non";
+
 }

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

@@ -133,7 +133,7 @@ public class Diagram {
 	public List<String> getObjIds(){
 		List<String> ids = new ArrayList<>();
 		for(DiagramNode node : nodes) {
-			if(node instanceof EquipmentNode)
+			if(EquipmentNode.TYPE.equals(node.getCompType()))
 				ids.add(((EquipmentNode) node).getObjId());
 		}
 		return ids;

+ 3 - 1
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/core/model/Label.java

@@ -10,6 +10,8 @@ import com.persagy.adm.diagram.core.model.style.BaseStyle;
  */
 public class Label extends AbstractComponent {
 
+	public static final String TYPE = "label";
+
 	@Expose
 	private String content;
 
@@ -17,7 +19,7 @@ public class Label extends AbstractComponent {
 	private BaseStyle style;
 
 	public Label() {
-		this.compType = "label";
+		this.compType = TYPE;
 	}
 
 	@Override

+ 33 - 4
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/core/model/base/Container.java

@@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollUtil;
 import com.google.gson.annotations.Expose;
 import com.persagy.adm.diagram.core.model.Label;
 import com.persagy.adm.diagram.core.model.logic.DataFilter;
+import com.persagy.adm.diagram.core.model.logic.DynGroup;
+import com.persagy.adm.diagram.core.model.logic.EquipPack;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -35,16 +37,27 @@ public class Container extends AbstractComponent implements IContainer {
 	private String remark;
 
 	/**
-	 * 分组标签
+	 * 设备数据过滤器
 	 */
 	@Expose
-	private Label groupLabel;
+	private DataFilter dataFilter;
 
 	/**
-	 * 设备数据过滤器
+	 * 设备打包
 	 */
 	@Expose
-	private DataFilter dataFilter;
+	private EquipPack equipPack;
+
+	/**
+	 * 动态组
+	 */
+	@Expose
+	private DynGroup dynGroup;
+
+	/**
+	 * 分组标签
+	 */
+	private Label groupLabel;
 
 	public Container() {
 		this.compType = TYPE;
@@ -186,6 +199,22 @@ public class Container extends AbstractComponent implements IContainer {
 		this.dataFilter = dataFilter;
 	}
 
+	public EquipPack getEquipPack() {
+		return equipPack;
+	}
+
+	public void setEquipPack(EquipPack equipPack) {
+		this.equipPack = equipPack;
+	}
+
+	public DynGroup getDynGroup() {
+		return dynGroup;
+	}
+
+	public void setDynGroup(DynGroup dynGroup) {
+		this.dynGroup = dynGroup;
+	}
+
 	public Label getGroupLabel() {
 		return groupLabel;
 	}

+ 2 - 1
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/core/model/legend/Anchor.java

@@ -1,6 +1,7 @@
 package com.persagy.adm.diagram.core.model.legend;
 
 import com.google.gson.annotations.Expose;
+import com.persagy.adm.diagram.core.model.Const;
 import com.persagy.adm.diagram.core.model.base.XY;
 
 import java.util.List;
@@ -11,7 +12,7 @@ import java.util.List;
  */
 public class Anchor {
 
-	public static final String TYPE_NON = "non";
+	public static final String TYPE_NON = Const.NON;
 
 	public static final String TYPE_IN = "in";
 

+ 5 - 5
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/core/model/legend/Legend.java

@@ -45,7 +45,7 @@ public class Legend {
 	 * 适用的系统图类型,优先逻辑,不做强约束
 	 */
 	@Expose
-	private String diagramType;
+	private List<String> diagramTypes;
 
 	/**
 	 * 轮廓图形
@@ -131,12 +131,12 @@ public class Legend {
 		this.anchors = anchors;
 	}
 
-	public String getDiagramType() {
-		return diagramType;
+	public List<String> getDiagramTypes() {
+		return diagramTypes;
 	}
 
-	public void setDiagramType(String diagramType) {
-		this.diagramType = diagramType;
+	public void setDiagramTypes(List<String> diagramTypes) {
+		this.diagramTypes = diagramTypes;
 	}
 
 	public List<List<XY>> getOutline() {

+ 39 - 0
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/core/model/logic/DynGroup.java

@@ -0,0 +1,39 @@
+package com.persagy.adm.diagram.core.model.logic;
+
+import com.google.gson.annotations.Expose;
+
+/**
+ * 容器的动态组配置
+ * @author zhaoyk
+ */
+public class DynGroup {
+
+	/**
+	 * 动态源,可选值:floor | building | mainPipe:id | container:id
+	 */
+	@Expose
+	private String dynSource;
+
+	/**
+	 * 分组标签的位置, top | bottom | left | right
+	 */
+	@Expose
+	private String labelPosition;
+
+	public String getDynSource() {
+		return dynSource;
+	}
+
+	public void setDynSource(String dynSource) {
+		this.dynSource = dynSource;
+	}
+
+	public String getLabelPosition() {
+		return labelPosition;
+	}
+
+	public void setLabelPosition(String labelPosition) {
+		this.labelPosition = labelPosition;
+	}
+
+}

+ 53 - 0
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/core/model/logic/EquipPack.java

@@ -0,0 +1,53 @@
+package com.persagy.adm.diagram.core.model.logic;
+
+import com.google.gson.annotations.Expose;
+
+/**
+ * 设备打包配置
+ * @author zhaoyk
+ */
+public class EquipPack {
+
+	/**
+	 * 是否按设备类打包,为false时,所有类型设备打包成一个
+	 */
+	@Expose
+	private boolean packByType = true;
+
+	/**
+	 * 打包为一个设备时,如果包含多种类型,使用的图例
+	 */
+	@Expose
+	private String legendId;
+
+	/**
+	 * 打包为一个设备时,如果包含多种类型,显示的名称
+	 */
+	@Expose
+	private String packName;
+
+	public boolean isPackByType() {
+		return packByType;
+	}
+
+	public void setPackByType(boolean packByType) {
+		this.packByType = packByType;
+	}
+
+	public String getLegendId() {
+		return legendId;
+	}
+
+	public void setLegendId(String legendId) {
+		this.legendId = legendId;
+	}
+
+	public String getPackName() {
+		return packName;
+	}
+
+	public void setPackName(String packName) {
+		this.packName = packName;
+	}
+
+}

+ 43 - 0
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/core/model/virtual/PackNode.java

@@ -0,0 +1,43 @@
+package com.persagy.adm.diagram.core.model.virtual;
+
+import com.google.gson.annotations.Expose;
+import com.persagy.adm.diagram.core.model.EquipmentNode;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 打包设备节点
+ * @author zhaoyk
+ */
+public class PackNode extends EquipmentNode {
+
+	public static final String TYPE = "packNode";
+
+	/**
+	 * 设备统计信息{设备类型, 设备数量}
+	 */
+	@Expose
+	private Map<String, Integer> statInfo;
+
+	public PackNode(){
+		this.compType = TYPE;
+	}
+
+	public Map<String, Integer> getStatInfo() {
+		return statInfo;
+	}
+
+	public void setStatInfo(Map<String, Integer> statInfo) {
+		this.statInfo = statInfo;
+	}
+
+	public void add(String equipClassCode) {
+		if(statInfo == null)
+			statInfo = new HashMap<>();
+
+		Integer i = statInfo.get(equipClassCode);
+		statInfo.put(equipClassCode, i == null ? 1 : i + 1);
+	}
+
+}

+ 9 - 0
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/core/util/GsonUtil.java

@@ -1,10 +1,13 @@
 package com.persagy.adm.diagram.core.util;
 
 import com.google.gson.*;
+import com.persagy.adm.diagram.core.model.EquipmentNode;
+import com.persagy.adm.diagram.core.model.Label;
 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.logic.DataFilter;
 import com.persagy.adm.diagram.core.model.logic.MatchFilter;
+import com.persagy.adm.diagram.core.model.virtual.PackNode;
 import org.springframework.stereotype.Component;
 
 import java.lang.reflect.Type;
@@ -45,6 +48,12 @@ public class GsonUtil {
 			Class<? extends IComponent> target = Container.class;
 			if(Container.TYPE.equals(jsonElement.getAsJsonObject().get("compType")))
 				target = Container.class;
+			else if(EquipmentNode.TYPE.equals(jsonElement.getAsJsonObject().get("compType")))
+				target = EquipmentNode.class;
+			else if(PackNode.TYPE.equals(jsonElement.getAsJsonObject().get("compType")))
+				target = PackNode.class;
+			else if(Label.TYPE.equals(jsonElement.getAsJsonObject().get("compType")))
+				target = Label.class;
 			else {
 				//TODO 其他类型
 			}

+ 2 - 0
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/demo/DemoDataStrategy.java

@@ -13,6 +13,7 @@ import com.persagy.adm.diagram.core.model.template.DiagramTemplate;
 import com.persagy.adm.diagram.frame.BdtpRequest;
 import com.persagy.adm.diagram.service.BdtpDataService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
 import java.io.File;
@@ -25,6 +26,7 @@ import java.util.List;
  * @author zhaoyk
  */
 @Service
+@Qualifier("demo")
 public class DemoDataStrategy implements DataStrategy {
 
 	@Autowired

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

@@ -2,6 +2,8 @@ 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;
 
 import java.util.List;
@@ -33,6 +35,10 @@ public class EditRequest {
 
 	private Map<String, Object> dataFilter;
 
+	private EquipPack equipPack;
+
+	private DynGroup dynGroup;
+
 	@Data
 	public static class TemplatePropsData {
 

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

@@ -3,6 +3,12 @@ package com.persagy.adm.diagram.manage;
 import cn.hutool.core.util.IdUtil;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.adm.diagram.core.DiagramView;
+import com.persagy.adm.diagram.core.model.ConnectPoint;
+import com.persagy.adm.diagram.core.model.Label;
+import com.persagy.adm.diagram.core.model.Line;
+import com.persagy.adm.diagram.core.model.style.BaseStyle;
+import com.persagy.adm.diagram.core.model.style.LineStyle;
 import com.persagy.adm.diagram.entity.DiagramType;
 import com.persagy.adm.diagram.core.DataStrategy;
 import com.persagy.adm.diagram.core.DiagramDataLoader;
@@ -10,6 +16,7 @@ import com.persagy.adm.diagram.core.model.Diagram;
 import com.persagy.adm.diagram.core.model.base.XY;
 import com.persagy.adm.diagram.frame.BdtpRequest;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -25,7 +32,7 @@ public class DemoDiagramManager {
 	private final DataStrategy dataStrategy;
 
 	@Autowired
-	public DemoDiagramManager(DataStrategy dataStrategy) {
+	public DemoDiagramManager(@Qualifier(DataStrategy.implQualifier) DataStrategy dataStrategy) {
 		this.dataStrategy = dataStrategy;
 	}
 

+ 40 - 8
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/manage/LegendManager.java

@@ -1,13 +1,21 @@
 package com.persagy.adm.diagram.manage;
 
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.util.StrUtil;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.persagy.adm.diagram.core.DataStrategy;
 import com.persagy.adm.diagram.core.model.legend.Legend;
+import com.persagy.adm.diagram.core.util.GsonUtil;
 import com.persagy.adm.diagram.service.BdtpDataService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 图例编辑的相关操作
@@ -19,7 +27,7 @@ public class LegendManager {
 	private final DataStrategy dataStrategy;
 
 	@Autowired
-	public LegendManager(DataStrategy dataStrategy) {
+	public LegendManager(@Qualifier(DataStrategy.implQualifier) DataStrategy dataStrategy) {
 		this.dataStrategy = dataStrategy;
 	}
 
@@ -33,13 +41,13 @@ public class LegendManager {
 	 * 查询系统下的图例列表
 	 */
 	public List<Legend> getLegends(String sys){
-		//test 输出数据结构
-		try{
-			System.out.println("-----------------------------------------------------");
-			System.out.println(objectMapper.writeValueAsString(dataStrategy.getLegends(sys)));
-		}catch (Exception e){
-			e.printStackTrace();
-		}
+//		//test 输出数据结构
+//		try{
+//			System.out.println("-----------------------------------------------------");
+//			System.out.println(objectMapper.writeValueAsString(dataStrategy.getLegends(sys)));
+//		}catch (Exception e){
+//			e.printStackTrace();
+//		}
 
 		return dataStrategy.getLegends(sys);
 	}
@@ -98,4 +106,28 @@ public class LegendManager {
 //		return true;
 //	}
 
+	@Autowired
+	private GsonUtil gsonUtil;
+	public boolean fixDiagramType(){
+		String DIR_LEGEND = "store/legend/";
+		File dir = new File(DIR_LEGEND);
+		for(File file : dir.listFiles()) {
+			String fn = file.getName();
+			String sys = fn.substring(0, fn.lastIndexOf('.'));
+
+			List<Map> list = gsonUtil.gson().fromJson(FileUtil.readUtf8String(file), List.class);
+			for(Map map : list) {
+				String dt = (String) map.get("diagramType");
+				if (StrUtil.isNotBlank(dt)) {
+					ArrayList<String> dts = new ArrayList<>();
+					dts.add(dt);
+					map.put("diagramTypes", dts);
+				}
+			}
+			FileUtil.writeUtf8String(gsonUtil.gson().toJson(list), file);
+		}
+
+		return true;
+	}
+
 }

+ 34 - 2
adm-business/adm-diagram/src/main/java/com/persagy/adm/diagram/manage/TemplateManager.java

@@ -5,6 +5,8 @@ import cn.hutool.core.util.IdUtil;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.adm.diagram.core.model.base.*;
 import com.persagy.adm.diagram.core.model.logic.DataFilter;
+import com.persagy.adm.diagram.core.model.logic.DynGroup;
+import com.persagy.adm.diagram.core.model.logic.EquipPack;
 import com.persagy.adm.diagram.core.model.logic.MatchFilter;
 import com.persagy.adm.diagram.entity.DiagramType;
 import com.persagy.adm.diagram.frame.EditRequest;
@@ -16,6 +18,7 @@ import com.persagy.adm.diagram.core.model.template.MainPipePoint;
 import com.persagy.adm.diagram.frame.BdtpRequest;
 import com.persagy.adm.diagram.service.BdtpDataService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -33,7 +36,7 @@ public class TemplateManager {
 	private final DataStrategy dataStrategy;
 
 	@Autowired
-	public TemplateManager(DataStrategy dataStrategy) {
+	public TemplateManager(@Qualifier(DataStrategy.implQualifier) DataStrategy dataStrategy) {
 		this.dataStrategy = dataStrategy;
 	}
 
@@ -145,7 +148,9 @@ public class TemplateManager {
 		template.init();
 
 		Container con = template.getContainerById(containerId);
-		if(con.getParent() != null)
+		if(con.isAbsolutePosition())
+			template.getScatteredContainers().remove(con);
+		else if(con.getParent() != null)
 			con.getParent().removeComp(containerId);
 
 		return saveTemplate(template);
@@ -334,6 +339,7 @@ public class TemplateManager {
 
 	/**
 	 * 修改设备数据过滤条件
+	 * filter可能是多种类型,通过Map转换
 	 */
 	public DiagramTemplate modifyFilter(Map<String, Object> filter, String containerId, String templateId){
 		DiagramTemplate template = dataStrategy.getTemplate(templateId);
@@ -356,4 +362,30 @@ public class TemplateManager {
 		return saveTemplate(template);
 	}
 
+	/**
+	 * 修改设备打包配置
+	 */
+	public DiagramTemplate modifyPack(EquipPack pack, String containerId, String templateId){
+		DiagramTemplate template = dataStrategy.getTemplate(templateId);
+		template.init();
+
+		Container con = template.getContainerById(containerId);
+		con.setEquipPack(pack);
+
+		return saveTemplate(template);
+	}
+
+	/**
+	 * 修改容器的动态组配置
+	 */
+	public DiagramTemplate modifyDynGroup(DynGroup dynGroup, String containerId, String templateId){
+		DiagramTemplate template = dataStrategy.getTemplate(templateId);
+		template.init();
+
+		Container con = template.getContainerById(containerId);
+		con.setDynGroup(dynGroup);
+
+		return saveTemplate(template);
+	}
+
 }