Browse Source

2021-1105 更换文件服务

zhaoyk 3 years ago
parent
commit
2439bd155d

+ 5 - 5
pom.xml

@@ -29,7 +29,7 @@
                 <enabled>true</enabled>
             </releases>
         </repository>
-        <repository>
+        <!--<repository>
             <id>persagy</id>
             <name>releases Repository</name>
             <url>http://47.93.132.139:8081/nexus/content/repositories/persagy/</url>
@@ -46,7 +46,7 @@
             <id>osgeo</id>
             <name>Open Source Geospatial Foundation Repository</name>
             <url>https://repo.osgeo.org/repository/release/</url>
-        </repository>
+        </repository>-->
     </repositories>
 
     <properties>
@@ -72,11 +72,11 @@
             <groupId>com.persagy</groupId>
             <artifactId>dmp-server</artifactId>
         </dependency>
-        <!--<dependency>
+        <dependency>
             <groupId>com.persagy</groupId>
-            <artifactId>dmp-file-starter</artifactId>
+            <artifactId>dmp-file-minio-starter</artifactId>
             <version>1.0.0</version>
-        </dependency>-->
+        </dependency>
         <dependency>
             <groupId>com.persagy</groupId>
             <artifactId>dmp-mybatis</artifactId>

+ 9 - 0
src/main/java/com/persagy/bdtp/adm/client/RwdClient.java

@@ -5,6 +5,7 @@ import com.persagy.dmp.basic.config.DigitalFeignConfig;
 import com.persagy.dmp.basic.model.QueryCriteria;
 import com.persagy.dmp.common.model.response.CommonResult;
 import com.persagy.dmp.define.entity.GraphDefine;
+import com.persagy.dmp.define.entity.ObjectInfoDefine;
 import com.persagy.dmp.define.entity.RelationDefine;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -34,6 +35,14 @@ public interface RwdClient {
 			@RequestParam("userId") String userId,
 			@RequestBody QueryCriteria criteria);
 
