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. 38
      pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltCptAuthAdminDistrictBasQueryRepository.java
  6. 3
      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 = "서울특별시") @Parameter(name="address", description = "하위행정구역을 검색할 주소", in = ParameterIn.QUERY, example = "서울특별시")
String address){ String address){
log.warn("address => {}", address);
SearchLowAddressRS result = null; SearchLowAddressRS result = null;
try { try {
result = comnCoordinateService.getLowAddress(address); result = comnCoordinateService.getLowAddress(address);
@ -121,4 +119,31 @@ public class ComnCoordinateController {
return ResponseEntity.ok().body(new SuccessResponse<>(result)); 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.List;
import java.util.Set; 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.api.comn.coordinate.model.*;
import com.palnet.biz.jpa.repository.flt.FltCptAuthAdmDistrictRelRepository; import com.palnet.biz.jpa.repository.flt.FltCptAuthAdmDistrictRelRepository;
import com.palnet.comn.code.ErrorCode; import com.palnet.comn.code.ErrorCode;
@ -32,6 +33,8 @@ public class ComnCoordinateService {
private final FltCptAuthAdminDistrictBasQueryRepository fltCptAuthAdminDistrictBasQueryRepository; private final FltCptAuthAdminDistrictBasQueryRepository fltCptAuthAdminDistrictBasQueryRepository;
private final JwtTokenUtil jwtTokenUtil;
public CompotentAuthorityRS getCompetentAuthority(CompotentAuthorityRQ rq){ 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;
}
} }

38
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.List;
import java.util.Map; import java.util.Map;
import com.palnet.biz.api.comn.coordinate.model.LocationCdAddressModel;
import com.palnet.biz.jpa.entity.QComAdmDistrictBas; import com.palnet.biz.jpa.entity.QComAdmDistrictBas;
import com.querydsl.core.types.Projections; import com.querydsl.core.types.Projections;
import com.querydsl.core.types.dsl.BooleanTemplate; import com.querydsl.core.types.dsl.BooleanTemplate;
@ -37,7 +38,7 @@ public class FltCptAuthAdminDistrictBasQueryRepository {
BooleanBuilder builder = new BooleanBuilder(); BooleanBuilder builder = new BooleanBuilder();
builder.and(qFltCptAuthAdmDistrictRel.id.ADM_CD.like(cd+"%")); builder.and(qFltCptAuthAdmDistrictRel.id.ADM_CD.like(cd+"%"));
List<FltCptAuthBas> result = query return query
.selectDistinct( .selectDistinct(
qFltCptAuthBas qFltCptAuthBas
) )
@ -46,9 +47,6 @@ public class FltCptAuthAdminDistrictBasQueryRepository {
.on(qFltCptAuthAdmDistrictRel.id.CPT_AUTH_CODE.eq(qFltCptAuthBas.cptAuthCode)) .on(qFltCptAuthAdmDistrictRel.id.CPT_AUTH_CODE.eq(qFltCptAuthBas.cptAuthCode))
.where(builder) .where(builder)
.fetch(); .fetch();
return result;
} }
public String findAdmCdByAddress(String address){ public String findAdmCdByAddress(String address){
@ -65,23 +63,31 @@ public class FltCptAuthAdminDistrictBasQueryRepository {
.fetchOne(); .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; QComAdmDistrictBas qComAdmDistrictBas = QComAdmDistrictBas.comAdmDistrictBas;
BooleanBuilder builder = new BooleanBuilder(); BooleanBuilder builder = new BooleanBuilder();
for(String regexp: regexps){ builder.and(qFltCptAuthBas.cptAuthCode.eq(cptAuthCode));
BooleanTemplate template = Expressions.booleanTemplate("{0} REGEXP {1}", qComAdmDistrictBas.admSectNm , Expressions.constant(regexp));
builder.or(template);
}
String sql = "SELECT LOWEST_ADM_SECT_NM " + return query
"FROM COM_ADM_DISTRICT_BAS " + .select(
"WHERE " + builder.getValue().toString(); 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();
}
} }

3
pav-server/src/main/java/com/palnet/comn/utils/CoordUtils.java

@ -423,6 +423,7 @@ public class CoordUtils {
"^[^ ]+시 [^ ]+구$", "^[^ ]+시 [^ ]+구$",
"^[^ ]+시 [^ ]+군$", "^[^ ]+시 [^ ]+군$",
"^[^ ]+도 [^ ]+시$", "^[^ ]+도 [^ ]+시$",
"^[^ ]+도 [^ ]+군$",
"^[^ ]+도 [^ ]+시 [^ ]+구$" "^[^ ]+도 [^ ]+시 [^ ]+구$"
}); });
patternMap.put("emd", new String[]{ patternMap.put("emd", new String[]{
@ -491,8 +492,8 @@ public class CoordUtils {
forderPath.append(this.basePath); forderPath.append(this.basePath);
while(!forderPathStack.isEmpty()){ while(!forderPathStack.isEmpty()){
forderPath.append("/");
forderPath.append(forderPathStack.pop()); forderPath.append(forderPathStack.pop());
forderPath.append("/");
} }
forderPath.append(this.baseFileName); forderPath.append(this.baseFileName);

Loading…
Cancel
Save