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