diff --git a/esua-epdc/epdc-admin/epdc-admin-client/pom.xml b/esua-epdc/epdc-admin/epdc-admin-client/pom.xml
index 9bd4b1f82..1c19748c4 100644
--- a/esua-epdc/epdc-admin/epdc-admin-client/pom.xml
+++ b/esua-epdc/epdc-admin/epdc-admin-client/pom.xml
@@ -33,6 +33,10 @@
springfox-swagger-ui
${swagger.version}
+
+ org.springframework.data
+ spring-data-mongodb
+
diff --git a/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/PolyDTO.java b/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/PolyDTO.java
new file mode 100644
index 000000000..c7822c026
--- /dev/null
+++ b/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/PolyDTO.java
@@ -0,0 +1,26 @@
+package com.elink.esua.epdc.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.mongodb.core.geo.GeoJsonPolygon;
+import org.springframework.data.mongodb.core.index.GeoSpatialIndexType;
+import org.springframework.data.mongodb.core.index.GeoSpatialIndexed;
+
+/**
+ * @author zhy
+ * @date 2022/12/12 16:30
+ */
+@NoArgsConstructor
+@Data
+public class PolyDTO {
+
+ private String gridName;
+ private String gridId;
+ /**
+ * mongodb中search的名称就是这个
+ */
+ @JsonProperty("polygons")
+ @GeoSpatialIndexed(type = GeoSpatialIndexType.GEO_2DSPHERE)
+ private GeoJsonPolygon polygons;
+}
diff --git a/esua-epdc/epdc-admin/epdc-admin-server/pom.xml b/esua-epdc/epdc-admin/epdc-admin-server/pom.xml
index a4bd49deb..0b0159861 100644
--- a/esua-epdc/epdc-admin/epdc-admin-server/pom.xml
+++ b/esua-epdc/epdc-admin/epdc-admin-server/pom.xml
@@ -97,6 +97,11 @@
1.0.0
compile
+
+
+ org.springframework.boot
+ spring-boot-starter-data-mongodb
+
diff --git a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/controller/SysDeptController.java b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/controller/SysDeptController.java
index ecad63c8b..db8c21b50 100644
--- a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/controller/SysDeptController.java
+++ b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/controller/SysDeptController.java
@@ -66,7 +66,6 @@ public class SysDeptController {
@Resource
private CustomerGridDao customerGridDao;
-
@GetMapping("list")
@ApiOperation("列表")
public Result> list() {
diff --git a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysDeptServiceImpl.java b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysDeptServiceImpl.java
index f4d62f96d..3ab6cc5d2 100644
--- a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysDeptServiceImpl.java
+++ b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysDeptServiceImpl.java
@@ -56,6 +56,12 @@ import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.geo.Point;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
+import org.springframework.data.mongodb.core.geo.GeoJsonPolygon;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -112,6 +118,9 @@ public class SysDeptServiceImpl extends BaseServiceImpl {
-
+ List points = new ArrayList<>();
JSONObject feature = JSON.parseObject(item.toString());
JSONObject attributes = JSON.parseObject(feature.get("attributes").toString());
String gridName = attributes.get("网格名称").toString();
@@ -1426,7 +1435,10 @@ public class SysDeptServiceImpl extends BaseServiceImpl points) {
+ PolyDTO polyDTO = new PolyDTO();
+ polyDTO.setGridId(gridId);
+ polyDTO.setGridName(gridName);
+ GeoJsonPolygon geoJsonPolygon = new GeoJsonPolygon(points);
+ polyDTO.setPolygons(geoJsonPolygon);
+ // 我们将多个对象放到同一个容器polygons中,每个对象会生成自己的id,需要注意不要重复保存,否则会产生覆盖的区域
+ // 如果包含了主键,insert会提示主键冲突,而save会进行更新(设置主键需要使用@Id注解,否则自动生成)
+ // insert可以批量处理,效率高,save只能逐个处理
+ mongoTemplate.save(polyDTO, "polygons");
+ }
+
@Override
public GisGridDTO getCoordinate(GisFormDTO formDTO) {
- Map urlParams = new HashMap<>();
- String geometryStr = "point(" + formDTO.getLongitude() + "," + formDTO.getLatitude() + ")";
- urlParams.put("geometry", geometryStr);
- String resultStr = httpUtil.getGisStr(urlParams);
- JSONObject toResult = JSON.parseObject(resultStr);
- JSONArray jsonArray = JSON.parseArray(toResult.get("features").toString());
+ Query query = new Query(Criteria.where("polygons").
+ intersects(new GeoJsonPoint(Double.parseDouble(formDTO.getLongitude()), Double.parseDouble(formDTO.getLatitude()))));
+ // 如果带了collectionName,MongoTemplate就查询collectionName集合中的记录;
+ // 如果没带collectionName,MongoTemplate就会到缓存上下文mappingContext中根据classname获取集合名,
+ // 如果没有获取到,就会新建一个根据classname生成的集合名(首字母小写),这样就可能和mongo中的集合名不一致,导致查询不到结果。
+ List dbList = mongoTemplate.find(query, PolyDTO.class, "polygons");
- if (jsonArray.size() == NumConstant.ZERO) {
+ if (dbList.size() == NumConstant.ZERO) {
throw new RenException("该坐标不在任何网格内,请重新选择");
- } else if (jsonArray.size() > NumConstant.ONE) {
+ } else if (dbList.size() > NumConstant.ONE) {
throw new RenException("该坐标处于多个网格交界处,请重新选择");
} else {
- JSONObject feature = JSON.parseObject(jsonArray.get(0).toString());
- JSONObject attributes = JSON.parseObject(feature.get("attributes").toString());
- String gridName = attributes.get("网格名称").toString();
- String gridId = attributes.get("网格编码").toString();
+ PolyDTO polyDTO = dbList.get(0);
+ String gridName = polyDTO.getGridName();
+ String gridId = polyDTO.getGridId();
GisGridDTO gisGridDTO = gisGridService.getByGisGridId(gridId);
if (gisGridDTO == null) {
diff --git a/esua-epdc/epdc-admin/epdc-admin-server/src/main/resources/application-prod.yml b/esua-epdc/epdc-admin/epdc-admin-server/src/main/resources/application-prod.yml
index 5afdbc86a..7b496ab42 100644
--- a/esua-epdc/epdc-admin/epdc-admin-server/src/main/resources/application-prod.yml
+++ b/esua-epdc/epdc-admin/epdc-admin-server/src/main/resources/application-prod.yml
@@ -34,3 +34,11 @@ spring:
log-slow-sql: true
slow-sql-millis: 1000
merge-sql: false
+ data:
+ mongodb:
+ host: dds-m5e31db1fcc742341.mongodb.rds.aliyuncs.com
+ port: 3717
+ username: root
+ password: 'Elink833066'
+ database: gis
+ authentication-database: admin
diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/resources/application.yml b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/resources/application.yml
index 9021f2ffa..5a4698be1 100644
--- a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/resources/application.yml
+++ b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/resources/application.yml
@@ -61,11 +61,12 @@ spring:
password: @spring.datasource.druid.password@
data:
mongodb:
- host: localhost
- port: 27017
- username: test
- password: '123'
- database: test
+ host: dds-m5e31db1fcc742341.mongodb.rds.aliyuncs.com
+ port: 3717
+ username: root
+ password: 'Elink833066'
+ database: gis
+ authentication-database: admin
feign:
hystrix: