diff --git a/pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/controller/ComnCoordinateController.java b/pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/controller/ComnCoordinateController.java index c36313f2..edda03b1 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/controller/ComnCoordinateController.java +++ b/pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/controller/ComnCoordinateController.java @@ -100,8 +100,6 @@ public class ComnCoordinateController { @Parameter(name="address", description = "하위행정구역을 검색할 주소", in = ParameterIn.QUERY, example = "서울특별시") String address){ - log.warn("address => {}", address); - SearchLowAddressRS result = null; try { result = comnCoordinateService.getLowAddress(address); @@ -121,4 +119,31 @@ public class ComnCoordinateController { return ResponseEntity.ok().body(new SuccessResponse<>(result)); } + /** + * 부서에 할당된 관제 바운더리 조회 + * @return + */ + @Operation(summary = "부서에 할당된 관제 바운더리 조회", description = "부서에 할당된 관제 바운더리 조회") + @GetMapping("/boundary") + public ResponseEntity getDepartmentBoundary(){ + SearchDepartmentBoundaryRS result = null; + try { + result = comnCoordinateService.getDepartmentBoundary(); + } catch (CustomException e) { + Map resultMap = new HashMap<>(); + log.error("IGNORE : ", e); + resultMap.put("result", false); + resultMap.put("errorCode", e.getErrorCode()); + resultMap.put("errorMessage", e.getMessage()); + return ResponseEntity.ok().body(new SuccessResponse<>(resultMap)); + } catch (Exception e) { + log.error("IGNORE : ", e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(new ErrorResponse("Server Error", "-1")); + } + + return ResponseEntity.ok().body(new SuccessResponse<>(result)); + } + + } diff --git a/pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/model/LocationCdAddressModel.java b/pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/model/LocationCdAddressModel.java new file mode 100644 index 00000000..0f83e311 --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/model/LocationCdAddressModel.java @@ -0,0 +1,11 @@ +package com.palnet.biz.api.comn.coordinate.model; + +import lombok.Data; + +@Data +public class LocationCdAddressModel { + + private String admCd; + + private String address; +} diff --git a/pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/model/SearchDepartmentBoundaryRS.java b/pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/model/SearchDepartmentBoundaryRS.java new file mode 100644 index 00000000..e1856fb3 --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/model/SearchDepartmentBoundaryRS.java @@ -0,0 +1,20 @@ +package com.palnet.biz.api.comn.coordinate.model; + +import com.palnet.comn.utils.CoordUtils; +import lombok.Data; +import org.locationtech.jts.geom.Coordinate; + +import java.util.List; + +@Data +public class SearchDepartmentBoundaryRS { + + private List boundaryModels; + + @Data + public static class BoundaryModel{ + private String location; + + private List coordinates; + } +} diff --git a/pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/service/ComnCoordinateService.java b/pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/service/ComnCoordinateService.java index 3313b1a0..19ca91bf 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/service/ComnCoordinateService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/service/ComnCoordinateService.java @@ -6,6 +6,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; import com.palnet.biz.api.comn.coordinate.model.*; import com.palnet.biz.jpa.repository.flt.FltCptAuthAdmDistrictRelRepository; import com.palnet.comn.code.ErrorCode; @@ -32,6 +33,8 @@ public class ComnCoordinateService { private final FltCptAuthAdminDistrictBasQueryRepository fltCptAuthAdminDistrictBasQueryRepository; + private final JwtTokenUtil jwtTokenUtil; + public CompotentAuthorityRS getCompetentAuthority(CompotentAuthorityRQ rq){ @@ -139,4 +142,39 @@ public class ComnCoordinateService { } + /** + * 부서가 관제하는 바운더리 좌표 반환하는 코드 + * @return 부서에 해당하는 좌표 반환 + */ + public SearchDepartmentBoundaryRS getDepartmentBoundary() { + + String cptAuthCode = jwtTokenUtil.getCptAuthCodeByToken(); + + List addressList = fltCptAuthAdminDistrictBasQueryRepository.findAddressByCptAuthCode(cptAuthCode); + + log.warn("===> {}", addressList); + + List boundaryModels = new ArrayList<>(); + + for(LocationCdAddressModel model : addressList){ + try { + String scope = CoordUtils.getInstance().getScope(model.getAddress()); + List locationCoordinateModelList = CoordUtils.getInstance().getCoordinateByAddress(model.getAdmCd(), scope); + + SearchDepartmentBoundaryRS.BoundaryModel boundaryModel = new SearchDepartmentBoundaryRS.BoundaryModel(); + boundaryModel.setCoordinates(locationCoordinateModelList); + boundaryModel.setLocation(model.getAddress()); + + boundaryModels.add(boundaryModel); + } catch (CustomException e){ + log.error("FAIL INFO => {} : {}", model.getAddress(), model.getAdmCd()); + log.error("",e); + } + } + + SearchDepartmentBoundaryRS result = new SearchDepartmentBoundaryRS(); + result.setBoundaryModels(boundaryModels); + + return result; + } } diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltCptAuthAdminDistrictBasQueryRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltCptAuthAdminDistrictBasQueryRepository.java index 7d9a730e..1083a7b7 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltCptAuthAdminDistrictBasQueryRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltCptAuthAdminDistrictBasQueryRepository.java @@ -3,6 +3,7 @@ package com.palnet.biz.jpa.repository.flt; import java.util.List; import java.util.Map; +import com.palnet.biz.api.comn.coordinate.model.LocationCdAddressModel; import com.palnet.biz.jpa.entity.QComAdmDistrictBas; import com.querydsl.core.types.Projections; import com.querydsl.core.types.dsl.BooleanTemplate; @@ -37,18 +38,15 @@ public class FltCptAuthAdminDistrictBasQueryRepository { BooleanBuilder builder = new BooleanBuilder(); builder.and(qFltCptAuthAdmDistrictRel.id.ADM_CD.like(cd+"%")); - List result = query - .selectDistinct( - qFltCptAuthBas - ) - .from(qFltCptAuthAdmDistrictRel) - .leftJoin(qFltCptAuthBas) + return query + .selectDistinct( + qFltCptAuthBas + ) + .from(qFltCptAuthAdmDistrictRel) + .leftJoin(qFltCptAuthBas) .on(qFltCptAuthAdmDistrictRel.id.CPT_AUTH_CODE.eq(qFltCptAuthBas.cptAuthCode)) - .where(builder) - .fetch(); - - - return result; + .where(builder) + .fetch(); } public String findAdmCdByAddress(String address){ @@ -65,23 +63,31 @@ public class FltCptAuthAdminDistrictBasQueryRepository { .fetchOne(); } - public List findAdmCdByAddressAndRegexp(String address, List regexps){ - + public List findAddressByCptAuthCode(String cptAuthCode){ + QFltCptAuthBas qFltCptAuthBas = QFltCptAuthBas.fltCptAuthBas; + QFltCptAuthAdmDistrictRel qFltCptAuthAdmDistrictRel = QFltCptAuthAdmDistrictRel.fltCptAuthAdmDistrictRel; QComAdmDistrictBas qComAdmDistrictBas = QComAdmDistrictBas.comAdmDistrictBas; BooleanBuilder builder = new BooleanBuilder(); - for(String regexp: regexps){ - BooleanTemplate template = Expressions.booleanTemplate("{0} REGEXP {1}", qComAdmDistrictBas.admSectNm , Expressions.constant(regexp)); - builder.or(template); - } + builder.and(qFltCptAuthBas.cptAuthCode.eq(cptAuthCode)); - String sql = "SELECT LOWEST_ADM_SECT_NM " + - "FROM COM_ADM_DISTRICT_BAS " + - "WHERE " + builder.getValue().toString(); + return query + .select( + Projections.bean( + LocationCdAddressModel.class, + qComAdmDistrictBas.admCd.as("admCd"), + qComAdmDistrictBas.admSectNm.as("address") + ) + ) + .from(qFltCptAuthBas) + .leftJoin(qFltCptAuthAdmDistrictRel) + .on(qFltCptAuthBas.cptAuthCode.eq(qFltCptAuthAdmDistrictRel.id.CPT_AUTH_CODE)) + .leftJoin(qComAdmDistrictBas) + .on(qComAdmDistrictBas.admCd.eq(qFltCptAuthAdmDistrictRel.id.ADM_CD)) + .where(builder) + .fetch(); + } - Query nativeQuery = entityManager.createNativeQuery(sql); - return nativeQuery.getResultList(); - } } diff --git a/pav-server/src/main/java/com/palnet/comn/utils/CoordUtils.java b/pav-server/src/main/java/com/palnet/comn/utils/CoordUtils.java index a479fed9..0faf2639 100644 --- a/pav-server/src/main/java/com/palnet/comn/utils/CoordUtils.java +++ b/pav-server/src/main/java/com/palnet/comn/utils/CoordUtils.java @@ -203,11 +203,11 @@ public class CoordUtils { JSONObject obj = new JSONObject(); obj = parseGeoJson(polygon, coordinate); - + if(obj == null) return null; - + return obj; - + } public JSONObject getCoordinateGis(Coordinate coordinate, String depth) throws IOException, ParseException { @@ -282,55 +282,55 @@ public class CoordUtils { JSONObject result = null; Double standard = 10000000.0; - + for(int i=0; i coordinates = (List) geometry.get("coordinates"); - + for(int k = 0; k< coordinates.size(); k++) { - + List polygonPaths = new ArrayList<>(); - + for(Object coords : coordinates.get(k)) { - + for(int j = 0; j<((JSONArray)coords).size(); j++) { - + Object coord = ((JSONArray) coords).get(j); - + Object x = ((JSONArray) coord).get(0); Object y = ((JSONArray) coord).get(1); - + Double lon = y instanceof Double ? (Double) y : Double.valueOf((Long) y); Double lat = x instanceof Double ? (Double) x : Double.valueOf((Long) x); - + Coordinate areaCoord = new Coordinate(lon, lat); polygonPaths.add(areaCoord); - + } - + polygonPaths.add(polygonPaths.get(0)); - + } - + Polygon polygon = geometryFactory.createPolygon(polygonPaths.toArray(new Coordinate[] {})); - + if(polygon.contains(point)) { - + return properties; - + }else { - + Double distance = polygon.distance(point); - + if(standard > distance) { - + standard = distance; - + result = properties; } } @@ -423,6 +423,7 @@ public class CoordUtils { "^[^ ]+시 [^ ]+구$", "^[^ ]+시 [^ ]+군$", "^[^ ]+도 [^ ]+시$", + "^[^ ]+도 [^ ]+군$", "^[^ ]+도 [^ ]+시 [^ ]+구$" }); patternMap.put("emd", new String[]{ @@ -491,8 +492,8 @@ public class CoordUtils { forderPath.append(this.basePath); while(!forderPathStack.isEmpty()){ - forderPath.append("/"); forderPath.append(forderPathStack.pop()); + forderPath.append("/"); } forderPath.append(this.baseFileName);