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..03c7f4fc --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/controller/ComnCoordinateController.java @@ -0,0 +1,32 @@ +package com.palnet.biz.api.comn.coordinate.controller; + +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 lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/comn/coordinate") +@Slf4j +public class ComnCoordinateController { + + private final ComnCoordinateService comnCoordinateService; + + @GetMapping("/comptent-authority") + public ResponseEntity getCompetentAuthority(CompotentAuthorityRQ rq){ + log.warn("ComnCoordinateController - getCompetentAuthority()"); + log.warn("RQ => {}", rq); + + CompotentAuthorityRS result = comnCoordinateService.getCompetentAuthority(rq); + + return ResponseEntity.ok().body(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..83d3a4f0 --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/service/ComnCoordinateService.java @@ -0,0 +1,110 @@ +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; +import lombok.extern.slf4j.Slf4j; + +@Service +@RequiredArgsConstructor +@Slf4j +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]); + + log.warn("cdParam => {}", cdParam); + List authList = ffFltCptAuthAdminDistrictBasQueryRepository.geFltCptAuthBas(cdParam); + + fltCptAuthBas.addAll(new HashSet(authList)); + } + + CompotentAuthorityRS result = new CompotentAuthorityRS(); + result.setFltCptpAuthBasList(new ArrayList<>(fltCptAuthBas)); + + log.warn("result => {}", result); + + 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; + + for(int i = 0; i < difference; i++){ + cd += "0"; + } + + return cd; + } + +} 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; + } +}