| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- package com.persagy.proxy.adm.service.impl;
- import cn.hutool.core.collection.CollUtil;
- import com.fasterxml.jackson.databind.node.ArrayNode;
- import com.fasterxml.jackson.databind.node.JsonNodeFactory;
- import com.fasterxml.jackson.databind.node.ObjectNode;
- import com.persagy.dmp.basic.model.QueryCriteria;
- import com.persagy.proxy.adm.model.AdmEquipment;
- import com.persagy.proxy.adm.model.AdmPlanarEquipRequests;
- import com.persagy.proxy.adm.model.AdmSpace;
- import com.persagy.proxy.adm.request.AdmResponse;
- import com.persagy.proxy.adm.service.IAdmEquipmentService;
- import com.persagy.proxy.adm.service.IAdmPlanarService;
- import com.persagy.proxy.adm.service.IAdmSpaceService;
- import com.persagy.proxy.common.entity.InstanceUrlParam;
- import org.apache.commons.lang.StringUtils;
- import org.apache.poi.ss.formula.functions.T;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.stream.Collectors;
- /**
- * @ClassName AdmPlanarServiceImpl
- * @Description: 平面图接口
- * @Author linhuili
- * @Date 2021/9/22 14:17
- * @Version V1.0
- **/
- @Service
- public class AdmPlanarServiceImpl extends AbstractAdmBaseServiceImpl<T> implements IAdmPlanarService {
- @Autowired
- private IAdmSpaceService spaceService;
- @Autowired
- private IAdmEquipmentService equipmentService;
-
- /**
- * 查询平面图设备信息
- * @param context
- * @param requests
- * @param clazz
- * @return
- * @throws Exception
- */
- @Override
- public AdmResponse queryPlanarEquip(InstanceUrlParam context, AdmPlanarEquipRequests requests, Class<AdmEquipment> clazz) throws Exception {
- List<AdmSpace> spaces = new ArrayList<>();
- //获取空间信息
- if(CollUtil.isEmpty(requests.getSpaceIds())){
- //查询建筑/楼层下的空间信息
- spaces = querySpInFl(context, requests, AdmSpace.class);
- }else{
- //根据空间功能类型等过滤空间信息
- spaces = queryDmpSpace(context, requests, AdmSpace.class);
- }
- if(CollUtil.isEmpty(spaces)){
- return AdmResponse.success(new ArrayList<>());
- }
- List<String> spaceIds = spaces.stream().map(k -> k.getId()).collect(Collectors.toList());
- requests.setSpaceIds(spaceIds);
- //查询空间下的设备
- List<AdmEquipment> result = queryEqInSp(context, requests, AdmEquipment.class);
- AdmResponse response = AdmResponse.success(result);
- response.setTotal(result == null ? 0 : Long.valueOf(result.size()));
- return response;
- }
- /**
- * 查询平面图空间
- * @param context
- * @param requests
- * @param clazz
- * @return
- * @throws Exception
- */
- @Override
- public AdmResponse queryPlanarSpace(InstanceUrlParam context, AdmPlanarEquipRequests requests, Class<AdmSpace> clazz) throws Exception {
- List<AdmSpace> spaces = new ArrayList<>();
- //获取空间信息
- if(CollUtil.isEmpty(requests.getSpaceIds())){
- //查询建筑/楼层下的空间信息
- spaces = querySpInFl(context, requests, AdmSpace.class);
- }else{
- //根据空间功能类型等过滤空间信息
- spaces = queryDmpSpace(context, requests, AdmSpace.class);
- }
- AdmResponse response = AdmResponse.success(spaces);
- response.setTotal(spaces == null ? 0 : Long.valueOf(spaces.size()));
- return response;
- }
- /**
- * 查询楼层下的空间
- * @param context
- * @param requests
- * @return
- */
- private List<AdmSpace> querySpInFl(InstanceUrlParam context, AdmPlanarEquipRequests requests, Class<AdmSpace> clazz){
- //设置空间基础查询条件
- ObjectNode criteria = JsonNodeFactory.instance.objectNode();
- if(CollUtil.isNotEmpty(requests.getZoneTypes())){
- ArrayNode array = criteria.putObject("objType").putArray("$in");
- requests.getZoneTypes().forEach(code -> array.add(code));
- }
- if(CollUtil.isNotEmpty(requests.getFuncTypes())){
- ArrayNode array = criteria.putObject("roomFuncType").putArray("$in");
- requests.getFuncTypes().forEach(code -> array.add(code));
- }
- if(CollUtil.isNotEmpty(requests.getEquipTypes())){
- ArrayNode array = criteria.putObject("classCode").putArray("$in");
- requests.getEquipTypes().forEach(code -> array.add(code));
- }
- //设置空间关系查询条件
- QueryCriteria dmpRequest = new QueryCriteria();
- if(StringUtils.isEmpty(requests.getFloorId())){
- dmpRequest = transDmpRelationCriteria(criteria,"ArchSubset", "Bd2Sp", requests.getBuildingId(), 0);
- }else{
- dmpRequest = transDmpRelationCriteria(criteria,"ArchSubset", "Fl2Sp", requests.getFloorId(), 0);
- }
- //查询物理世界空间信息
- AdmResponse response = spaceService.doQuery(context, dmpRequest, clazz);
- return (List<AdmSpace>)response.getContent();
- }
- /**
- * 查询空间下的设备
- * @param context
- * @param requests
- * @param clazz
- * @return
- */
- private List<AdmEquipment> queryEqInSp(InstanceUrlParam context,AdmPlanarEquipRequests requests,Class<AdmEquipment> clazz){
- List<String> spaceIds = requests.getSpaceIds();
- if(CollUtil.isEmpty(spaceIds)){
- return new ArrayList<>();
- }
- //默认业务空间数量不会太多,若多的话后期进行优化
- List<AdmEquipment> result = new ArrayList<>();
- for (String spaceId : spaceIds) {
- ObjectNode criteria = JsonNodeFactory.instance.objectNode();
- //设置设备关系查询条件
- QueryCriteria dmpRequest = transDmpRelationCriteria(criteria,"MechInArch", "Eq2Sp", spaceId, 1);
- //查询物理世界对象信息
- AdmResponse response = equipmentService.doQuery(context, dmpRequest, clazz);
- List<AdmEquipment> content = (List<AdmEquipment>) response.getContent();
- if(CollUtil.isNotEmpty(content)){
- result.addAll(content);
- }
- }
- return result;
- }
- /**
- * 查询中台空间信息
- * @param context
- * @param requests
- * @return
- */
- private List<AdmSpace> queryDmpSpace(InstanceUrlParam context, AdmPlanarEquipRequests requests, Class<AdmSpace> clazz){
- ObjectNode criteria = JsonNodeFactory.instance.objectNode();
- if(CollUtil.isNotEmpty(requests.getSpaceIds())){
- ArrayNode array = criteria.putObject("id").putArray("$in");
- requests.getZoneTypes().forEach(code -> array.add(code));
- }
- if(CollUtil.isNotEmpty(requests.getFuncTypes())){
- ArrayNode array = criteria.putObject("roomFuncType").putArray("$in");
- requests.getFuncTypes().forEach(code -> array.add(code));
- }
- if(CollUtil.isNotEmpty(requests.getZoneTypes())){
- ArrayNode array = criteria.putObject("objType").putArray("$in");
- requests.getZoneTypes().forEach(code -> array.add(code));
- }
- if(CollUtil.isNotEmpty(requests.getEquipTypes())){
- ArrayNode array = criteria.putObject("classCode").putArray("$in");
- requests.getEquipTypes().forEach(code -> array.add(code));
- }
- QueryCriteria dmpRequest = new QueryCriteria();
- dmpRequest.setCriteria(criteria);
- //查询物理世界空间信息
- AdmResponse response = spaceService.doQuery(context, dmpRequest, clazz);
- return (List<AdmSpace>)response.getContent();
- }
- /**
- * 获取关系查询条件
- * @param graphCode
- * @param relCode
- * @param id (fromID/targetID)
- * @param direct 0 正向 1反向
- * @return
- */
- public static QueryCriteria transDmpRelationCriteria(ObjectNode objectNode,String graphCode, String relCode, String id, Integer direct){
- QueryCriteria queryCriteria = new QueryCriteria();
- ObjectNode object = JsonNodeFactory.instance.objectNode();
- object.put("graphCode", graphCode);
- object.put("relCode", relCode);
- if(direct == 0){
- //正向查询 objFrom->objTo
- object.put("objFrom", id);
- objectNode.put("relationTo",object);
- }else{
- //反向查询 objTo->objFrom
- object.put("objTo", id);
- objectNode.put("relationFrom",object);
- }
- queryCriteria.setCriteria(objectNode);
- return queryCriteria;
- }
- }
|