+	@PostMapping("/rwd/def/funcid")
+	CommonResult<List<ObjectInfoDefine>> queryFunc(
+			@RequestParam("groupCode") String groupCode,
+			@RequestParam("projectId") String projectId,
+			@RequestParam("appId") String appId,
+			@RequestParam("userId") String userId,
+			@RequestBody QueryCriteria criteria);
+
 	/**
 	 * 查询边类型
 	 * @param groupCode: 集团编码

+ 1 - 0
src/main/java/com/persagy/bdtp/adm/controller/ManageController.java

@@ -26,6 +26,7 @@ public class ManageController {
 
 		Map<String, Object> syncResult = syncOldAdm.syncData(groupCode, projectId);
 		syncOldAdm.handleJobSpace(projectId);
+		syncOldAdm.uploadFloorMap(groupCode, projectId);
 		return AdmResult.success(syncResult);
 	}
 

+ 47 - 26
src/main/java/com/persagy/bdtp/adm/controller/ToolController.java

@@ -22,6 +22,7 @@ import com.persagy.dmp.common.constant.ResponseCode;
 import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.common.helper.SpringHelper;
 import com.persagy.dmp.define.entity.GraphDefine;
+import com.persagy.dmp.define.entity.ObjectInfoDefine;
 import com.persagy.dmp.define.entity.RelationDefine;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -47,7 +48,7 @@ public class ToolController {
 	private IConfigService configService;
 
 	@RequestMapping("/dict")
-	public AdmResult<Object> dict(@RequestBody AdmRequest req){
+	public AdmResult<Object> dict(@RequestBody AdmRequest req, @RequestParam(required = false) String module){
 		Map<String,Object> map = syncApp.queryDict(req.getGroupCode(), req.getProjectId(), req.getUserId());
 
 		List<Map<String, Object>> majorList = (List)map.get("major");
@@ -75,31 +76,36 @@ public class ToolController {
 		}
 		map.remove("system");
 
-		List<RelationDefine> relDefs = (List<RelationDefine>)map.get("relation");
-		List<GraphDefine> graph = ServiceUtil.call (() -> rwdClient.queryGraphDef(req.getGroupCode(), req.getProjectId(), AdmConst.APP_ID, req.getUserId(), new QueryCriteria()));
-		List<Map<String, Object>> rels = new ArrayList<>();
-		for(GraphDefine gd : graph){
-			HashMap<String, Object> m = new HashMap<>();
-			m.put("code", gd.getCode());
-			m.put("name", gd.getName());
-			m.put("type", "graph");
-			rels.add(m);
-
-			ArrayList<RelationDefine> chidren = new ArrayList<>();
-			m.put("children", chidren);
-			for(RelationDefine relDef : relDefs) {
-				if(relDef.getGraphCode().equals(gd.getCode()))
-					chidren.add(relDef);
+		if("infos".equals(module)) { //信息点配置
+			map.remove("relation");
+
+		} else { //关系、管道、无模型设备
+			List<RelationDefine> relDefs = (List<RelationDefine>)map.get("relation");
+			List<GraphDefine> graph = ServiceUtil.call (() -> rwdClient.queryGraphDef(req.getGroupCode(), req.getProjectId(), AdmConst.APP_ID, req.getUserId(), new QueryCriteria()));
+			List<Map<String, Object>> rels = new ArrayList<>();
+			for(GraphDefine gd : graph){
+				HashMap<String, Object> m = new HashMap<>();
+				m.put("code", gd.getCode());
+				m.put("name", gd.getName());
+				m.put("type", "graph");
+				rels.add(m);
+
+				ArrayList<RelationDefine> chidren = new ArrayList<>();
+				m.put("children", chidren);
+				for(RelationDefine relDef : relDefs) {
+					if(relDef.getGraphCode().equals(gd.getCode()))
+						chidren.add(relDef);
+				}
 			}
+			map.put("relation", rels);
 		}
-		map.put("relation", rels);
 
 		return AdmResult.success(map);
 	}
 
 	private void distinct(List<TypeDef> list){
 		List<TypeDef> result = new ArrayList<>();
-		ArrayList<String> codes = new ArrayList<>();
+		HashSet<String> codes = new HashSet<>();
 		for(TypeDef def : list) {
 			if(!codes.contains(def.getCode())) {
 				codes.add(def.getCode());
@@ -124,22 +130,37 @@ public class ToolController {
 	}
 
 	@RequestMapping("/cfgs")
-	public AdmResult<Object> cfgs(@RequestBody AdmRequest req){
+	public AdmResult<Object> cfgs(@RequestBody AdmRequest req, @RequestParam(required = false) String module){
 		String projectId = req.getProjectId();
+		HashMap<String, Object> data = new HashMap<>();
 
 		//配置数据查询
-		List<AdmRelsConfig> relConfig = configService.queryRelsConfig(projectId);
-		List<AdmPipeConfig> pipeConfig = configService.queryPipeConfig(projectId);
-		List<AdmContainerConfig> containerConfig = configService.queryContainerConfig(projectId);
+		if("infos".equals(module)) { //信息点配置
 
-		HashMap<String, Object> data = new HashMap<>();
-		data.put("relConfig", relConfig);
-		data.put("pipeConfig", pipeConfig);
-		data.put("containerConfig", containerConfig);
+		} else {
+			List<AdmRelsConfig> relConfig = configService.queryRelsConfig(projectId);
+			List<AdmPipeConfig> pipeConfig = configService.queryPipeConfig(projectId);
+			List<AdmContainerConfig> containerConfig = configService.queryContainerConfig(projectId);
+
+			data.put("relConfig", relConfig);
+			data.put("pipeConfig", pipeConfig);
+			data.put("containerConfig", containerConfig);
+		}
 
 		return AdmResult.success(data);
 	}
 
+	@RequestMapping("/typeInfos")
+	public AdmResult<Object> typeInfos(@RequestBody AdmRequest req, @RequestParam String typeCode){
+		QueryCriteria criteria = new QueryCriteria();
+		ObjectNode node = objectMapper.createObjectNode();
+		node.put("classCode", typeCode);
+		criteria.setCriteria(node);
+
+		List<ObjectInfoDefine> funcList = ServiceUtil.call(() -> rwdClient.queryFunc(req.getGroupCode(), req.getProjectId(), AdmConst.APP_ID, req.getUserId(), criteria));
+		return AdmResult.success(funcList);
+	}
+
 	@Autowired
 	private AdmRelsConfigMapper relsConfigMapper;
 	@Autowired

+ 3 - 0
src/main/java/com/persagy/bdtp/adm/entity/AdmFile.java

@@ -23,4 +23,7 @@ public class AdmFile extends BaseAdmDataEntity {
 
     private Integer orderNum;
 
+    /** 文件服务中对应的存储id */
+    private String fileId;
+
 }

