From e4d07ab792f39b6dd8172de870119969d6aa1ecb Mon Sep 17 00:00:00 2001 From: "liang.chao" <1360241448@qq.com> Date: Fri, 1 Aug 2025 15:49:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- water-design-const/pom.xml | 47 +++++++- .../controller/utils/DxfClient.java | 2 +- .../controller/water/ModelController.java | 19 ++-- .../controller/water/ProjectController.java | 25 ++--- .../waterdesign/domain/ProjectSelect.java | 3 + .../waterdesign/service/ModelService.java | 6 +- .../service/impl/ModelServiceImpl.java | 100 ++++++++++++++++-- .../src/main/resources/mapper/ModelMapper.xml | 19 ++-- .../main/resources/mapper/ProjectMapper.xml | 10 +- 9 files changed, 188 insertions(+), 43 deletions(-) diff --git a/water-design-const/pom.xml b/water-design-const/pom.xml index bf58669..f498e19 100644 --- a/water-design-const/pom.xml +++ b/water-design-const/pom.xml @@ -77,8 +77,53 @@ jackson-databind - + + org.geotools + gt-main + 25.0 + + + org.geotools + gt-epsg-hsql + 25.0 + + + org.locationtech.proj4j + proj4j + 1.1.3 + + + + org.geotools + gt-referencing + 25.0 + + + org.locationtech.jts + jts-core + 1.18.2 + + + + + + aliyun + https://maven.aliyun.com/repository/public + + + + osgeo + OSGeo Release Repository + https://repo.osgeo.org/repository/release/ + + false + + + true + + + diff --git a/water-design-const/src/main/java/com/bonus/waterdesign/controller/utils/DxfClient.java b/water-design-const/src/main/java/com/bonus/waterdesign/controller/utils/DxfClient.java index aa19549..056b642 100644 --- a/water-design-const/src/main/java/com/bonus/waterdesign/controller/utils/DxfClient.java +++ b/water-design-const/src/main/java/com/bonus/waterdesign/controller/utils/DxfClient.java @@ -39,7 +39,7 @@ public class DxfClient { // File dxfFile = new File("F:\\workFile\\fangliang\\中期测试例241220.dxf"); // 请替换为你的 DXF 文件路径 File dxfFile = new File(url); // 请替换为你的 DXF 文件路径 // 测试:获取图层信息 - System.out.println("📌 正在获取图层信息..."); + System.out.println("正在获取图层信息..."); String layerJson = getLayers(dxfFile); System.out.println("图层信息返回结果:"); return layerJson; diff --git a/water-design-const/src/main/java/com/bonus/waterdesign/controller/water/ModelController.java b/water-design-const/src/main/java/com/bonus/waterdesign/controller/water/ModelController.java index ae4dfa6..1e14533 100644 --- a/water-design-const/src/main/java/com/bonus/waterdesign/controller/water/ModelController.java +++ b/water-design-const/src/main/java/com/bonus/waterdesign/controller/water/ModelController.java @@ -6,6 +6,8 @@ import com.bonus.common.core.page.TableDataInfo; import com.bonus.common.utils.StringUtils; import com.bonus.waterdesign.domain.*; import com.bonus.waterdesign.service.ModelService; +import org.opengis.referencing.FactoryException; +import org.opengis.referencing.operation.TransformException; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; @@ -26,34 +28,33 @@ public class ModelController extends BaseController { /** * 获取模型列表 */ - // @PreAuthorize("@ss.hasPermi('model:list')")7 + @PreAuthorize("@ss.hasPermi('model:list')") @GetMapping("/list") public TableDataInfo list(ProjectVo model) { - List list = modelService.list(model); + List list = modelService.list(model); return getDataTable(list); } - /** + /** * 新增模型 */ @PostMapping("/addModel") - public AjaxResult addModel(@RequestBody Model model) - { - return toAjax(modelService.addModel(model)); + public AjaxResult addModel(@RequestBody Model model) { + return toAjax(modelService.addModel(model)); } - @PostMapping("/add") public AjaxResult add(@RequestBody PeojectNodes node) { return toAjax(modelService.add(node)); } + @PostMapping("/openView") - public AjaxResult openView(@RequestBody PeojectNodes node) { + public AjaxResult openView(@RequestBody PeojectNodes node) throws FactoryException, TransformException { //获取所有的节点信息 - List list =modelService.openView(node); + List list = modelService.openView(node); //返回list信息给前台 return AjaxResult.success(list); diff --git a/water-design-const/src/main/java/com/bonus/waterdesign/controller/water/ProjectController.java b/water-design-const/src/main/java/com/bonus/waterdesign/controller/water/ProjectController.java index fa1acf8..8d1438c 100644 --- a/water-design-const/src/main/java/com/bonus/waterdesign/controller/water/ProjectController.java +++ b/water-design-const/src/main/java/com/bonus/waterdesign/controller/water/ProjectController.java @@ -32,10 +32,11 @@ public class ProjectController extends BaseController { /** * 获取项目列表 */ - @PreAuthorize("@ss.hasPermi('project:list')") +// @PreAuthorize("@ss.hasPermi('project:list')") @GetMapping("/list") public TableDataInfo list(Project project) { startPage(); + project.setCreateBy(getUserId().toString()); List list = projectService.selectProjectList(project); return getDataTable(list); } @@ -43,7 +44,7 @@ public class ProjectController extends BaseController { /** * 获取项目下拉框 */ - @PreAuthorize("@ss.hasPermi('project:list')") +// @PreAuthorize("@ss.hasPermi('project:list')") @GetMapping("/SelectList") public AjaxResult SelectList(ProjectSelect projectSelect) { List list = projectService.selectProjectList1(projectSelect); @@ -51,7 +52,7 @@ public class ProjectController extends BaseController { } @Log(title = "项目管理", businessType = BusinessType.EXPORT) - @PreAuthorize("@ss.hasPermi('project:export')") +// @PreAuthorize("@ss.hasPermi('project:export')") @PostMapping("/export") public void export(HttpServletResponse response, Project post) { List list = projectService.selectProjectList(post); @@ -62,7 +63,7 @@ public class ProjectController extends BaseController { /** * 根据岗位编号获取详细信息 */ - @PreAuthorize("@ss.hasPermi('project:query')") +// @PreAuthorize("@ss.hasPermi('project:query')") @GetMapping(value = "/{proId}") public AjaxResult getInfo(@PathVariable Long proId) { return success(projectService.selectProjectById(proId)); @@ -71,35 +72,35 @@ public class ProjectController extends BaseController { /** * 新增项目 */ - @PreAuthorize("@ss.hasPermi('project:add')") +// @PreAuthorize("@ss.hasPermi('project:add')") @Log(title = "项目管理", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@Validated @RequestBody Project project) { if (!projectService.checkProjectNameUnique(project)) { return error("新增项目'" + project.getProName() + "'失败,项目名称已存在"); } - project.setCreateBy(getUsername()); + project.setCreateBy(getUserId().toString()); return toAjax(projectService.insertProject(project)); } /** * 修改项目 */ - @PreAuthorize("@ss.hasPermi('project:edit')") +// @PreAuthorize("@ss.hasPermi('project:edit')") @Log(title = "项目管理", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@Validated @RequestBody Project project) { if (!projectService.checkProjectNameUnique(project)) { return error("修改项目'" + project.getProName() + "'失败,项目名称已存在"); } - project.setUpdateBy(getUsername()); + project.setUpdateBy(getUserId().toString()); return toAjax(projectService.updateProject(project)); } /** * 删除项目 */ - @PreAuthorize("@ss.hasPermi('project:remove')") +// @PreAuthorize("@ss.hasPermi('project:remove')") @Log(title = "岗位管理", businessType = BusinessType.DELETE) @DeleteMapping("/{proId}") public AjaxResult remove(@PathVariable Long proId) { @@ -109,7 +110,7 @@ public class ProjectController extends BaseController { /** * 新增项目团队人员 */ - @PreAuthorize("@ss.hasPermi('projectUser:add')") +// @PreAuthorize("@ss.hasPermi('projectUser:add')") @Log(title = "项目管理", businessType = BusinessType.INSERT) @PostMapping("/addProjectUser") public AjaxResult addProjectUser(@Validated @RequestBody ProjectUser projectUser) { @@ -122,7 +123,7 @@ public class ProjectController extends BaseController { /** * 删除项目团队人员 */ - @PreAuthorize("@ss.hasPermi('projectUser:del')") +// @PreAuthorize("@ss.hasPermi('projectUser:del')") @Log(title = "项目管理", businessType = BusinessType.INSERT) @PostMapping("/delProjectUser") public AjaxResult delProjectUser(@Validated @RequestBody ProjectUser projectUser) { @@ -132,7 +133,7 @@ public class ProjectController extends BaseController { /** * 获取项目团队人员列表 */ - @PreAuthorize("@ss.hasPermi('projectUser:list')") +// @PreAuthorize("@ss.hasPermi('projectUser:list')") @GetMapping("/projectUserList") public TableDataInfo projectUserList(ProjectUser projectUser) { startPage(); diff --git a/water-design-const/src/main/java/com/bonus/waterdesign/domain/ProjectSelect.java b/water-design-const/src/main/java/com/bonus/waterdesign/domain/ProjectSelect.java index 120f6fc..0a8055b 100644 --- a/water-design-const/src/main/java/com/bonus/waterdesign/domain/ProjectSelect.java +++ b/water-design-const/src/main/java/com/bonus/waterdesign/domain/ProjectSelect.java @@ -18,4 +18,7 @@ public class ProjectSelect { private String id; private String name; + private Integer nodeCount; + private String lon; + private String lat; } diff --git a/water-design-const/src/main/java/com/bonus/waterdesign/service/ModelService.java b/water-design-const/src/main/java/com/bonus/waterdesign/service/ModelService.java index a7a58bd..553dd1b 100644 --- a/water-design-const/src/main/java/com/bonus/waterdesign/service/ModelService.java +++ b/water-design-const/src/main/java/com/bonus/waterdesign/service/ModelService.java @@ -1,11 +1,13 @@ package com.bonus.waterdesign.service; import com.bonus.waterdesign.domain.*; +import org.opengis.referencing.FactoryException; +import org.opengis.referencing.operation.TransformException; import java.util.List; public interface ModelService { - List list(ProjectVo model); + List list(ProjectVo model); int addModel(Model model); @@ -15,5 +17,5 @@ public interface ModelService { boolean update(PeojectNodes node); - List openView(PeojectNodes node); + List openView(PeojectNodes node) throws FactoryException, TransformException; } diff --git a/water-design-const/src/main/java/com/bonus/waterdesign/service/impl/ModelServiceImpl.java b/water-design-const/src/main/java/com/bonus/waterdesign/service/impl/ModelServiceImpl.java index 8a71906..e2835c2 100644 --- a/water-design-const/src/main/java/com/bonus/waterdesign/service/impl/ModelServiceImpl.java +++ b/water-design-const/src/main/java/com/bonus/waterdesign/service/impl/ModelServiceImpl.java @@ -1,17 +1,19 @@ package com.bonus.waterdesign.service.impl; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; import com.bonus.common.utils.StringUtils; import com.bonus.waterdesign.domain.*; import com.bonus.waterdesign.mapper.ModelMapper; import com.bonus.waterdesign.mapper.ProjectMapper; import com.bonus.waterdesign.service.ModelService; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.BeanUtils; +import org.locationtech.proj4j.*; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.*; -import java.util.stream.Collectors; /** * @author 马三炮 @@ -28,11 +30,12 @@ public class ModelServiceImpl implements ModelService { private ProjectMapper projectMapper; @Override - public List list(ProjectVo model) { + public List list(ProjectVo model) { List list = modelMapper.list(model); - List projectTrees = buildProjectTree(list); - return projectTrees; +// List projectTrees = buildProjectTree(list); + return list; } + public List buildProjectTree(List flatList) { // 1. 按项目分组 Map projectMap = new LinkedHashMap<>(); @@ -57,7 +60,7 @@ public class ModelServiceImpl implements ModelService { String projectId = vo.getProjectId(); if (!projectMap.containsKey(projectId)) { ProjectTree project = new ProjectTree(); - project.setNodeCount(vo.getNodeCount()+""); + project.setNodeCount(vo.getNodeCount() + ""); project.setProjectId(projectId); project.setLevelName(vo.getLevelName()); project.setModelUrl(vo.getModelUrl()); @@ -114,7 +117,7 @@ public class ModelServiceImpl implements ModelService { } } } - return i ; + return i; } @Override @@ -136,6 +139,87 @@ public class ModelServiceImpl implements ModelService { @Override public List openView(PeojectNodes node) { - return modelMapper.openView(node); + List cadData = modelMapper.openView(node); + try { + CRSFactory crsFactory = new CRSFactory(); + CoordinateTransformFactory ctFactory = new CoordinateTransformFactory(); + + // 定义坐标系(CGCS2000 GK Zone 20 → WGS84) + CoordinateReferenceSystem gkZone20 = crsFactory.createFromParameters("EPSG:4498", + "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"); + CoordinateReferenceSystem wgs84 = crsFactory.createFromName("EPSG:4326"); + + CoordinateTransform transform = ctFactory.createTransform(gkZone20, wgs84); + + for (CadData cadDatum : cadData) { + String geometry = cadDatum.getGeometry(); + JSONObject jsonObject = JSON.parseObject(geometry); + if (jsonObject.get("type").equals("LINE")) { + JSONArray startArray = jsonObject.getJSONArray("start"); + JSONArray endArray = jsonObject.getJSONArray("end"); + // 获取第一个元素(X坐标) + double x = startArray.getDouble(0); + // 获取第二个元素(Y坐标) + double y = startArray.getDouble(1); + // 获取第一个元素(X坐标) + double x1 = endArray.getDouble(0); + // 获取第二个元素(Y坐标) + double y1 = endArray.getDouble(1); + + // 原始坐标 + ProjCoordinate startGk = new ProjCoordinate(x, y); + ProjCoordinate endGk = new ProjCoordinate(x1, y1); + + // 转换 + ProjCoordinate startWgs84 = new ProjCoordinate(); + ProjCoordinate endWgs84 = new ProjCoordinate(); + transform.transform(startGk, startWgs84); + transform.transform(endGk, endWgs84); + + startArray.set(0, startWgs84.x); + startArray.set(1, startWgs84.y); + endArray.set(0, endWgs84.x); + endArray.set(1, endWgs84.y); + cadDatum.setGeometry(jsonObject.toString()); + } + if (jsonObject.get("type").equals("LWPOLYLINE")) { + JSONArray pointsArray = jsonObject.getJSONArray("points"); + for (int i = 0; i < pointsArray.size(); i++) { + JSONArray point = pointsArray.getJSONArray(i); + double x = point.getDouble(0); + double y = point.getDouble(1); + + // 原始坐标 + ProjCoordinate pointstGk = new ProjCoordinate(x, y); + + // 转换 + ProjCoordinate pointstGkWgs84 = new ProjCoordinate(); + transform.transform(pointstGk, pointstGkWgs84); + + point.set(0, pointstGkWgs84.x); + point.set(1, pointstGkWgs84.y); + } + cadDatum.setGeometry(jsonObject.toString()); + } + if (jsonObject.get("type").equals("CIRCLE")) { + JSONArray centerArray = jsonObject.getJSONArray("center"); + // 获取第一个元素(X坐标) + double x = centerArray.getDouble(0); + // 获取第二个元素(Y坐标) + double y = centerArray.getDouble(1); + // 原始坐标 + ProjCoordinate startGk = new ProjCoordinate(x, y); + ProjCoordinate startWgs84 = new ProjCoordinate(); + transform.transform(startGk, startWgs84); + centerArray.set(0, startWgs84.x); + centerArray.set(1, startWgs84.y); + cadDatum.setGeometry(jsonObject.toString()); + } + + } + } catch (Exception e) { + e.printStackTrace(); + } + return cadData; } } diff --git a/water-design-const/src/main/resources/mapper/ModelMapper.xml b/water-design-const/src/main/resources/mapper/ModelMapper.xml index ca4947f..941cdd6 100644 --- a/water-design-const/src/main/resources/mapper/ModelMapper.xml +++ b/water-design-const/src/main/resources/mapper/ModelMapper.xml @@ -39,6 +39,7 @@ node_name, level, node_count, + create_time VALUES @@ -48,6 +49,7 @@ #{proName}, #{level}, #{nodeCount}, + sysdate() @@ -108,22 +110,20 @@ p.id AS project_id, p.pro_name, p.level, + p.lon, + p.lat, c.config_name, - ( - SELECT COUNT(*) - FROM sys_level_node n - WHERE n.config_id = c.config_id - ) AS node_count, + c.level AS node_count, n.id as node_id, n.node_name, n.level AS node_level, n.node_count AS node_count_detail, m.model_url - FROM tb_project p - LEFT JOIN sys_level_config c ON p.level = c.config_id - LEFT JOIN project_node n ON p.id = n.project_id AND n.del_flag = '0' - LEFT JOIN ( + FROM project_node n + LEFT JOIN tb_project p ON p.id = n.project_id AND n.del_flag = '0' + LEFT JOIN sys_level_config c ON p.level = c.config_id + LEFT JOIN ( SELECT t1.* FROM tb_model t1 INNER JOIN ( @@ -137,6 +137,7 @@ AND p.id = #{projectId} + order by n.create_time + + AND tp.create_user = #{createBy} + AND pro_name like concat('%', #{proName}, '%') @@ -90,7 +95,10 @@