package com.siwei.apply.controller; import com.siwei.apply.domain.Project; import com.siwei.apply.service.NodeLandService; import com.siwei.apply.service.ProjectService; import com.siwei.common.core.domain.R; import com.siwei.common.core.web.controller.BaseController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; import java.util.LinkedHashMap; import java.util.Map; /** * 节点地块关联控制器 */ @RestController @RequestMapping("/nodeland") public class NodeLandController extends BaseController { @Autowired private NodeLandService nodeLandService; @Autowired private ProjectService projectService; /** * 根据nodeId和geomDbId创建节点地块关联记录 * * @param requestBody 包含nodeId和geomDbId的请求体 * @return 创建结果 */ @PostMapping("/create") public R> createNodeLand(@RequestBody Map requestBody) { try { String nodeId = requestBody.get("nodeId"); String geomDbId = requestBody.get("geomDbId"); if (nodeId == null || nodeId.trim().isEmpty()) { return R.fail("nodeId不能为空"); } if (geomDbId == null || geomDbId.trim().isEmpty()) { return R.fail("geomDbId不能为空"); } nodeLandService.createNodeLand(nodeId, geomDbId); return R.ok(); } catch (Exception e) { logger.error("创建节点地块关联记录异常", e); return R.fail("创建节点地块关联记录异常:" + e.getMessage()); } } /** * 根据nodeId查询地块几何信息 * * @param nodeId 节点ID * @return 地块几何信息,包含geom_db_id和并集的外边框、中心点 */ @GetMapping("/geom/{nodeId}") public R> getGeomByNodeId(@PathVariable String nodeId) { try { if (nodeId == null || nodeId.trim().isEmpty()) { return R.fail("nodeId不能为空"); } Map geomInfo = nodeLandService.getGeomByNodeId(nodeId); return R.ok(geomInfo); } catch (Exception e) { logger.error("查询节点地块几何信息异常", e); return R.fail("查询节点地块几何信息异常:" + e.getMessage()); } } /** * 根据项目ID与节点表名获取地块几何信息 * 先查项目流程得到nodeId,再查几何信息 */ @GetMapping("/node/geom") public R> getGeomByProjectAndNodeTable(@RequestParam String projectId, @RequestParam String nodeTableName) { try { if (projectId == null || projectId.trim().isEmpty()) { return R.fail("projectId不能为空"); } if (nodeTableName == null || nodeTableName.trim().isEmpty()) { return R.fail("nodeTableName不能为空"); } Map geomInfo = nodeLandService.getGeomByProjectAndNodeTable(projectId, nodeTableName); return R.ok(geomInfo); } catch (Exception e) { logger.error("根据项目与节点表名查询地块几何信息异常", e); return R.fail("查询异常:" + e.getMessage()); } } /** * 根据nodeId删除节点地块关联记录 * * @param nodeId 节点ID * @return 删除结果 */ @DeleteMapping("/{nodeId}") public R> deleteByNodeId(@PathVariable String nodeId) { try { if (nodeId == null || nodeId.trim().isEmpty()) { return R.fail("nodeId不能为空"); } nodeLandService.deleteByNodeId(nodeId); return R.ok(); } catch (Exception e) { logger.error("删除节点地块关联记录异常", e); return R.fail("删除节点地块关联记录异常:" + e.getMessage()); } } @GetMapping("/projectGeomInfo") public R> getProjectGeomInfo(@RequestParam String projectId, @RequestParam String nodeId, @RequestParam String geomId) { try { if (projectId == null || projectId.trim().isEmpty()) { return R.fail(502,"projectId不能为空"); } if (geomId == null || geomId.trim().isEmpty()) { return R.fail(502,"geomId不能为空"); } Map projectGeomInfo = new LinkedHashMap<>(); Project project = projectService.get(projectId); Map geomInfo = nodeLandService.selectGeomById(geomId); projectGeomInfo.put("projectId", project.getId()); projectGeomInfo.put("name", project.getName()); projectGeomInfo.put("code", project.getCode()); projectGeomInfo.put("immobileCode", project.getId()); projectGeomInfo.put("businessCode", project.getId()); projectGeomInfo.put("area", String.format("%.1f", geomInfo.get("geom_area"))); return R.ok(projectGeomInfo); } catch (Exception e) { logger.error("根据项目与节点表名查询地块几何信息异常", e); return R.fail("查询异常:" + e.getMessage()); } } }