+ 2 - 0
src/main/java/com/persagy/bdtp/adm/service/ISyncOldAdm.java

@@ -11,4 +11,6 @@ public interface ISyncOldAdm {
 
 	void handleJobSpace(String projectId);
 
+	void uploadFloorMap(String groupCode, String projectId);
+
 }

+ 3 - 2
src/main/java/com/persagy/bdtp/adm/service/impl/SyncAppImpl.java

@@ -435,8 +435,9 @@ public class SyncAppImpl implements ISyncApp {
 		if(dbInfos != null) {
 			if(infos != null)
 				dbInfos.setAll(infos);
-		}
-		return dbInfos;
+			return dbInfos;
+		} else
+			return infos;
 	}
 
 	private void sendD2mMessage(String objectType, List<?> msgAdd, List<?> msgModify, List<?> msgRemove){

+ 56 - 0
src/main/java/com/persagy/bdtp/adm/service/impl/SyncOldAdmImpl.java

@@ -11,6 +11,7 @@ import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.bdtp.adm.client.OldAdmClient;
 import com.persagy.bdtp.adm.common.AdmConst;
 import com.persagy.bdtp.adm.common.AdmResult;
 import com.persagy.bdtp.adm.dao.AdmJobSpaceMapper;
@@ -27,12 +28,19 @@ import com.persagy.dmp.common.constant.ResponseCode;
 import com.persagy.dmp.common.constant.ValidEnum;
 import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.common.helper.SpringHelper;
+import com.persagy.dmp.file.client.FileClientFacade;
+import com.persagy.dmp.file.model.FileInfo;
+import com.persagy.dmp.file.model.FileInfoCreator;
+import com.persagy.dmp.storage.utils.FileStorageHelper;
+import feign.Response;
+import org.checkerframework.checker.units.qual.A;
 import org.locationtech.jts.geom.Polygon;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.lang.reflect.Field;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -532,4 +540,52 @@ public class SyncOldAdmImpl implements ISyncOldAdm {
 		return false;
 	}
 
+	@Autowired
+	private OldAdmClient oldAdmClient;
+
+	/**
+	 *	把地图文件从image-service转存到文件服务
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void uploadFloorMap(String groupCode, String projectId) {
+		List<AdmObject> floors = objectService.queryM2dByObjType(projectId, AdmConst.OBJ_TYPE_FLOOR);
+		List<AdmObject> modifiedFloors = new ArrayList<>();
+		for(AdmObject floor : floors) {
+			ObjectNode infos = floor.getInfos();
+			if(infos != null) {
+				JsonNode mapNode = infos.get("floorMap");
+				JsonNode mapIdNode = infos.get("floorMapId");
+				if(mapNode != null){
+					String map = mapNode.asText();
+					String mapId = mapIdNode != null ? mapIdNode.asText() : null;
+					if(mapId != null) {
+						FileInfo fileInfo = FileClientFacade.load(mapId);
+						if(fileInfo != null && fileInfo.getFileName().equals(map))
+							continue; //文件无变化
+
+						//删除之前的地图文件
+						FileStorageHelper.deleteFile(mapId);
+					}
+
+					try {
+						Response serviceResponse = oldAdmClient.getFloorMap(map, "revit");
+						Response.Body body = serviceResponse.body();
+
+						InputStream inputStream = body.asInputStream();
+						FileInfo fileInfo = FileInfoCreator.of(groupCode, projectId, AdmConst.APP_ID, map);
+						String fileId = FileStorageHelper.uploadFile(fileInfo, inputStream);
+
+						infos.put("floorMapId", fileId);
+						modifiedFloors.add(floor);
+					} catch (Exception e) {
+						e.printStackTrace();
+					}
+				}
+			}
+		}
+
+		objectService.update(modifiedFloors);
+	}
+
 }

+ 3 - 0
src/main/resources/bootstrap.yml

@@ -46,6 +46,9 @@ persagy:
     rwd:
       service: http://develop.persagy.com/dmp-rwd
 #      service: http://82.157.159.41/dmp-rwd
+    file:
+      service: http://develop.persagy.com/dmp-file
+#      service: http://82.157.159.41/dmp-file
     dic:
       service: http://develop.persagy.com/dmp-dic
 #      service: http://82.157.159.41/dmp-dic

+ 38 - 0
src/test/java/com/persagy/bdtp/adm/test/AdmApplicationTests.java

@@ -5,15 +5,18 @@ import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.persagy.bdtp.adm.common.AdmConst;
 import com.persagy.bdtp.adm.dao.AdmComponentMapper;
 import com.persagy.bdtp.adm.dao.AdmInfosConfigMapper;
 import com.persagy.bdtp.adm.dao.AdmPipeConfigMapper;
 import com.persagy.bdtp.adm.dao.AdmRelsConfigMapper;
 import com.persagy.bdtp.adm.entity.*;
+import com.persagy.bdtp.adm.service.IAdmObjectService;
 import com.persagy.bdtp.adm.service.ISyncOldAdm;
 import com.persagy.bdtp.adm.test.data.InfosCfgs;
 import com.persagy.bdtp.adm.test.data.PipeCfgs;
 import com.persagy.bdtp.adm.test.data.RelCfgs;
+import com.persagy.dmp.storage.utils.FileStorageHelper;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -22,7 +25,10 @@ import org.springframework.core.io.Resource;
 import org.springframework.core.io.ResourceLoader;
 import org.springframework.test.context.junit4.SpringRunner;
 
+import java.io.BufferedOutputStream;
 import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -49,6 +55,38 @@ public class AdmApplicationTests {
 		syncOldAdm.syncData("BR", "Pj0002220002");
 	}
 
+	@Test
+	public void testUploadFloorMap() {
+		syncOldAdm.uploadFloorMap("BR", "Pj0002220011");
+	}
+
+	@Autowired
+	private IAdmObjectService objectService;
+
+	@Test
+	public void testDownloadFloorMap(){
+		List<AdmObject> floors = objectService.queryM2dByObjType("Pj0002220011", AdmConst.OBJ_TYPE_FLOOR);
+		for(AdmObject floor : floors) {
+			if(floor.getInfos() != null && floor.getInfos().get("floorMapId") != null) {
+				try {
+					InputStream inputStream = FileStorageHelper.downloadStream(floor.getInfos().get("floorMapId").asText());
+					BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream("D:\\work_area\\images-minio\\" + floor.getInfos().get("floorMap").asText()));
+					int length = 0;
+					byte[] temp = new byte[1024 * 10];
+					while ((length = inputStream.read(temp)) != -1) {
+						bufferedOutputStream.write(temp, 0, length);
+					}
+					bufferedOutputStream.flush();
+					bufferedOutputStream.close();
+					inputStream.close();
+				}catch (Exception e) {
+					e.printStackTrace();
+				}
+				break;
+			}
+		}
+	}
+
 	@Autowired
 	private AdmInfosConfigMapper infosConfigMapper;
 	@Test