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. 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 = "서울특별시")
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();
}
}

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

@ -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