From a07332832a8adcbde5a252b7a3276127f1e16467 Mon Sep 17 00:00:00 2001 From: igor Date: Tue, 4 Feb 2025 07:47:37 +0500 Subject: [PATCH] =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20=D1=82=D0=B5=D0=BC=D0=BF=D0=B5=D1=80=D0=B0=D1=82=D1=83?= =?UTF-8?q?=D1=80=D1=83=20=D0=BF=D0=BE=20=D1=82=D0=BE=D1=87=D0=BA=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- org_ccalm_weather.yml | 8 +- .../org/ccalm/weather/AirTemperature.java | 94 ++++++++++++++----- .../java/org/ccalm/weather/Precipitation.java | 13 +-- .../org/ccalm/weather/SoilTmperature.java | 13 +-- src/main/java/tctable/Tools.java | 16 ++++ 5 files changed, 104 insertions(+), 40 deletions(-) diff --git a/org_ccalm_weather.yml b/org_ccalm_weather.yml index e6e478d..71a5023 100644 --- a/org_ccalm_weather.yml +++ b/org_ccalm_weather.yml @@ -21,15 +21,15 @@ custom: #data_dir: O:\\temp\\CCALM\\ data_dir: /data/ db_all: - url: jdbc:postgresql://92.46.48.43:5444/weather?ApplicationName=kz_mcp_weather&sslmode=require + #url: jdbc:postgresql://92.46.48.43:5444/weather?ApplicationName=kz_mcp_weather&sslmode=require #url: jdbc:postgresql://192.168.0.90:5432/weather?ApplicationName=kz_mcp_weather&sslmode=require - #url: jdbc:postgresql://127.0.0.1:5432/weather?ApplicationName=kz_mcp_weather&sslmode=require + url: jdbc:postgresql://127.0.0.1:5432/weather?ApplicationName=kz_mcp_weather&sslmode=require login: postgres password: PasSecrKey1 db_ru: - url: jdbc:postgresql://92.46.48.43:5444/weather_ru?ApplicationName=kz_mcp_weather&sslmode=require + #url: jdbc:postgresql://92.46.48.43:5444/weather_ru?ApplicationName=kz_mcp_weather&sslmode=require #url: jdbc:postgresql://192.168.0.90:5432/weather_ru?ApplicationName=kz_mcp_weather&sslmode=require - #url: jdbc:postgresql://127.0.0.1:5432/weather_ru?ApplicationName=kz_mcp_weather&sslmode=require + url: jdbc:postgresql://127.0.0.1:5432/weather_ru?ApplicationName=kz_mcp_weather&sslmode=require login: postgres password: PasSecrKey1 diff --git a/src/main/java/org/ccalm/weather/AirTemperature.java b/src/main/java/org/ccalm/weather/AirTemperature.java index 60f4923..7ca3919 100644 --- a/src/main/java/org/ccalm/weather/AirTemperature.java +++ b/src/main/java/org/ccalm/weather/AirTemperature.java @@ -8,10 +8,8 @@ import java.io.PrintWriter; import java.sql.*; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.util.*; import java.util.Date; -import java.util.Iterator; -import java.util.List; -import java.util.TimeZone; import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; @@ -39,6 +37,7 @@ import org.w3c.dom.NodeList; //import main.DownloadFromHTTP; import org.ccalm.weather.WeatherDownload; +import tctable.Tools; import ucar.ma2.Array; import ucar.nc2.Dimension; import ucar.nc2.Variable; @@ -169,12 +168,12 @@ public class AirTemperature implements ServletContextAware { if(!strPos1.isEmpty()) { StringBuffer answer1=new StringBuffer(strPos1); - CutBeforeFirst(answer1,":"); - String posStart = CutBeforeFirst(answer1,":"); + Tools.CutBeforeFirst(answer1,":"); + String posStart = Tools.CutBeforeFirst(answer1,":"); StringBuffer answer2=new StringBuffer(strPos2); - CutBeforeFirst(answer2,":"); - String posEnd = CutBeforeFirst(answer2,":"); + Tools.CutBeforeFirst(answer2,":"); + String posEnd = Tools.CutBeforeFirst(answer2,":"); if(posEnd==null || posEnd.equals("")) posEnd=""; else { posEnd=String.valueOf(Long.parseLong(posEnd)-1); @@ -444,23 +443,6 @@ public class AirTemperature implements ServletContextAware { System.out.println("Done download and save"); return result; } - - //--------------------------------------------------------------------------- - public static String CutBeforeFirst(StringBuffer str,String ch) - { - int pos=str.indexOf(ch); - String result=""; - if(pos==-1) - { - result.concat(str.toString()); - str.delete(0,str.length()); - }else - { - result=str.substring(0,pos); - str.delete(0,pos+1); - } - return result; - } //--------------------------------------------------------------------------- //List of "Air temperature" dates from database in JSON //@CacheControl(maxAge = 300) @@ -524,5 +506,69 @@ public class AirTemperature implements ServletContextAware { return result; } //--------------------------------------------------------------------------- + @CrossOrigin + @RequestMapping(value = "/geodatalist/getAirTemperature",method = RequestMethod.GET,produces = "application/json;charset=UTF-8") + @ResponseBody + public Object getAirTemperature(@RequestParam("date") String date,@RequestParam("hours") int hours,@RequestParam("lat") double lat, @RequestParam("lon") double lon,HttpServletResponse response) { + + String headerValue = CacheControl.maxAge(60, TimeUnit.SECONDS).getHeaderValue(); + response.addHeader("Cache-Control", headerValue); + + Map result = new HashMap<>(); + float temperature = -999; + + Connection conn_all = DBTools.getConn(db_url_all,db_login_all,db_password_all); + Connection conn_ru = DBTools.getConn(db_url_ru,db_login_ru,db_password_ru); + + String sql = """ + select main.get_air_temperature(?::timestamp,?,?,?)-273.15; + """; + if(conn_all!=null) { + try (Statement st = conn_all.createStatement()) { + PreparedStatement pstmt = st.getConnection().prepareStatement(sql); + pstmt.setString(1, date); + pstmt.setInt(2, hours); + pstmt.setDouble(3, lon); + pstmt.setDouble(4, lat); + try (ResultSet rs = pstmt.executeQuery()) { + if (rs.next()) { + temperature = rs.getFloat(1); + if (rs.wasNull()) { + temperature = -999; + } + } + } + } catch (SQLException ex) { + logger.error("N4:" + ex.getMessage(), ex); + } + } + + if(temperature == -999){ + if(conn_ru!=null) { + try (Statement st = conn_ru.createStatement()) { + PreparedStatement pstmt = st.getConnection().prepareStatement(sql); + pstmt.setString(1, date); + pstmt.setInt(2, hours); + pstmt.setDouble(3, lon); + pstmt.setDouble(4, lat); + try (ResultSet rs = pstmt.executeQuery()) { + if (rs.next()) { + temperature = rs.getFloat(1); + if (rs.wasNull()) { + temperature = -999; + } + } + } + } catch (SQLException ex) { + logger.error("N4:" + ex.getMessage(), ex); + } + } + } + + result.put("error_code", 0); + result.put("temperature", temperature); + + return result; + } } diff --git a/src/main/java/org/ccalm/weather/Precipitation.java b/src/main/java/org/ccalm/weather/Precipitation.java index 4cb7724..3270ecf 100644 --- a/src/main/java/org/ccalm/weather/Precipitation.java +++ b/src/main/java/org/ccalm/weather/Precipitation.java @@ -44,6 +44,7 @@ import org.w3c.dom.NodeList; //import main.DownloadFromHTTP; //import org.ccalm.weather.WeatherDownload; +import tctable.Tools; import ucar.ma2.Array; import ucar.nc2.Dimension; import ucar.nc2.Variable; @@ -79,7 +80,7 @@ public class Precipitation implements ServletContextAware { this.context=servletContext; } //--------------------------------------------------------------------------- - public static String CutBeforeFirst(StringBuffer str,String ch) + /*public static String CutBeforeFirst(StringBuffer str,String ch) { int pos=str.indexOf(ch); String result=""; @@ -93,7 +94,7 @@ public class Precipitation implements ServletContextAware { str.delete(0,pos+1); } return result; - } + }*/ //--------------------------------------------------------------------------- /** * Example https://127.0.0.1:8081/geodatalist/Precipitation or https://127.0.0.1:8081/geodatalist/Precipitation?date=20250531 @@ -191,12 +192,12 @@ public class Precipitation implements ServletContextAware { if(!strPos1.isEmpty()) { StringBuffer answer1=new StringBuffer(strPos1); - CutBeforeFirst(answer1,":"); - String posStart = CutBeforeFirst(answer1,":"); + Tools.CutBeforeFirst(answer1,":"); + String posStart = Tools.CutBeforeFirst(answer1,":"); StringBuffer answer2=new StringBuffer(strPos2); - CutBeforeFirst(answer2,":"); - String posEnd = CutBeforeFirst(answer2,":"); + Tools.CutBeforeFirst(answer2,":"); + String posEnd = Tools.CutBeforeFirst(answer2,":"); if(posEnd==null || posEnd.equals("")) posEnd=""; else { posEnd=String.valueOf(Long.parseLong(posEnd)-1); diff --git a/src/main/java/org/ccalm/weather/SoilTmperature.java b/src/main/java/org/ccalm/weather/SoilTmperature.java index bd262a4..8b14816 100644 --- a/src/main/java/org/ccalm/weather/SoilTmperature.java +++ b/src/main/java/org/ccalm/weather/SoilTmperature.java @@ -44,6 +44,7 @@ import org.w3c.dom.NodeList; //import main.DownloadFromHTTP; import org.ccalm.weather.WeatherDownload; +import tctable.Tools; import ucar.ma2.Array; import ucar.nc2.Dimension; import ucar.nc2.Variable; @@ -79,7 +80,7 @@ public class SoilTmperature implements ServletContextAware { this.context=context; } //--------------------------------------------------------------------------- - public static String CutBeforeFirst(StringBuffer str,String ch) + /*public static String CutBeforeFirst(StringBuffer str,String ch) { int pos=str.indexOf(ch); String result=""; @@ -93,7 +94,7 @@ public class SoilTmperature implements ServletContextAware { str.delete(0,pos+1); } return result; - } + }*/ //--------------------------------------------------------------------------- /** * Example: http://127.0.0.1:8081/geodatalist/DownloadSoil?forecast=000 @@ -199,12 +200,12 @@ public class SoilTmperature implements ServletContextAware { { //String strPos1 = "250:146339365:d=2017022818:TSOIL:0-0.1 m below ground:anl:" StringBuffer answer1=new StringBuffer(strPos1); - CutBeforeFirst(answer1,":"); - String posStart = CutBeforeFirst(answer1,":"); + Tools.CutBeforeFirst(answer1,":"); + String posStart = Tools.CutBeforeFirst(answer1,":"); StringBuffer answer2=new StringBuffer(strPos2); - CutBeforeFirst(answer2,":"); - String posEnd = CutBeforeFirst(answer2,":"); + Tools.CutBeforeFirst(answer2,":"); + String posEnd = Tools.CutBeforeFirst(answer2,":"); if(posEnd==null || posEnd.equals("")) posEnd=""; else { posEnd=String.valueOf(Long.parseLong(posEnd)-1); diff --git a/src/main/java/tctable/Tools.java b/src/main/java/tctable/Tools.java index e961618..34688da 100644 --- a/src/main/java/tctable/Tools.java +++ b/src/main/java/tctable/Tools.java @@ -163,6 +163,22 @@ public class Tools { return ""; } + public static String CutBeforeFirst(StringBuffer str,String ch) + { + int pos=str.indexOf(ch); + String result=""; + if(pos==-1) + { + result.concat(str.toString()); + str.delete(0,str.length()); + }else + { + result=str.substring(0,pos); + str.delete(0,pos+1); + } + return result; + } + //узнать точку пересичений 2х линай если x=0 и y=0 то не пересиклась public static Point getCrossingLine(Point PHead0, Point PTail0, Point PHead1, Point PTail1) {