package com.persagy.proxy.adm.controller; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSONObject; 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.*; import com.persagy.proxy.adm.request.AdmCreateRequest; import com.persagy.proxy.adm.request.AdmQueryCriteria; import com.persagy.proxy.adm.request.AdmResponse; import com.persagy.proxy.adm.service.IAdmBuildingService; import com.persagy.proxy.adm.service.IAdmFloorService; 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.common.entity.RelationDTO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.ws.rs.QueryParam; import java.util.ArrayList; import java.util.List; /** * Adm 空间 API * @author lvxy * @date 2021/8/16 */ @RestController @RequestMapping("/object/zone") public class AdmSpaceController { @Autowired private IAdmSpaceService service; @Autowired private IAdmBuildingService buildingService; @Autowired private IAdmRelationService relationService; @Autowired private IAdmFloorService floorService; /** * 统计 * * @param request * @return * @throws Exception */ @PostMapping("/count") public AdmResponse count(@RequestBody AdmQueryCriteria request) throws Exception { request.setName("space"); request.setOnlyCount(true); return service.doQuery( AdmContextUtil.toDmpContext(), request, AdmSpace.class); } /** * 创建 * @param createRequest * @return * @throws Exception */ @PostMapping("/create") public AdmResponse create(@RequestBody AdmCreateRequest createRequest) throws Exception { List vos = CollUtil.newArrayList(createRequest.getContent()); String msg = null; for (AdmSpace admSpace : vos) { if(StrUtil.isEmpty(admSpace.getClassCode())){ msg = "classCode不可以为空!"; break; } } if(StrUtil.isNotEmpty(msg)){ vos = service.doInsertExt( AdmContextUtil.toDmpContext(), AdmSpace.class, vos); return AdmResponse.success(vos); }else{ return AdmResponse.failure(msg); } } /** * 根据ID删除 * @param vos * @return * @throws Exception */ @PostMapping("/delete") public AdmResponse delete( @RequestBody List vos) throws Exception { service.doDelete( AdmContextUtil.toDmpContext(), vos); QueryCriteria queryCriteria = new QueryCriteria(); vos.forEach(vo -> { /** 清除空间和建筑楼层的的数据 */ dealRelation(vo.getId(), queryCriteria,"Bd2Sp"); dealRelation(vo.getId(), queryCriteria,"Fl2Sp"); }); return AdmResponse.success(); } /** * 更新分区对象信息 * @param createRequest * @return * @throws Exception */ @PostMapping("/update") public AdmResponse update(@RequestBody AdmCreateRequest createRequest, @QueryParam("projectId") String projectId) throws Exception { List vos = CollUtil.newArrayList(createRequest.getContent()); vos = service.doUpdate( AdmContextUtil.toDmpContext(), AdmSpace.class, vos); return AdmResponse.success(vos); } /** * 查询 * * @param request * @return * @throws Exception */ @PostMapping("/query") public AdmResponse query(@RequestBody AdmDCSQueryRequest request) throws Exception { return service.doQuerySpaces( AdmContextUtil.toDmpContext(), request); } /** * 查询业务空间的建筑楼层,包含受影响的空间数量 * * @param request * @return * @throws Exception */ @PostMapping("/building-floor") public AdmResponse queryBuildingFloor(@RequestBody AdmQueryCriteria request) throws Exception { request.setName(AdmBuilding.OBJ_TYPE); AdmQueryCriteria criteriaFloor = new AdmQueryCriteria(); criteriaFloor.setName(AdmFloor.OBJ_TYPE); AdmQueryCriteria criteriaSpace = new AdmQueryCriteria(); criteriaSpace.setName("spaceList"); criteriaSpace.setFilters("state = 1"); criteriaFloor.setCascade(CollUtil.newArrayList(criteriaSpace)); request.setCascade(CollUtil.newArrayList(criteriaFloor)); AdmResponse response = buildingService.doQueryBuildingFloor( AdmContextUtil.toDmpContext(), request); List buildings = (List) response.getContent(); buildings.stream().forEach(building -> { if(CollUtil.isNotEmpty(building.getFloor())){ List floors = building.getFloor(); floors.stream().forEach(floor -> { if(CollUtil.isNotEmpty(floor.getSpaceList())){ floor.setCount(String.valueOf(floor.getSpaceList().size())); floor.setSpaceList(null); }else{ floor.setCount("0"); } }); } }); return response; } /** * 修改业务空间对象和建筑楼层的关系 * spaceId 业务空间id,id 楼层或建筑id,type 业务空间的类型 * @param voList * @return * @throws Exception */ @PostMapping("/update-fl-bd") public AdmResponse updateFlBd(@RequestBody List voList, @QueryParam("projectId") String projectId) throws Exception { if(CollUtil.isEmpty(voList)){ return AdmResponse.failure("不可以传入空数据"); } //TODO 循环删除 需要改为 批量删除 List RSpInBd_up = new ArrayList<>(); List RSpInFl_up = new ArrayList<>(); List space_up = new ArrayList<>(); QueryCriteria queryCriteria = new QueryCriteria(); voList.stream().forEach(requestData -> { String spaceId = requestData.getSpaceId(); String id = requestData.getId(); String type = requestData.getType();//classCode /** 清除空间和建筑楼层的的数据 */ dealRelation(spaceId, queryCriteria,"Bd2Sp"); dealRelation(spaceId, queryCriteria,"Fl2Sp"); if(StrUtil.isNotEmpty(id)){ if(id.startsWith("Fl") && StrUtil.isNotEmpty(spaceId)){ AdmQueryCriteria admQueryCriteria = new AdmQueryCriteria(); admQueryCriteria.setName(AdmFloor.OBJ_TYPE); AdmResponse admResponseFl = floorService.doQuery( AdmContextUtil.toDmpContext(), admQueryCriteria, AdmFloor.class); if(CollUtil.isNotEmpty(admResponseFl.getContent())){ AdmFloor floor = JSONUtil.toBean(admResponseFl.getContent().get(0).toString(), AdmFloor.class); if (floor!=null){ //更新关系 RelationDTO rBd_up = new RelationDTO(); rBd_up.setObjTo(spaceId); rBd_up.setRelCode("Bd2Sp"); rBd_up.setObjFrom(floor.getBuildingId()); RSpInBd_up.add(rBd_up); RelationDTO rFl_up = new RelationDTO(); rFl_up.setObjTo(spaceId); rFl_up.setRelCode("Fl2Sp"); rFl_up.setObjFrom(floor.getId()); RSpInFl_up.add(rFl_up); //更新实体 AdmSpace space = new AdmSpace(); space.setId(spaceId); space.setObjectType(AdmSpace.OBJ_TYPE); space.setZoneType(type); space.setClassCode(type); space.setBuildingId(floor.getBuildingId()); space.setFloorId(floor.getId()); space_up.add(space); } } }else if(id.startsWith("Bd")){ //更新关系 RelationDTO rBd_up = new RelationDTO(); rBd_up.setObjTo(spaceId); rBd_up.setRelCode("Bd2Sp"); rBd_up.setObjFrom(id); RSpInBd_up.add(rBd_up); //更新实体 AdmSpace space = new AdmSpace(); space.setId(spaceId); space.setObjectType(AdmSpace.OBJ_TYPE); space.setZoneType(type); space.setClassCode(type); space.setBuildingId(id); space.setFloorId(null); space_up.add(space); } } }); service.doUpdate( AdmContextUtil.toDmpContext(), AdmSpace.class, space_up); relationService.doSave( AdmContextUtil.toDmpContext(), RSpInBd_up); relationService.doSave( AdmContextUtil.toDmpContext(), RSpInFl_up); return AdmResponse.success(space_up); } /** * 更新分区对象信息-Outline * @param createRequest * @return * @throws Exception */ @PostMapping("/update-outline") public AdmResponse updateOutLine(@RequestBody AdmCreateRequest createRequest) throws Exception { List vos = CollUtil.newArrayList(createRequest.getContent()); vos = service.doUpdate( AdmContextUtil.toDmpContext(), AdmSpace.class, vos); //TODO 更新计算关系ZoneSpaceBaseService.upDateOutline return AdmResponse.success(vos); } /** * 查询空间信息-outline 级联查询:建筑(building),楼层(floor),空间类型(objectType) * * @param request * @return * @throws Exception */ @PostMapping("/query-outline") public AdmResponse queryOutline(@RequestBody AdmDCSQueryRequest request) throws Exception { request.setName(AdmSpace.OBJ_TYPE); request.setProjection(null); List list = new ArrayList<>(); list.add("id"); list.add("name"); list.add("localId"); list.add("localName"); list.add("outline"); list.add("floorSequenceId"); list.add("modelId"); list.add("infos"); list.add("properties"); request.setProjection(list); return service.doQuerySpaces( AdmContextUtil.toDmpContext(), request); } /** * 获取项目下已有的空间类型 * * @return * @throws Exception */ @PostMapping("/space-type") public List querySpaceType() throws Exception { return service.doQuerySpaceTypes( AdmContextUtil.toDmpContext()); } /** * 查询业务空间所有类型 * * @param request * @return * @throws Exception */ @PostMapping("/type") public AdmResponse queryType(@RequestBody AdmDCSQueryRequest request) throws Exception { return service.doQueryType( AdmContextUtil.toDmpContext(), request); } /** * 上传EXCEL 识别镜头信息点 * * @param request * @return * @throws Exception */ @PostMapping("/import") public AdmResponse importExcel(@RequestBody AdmQueryCriteria request) throws Exception { request.setName(AdmSpace.OBJ_TYPE); return service.doQuery( AdmContextUtil.toDmpContext(), request, AdmSpace.class); } private void dealRelation(String spaceId, QueryCriteria queryCriteria, String relCode){ ObjectNode rBd = JsonNodeFactory.instance.objectNode(); rBd.put("objTo",spaceId); rBd.put("relCode",relCode); queryCriteria.setCriteria(rBd); relationService.doDelete( AdmContextUtil.toDmpContext(), queryCriteria); } }