Browse Source

feat: 부서에 할당된 관제 바운더리 조회

feature/address-coordinate
lkd9125(이경도) 2 months ago
parent
commit
ebfdcdacd3
  1. 29
      pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/controller/ComnCoordinateController.java
  2. 11
      pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/model/LocationCdAddressModel.java
  3. 20
      pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/model/SearchDepartmentBoundaryRS.java
  4. 38
      pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/service/ComnCoordinateService.java
  5. 52
      pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltCptAuthAdminDistrictBasQueryRepository.java
  6. 53
      pav-server/src/main/java/com/palnet/comn/utils/CoordUtils.java

29
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<? extends BasicResponse> getDepartmentBoundary(){
SearchDepartmentBoundaryRS result = null;
try {
result = comnCoordinateService.getDepartmentBoundary();
} catch (CustomException e) {
Map<String, Object> 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));
}
}

11
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;
}

20
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<BoundaryModel> boundaryModels;
@Data
public static class BoundaryModel{
private String location;
private List<CoordUtils.LocationCoordinateModel> coordinates;
}
}

38
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<LocationCdAddressModel> addressList = fltCptAuthAdminDistrictBasQueryRepository.findAddressByCptAuthCode(cptAuthCode);
log.warn("===> {}", addressList);
List<SearchDepartmentBoundaryRS.BoundaryModel> boundaryModels = new ArrayList<>();
for(LocationCdAddressModel model : addressList){
try {
String scope = CoordUtils.getInstance().getScope(model.getAddress());
List<CoordUtils.LocationCoordinateModel> 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;
}
}

52
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<FltCptAuthBas> 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<String> findAdmCdByAddressAndRegexp(String address, List<String> regexps){
public List<LocationCdAddressModel> 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();
}
}

53
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<features.size(); i++) {
JSONObject geometry = (JSONObject) features.get(i).get("geometry");
JSONObject properties = (JSONObject) features.get(i).get("properties");
List<JSONArray> coordinates = (List<JSONArray>) geometry.get("coordinates");
for(int k = 0; k< coordinates.size(); k++) {
List<Coordinate> 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);

Loading…
Cancel
Save