|
@@ -10,20 +10,19 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
import com.fasterxml.jackson.databind.node.ArrayNode;
|
|
|
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
|
|
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
|
|
-import com.google.common.collect.Sets;
|
|
|
import com.persagy.dmp.basic.model.QueryCriteria;
|
|
|
-import com.persagy.dmp.common.model.entity.BaseEntity;
|
|
|
import com.persagy.dmp.define.entity.ObjectTypeDefine;
|
|
|
import com.persagy.dmp.digital.entity.ObjectRelation;
|
|
|
import com.persagy.proxy.adm.model.AdmDCSQueryRequest;
|
|
|
+import com.persagy.proxy.adm.model.AdmEquipment;
|
|
|
import com.persagy.proxy.adm.model.AdmFloor;
|
|
|
import com.persagy.proxy.adm.model.AdmSpace;
|
|
|
import com.persagy.proxy.adm.request.AdmQueryCriteria;
|
|
|
import com.persagy.proxy.adm.request.AdmResponse;
|
|
|
+import com.persagy.proxy.adm.service.IAdmEquipmentService;
|
|
|
import com.persagy.proxy.adm.service.IAdmRelationService;
|
|
|
import com.persagy.proxy.adm.service.IAdmSpaceService;
|
|
|
import com.persagy.proxy.adm.utils.AdmContextUtil;
|
|
|
-import com.persagy.proxy.adm.utils.AdmQueryCriteriaHelper;
|
|
|
import com.persagy.proxy.common.client.DmpRwdClient;
|
|
|
import com.persagy.proxy.common.entity.DmpResult;
|
|
|
import com.persagy.proxy.common.entity.InstanceUrlParam;
|
|
@@ -49,6 +48,8 @@ public class AdmSpaceServiceImpl extends AbstractAdmBaseServiceImpl<AdmSpace> im
|
|
|
private ObjectMapper objectMapper;
|
|
|
@Autowired
|
|
|
private IAdmRelationService relationService;
|
|
|
+ @Autowired
|
|
|
+ protected IAdmEquipmentService equipmentService;
|
|
|
|
|
|
@Override
|
|
|
public List<AdmSpace> doInsertExt(InstanceUrlParam context, Class<AdmSpace> clazz, List<AdmSpace> voList) {
|
|
@@ -94,91 +95,88 @@ public class AdmSpaceServiceImpl extends AbstractAdmBaseServiceImpl<AdmSpace> im
|
|
|
|
|
|
@Override
|
|
|
public AdmResponse doQuerySpaces(InstanceUrlParam context, AdmDCSQueryRequest request) {
|
|
|
- QueryCriteria dmpRequest = AdmQueryCriteriaHelper.toDmpCriteria(request);
|
|
|
- //查询的时候,floorId,buildingId 按照空间对象的自定义信息点处理
|
|
|
- //TODO 这个ifelse判断是原来的代码实现,写此方法实现的时候不清楚实际业务,保留原来的判断,之后了解业务再根据业务调整
|
|
|
- DmpResult<JSONArray> result = new DmpResult<>();
|
|
|
- List spaceArray = new ArrayList();
|
|
|
- Set<String> zoneTypeList = StrUtil.isNotEmpty(request.getZoneType()) ? Sets.newHashSet(request.getZoneType())
|
|
|
- : (request.getZoneTypeList() == null ? Sets.newHashSet() : request.getZoneTypeList());
|
|
|
+ AdmQueryCriteria admQueryCriteria = new AdmQueryCriteria();
|
|
|
+ admQueryCriteria.setName(AdmSpace.OBJ_TYPE);
|
|
|
+ String classCodeFilter = "";
|
|
|
+ if(StrUtil.isNotEmpty(request.getZoneType())){
|
|
|
+ classCodeFilter = "classCode = '"+request.getZoneType()+"'";
|
|
|
+ }else{
|
|
|
+ StringBuffer zoneTypefilters = new StringBuffer(" classCode ");
|
|
|
+ zoneTypefilters.append("in ['");
|
|
|
+ request.getZoneTypeList().stream().forEach(code ->{
|
|
|
+ zoneTypefilters.append(code).append("',");
|
|
|
+ });
|
|
|
+ classCodeFilter = StrUtil.sub(zoneTypefilters.toString(),0,-1)+"']";
|
|
|
+ }
|
|
|
+ String filters = request.getFilters();
|
|
|
+ if(StrUtil.isBlank(filters)){
|
|
|
+ admQueryCriteria.setFilters(filters);
|
|
|
+ }else{
|
|
|
+ admQueryCriteria.setFilters(filters+";"+classCodeFilter);
|
|
|
+ }
|
|
|
if(StrUtil.isNotEmpty(request.getBuildingId()) && StrUtil.isNotEmpty(request.getFloorId()) && !request.getFloorId().equals("isnull")){
|
|
|
- querySpaceByFl(dmpRequest,context, spaceArray, zoneTypeList, request.getFloorId(), "Fl2Sp");
|
|
|
+ //明确建筑,明确楼层
|
|
|
+ ObjectNode relationTo = JsonNodeFactory.instance.objectNode();
|
|
|
+ relationTo.put("relCode", "Fl2Sp");
|
|
|
+ relationTo.put("graphCode", "MechInArch");
|
|
|
+ relationTo.put("objFrom", request.getFloorId());
|
|
|
+ admQueryCriteria.setRelationFrom(relationTo);
|
|
|
|
|
|
}else if(StrUtil.isNotEmpty(request.getBuildingId()) && StrUtil.isNotEmpty(request.getFloorId()) && request.getFloorId().equals("isnull")){
|
|
|
- QueryCriteria queryFloor = ensureQueryCommParm(dmpRequest,context, Arrays.asList("floor"), AdmFloor.OBJ_TYPE);
|
|
|
- ObjectNode criteriaFl = queryFloor.getCriteria();
|
|
|
- criteriaFl.put("buildingId", request.getBuildingId());
|
|
|
- queryFloor.setCriteria(criteriaFl);
|
|
|
- DmpResult<JSONArray> dmpResultFloors = queryObj(context, queryFloor);
|
|
|
- List<AdmFloor> floorList = JSONUtil.toList(JSONUtil.toJsonStr(dmpResultFloors.getData()), AdmFloor.class);
|
|
|
- Map<String, AdmFloor> floorMap = CollUtil.fieldValueMap(floorList, BaseEntity.PROP_ID);
|
|
|
-
|
|
|
- if(CollUtil.isNotEmpty(floorMap)){
|
|
|
- QueryCriteria queryCriteria = ensureQueryCommParm(dmpRequest, context, zoneTypeList, AdmSpace.OBJ_TYPE);
|
|
|
- ObjectNode criteriaPe = queryCriteria.getCriteria();
|
|
|
- JSONArray jsonArray = new JSONArray();
|
|
|
- floorMap.keySet().forEach(floorId -> jsonArray.add(floorId));
|
|
|
- criteriaPe.putPOJO("floorId", jsonArray);
|
|
|
- queryCriteria.setCriteria(criteriaPe);
|
|
|
- result = queryObj(context, queryCriteria);
|
|
|
- if(CollUtil.isNotEmpty(result.getData())){
|
|
|
- spaceArray.addAll(result.getData());
|
|
|
- }
|
|
|
- querySpaceByFl(dmpRequest, context, spaceArray, zoneTypeList, request.getBuildingId(), "Bd2Sp");
|
|
|
+ //明确建筑,不明确楼层
|
|
|
+ //查询建筑下的楼层
|
|
|
+ QueryCriteria queryCriteriaRelation = new QueryCriteria();
|
|
|
+ ObjectNode criteria = JsonNodeFactory.instance.objectNode();
|
|
|
+ criteria.put("relCdoe", "Bd2Fl");
|
|
|
+ criteria.put("graphCode", "ArchSubset");
|
|
|
+ criteria.put("objFrom", request.getBuildingId());
|
|
|
+ queryCriteriaRelation.setCriteria(criteria);
|
|
|
+ List<ObjectRelation> relations = relationService.queryByCondition(AdmContextUtil.toDmpContext(), queryCriteriaRelation);
|
|
|
+ if(CollUtil.isNotEmpty(relations)){
|
|
|
+ Map<String, ObjectRelation> objectRelationMap = CollUtil.fieldValueMap(relations, "objTo");
|
|
|
+ //查询 建筑 不在楼层下 的空间
|
|
|
+ ObjectNode relationTo = JsonNodeFactory.instance.objectNode();
|
|
|
+ relationTo.put("relCode", "Fl2Sp");
|
|
|
+ relationTo.put("graphCode", "MechInArch");
|
|
|
+ ArrayNode arrayNode = relationTo.putObject("objFrom").putArray("$in");
|
|
|
+ objectRelationMap.keySet().stream().forEach(floorId -> arrayNode.add(floorId));
|
|
|
+ relationTo.put("$bindFlag", false);
|
|
|
+ admQueryCriteria.setRelationFrom(relationTo);
|
|
|
+ admQueryCriteria.setFilters(admQueryCriteria.getFilters() + "; buildingId = '"+request.getBuildingId()+"'");
|
|
|
+ }else{
|
|
|
+ //查询建筑下的空间
|
|
|
+ ObjectNode relationTo = JsonNodeFactory.instance.objectNode();
|
|
|
+ relationTo.put("relCode", "Bd2Sp");
|
|
|
+ relationTo.put("graphCode", "MechInArch");
|
|
|
+ relationTo.put("objFrom", request.getBuildingId());
|
|
|
+ admQueryCriteria.setRelationFrom(relationTo);
|
|
|
}
|
|
|
+
|
|
|
}else if(StrUtil.isNotEmpty(request.getBuildingId()) && StrUtil.isEmpty(request.getFloorId()) && !request.getBuildingId().equals("isnull")){
|
|
|
- querySpaceByFl(dmpRequest,context, spaceArray, zoneTypeList, request.getBuildingId(), "Bd2Sp");
|
|
|
+ //查询建筑下的空间
|
|
|
+ ObjectNode relationTo = JsonNodeFactory.instance.objectNode();
|
|
|
+ relationTo.put("relCode", "Bd2Sp");
|
|
|
+ relationTo.put("graphCode", "MechInArch");
|
|
|
+ relationTo.put("objFrom", request.getBuildingId());
|
|
|
+ admQueryCriteria.setRelationFrom(relationTo);
|
|
|
}else if(StrUtil.isNotEmpty(request.getBuildingId()) && StrUtil.isEmpty(request.getFloorId()) && request.getBuildingId().equals("isnull")){
|
|
|
- //未明确建筑
|
|
|
- QueryCriteria queryCriteria = ensureQueryCommParm(dmpRequest, context, zoneTypeList, "space");
|
|
|
- ObjectNode criteriaPe = queryCriteria.getCriteria();
|
|
|
- JSONObject isnull = new JSONObject();
|
|
|
- isnull.put("$null", true);
|
|
|
- criteriaPe.putPOJO("buildingId", isnull);
|
|
|
- queryCriteria.setCriteria(criteriaPe);
|
|
|
- result = queryObj(context, queryCriteria);
|
|
|
- if(CollUtil.isNotEmpty(result.getData())){
|
|
|
- spaceArray.addAll(result.getData());
|
|
|
- }
|
|
|
+ //未明确建筑下的空间
|
|
|
+ //查询建筑下的空间
|
|
|
+ ObjectNode relationTo = JsonNodeFactory.instance.objectNode();
|
|
|
+ relationTo.put("relCode", "Bd2Sp");
|
|
|
+ relationTo.put("graphCode", "MechInArch");
|
|
|
+ relationTo.put("$bindFlag", false);
|
|
|
+ admQueryCriteria.setRelationFrom(relationTo);
|
|
|
}else if(StrUtil.isEmpty(request.getBuildingId()) && StrUtil.isEmpty(request.getFloorId())){
|
|
|
- QueryCriteria queryCriteria = ensureQueryCommParm(dmpRequest, context, zoneTypeList, "space");
|
|
|
- /* ObjectNode criteriaPe = queryCriteria.getCriteria();
|
|
|
- JSONObject isnull = new JSONObject();
|
|
|
- isnull.put("$null", true);
|
|
|
- criteriaPe.putPOJO("floorId", isnull);
|
|
|
- queryCriteria.setCriteria(criteriaPe);*/
|
|
|
- result = queryObj(context, queryCriteria);
|
|
|
- if(CollUtil.isNotEmpty(result.getData())){
|
|
|
- spaceArray.addAll(result.getData());
|
|
|
- }
|
|
|
}
|
|
|
- AdmResponse admResponse = new AdmResponse();
|
|
|
- admResponse.setContent(spaceArray);
|
|
|
- admResponse.setTotal(spaceArray.size()*1l);
|
|
|
- admResponse.setPageSize(request.getPageSize());
|
|
|
- admResponse.setPageNumber(request.getPageNumber());
|
|
|
- admResponse.setResult(DmpResult.SUCCESS);
|
|
|
- admResponse.setMessage("");
|
|
|
- return admResponse;
|
|
|
- }
|
|
|
|
|
|
- /**
|
|
|
- * 根据信息点查询空间
|
|
|
- * @param context
|
|
|
- * @param spaceArray
|
|
|
- * @param zoneTypeList
|
|
|
- * @param objFrom flooIds / bulidingIds
|
|
|
- * @param relCode
|
|
|
- */
|
|
|
- private void querySpaceByFl(QueryCriteria dmpRequest, InstanceUrlParam context, List spaceArray, Set<String> zoneTypeList, String objFrom, String relCode){
|
|
|
- QueryCriteria queryCriteria = ensureQueryCommParm(dmpRequest,context, zoneTypeList, AdmSpace.OBJ_TYPE);
|
|
|
- addRelationTo(queryCriteria,objFrom,relCode);
|
|
|
- DmpResult<JSONArray> dmpResult = queryObj(context, queryCriteria);
|
|
|
- if(CollUtil.isNotEmpty(dmpResult.getData())){
|
|
|
- spaceArray.addAll(dmpResult.getData());
|
|
|
- }
|
|
|
+ AdmResponse response = doQuery(AdmContextUtil.toDmpContext(), admQueryCriteria, AdmSpace.class);
|
|
|
+ // 空间需要补充分类名称属性
|
|
|
+ equipmentService.ensureSpecialValues(context, (List<AdmEquipment>) response.getContent());
|
|
|
+ return response;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
@Override
|
|
|
public List<AdmSpace> querySpaceInShaft(InstanceUrlParam context, String shaftId, String spaceType) {
|
|
|
AdmQueryCriteria request = new AdmQueryCriteria();
|