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 new file mode 100644 index 00000000..4d16e68d --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/controller/ComnCoordinateController.java @@ -0,0 +1,64 @@ +package com.palnet.biz.api.comn.coordinate.controller; + +import java.util.HashMap; +import java.util.Map; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.palnet.biz.api.comn.coordinate.model.CompotentAuthorityRQ; +import com.palnet.biz.api.comn.coordinate.model.CompotentAuthorityRS; +import com.palnet.biz.api.comn.coordinate.service.ComnCoordinateService; +import com.palnet.biz.api.comn.response.BasicResponse; +import com.palnet.biz.api.comn.response.ErrorResponse; +import com.palnet.biz.api.comn.response.SuccessResponse; +import com.palnet.comn.exception.CustomException; + +import io.swagger.annotations.ApiOperation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/comn/coordinate") +@Slf4j +@Tag(name = "공통 API", description = "공통 API") +public class ComnCoordinateController { + + private final ComnCoordinateService comnCoordinateService; + + /** + * 좌표로 관할기관 가져오기 + * @param rq + * @return + */ + @GetMapping("/comptent-authority") + @ApiOperation(value = "좌표로 관할 기관청 가져오기") + @Tag(name = "공통 API", description = "공통 API") + public ResponseEntity getCompetentAuthority(CompotentAuthorityRQ rq){ + + CompotentAuthorityRS result = new CompotentAuthorityRS(); + + try { + result = comnCoordinateService.getCompetentAuthority(rq); + } 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/CompotentAuthorityRQ.java b/pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/model/CompotentAuthorityRQ.java new file mode 100644 index 00000000..b76efeae --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/model/CompotentAuthorityRQ.java @@ -0,0 +1,12 @@ +package com.palnet.biz.api.comn.coordinate.model; + +import lombok.Data; + +@Data +public class CompotentAuthorityRQ { + + private Double lat; + + private Double lon; + +} diff --git a/pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/model/CompotentAuthorityRS.java b/pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/model/CompotentAuthorityRS.java new file mode 100644 index 00000000..94450e78 --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/model/CompotentAuthorityRS.java @@ -0,0 +1,14 @@ +package com.palnet.biz.api.comn.coordinate.model; + +import java.util.List; + +import com.palnet.biz.jpa.entity.FltCptAuthBas; + +import lombok.Data; + +@Data +public class CompotentAuthorityRS { + + private List fltCptpAuthBasList; + +} 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 new file mode 100644 index 00000000..39ccdcab --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/service/ComnCoordinateService.java @@ -0,0 +1,105 @@ +package com.palnet.biz.api.comn.coordinate.service; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.json.simple.JSONObject; +import org.json.simple.parser.ParseException; +import org.locationtech.jts.geom.Coordinate; +import org.springframework.stereotype.Service; + +import com.palnet.biz.api.comn.coordinate.model.CompotentAuthorityRQ; +import com.palnet.biz.api.comn.coordinate.model.CompotentAuthorityRS; +import com.palnet.biz.jpa.entity.FltCptAuthBas; +import com.palnet.biz.jpa.repository.flt.FltCptAuthAdminDistrictBasQueryRepository; +import com.palnet.comn.utils.FlightUtils; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class ComnCoordinateService { + + private final FltCptAuthAdminDistrictBasQueryRepository ffFltCptAuthAdminDistrictBasQueryRepository; + + + public CompotentAuthorityRS getCompetentAuthority(CompotentAuthorityRQ rq){ + + Coordinate coord = new Coordinate(rq.getLon(), rq.getLat()); + + JSONObject code = new JSONObject(); + try { + code = FlightUtils.getPlace(coord, false); + } catch (ParseException e) { + e.printStackTrace(); + } catch (IOException e){ + e.printStackTrace(); + } catch (Exception e){ + e.printStackTrace(); + } + + String[] scope = {"ctprvn", "sig", "emd", "li"}; + final String cd = (String) code.get("CD"); + + Set fltCptAuthBas = new HashSet(); + + for(int i = 0; i < scope.length; i++){ + String cdParam = this.codeParsing(cd, scope[i]); + List authList = ffFltCptAuthAdminDistrictBasQueryRepository.geFltCptAuthBas(cdParam); + + fltCptAuthBas.addAll(new HashSet(authList)); + } + + CompotentAuthorityRS result = new CompotentAuthorityRS(); + result.setFltCptpAuthBasList(new ArrayList<>(fltCptAuthBas)); + + return result; + } + + private String codeParsing(String cd, String scope){ + switch (scope) { + case "ctprvn": + + if(cd.length() < 2) break; + + cd = cd.substring(0, 2); + break; + case "sig": + + if(cd.length() < 5) break; + + cd = cd.substring(0, 5); + break; + case "emd": + + if(cd.length() < 8) break; + + cd = cd.substring(0, 8); + break; + case "li": + + if(cd.length() < 10) break; + + cd = cd.substring(0, 10); + break; + } + + int length = cd.length(); + int maxLength = 10; + + int difference = maxLength - length; + + StringBuilder sb = new StringBuilder(); + sb.append(cd); + + for(int i = 0; i < difference; i++){ + sb.append("0"); + } + + return sb.toString(); + } + +} 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 new file mode 100644 index 00000000..0a6bb64c --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltCptAuthAdminDistrictBasQueryRepository.java @@ -0,0 +1,42 @@ +package com.palnet.biz.jpa.repository.flt; + +import java.util.List; + +import org.springframework.stereotype.Repository; + +import com.palnet.biz.jpa.entity.FltCptAuthBas; +import com.palnet.biz.jpa.entity.QFltCptAuthAdmDistrictRel; +import com.palnet.biz.jpa.entity.QFltCptAuthBas; +import com.querydsl.core.BooleanBuilder; +import com.querydsl.jpa.impl.JPAQueryFactory; + +import lombok.RequiredArgsConstructor; + +@Repository +@RequiredArgsConstructor +public class FltCptAuthAdminDistrictBasQueryRepository { + + private final JPAQueryFactory query; + + public List geFltCptAuthBas(String cd){ + + QFltCptAuthAdmDistrictRel qFltCptAuthAdmDistrictRel = QFltCptAuthAdmDistrictRel.fltCptAuthAdmDistrictRel; + QFltCptAuthBas qFltCptAuthBas = QFltCptAuthBas.fltCptAuthBas; + + BooleanBuilder builder = new BooleanBuilder(); + builder.and(qFltCptAuthAdmDistrictRel.id.ADM_CD.like(cd+"%")); + + List result = query + .selectDistinct( + qFltCptAuthBas + ) + .from(qFltCptAuthAdmDistrictRel) + .leftJoin(qFltCptAuthBas) + .on(qFltCptAuthAdmDistrictRel.id.CPT_AUTH_CODE.eq(qFltCptAuthBas.cptAuthCode)) + .where(builder) + .fetch(); + + + return result; + } +}