From 6a55e75af9f550d6e68ea931b51b636acc973bb8 Mon Sep 17 00:00:00 2001 From: zhangyuan Date: Mon, 12 Dec 2022 16:03:14 +0800 Subject: [PATCH] mongo --- .../epdc-events/epdc-events-client/pom.xml | 4 + .../com/elink/esua/epdc/dto/GEOPolygon.java | 15 +++ .../com/elink/esua/epdc/dto/LocalDTO.java | 25 ++++ .../java/com/elink/esua/epdc/dto/Poly.java | 16 +++ .../com/elink/esua/epdc/dto/PolygonsDTO.java | 16 +++ .../com/elink/esua/epdc/dto/SiteArea.java | 14 +++ .../item/controller/ItemController.java | 118 +++++++++++++++++- 7 files changed, 202 insertions(+), 6 deletions(-) create mode 100644 esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/GEOPolygon.java create mode 100644 esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/LocalDTO.java create mode 100644 esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/Poly.java create mode 100644 esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/PolygonsDTO.java create mode 100644 esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/SiteArea.java diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-client/pom.xml b/esua-epdc/epdc-module/epdc-events/epdc-events-client/pom.xml index 28c9170a4..e4f1e4fdc 100644 --- a/esua-epdc/epdc-module/epdc-events/epdc-events-client/pom.xml +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-client/pom.xml @@ -44,6 +44,10 @@ epdc-message-client 1.0.0 + + org.springframework.data + spring-data-mongodb + diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/GEOPolygon.java b/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/GEOPolygon.java new file mode 100644 index 000000000..d19b49925 --- /dev/null +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/GEOPolygon.java @@ -0,0 +1,15 @@ +package com.elink.esua.epdc.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@NoArgsConstructor +@Data +public class GEOPolygon { + @JsonProperty("polygons") + private PolygonsDTO polygons; + +} diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/LocalDTO.java b/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/LocalDTO.java new file mode 100644 index 000000000..02e9d9010 --- /dev/null +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/LocalDTO.java @@ -0,0 +1,25 @@ +package com.elink.esua.epdc.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@NoArgsConstructor +@Data +public class LocalDTO { + @JsonProperty("name") + private String name; + @JsonProperty("loc") + private LocDTO loc; + + @NoArgsConstructor + @Data + public static class LocDTO { + @JsonProperty("type") + private String type; + @JsonProperty("coordinates") + private List>> coordinates; + } +} diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/Poly.java b/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/Poly.java new file mode 100644 index 000000000..9184881a8 --- /dev/null +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/Poly.java @@ -0,0 +1,16 @@ +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; + +@NoArgsConstructor +@Data +public class Poly { + @JsonProperty("polygons") + @GeoSpatialIndexed(type = GeoSpatialIndexType.GEO_2DSPHERE) + private GeoJsonPolygon polygons; +} diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/PolygonsDTO.java b/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/PolygonsDTO.java new file mode 100644 index 000000000..d7dc8c781 --- /dev/null +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/PolygonsDTO.java @@ -0,0 +1,16 @@ +package com.elink.esua.epdc.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@NoArgsConstructor +@Data +public class PolygonsDTO { + @JsonProperty("type") + private String type; + @JsonProperty("coordinates") + private List>> coordinates; +} diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/SiteArea.java b/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/SiteArea.java new file mode 100644 index 000000000..d2c844119 --- /dev/null +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/SiteArea.java @@ -0,0 +1,14 @@ +package com.elink.esua.epdc.dto; + +import lombok.Data; +import org.springframework.data.mongodb.core.geo.GeoJsonPolygon; +import org.springframework.data.mongodb.core.index.GeoSpatialIndexType; +import org.springframework.data.mongodb.core.index.GeoSpatialIndexed; + +@Data +public class SiteArea { + @GeoSpatialIndexed(type = GeoSpatialIndexType.GEO_2DSPHERE) + private GeoJsonPolygon geoJsonPolygon; + +} + diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/controller/ItemController.java b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/controller/ItemController.java index 650300277..c133d6762 100755 --- a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/controller/ItemController.java +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/item/controller/ItemController.java @@ -17,6 +17,7 @@ package com.elink.esua.epdc.modules.item.controller; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.elink.esua.epdc.commons.tools.annotation.MaskResponse; import com.elink.esua.epdc.commons.tools.page.PageData; @@ -27,6 +28,10 @@ import com.elink.esua.epdc.commons.tools.validator.ValidatorUtils; import com.elink.esua.epdc.commons.tools.validator.group.AddGroup; import com.elink.esua.epdc.commons.tools.validator.group.DefaultGroup; import com.elink.esua.epdc.commons.tools.validator.group.UpdateGroup; +import com.elink.esua.epdc.dto.GEOPolygon; +import com.elink.esua.epdc.dto.LocalDTO; +import com.elink.esua.epdc.dto.Poly; +import com.elink.esua.epdc.dto.PolygonsDTO; import com.elink.esua.epdc.dto.events.EpdcEventsCommentsDTO; import com.elink.esua.epdc.dto.events.form.EventDeleteCommentsFormDTO; import com.elink.esua.epdc.dto.form.KpiMetaDataOfEventsFormDTO; @@ -42,12 +47,21 @@ import com.elink.esua.epdc.modules.item.excel.StayItemExcel; import com.elink.esua.epdc.modules.item.redis.ItemAutoProcessRedis; import com.elink.esua.epdc.modules.item.service.ItemService; import com.elink.esua.epdc.modules.item.service.ItemTimeoutService; +import com.mongodb.client.model.geojson.MultiPolygon; +import com.mongodb.client.model.geojson.Polygon; import lombok.extern.slf4j.Slf4j; +import net.coobird.thumbnailator.geometry.Coordinate; 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.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -89,14 +103,106 @@ public class ItemController { } @GetMapping("test/test") - public Result test() { -// 保存对象到mongodb - ItemPendingHandleDTO user = new ItemPendingHandleDTO(); - user.setId("1123123"); - mongoTemplate.save(user); - return new Result(); + public List test() { + + +// mongoTemplate.save(loc); +// String[] polygonPointArr=new String[]{"113.314882, 23.163055","113.355845, 23.167042","113.370289, 23.149564","113.356779, 23.129758","113.338238, 23.13913","113.330979, 23.124706","113.313588, 23.140858","113.323865, 23.158204","113.314882, 23.163055"}; + + LocalDTO.LocDTO test2 =test2(); + + String jsonObject = JSON.toJSONString(test2); + Query query = new Query(); + PolygonsDTO geoPolygon = JSONObject.parseObject(jsonObject, PolygonsDTO.class); + List points = new ArrayList<>(); + List>> coordinates = geoPolygon.getCoordinates(); + List> coordinate = coordinates.get(0); + for (List doubles : coordinate) { + Point point = new Point(doubles.get(0), doubles.get(1)); + points.add(point); + } + GeoJsonPolygon geoJsonPolygon = new GeoJsonPolygon(points); + query.addCriteria(Criteria.where("loc").intersects(geoJsonPolygon)); + List list = mongoTemplate.find(query, JSONObject.class, "polygonCol"); + return list; + + } + + private LocalDTO.LocDTO test2 (){ + // 保存对象到mongodb + LocalDTO loc = new LocalDTO(); + + loc.setName("1123123"); + LocalDTO.LocDTO locDTO = new LocalDTO.LocDTO(); + locDTO.setType("Polygon"); + + List>> a = new ArrayList<>(); + List> b = new ArrayList<>(); + List c = new ArrayList<>(); + c.add(2); + c.add(2); + List d = new ArrayList<>(); + d.add(2); + d.add(4); + List e = new ArrayList<>(); + e.add(5); + e.add(1); + List f = new ArrayList<>(); + f.add(2); + f.add(2); + b.add(c); + b.add(d); + b.add(e); + b.add(f); + a.add(b); + locDTO.setCoordinates(a); + + + loc.setLoc(locDTO); + return locDTO; + } + + @GetMapping("test/test4") + public List test4() { + Poly poly =new Poly(); + List points = new ArrayList<>(); + Point a1 = new Point(113.314882,23.163055); + Point a2 = new Point(113.355845,23.167042); + Point a3 = new Point(113.370289, 23.149564); + Point a4 = new Point(113.356779,23.129758); + Point a5 = new Point(113.338238,23.13913); + Point a6 = new Point(113.330979,23.124706); + Point a7 = new Point(113.313588,23.140858); + Point a8 = new Point(113.323865,23.158204); + Point a9 = new Point(113.314882,23.163055); + points.add(a1); + points.add(a2); + points.add(a3); + points.add(a4); + points.add(a5); + points.add(a6); + points.add(a7); + points.add(a8); + points.add(a9); + + GeoJsonPolygon geoJsonPolygon = new GeoJsonPolygon(points); + poly.setPolygons(geoJsonPolygon); + mongoTemplate.save(poly,"polygons"); + + + List dbList = mongoTemplate.findAll(Poly.class,"polygons"); + return dbList; + } + + @GetMapping("test/test3") + public List test3() { + Query query = new Query(Criteria.where("coordinates"). + intersects(new GeoJsonPoint(113.330908, 23.155678))); + List dbList = mongoTemplate.find(query, Poly.class,"polygons"); + return dbList; } + /** * 初审项目列表 *