Pārlūkot izejas kodu

查询不在空间的设备

zhangqiankun 3 gadi atpakaļ
vecāks
revīzija
07836fb295

+ 45 - 0
src/main/java/com/persagy/proxy/adm/controller/RelationReportController.java

@@ -34,6 +34,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.google.common.collect.Lists;
 import com.persagy.proxy.adm.constant.AdmCommonConstant;
 import com.persagy.proxy.adm.model.AdmRelationObject;
+import com.persagy.proxy.adm.model.EquipmentExcel;
 import com.persagy.proxy.adm.request.AdmQueryCriteria;
 import com.persagy.proxy.adm.request.AdmResponse;
 import com.persagy.proxy.adm.service.IRelationReportService;
@@ -124,6 +125,50 @@ public class RelationReportController {
 	}
 	
 	/**
+	 * 下载报告-查询key值
+	 * 
+	 * @param queryCriteria
+	 * @param request
+	 * @return
+	 */
+	@RequestMapping("/graphic/downloads/point/key")
+	public AdmResponse downloadsPointKey(@RequestBody AdmQueryCriteria queryCriteria, HttpServletRequest request) {
+		//String groupCode = request.getHeader(AdmCommonConstant.GROUP_CODE_HEADER);
+		//String projectId = request.getHeader(AdmCommonConstant.PROJECT_ID_HEADER);
+		//List<ObjectNode> relationProjectCal = this.relationReportService.getAllRelationProjectCal(groupCode, projectId);
+		return AdmResponse.success(null);
+	}
+	
+	/**
+	 * 下载报告-设备-未关联空间的设备
+	 * 设备.xlsx 是个空模板,所以这里未使用 
+	 * 
+	 * @param queryCriteria
+	 * @param request
+	 * @return
+	 */
+	@RequestMapping("/graphic/downloads/eq/not/sp")
+	public void downloadsEqNotSp(@RequestParam(required = false) String projectId, HttpServletRequest request, HttpServletResponse response) {
+		String groupCode = request.getHeader(AdmCommonConstant.GROUP_CODE_HEADER);
+		if (StrUtil.isBlank(projectId)) {
+			projectId = request.getHeader(AdmCommonConstant.PROJECT_ID_HEADER);
+		}
+		try {
+            response.setContentType("application/vnd.ms-excel");
+            String encode = StandardCharsets.UTF_8.name();
+            response.setCharacterEncoding(encode);
+            // 防止中文乱码
+            String fileName = URLEncoder.encode("equipment", encode);
+            response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+            
+            List<EquipmentExcel> equipByNotSpace = this.relationReportService.findEquipByNotSpace(groupCode, projectId);
+            EasyExcel.write(response.getOutputStream(), EquipmentExcel.class).sheet(0).doWrite(equipByNotSpace);
+		} catch(Exception e) {
+			log.error("设备数据导出异常", e);
+		}
+	}
+	
+	/**
 	 * 下载报告-设备静态信息维护模板
 	 * 
 	 * @param request

+ 60 - 0
src/main/java/com/persagy/proxy/adm/model/EquipmentExcel.java

@@ -0,0 +1,60 @@
+package com.persagy.proxy.adm.model;
+
+import org.apache.poi.ss.usermodel.Font;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.HeadFontStyle;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @version 
+ * @description 不在空间内的设备数据导出实体类
+ * @company persagy
+ * @author zhangqiankun
+ * @since 2020年11月26日:	下午12:30:39
+ */
+@Getter
+@Setter
+@HeadFontStyle(color = Font.COLOR_NORMAL)
+public class EquipmentExcel {
+	
+	@ColumnWidth(50)
+	@ExcelProperty(value = "设备id", index=0)
+	private String id;
+	
+	@ColumnWidth(25)
+	@ExcelProperty(value = "设备名称", index=1)
+	private String name;
+
+	@ColumnWidth(25)
+	@ExcelProperty(value = "设备本地名称", index=2)
+	private String localId;
+
+	@ColumnWidth(25)
+	@ExcelProperty(value = "设备本地编码", index=3)
+	private String localName;
+	
+	@ColumnWidth(50)
+	@ExcelProperty(value = "BIMID", index=4)
+	private String bimId;
+
+	@ColumnWidth(25)
+	@ExcelProperty(value = "设备类", index=5)
+	private String classCodeName;
+	
+	@ColumnWidth(25)
+	@ExcelProperty(value = "建筑", index=6)
+	private String buildName;
+	
+	@ColumnWidth(25)
+	@ExcelProperty(value = "楼层", index=7)
+	private String floorName; 
+	
+	@ColumnWidth(30)
+	@ExcelProperty(value = "模型文件名", index=8)
+	private String modelFileName;
+	
+}

