Преглед изворни кода

2021-1213
数模同步消息增加projectId和groupCode
增加元空间相关数据下载

zhaoyk пре 3 година
родитељ
комит
6aeb42b051

+ 7 - 1
src/main/java/com/persagy/bdtp/adm/entity/D2mMessage.java

@@ -11,6 +11,10 @@ import java.util.List;
 @Data
 public class D2mMessage {
 
+	private String groupCode;
+
+	private String projectId;
+
 	private String id;
 
 	private String itemType; //object|relation|pipe
@@ -21,9 +25,11 @@ public class D2mMessage {
 
 	private List<Object> removeItems;
 
-	public D2mMessage(String itemType) {
+	public D2mMessage(String itemType, String groupCode, String projectId) {
 		this.id = IdUtil.simpleUUID();
 		this.itemType = itemType;
+		this.groupCode = groupCode;
+		this.projectId = projectId;
 	}
 
 	public void appendAddItem(Object item){

+ 13 - 5
src/main/java/com/persagy/bdtp/adm/service/impl/SyncAppImpl.java

@@ -257,8 +257,8 @@ public class SyncAppImpl implements ISyncApp {
 //		if(eqList != null)
 //			objs.addAll(eqList);
 
-		//从bdtp下载对象(空间、竖井、系统、设备)
-		QueryCriteria criteria = ServiceUtil.getQueryCriteria(objectMapper, AdmConst.OBJ_TYPE_SPACE, AdmConst.OBJ_TYPE_SHAFT, AdmConst.OBJ_TYPE_SYSTEM, AdmConst.OBJ_TYPE_EQUIPMENT);
+		//从bdtp下载对象(空间、竖井、系统、设备、元空间)
+		QueryCriteria criteria = ServiceUtil.getQueryCriteria(objectMapper, AdmConst.OBJ_TYPE_SPACE, AdmConst.OBJ_TYPE_SHAFT, AdmConst.OBJ_TYPE_SYSTEM, AdmConst.OBJ_TYPE_EQUIPMENT, "ispace");
 		buildDownloadQueryCriteria(criteria, operator, bdtpDownloadTs);
 		criteria.getCriteria().put("buildingId", buildingId);
 
@@ -351,9 +351,17 @@ public class SyncAppImpl implements ISyncApp {
 		criteria.setSize(1000L);
 		List<ObjectNode> rels = ServiceUtil.call(() -> rwdClient.queryRelation(groupCode, projectId, AdmConst.APP_ID, userId, criteria));
 		*/
-
 		if(rels == null)
 			rels = new ArrayList<>();
+
+		//单独下载元空间和空间的对应关系
+		QueryCriteria criteria2 = ServiceUtil.getQueryCriteria(objectMapper);
+		buildDownloadQueryCriteria(criteria2, operator, bdtpDownloadTs);
+		criteria2.getCriteria().put("graphCode", "MechInArch").put("relCode", "Sp2Si").put("relValue", "GeneralZone");
+		List<ObjectNode> spRels = ServiceUtil.queryAllPage(() -> rwdClient.queryRelation(groupCode, projectId, AdmConst.APP_ID, userId, criteria2), criteria2, new Pagination(500));
+		if(spRels != null)
+			rels.addAll(spRels);
+
 		test4Ts(rels);
 
 		ProjectData data = new ProjectData();
@@ -387,7 +395,7 @@ public class SyncAppImpl implements ISyncApp {
 			List<ObjectNode> relations = new ArrayList<>();
 
 			if (CollUtil.isNotEmpty(uploadData.getObjects())) {
-				D2mMessage d2mMessage = new D2mMessage("object");
+				D2mMessage d2mMessage = new D2mMessage("object", groupCode, projectId);
 				List<ObjectNode>[] objData = prepareBdtpData(uploadData.getObjects(), uploadParams, d2mMessage, logs);
 				uploadObjs(uploadParams, objData);
 
@@ -551,7 +559,7 @@ public class SyncAppImpl implements ISyncApp {
 	@Transactional(rollbackFor = Exception.class)
 	public void uploadAdmData(UploadData uploadData, UploadParams uploadParams, List<AdmUploadLog> logs) {
 		if (CollUtil.isNotEmpty(uploadData.getPipes())) {
-			uploadAdmEntities(uploadData.getPipes(), uploadParams, pipeMapper, new D2mMessage("pipe"), logs, true);
+			uploadAdmEntities(uploadData.getPipes(), uploadParams, pipeMapper, new D2mMessage("pipe", uploadParams.groupCode, uploadParams.projectId), logs, true);
 		}
 
 		if (CollUtil.isNotEmpty(uploadData.getJobSpace())) {

+ 1 - 1
src/main/java/com/persagy/bdtp/adm/service/impl/SyncAppImpl0.java

@@ -460,7 +460,7 @@ public class SyncAppImpl0 implements ISyncApp {
 	}
 
 	private void sendD2mMessage(String objectType, List msgAdd, List msgModify, List msgRemove){
-		D2mMessage message = new D2mMessage(objectType);
+		D2mMessage message = new D2mMessage(objectType, "", "");
 		message.setAddItems(msgAdd);
 		message.setModifyItems(msgModify);
 		message.setRemoveItems(msgRemove);

+ 24 - 11
src/main/java/com/persagy/bdtp/adm/service/impl/SyncSpaceImpl.java

@@ -120,6 +120,8 @@ public class SyncSpaceImpl implements ISyncSpace {
 
 				}
 			}
+
+			fixOutline(spOutline);
 			if(!GeomUtil.checkPolygon(spOutline))
 				continue;
 
@@ -184,14 +186,11 @@ public class SyncSpaceImpl implements ISyncSpace {
 		if(jobMap.size() == 0)
 			return null;
 
-		if(!isValidOutline(spOutline))
-			return null;
-
 		Polygon[] ps = GeomUtil.getPolygon(spOutline);
 		Map.Entry<String, AdmJobSpace> target = null;
 		for(Map.Entry<String, AdmJobSpace> entry : jobMap.entrySet()){
 			ArrayNode o2 = entry.getValue().getOutline();
-			if(isValidOutline(o2) && polygonsMatch(ps, GeomUtil.getPolygon(o2))){
+			if(polygonsMatch(ps, GeomUtil.getPolygon(o2))){
 				target = entry;
 				break;
 			}
@@ -227,15 +226,29 @@ public class SyncSpaceImpl implements ISyncSpace {
 		return false;
 	}
 
-	private boolean isValidOutline(ArrayNode outline) {
-		if(outline != null && outline.size() > 0 && outline.get(0).isArray()) {
-			ArrayNode o1 = (ArrayNode) outline.get(0);
-			if (o1.size() > 0 && o1.get(0).isArray()) {
-				ArrayNode o2 = (ArrayNode) o1.get(0);
-				return o2.size() >= 3;
+	/**
+	 * 对轮廓线做闭合处理
+	 */
+	private void fixOutline(ArrayNode outline){
+		if (outline == null)
+			return;
+
+		for (int i = 0; i < outline.size(); i++) {
+			ArrayNode space = (ArrayNode) outline.get(i);
+			for (int n = 0; n < space.size(); n++) {
+				ArrayNode ring = (ArrayNode)space.get(n);
+				if(ring.size() > 2) {
+					JsonNode from = ring.get(0);
+					JsonNode to = ring.get(ring.size() - 1);
+					if(!(from.get("x").asDouble() == to.get("x").asDouble() && from.get("y").asDouble() == to.get("y").asDouble())) {
+						//自动闭合
+						ObjectNode close = objectMapper.createObjectNode();
+						close.put("x", from.get("x").asDouble()).put("y", from.get("y").asDouble());
+						ring.add(close);
+					}
+				}
 			}
 		}
-		return false;
 	}
 
 }