From cca38ce7d777145f6baf9ceac99c3b20b876fdff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=9E=AC=EC=9A=B0?= <박재우@DESKTOP-EF7ECBO> Date: Tue, 8 Nov 2022 15:04:51 +0900 Subject: [PATCH] =?UTF-8?q?controller=20->=20service=20=EC=9E=91=EC=97=85?= =?UTF-8?q?=EB=82=B4=EC=9A=A9=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cntrl/controller/CtrCntrlController.java | 120 ++-------------- .../ctr/cntrl/service/CtrCntrlService.java | 128 ++++++++++++++++++ 2 files changed, 136 insertions(+), 112 deletions(-) diff --git a/src/main/java/com/palnet/biz/api/ctr/cntrl/controller/CtrCntrlController.java b/src/main/java/com/palnet/biz/api/ctr/cntrl/controller/CtrCntrlController.java index 285d486..cb69160 100644 --- a/src/main/java/com/palnet/biz/api/ctr/cntrl/controller/CtrCntrlController.java +++ b/src/main/java/com/palnet/biz/api/ctr/cntrl/controller/CtrCntrlController.java @@ -122,119 +122,15 @@ public class CtrCntrlController { @GetMapping("/api/weather") @ApiOperation(value = "TODO 드론 관제 '실시간' 이력 목록") @Tag(name = "드론 관제 시스템", description = "드론 관제 관련 API") - public ResponseEntity restApiGetWeather(CtrCntrlWeatherModel rs) throws IOException, ParseException { - StringBuilder urlBuilder = new StringBuilder("http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getVilageFcst"); - - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); - Calendar c1 = Calendar.getInstance(); - String strToday = sdf.format(c1.getTime()); - // 현재 시간 - LocalTime now = LocalTime.now(); - - // 현재시간 출력 - - // 시, 분, 초 구하기 - int hour = now.getHour(); - int minute = now.getMinute(); - int length = (int)(Math.log10(minute)+1); - int hourlength = (int)(Math.log10(hour)+1); - String strminute = Integer.toString(minute); - String strhour = Integer.toString(hour); - String basetime = null; - - if(length<=1){ - strminute = 0+Integer.toString(minute); - }if(hourlength<=1){ - strhour = 0+Integer.toString(hour); - } - // 시, 분, 초 출력 - if ((Integer.parseInt(strhour) >= 2 && Integer.parseInt(strminute )> 9) && Integer.parseInt(strhour) <= 5) { - basetime = "0200"; - } - else if ((Integer.parseInt(strhour) >= 5 && Integer.parseInt(strminute ) > 9) && Integer.parseInt(strhour) < 8) { - basetime = "0500"; - } - else if (Integer.parseInt(strhour) <= 8 && Integer.parseInt(strminute ) < 10) { - basetime = "0500"; - } - else if ((Integer.parseInt(strhour) >= 8 && Integer.parseInt(strminute ) > 9) && Integer.parseInt(strhour) < 11) { - basetime = "0800"; - } - else if (Integer.parseInt(strhour) <= 11 && Integer.parseInt(strminute ) < 10) { - basetime = "0800"; - } - else if ((Integer.parseInt(strhour) >= 11 && Integer.parseInt(strminute ) > 9) && Integer.parseInt(strhour) < 14) { - basetime = "1100"; - } - else if (Integer.parseInt(strhour) <= 14 && Integer.parseInt(strminute ) < 10) { - basetime = "1100"; - } - else if ((Integer.parseInt(strhour) >= 14 && Integer.parseInt(strminute ) > 9) && Integer.parseInt(strhour) < 17) { - basetime = "1400"; - } - else if (Integer.parseInt(strhour) <= 17 && Integer.parseInt(strminute ) < 10) { - basetime = "1400"; - } - else if ((Integer.parseInt(strhour) >= 17 && Integer.parseInt(strminute ) > 9) && Integer.parseInt(strhour) < 20) { - basetime = "1700"; - } - else if (Integer.parseInt(strhour) <= 20 && Integer.parseInt(strminute ) < 10) { - basetime = "1700"; - } - else if ((Integer.parseInt(strhour) >= 20 && Integer.parseInt(strminute ) > 9) && Integer.parseInt(strhour) < 23) { - basetime = "2000"; - } - else if (Integer.parseInt(strhour) <= 23 && Integer.parseInt(strminute ) < 10) { - basetime = "2000"; - } - else - basetime = "2300"; - - - List coordList = new ArrayList<>(); - Coordinate coord = new Coordinate(); - Coordinate returnCoord = new Coordinate(); - coord.setX(rs.getNx()); - coord.setY(rs.getNy()); - returnCoord = service.wheather(coord); - - double nx = returnCoord.getX(); - double ny = returnCoord.getY(); - String Snx = String.format("%.0f",nx); - String Sny = String.format("%.0f",ny); - - urlBuilder.append("?" + URLEncoder.encode("serviceKey","UTF-8") + "=r6RMUsk3Vtama7D6uq7MiWV9dTC9MwfIIr4%2F45y0uVNw6BaYbgpKmL%2BLUDFVTfIYUmEe4K%2FaniEjdV9mg5t82Q%3D%3D"); - urlBuilder.append("&" + URLEncoder.encode("pageNo","UTF-8") + "=" + URLEncoder.encode("1","UTF-8")); - urlBuilder.append("&" + URLEncoder.encode("numOfRows","UTF-8") + "=" + URLEncoder.encode("14", "UTF-8")); /*한 페이지 결과 수*/ - urlBuilder.append("&" + URLEncoder.encode("dataType","UTF-8") + "=" + URLEncoder.encode("JSON", "UTF-8")); /*요청자료형식(XML/JSON) Default: XML*/ - urlBuilder.append("&" + URLEncoder.encode("base_date","UTF-8") + "=" + URLEncoder.encode(strToday, "UTF-8")); /*'21년 6월 28일 발표*/ - urlBuilder.append("&" + URLEncoder.encode("base_time","UTF-8") + "=" + URLEncoder.encode(basetime, "UTF-8")); /*06시 발표(정시단위) */ - urlBuilder.append("&" + URLEncoder.encode("nx","UTF-8") + "=" + URLEncoder.encode(Snx, "UTF-8")); /*예보지점의 X 좌표값*/ - urlBuilder.append("&" + URLEncoder.encode("ny","UTF-8") + "=" + URLEncoder.encode(Sny, "UTF-8")); /*예보지점의 Y 좌표값*/ - URL url = new URL(urlBuilder.toString()); - HttpURLConnection conn = (HttpURLConnection) url.openConnection(); - conn.setRequestMethod("GET"); - conn.setRequestProperty("Content-type", "application/json"); - log.info("Response code: " + conn.getResponseCode()); - BufferedReader rd; - if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) { - rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); - } else { - rd = new BufferedReader(new InputStreamReader(conn.getErrorStream())); - } - StringBuilder sb = new StringBuilder(); - String line; - while ((line = rd.readLine()) != null) { - sb.append(line); + public ResponseEntity restApiGetWeather(CtrCntrlWeatherModel rq) throws IOException, ParseException { + JSONObject jsonObject = null; + try { + jsonObject = service.getWeather(rq); + } catch (Exception e) { + log.error("IGNORE : {}", e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(new ErrorResponse("Server Error", "-1")); } - - String str = sb.toString(); - JSONParser parser = new JSONParser(); - JSONObject jsonObject = (JSONObject) parser.parse(str); - rd.close(); - conn.disconnect(); - log.info(sb.toString()); - return ResponseEntity.ok().body(new SuccessResponse<>(jsonObject)); } /** diff --git a/src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java b/src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java index 393b208..80f66ca 100644 --- a/src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java +++ b/src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java @@ -1,7 +1,16 @@ package com.palnet.biz.api.ctr.cntrl.service; import java.awt.Toolkit; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; +import java.text.SimpleDateFormat; +import java.time.LocalTime; import java.util.ArrayList; +import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -10,6 +19,9 @@ import java.util.UUID; import com.palnet.biz.api.ctr.cntrl.model.*; import org.apache.commons.lang3.StringUtils; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; import org.locationtech.jts.geom.Coordinate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -516,7 +528,123 @@ public class CtrCntrlService { return result; } + + public JSONObject getWeather(CtrCntrlWeatherModel rq) throws IOException, ParseException { + + StringBuilder urlBuilder = new StringBuilder("http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getVilageFcst"); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + Calendar c1 = Calendar.getInstance(); + String strToday = sdf.format(c1.getTime()); + // 현재 시간 + LocalTime now = LocalTime.now(); + + // 현재시간 출력 + + // 시, 분, 초 구하기 + int hour = now.getHour(); + int minute = now.getMinute(); + int length = (int)(Math.log10(minute)+1); + int hourlength = (int)(Math.log10(hour)+1); + String strminute = Integer.toString(minute); + String strhour = Integer.toString(hour); + String basetime = null; + + if(length<=1){ + strminute = 0+Integer.toString(minute); + }if(hourlength<=1){ + strhour = 0+Integer.toString(hour); + } + // 시, 분, 초 출력 + if ((Integer.parseInt(strhour) >= 2 && Integer.parseInt(strminute )> 9) && Integer.parseInt(strhour) <= 5) { + basetime = "0200"; + } + else if ((Integer.parseInt(strhour) >= 5 && Integer.parseInt(strminute ) > 9) && Integer.parseInt(strhour) < 8) { + basetime = "0500"; + } + else if (Integer.parseInt(strhour) <= 8 && Integer.parseInt(strminute ) < 10) { + basetime = "0500"; + } + else if ((Integer.parseInt(strhour) >= 8 && Integer.parseInt(strminute ) > 9) && Integer.parseInt(strhour) < 11) { + basetime = "0800"; + } + else if (Integer.parseInt(strhour) <= 11 && Integer.parseInt(strminute ) < 10) { + basetime = "0800"; + } + else if ((Integer.parseInt(strhour) >= 11 && Integer.parseInt(strminute ) > 9) && Integer.parseInt(strhour) < 14) { + basetime = "1100"; + } + else if (Integer.parseInt(strhour) <= 14 && Integer.parseInt(strminute ) < 10) { + basetime = "1100"; + } + else if ((Integer.parseInt(strhour) >= 14 && Integer.parseInt(strminute ) > 9) && Integer.parseInt(strhour) < 17) { + basetime = "1400"; + } + else if (Integer.parseInt(strhour) <= 17 && Integer.parseInt(strminute ) < 10) { + basetime = "1400"; + } + else if ((Integer.parseInt(strhour) >= 17 && Integer.parseInt(strminute ) > 9) && Integer.parseInt(strhour) < 20) { + basetime = "1700"; + } + else if (Integer.parseInt(strhour) <= 20 && Integer.parseInt(strminute ) < 10) { + basetime = "1700"; + } + else if ((Integer.parseInt(strhour) >= 20 && Integer.parseInt(strminute ) > 9) && Integer.parseInt(strhour) < 23) { + basetime = "2000"; + } + else if (Integer.parseInt(strhour) <= 23 && Integer.parseInt(strminute ) < 10) { + basetime = "2000"; + } + else + basetime = "2300"; + + + List coordList = new ArrayList<>(); + Coordinate coord = new Coordinate(); + Coordinate returnCoord = new Coordinate(); + coord.setX(rq.getNx()); + coord.setY(rq.getNy()); + returnCoord = this.wheather(coord); + + double nx = returnCoord.getX(); + double ny = returnCoord.getY(); + String Snx = String.format("%.0f",nx); + String Sny = String.format("%.0f",ny); + + urlBuilder.append("?" + URLEncoder.encode("serviceKey","UTF-8") + "=r6RMUsk3Vtama7D6uq7MiWV9dTC9MwfIIr4%2F45y0uVNw6BaYbgpKmL%2BLUDFVTfIYUmEe4K%2FaniEjdV9mg5t82Q%3D%3D"); + urlBuilder.append("&" + URLEncoder.encode("pageNo","UTF-8") + "=" + URLEncoder.encode("1","UTF-8")); + urlBuilder.append("&" + URLEncoder.encode("numOfRows","UTF-8") + "=" + URLEncoder.encode("14", "UTF-8")); /*한 페이지 결과 수*/ + urlBuilder.append("&" + URLEncoder.encode("dataType","UTF-8") + "=" + URLEncoder.encode("JSON", "UTF-8")); /*요청자료형식(XML/JSON) Default: XML*/ + urlBuilder.append("&" + URLEncoder.encode("base_date","UTF-8") + "=" + URLEncoder.encode(strToday, "UTF-8")); /*'21년 6월 28일 발표*/ + urlBuilder.append("&" + URLEncoder.encode("base_time","UTF-8") + "=" + URLEncoder.encode(basetime, "UTF-8")); /*06시 발표(정시단위) */ + urlBuilder.append("&" + URLEncoder.encode("nx","UTF-8") + "=" + URLEncoder.encode(Snx, "UTF-8")); /*예보지점의 X 좌표값*/ + urlBuilder.append("&" + URLEncoder.encode("ny","UTF-8") + "=" + URLEncoder.encode(Sny, "UTF-8")); /*예보지점의 Y 좌표값*/ + URL url = new URL(urlBuilder.toString()); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("GET"); + conn.setRequestProperty("Content-type", "application/json"); + log.info("Response code: " + conn.getResponseCode()); + BufferedReader rd; + if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) { + rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); + } else { + rd = new BufferedReader(new InputStreamReader(conn.getErrorStream())); + } + StringBuilder sb = new StringBuilder(); + String line; + while ((line = rd.readLine()) != null) { + sb.append(line); + } + String str = sb.toString(); + JSONParser parser = new JSONParser(); + JSONObject jsonObject = (JSONObject) parser.parse(str); + rd.close(); + conn.disconnect(); + log.info(sb.toString()); + + return jsonObject; + } public Coordinate wheather(Coordinate coord) { double nx; double ny;