+ 11 - 2
src/main/java/com/persagy/proxy/adm/service/IRelationReportService.java

@@ -10,6 +10,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.dmp.define.entity.GraphDefine;
 import com.persagy.dmp.define.entity.RelationDefine;
 import com.persagy.dmp.digital.entity.ObjectRelation;
+import com.persagy.proxy.adm.model.EquipmentExcel;
 
 /**
  * 报表/模板下载
@@ -161,6 +162,14 @@ public interface IRelationReportService {
 	List<ObjectRelation> findObjectRelationList(String groupCode, String projectId, String graphCode, String relCode);
 
 	/**
+	 * 找到不在空间内的设备数据
+	 * 
+	 * @param groupCode
+	 * @param projectId
+	 */
+	List<EquipmentExcel> findEquipByNotSpace(String groupCode, String projectId);
+	
+	/**
 	 * 查询关系总览(空表,先插入)
 	 * @param content: 模糊查询卡片名称关键字
 	 */
@@ -169,8 +178,8 @@ public interface IRelationReportService {
 	/**
 	 * 初始化项目关系计算数据
 	 * 
-	 * @param groupCode
-	 * @param projectId
+	 * @param groupCode: 集团编码
+	 * @param projectId: 项目id
 	 * @return
 	 */
 	boolean createRelationProjectCal(String groupCode, String projectId) throws JsonProcessingException;

+ 124 - 7
src/main/java/com/persagy/proxy/adm/service/impl/RelationReportService.java

@@ -3,6 +3,8 @@ package com.persagy.proxy.adm.service.impl;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -23,19 +25,26 @@ import com.persagy.dmp.basic.model.QueryCriteria;
 import com.persagy.dmp.common.context.AppContext;
 import com.persagy.dmp.common.helper.SpringHelper;
 import com.persagy.dmp.common.model.response.CommonResult;
+import com.persagy.dmp.define.client.DigitalDefineFacade;
 import com.persagy.dmp.define.client.DigitalGraphDefineFacade;
 import com.persagy.dmp.define.client.DigitalRelationDefineFacade;
 import com.persagy.dmp.define.entity.GraphDefine;
+import com.persagy.dmp.define.entity.ObjectTypeDefine;
 import com.persagy.dmp.define.entity.RelationDefine;
 import com.persagy.dmp.digital.client.DigitalObjectFacade;
 import com.persagy.dmp.digital.client.DigitalRelationFacade;
 import com.persagy.dmp.digital.client.DigitalRelationProjectCalFacade;
+import com.persagy.dmp.digital.entity.ObjectDigital;
 import com.persagy.dmp.digital.entity.ObjectRelation;
 import com.persagy.dmp.digital.entity.ObjectRelationProjectCal;
 import com.persagy.dmp.simple.client.DigitalObjectSimpleFacade;
 import com.persagy.proxy.adm.constant.AdmCommonConstant;
+import com.persagy.proxy.adm.constant.AdmObjectType;
 import com.persagy.proxy.adm.constant.AdmRelationTypeEnum;
+import com.persagy.proxy.adm.constant.GraphCodeEnum;
 import com.persagy.proxy.adm.constant.ObjTypeMapping;
+import com.persagy.proxy.adm.constant.RelCodeEnum;
+import com.persagy.proxy.adm.model.EquipmentExcel;
 import com.persagy.proxy.adm.service.IRelationReportService;
 import com.persagy.proxy.adm.strategy.relationdata.RelationObjectStrategy;
 
@@ -315,13 +324,47 @@ public class RelationReportService implements IRelationReportService {
 		List<ObjectRelation> objectRelations = DigitalRelationFacade.query(groupCode, projectId, AdmCommonConstant.APP_ID, AdmCommonConstant.USER_ID, queryCriteria);
 		return CollectionUtil.isEmpty(objectRelations) ? Lists.newArrayList() : objectRelations;
 	}
-	/**
-	 * 初始化项目关系计算数据
-	 *
-	 * @param groupCode: 集团编码
-	 * @param projectId: 项目id
-	 * @return
-	 */
+	
+	@Override
+	public List<EquipmentExcel> findEquipByNotSpace(String groupCode, String projectId) {
+		groupCode = StrUtil.isBlank(groupCode) ? defaultCode : groupCode;
+		// 1.获取所有的设备对象数据
+		ObjectMapper objectMapper = SpringHelper.getBean(ObjectMapper.class);
+		QueryCriteria objectCriteria = new QueryCriteria();
+		ObjectNode object = objectMapper.createObjectNode();
+		object.put("objType", AdmObjectType.EQUIPMENT.getIndex());
+		objectCriteria.setCriteria(object);
+		List<ObjectNode> equipList = DigitalObjectFacade.query(groupCode, projectId, AdmCommonConstant.APP_ID, AdmCommonConstant.USER_ID, objectCriteria);
+		if (CollectionUtil.isEmpty(equipList)) {
+			return Lists.newArrayList();
+		}
+		
+		// 2.获取所有的设备类定义的className
+		List<ObjectTypeDefine> classList = DigitalDefineFacade.queryObjectType(groupCode, projectId, AdmCommonConstant.APP_ID, AdmCommonConstant.USER_ID, objectCriteria);
+		// key-classCode, value-className
+		Map<String, String> classDefine = new HashMap<String, String>();
+		if (CollectionUtil.isNotEmpty(classList)) {
+			for (ObjectTypeDefine objectTypeDefine : classList) {
+				classDefine.put(objectTypeDefine.getCode(), objectTypeDefine.getName());
+			}
+		}
+		
+		// 3.查询出所有的边类型为 Eq2Sp 的关系数据
+		QueryCriteria relationCriteria = new QueryCriteria();
+		ObjectNode relation = objectMapper.createObjectNode();
+		relation.put("relCode", RelCodeEnum.Eq2Sp.name());
+		relationCriteria.setCriteria(relation);
+		List<ObjectRelation> relationList = DigitalRelationFacade.query(groupCode, projectId, AdmCommonConstant.APP_ID, AdmCommonConstant.USER_ID, relationCriteria);
+		Set<String> equipIds = new HashSet<String>();
+		if (CollectionUtil.isNotEmpty(relationList)) {
+			for (ObjectRelation relationInfo : relationList) {
+				equipIds.add(relationInfo.getObjFrom());
+			}
+		}
+		
+		return this.exportEquipmentExcel(equipList, classDefine, equipIds, groupCode, projectId);
+	}
+	
 	@Override
 	public boolean createRelationProjectCal(String groupCode, String projectId) throws JsonProcessingException {
 		groupCode = StrUtil.isBlank(groupCode) ? defaultCode : groupCode;
@@ -546,4 +589,78 @@ public class RelationReportService implements IRelationReportService {
 		objectNode.putPOJO("statistics", new JSONObject());
 	}
 
+	/**
+	 * 构造 excel 设备数据
+	 * 
+	 * @param equipList 设备数据集合
+	 * @param classDefine 类定义信息
+	 * @param equipIds 需要剔除的设备ID集合
+	 * @param groupCode 
+	 * @param projectId 
+	 * @return
+	 */
+	private List<EquipmentExcel> exportEquipmentExcel(List<ObjectNode> equipList, Map<String, String> classDefine, Set<String> equipIds, String groupCode, String projectId) {
+		// key: 设备ID,value: 建筑名称
+		Map<String, String> buildTemp = new HashMap<String, String>();
+		// key: 设备ID,value: 楼层名称
+		Map<String, String> floorTemp = new HashMap<String, String>();
+		
+		// 建筑名称		
+		RequestData requestData = new RequestData();
+		requestData.setGraphCode(GraphCodeEnum.MechInArch.name());
+		requestData.setRelCode(RelCodeEnum.Eq2Bd.name());
+		requestData.setPage(1L);
+		requestData.setSize(10000000L);
+		List<ObjectDigital> buildDigitals = DigitalObjectFacade.queryObjectListByGraphCodeAndRelCode(groupCode, projectId, AdmCommonConstant.APP_ID, AdmCommonConstant.USER_ID, requestData);
+		if (CollectionUtil.isNotEmpty(buildDigitals)) {
+			for (ObjectDigital master : buildDigitals) {
+				List<ObjectDigital> slaveDigitals = master.getRelObjs();
+				ObjectDigital slave = CollectionUtil.isEmpty(slaveDigitals) ? null : slaveDigitals.get(0);
+				if (slave != null) {
+					buildTemp.put(master.getId(), slave.getLocalName());
+				}
+			}
+		}
+		// 楼层名称
+		requestData.setRelCode(RelCodeEnum.Eq2Fl.name());
+		List<ObjectDigital> floorDigitals = DigitalObjectFacade.queryObjectListByGraphCodeAndRelCode(groupCode, projectId, AdmCommonConstant.APP_ID, AdmCommonConstant.USER_ID, requestData);
+		if (CollectionUtil.isNotEmpty(floorDigitals)) {
+			for (ObjectDigital master : floorDigitals) {
+				List<ObjectDigital> slaveDigitals = master.getRelObjs();
+				ObjectDigital slave = CollectionUtil.isEmpty(slaveDigitals) ? null : slaveDigitals.get(0);
+				if (slave != null) {
+					floorTemp.put(master.getId(), slave.getLocalName());
+				}
+			}
+		}
+		
+		// 结果封装
+		List<EquipmentExcel> excelList = new ArrayList<EquipmentExcel>();
+		for (ObjectNode equip : equipList) {
+			String id = equip.get("id") == null ? null : equip.get("id").asText();
+			if (id != null && !equipIds.contains(id)) {
+				EquipmentExcel excel = new EquipmentExcel();
+				excel.setId(id);
+				excel.setName(equip.get("name") == null ? null : equip.get("name").asText());
+				excel.setLocalId(equip.get("localId") == null ? null : equip.get("localId").asText());
+				excel.setLocalName(equip.get("localName") == null ? null : equip.get("localName").asText());
+				
+				String infos = equip.get("infos") == null ? null : equip.get("infos").asText();
+				if (StrUtil.isNotBlank(infos)) {
+					JSONObject parseObject = JSONObject.parseObject(infos);
+					excel.setBimId(parseObject.getString("bimId"));
+				}
+				
+				String classCode = equip.get("classCode") == null ? null : equip.get("classCode").asText();
+				excel.setClassCodeName(classCode == null ? null : classDefine.get(classCode));
+				
+				excel.setBuildName(buildTemp.get(id));
+				excel.setFloorName(floorTemp.get(id));
+				excel.setModelFileName("T1F10模型文件v18.rvt");	// 这里写死是不对的,需要后续再补充改变
+				excelList.add(excel);
+			}
+		}
+		return excelList;
+	}
+	
 }

BIN
src/main/resources/template/设备.xlsx