AdmPlanarServiceImpl.java 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. package com.persagy.proxy.adm.service.impl;
  2. import cn.hutool.core.collection.CollUtil;
  3. import com.fasterxml.jackson.databind.node.ArrayNode;
  4. import com.fasterxml.jackson.databind.node.JsonNodeFactory;
  5. import com.fasterxml.jackson.databind.node.ObjectNode;
  6. import com.persagy.dmp.basic.model.QueryCriteria;
  7. import com.persagy.proxy.adm.model.AdmEquipment;
  8. import com.persagy.proxy.adm.model.AdmPlanarEquipRequests;
  9. import com.persagy.proxy.adm.model.AdmSpace;
  10. import com.persagy.proxy.adm.request.AdmResponse;
  11. import com.persagy.proxy.adm.service.IAdmEquipmentService;
  12. import com.persagy.proxy.adm.service.IAdmPlanarService;
  13. import com.persagy.proxy.adm.service.IAdmSpaceService;
  14. import com.persagy.proxy.common.entity.InstanceUrlParam;
  15. import org.apache.commons.lang.StringUtils;
  16. import org.apache.poi.ss.formula.functions.T;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.stereotype.Service;
  19. import java.util.ArrayList;
  20. import java.util.List;
  21. import java.util.stream.Collectors;
  22. /**
  23. * @ClassName AdmPlanarServiceImpl
  24. * @Description: 平面图接口
  25. * @Author linhuili
  26. * @Date 2021/9/22 14:17
  27. * @Version V1.0
  28. **/
  29. @Service
  30. public class AdmPlanarServiceImpl extends AbstractAdmBaseServiceImpl<T> implements IAdmPlanarService {
  31. @Autowired
  32. private IAdmSpaceService spaceService;
  33. @Autowired
  34. private IAdmEquipmentService equipmentService;
  35. /**
  36. * 查询平面图设备信息
  37. * @param context
  38. * @param requests
  39. * @param clazz
  40. * @return
  41. * @throws Exception
  42. */
  43. @Override
  44. public AdmResponse queryPlanarEquip(InstanceUrlParam context, AdmPlanarEquipRequests requests, Class<AdmEquipment> clazz) throws Exception {
  45. List<AdmSpace> spaces = new ArrayList<>();
  46. //获取空间信息
  47. if(CollUtil.isEmpty(requests.getSpaceIds())){
  48. //查询建筑/楼层下的空间信息
  49. spaces = querySpInFl(context, requests, AdmSpace.class);
  50. }else{
  51. //根据空间功能类型等过滤空间信息
  52. spaces = queryDmpSpace(context, requests, AdmSpace.class);
  53. }
  54. if(CollUtil.isEmpty(spaces)){
  55. return AdmResponse.success(new ArrayList<>());
  56. }
  57. List<String> spaceIds = spaces.stream().map(k -> k.getId()).collect(Collectors.toList());
  58. requests.setSpaceIds(spaceIds);
  59. //查询空间下的设备
  60. List<AdmEquipment> result = queryEqInSp(context, requests, AdmEquipment.class);
  61. AdmResponse response = AdmResponse.success(result);
  62. response.setTotal(result == null ? 0 : Long.valueOf(result.size()));
  63. return response;
  64. }
  65. /**
  66. * 查询平面图空间
  67. * @param context
  68. * @param requests
  69. * @param clazz
  70. * @return
  71. * @throws Exception
  72. */
  73. @Override
  74. public AdmResponse queryPlanarSpace(InstanceUrlParam context, AdmPlanarEquipRequests requests, Class<AdmSpace> clazz) throws Exception {
  75. List<AdmSpace> spaces = new ArrayList<>();
  76. //获取空间信息
  77. if(CollUtil.isEmpty(requests.getSpaceIds())){
  78. //查询建筑/楼层下的空间信息
  79. spaces = querySpInFl(context, requests, AdmSpace.class);
  80. }else{
  81. //根据空间功能类型等过滤空间信息
  82. spaces = queryDmpSpace(context, requests, AdmSpace.class);
  83. }
  84. AdmResponse response = AdmResponse.success(spaces);
  85. response.setTotal(spaces == null ? 0 : Long.valueOf(spaces.size()));
  86. return response;
  87. }
  88. /**
  89. * 查询楼层下的空间
  90. * @param context
  91. * @param requests
  92. * @return
  93. */
  94. private List<AdmSpace> querySpInFl(InstanceUrlParam context, AdmPlanarEquipRequests requests, Class<AdmSpace> clazz){
  95. //设置空间基础查询条件
  96. ObjectNode criteria = JsonNodeFactory.instance.objectNode();
  97. if(CollUtil.isNotEmpty(requests.getZoneTypes())){
  98. ArrayNode array = criteria.putObject("objType").putArray("$in");
  99. requests.getZoneTypes().forEach(code -> array.add(code));
  100. }
  101. if(CollUtil.isNotEmpty(requests.getFuncTypes())){
  102. ArrayNode array = criteria.putObject("roomFuncType").putArray("$in");
  103. requests.getFuncTypes().forEach(code -> array.add(code));
  104. }
  105. if(CollUtil.isNotEmpty(requests.getEquipTypes())){
  106. ArrayNode array = criteria.putObject("classCode").putArray("$in");
  107. requests.getEquipTypes().forEach(code -> array.add(code));
  108. }
  109. //设置空间关系查询条件
  110. QueryCriteria dmpRequest = new QueryCriteria();
  111. if(StringUtils.isEmpty(requests.getFloorId())){
  112. dmpRequest = transDmpRelationCriteria(criteria,"ArchSubset", "Bd2Sp", requests.getBuildingId(), 0);
  113. }else{
  114. dmpRequest = transDmpRelationCriteria(criteria,"ArchSubset", "Fl2Sp", requests.getFloorId(), 0);
  115. }
  116. //查询物理世界空间信息
  117. AdmResponse response = spaceService.doQuery(context, dmpRequest, clazz);
  118. return (List<AdmSpace>)response.getContent();
  119. }
  120. /**
  121. * 查询空间下的设备
  122. * @param context
  123. * @param requests
  124. * @param clazz
  125. * @return
  126. */
  127. private List<AdmEquipment> queryEqInSp(InstanceUrlParam context,AdmPlanarEquipRequests requests,Class<AdmEquipment> clazz){
  128. List<String> spaceIds = requests.getSpaceIds();
  129. if(CollUtil.isEmpty(spaceIds)){
  130. return new ArrayList<>();
  131. }
  132. //默认业务空间数量不会太多,若多的话后期进行优化
  133. List<AdmEquipment> result = new ArrayList<>();
  134. for (String spaceId : spaceIds) {
  135. ObjectNode criteria = JsonNodeFactory.instance.objectNode();
  136. //设置设备关系查询条件
  137. QueryCriteria dmpRequest = transDmpRelationCriteria(criteria,"MechInArch", "Eq2Sp", spaceId, 1);
  138. //查询物理世界对象信息
  139. AdmResponse response = equipmentService.doQuery(context, dmpRequest, clazz);
  140. List<AdmEquipment> content = (List<AdmEquipment>) response.getContent();
  141. if(CollUtil.isNotEmpty(content)){
  142. result.addAll(content);
  143. }
  144. }
  145. return result;
  146. }
  147. /**
  148. * 查询中台空间信息
  149. * @param context
  150. * @param requests
  151. * @return
  152. */
  153. private List<AdmSpace> queryDmpSpace(InstanceUrlParam context, AdmPlanarEquipRequests requests, Class<AdmSpace> clazz){
  154. ObjectNode criteria = JsonNodeFactory.instance.objectNode();
  155. if(CollUtil.isNotEmpty(requests.getSpaceIds())){
  156. ArrayNode array = criteria.putObject("id").putArray("$in");
  157. requests.getZoneTypes().forEach(code -> array.add(code));
  158. }
  159. if(CollUtil.isNotEmpty(requests.getFuncTypes())){
  160. ArrayNode array = criteria.putObject("roomFuncType").putArray("$in");
  161. requests.getFuncTypes().forEach(code -> array.add(code));
  162. }
  163. if(CollUtil.isNotEmpty(requests.getZoneTypes())){
  164. ArrayNode array = criteria.putObject("objType").putArray("$in");
  165. requests.getZoneTypes().forEach(code -> array.add(code));
  166. }
  167. if(CollUtil.isNotEmpty(requests.getEquipTypes())){
  168. ArrayNode array = criteria.putObject("classCode").putArray("$in");
  169. requests.getEquipTypes().forEach(code -> array.add(code));
  170. }
  171. QueryCriteria dmpRequest = new QueryCriteria();
  172. dmpRequest.setCriteria(criteria);
  173. //查询物理世界空间信息
  174. AdmResponse response = spaceService.doQuery(context, dmpRequest, clazz);
  175. return (List<AdmSpace>)response.getContent();
  176. }
  177. /**
  178. * 获取关系查询条件
  179. * @param graphCode
  180. * @param relCode
  181. * @param id (fromID/targetID)
  182. * @param direct 0 正向 1反向
  183. * @return
  184. */
  185. public static QueryCriteria transDmpRelationCriteria(ObjectNode objectNode,String graphCode, String relCode, String id, Integer direct){
  186. QueryCriteria queryCriteria = new QueryCriteria();
  187. ObjectNode object = JsonNodeFactory.instance.objectNode();
  188. object.put("graphCode", graphCode);
  189. object.put("relCode", relCode);
  190. if(direct == 0){
  191. //正向查询 objFrom->objTo
  192. object.put("objFrom", id);
  193. objectNode.put("relationTo",object);
  194. }else{
  195. //反向查询 objTo->objFrom
  196. object.put("objTo", id);
  197. objectNode.put("relationFrom",object);
  198. }
  199. queryCriteria.setCriteria(objectNode);
  200. return queryCriteria;
  201. }
  202. }