From 43185b31ea520c5537c8bcea14fe6a979382fe25 Mon Sep 17 00:00:00 2001 From: igor Date: Mon, 17 Mar 2025 07:28:52 +0500 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=BC=D0=BF=D0=BE=D1=80=D1=82=20=D0=B0?= =?UTF-8?q?=D0=BD=D0=BA=D0=B5=D1=82=20=D0=B8=D0=B7=20=D1=83=D0=B7=D0=B1?= =?UTF-8?q?=D0=B5=D0=BA=D0=B8=D1=81=D1=82=D0=B0=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- org_ccalm_main.yml | 4 +- pom.xml | 24 +- src/main/java/org/ccalm/main/AcceptJSON.java | 2618 ++++++++++------- .../java/org/ccalm/main/UpdateLocust.java | 413 +++ .../ccalm/main/models/ErrorResponseModel.java | 96 + .../org/ccalm/main/models/FrmLocustModel.java | 151 + .../org/ccalm/main/utils/CustomException.java | 79 + src/main/java/org/ccalm/main/utils/Tools.java | 167 ++ 8 files changed, 2493 insertions(+), 1059 deletions(-) create mode 100644 src/main/java/org/ccalm/main/UpdateLocust.java create mode 100644 src/main/java/org/ccalm/main/models/ErrorResponseModel.java create mode 100644 src/main/java/org/ccalm/main/models/FrmLocustModel.java create mode 100644 src/main/java/org/ccalm/main/utils/CustomException.java create mode 100644 src/main/java/org/ccalm/main/utils/Tools.java diff --git a/org_ccalm_main.yml b/org_ccalm_main.yml index b87324a..4b991ba 100644 --- a/org_ccalm_main.yml +++ b/org_ccalm_main.yml @@ -10,11 +10,13 @@ spring: application: name: org.ccalm.main datasource: - url: jdbc:postgresql://91.201.214.156:5432/CCALM?ApplicationName=org_ccalm_main&ssl=true&sslmode=require&connectTimeout=10000&socketTimeout=10000 + #url: jdbc:postgresql://ccalm.org:5432/CCALM?ApplicationName=org_ccalm_main&ssl=true&sslmode=require&connectTimeout=10000&socketTimeout=10000 + url: jdbc:postgresql://127.0.0.1:5432/CCALM?ApplicationName=org_ccalm_main&ssl=true&sslmode=require&connectTimeout=10000&socketTimeout=10000 username: postgres password: 309A86FF65A78FB428F4E38DFE35F730 driver-class-name: org.postgresql.Driver hikari: + connection-init-sql: "SET timezone TO 'UTC';" maximum-pool-size: 10 minimum-idle: 5 max-lifetime: 1740000 diff --git a/pom.xml b/pom.xml index f734ce0..9bb7cbb 100644 --- a/pom.xml +++ b/pom.xml @@ -69,12 +69,18 @@ mail 1.4 - + + + commons-io + commons-io + 2.15.1 + net.logstash.logback logstash-logback-encoder @@ -121,6 +127,22 @@ spring-jdbc 6.1.12 + + org.springdoc + springdoc-openapi-starter-webmvc-ui + 2.8.4 + + + javax.annotation + javax.annotation-api + 1.3.2 + + + org.projectlombok + lombok + 1.18.36 + provided + diff --git a/src/main/java/org/ccalm/main/AcceptJSON.java b/src/main/java/org/ccalm/main/AcceptJSON.java index 2dff9bf..52921f6 100644 --- a/src/main/java/org/ccalm/main/AcceptJSON.java +++ b/src/main/java/org/ccalm/main/AcceptJSON.java @@ -8,7 +8,11 @@ import java.awt.image.BufferedImage; import java.awt.image.RenderedImage; import java.io.*; import java.net.HttpURLConnection; +import java.net.URI; import java.net.URL; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; @@ -22,15 +26,17 @@ import java.time.LocalDate; import java.time.Year; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; -import java.util.Base64; -import java.util.Properties; +import java.util.*; import javax.imageio.ImageIO; //import javax.servlet.ServletContext; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; +import com.zaxxer.hikari.HikariDataSource; import jakarta.servlet.ServletContext; +import org.ccalm.main.models.FrmLocustModel; +import org.ccalm.main.utils.CustomException; import org.json.JSONObject; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; @@ -38,8 +44,13 @@ import org.json.JSONArray; import org.json.JSONException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.env.Environment; import org.springframework.core.io.ClassPathResource; +import org.springframework.http.MediaType; +import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; @@ -57,6 +68,7 @@ import org.w3c.dom.NodeList; //import kz.locust.CCALM.AcceptEXCEL.Locust; //import kz.locust.CCALM.AcceptEXCEL.Locust; import tctable.Tools; +import tools.DBTools; import tools.User; @Controller @@ -77,6 +89,10 @@ public class AcceptJSON implements ServletContextAware { @Value("${data.dir}") String data_dir = ""; + private final NamedParameterJdbcTemplate jdbcTemplate; + private final Environment environment; + private HikariDataSource dataSource; + //If not created object "user", create him. //@ModelAttribute("user") //public User populatePerson() { @@ -88,6 +104,13 @@ public class AcceptJSON implements ServletContextAware { this.context=servletContext; } + @Autowired + public AcceptJSON(NamedParameterJdbcTemplate jdbcTemplate, HikariDataSource dataSource, Environment environment) { + this.jdbcTemplate = jdbcTemplate; + this.environment = environment; + this.dataSource = dataSource; + } + /** * Скачивание анкет казахстан согласно документации из "FITO_v1.0.docx" * Согласно документации скачивать можно раз в год и соответственно нет смысла автоматизировать, в коде ниже нужно проверять анкеты на пришедший год, и соответственно удалять @@ -510,14 +533,14 @@ public class AcceptJSON implements ServletContextAware { JSONArray jsonArray = new JSONArray(content); for (Object o : jsonArray) { JSONObject jsonObj = (JSONObject) o; - Locust locust = new Locust(); + FrmLocustModel locust = new FrmLocustModel(); locust.date = jsonObj.getString("date"); + String regionName=""; if (!jsonObj.isNull("regionName")) - locust.region = jsonObj.getString("regionName"); - else - locust.region = ""; + regionName = jsonObj.getString("regionName"); + if (!jsonObj.isNull("townName")) locust.district = jsonObj.getString("townName"); @@ -540,7 +563,7 @@ public class AcceptJSON implements ServletContextAware { //jsonObj.drawPolygon Краснодар - if (locust.region.length() > 0) { + if (regionName.isEmpty()) { //Выбираю ID области locust.region_id = ""; //Statement stt = null; @@ -548,7 +571,7 @@ public class AcceptJSON implements ServletContextAware { try { stt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); - String sql_query = "select id from main.countriesregions where name like '%" + locust.region + "%';"; + String sql_query = "select id from main.countriesregions where name like '%" + regionName + "%';"; rs = stt.executeQuery(sql_query); if (rs != null) { try { @@ -577,10 +600,10 @@ public class AcceptJSON implements ServletContextAware { /*if(locust.region_id.isEmpty()){ - if(locust.region.indexOf("Воронежс��ая область")>=0) locust.region_id="110"; - if(locust.region.indexOf("Кра��нодарский край")>=0) locust.region_id="164"; - if(locust.region.indexOf("Астраха��ская область")>=0) locust.region_id="68"; //dayOfYear: 97 at year: 2022 = 07.04.2022 - if(locust.region.indexOf("Астраханская област��")>=0) locust.region_id="68"; // dayOfYear: 101 at year: 2022 = 11.04.2022 + if(regionName.indexOf("Воронежс��ая область")>=0) locust.region_id="110"; + if(regionName.indexOf("Кра��нодарский край")>=0) locust.region_id="164"; + if(regionName.indexOf("Астраха��ская область")>=0) locust.region_id="68"; //dayOfYear: 97 at year: 2022 = 07.04.2022 + if(regionName.indexOf("Астраханская област��")>=0) locust.region_id="68"; // dayOfYear: 101 at year: 2022 = 11.04.2022 }*/ if (locust.region_id.length() > 0) { @@ -829,7 +852,7 @@ public class AcceptJSON implements ServletContextAware { } try { - stmt.setInt(1, locust.eid); + stmt.setLong(1, locust.eid); stmt.setDouble(2, locust.lat); stmt.setDouble(3, locust.lon); stmt.setInt(4, 7); //country_id @@ -873,35 +896,35 @@ public class AcceptJSON implements ServletContextAware { locust.locust = jsonObjSub.getString("nameSubject"); //Вид саранчи - locust.locust_id = ""; - if (locust.locust.equals("Короткокрылый зеленчук")) locust.locust_id = "4"; - if (locust.locust.equals("Среднерусская перелётная саранча")) locust.locust_id = "4"; - if (locust.locust.equals("Сибирская кобылка")) locust.locust_id = "4"; - if (locust.locust.equals("Кобылка изменчивая")) locust.locust_id = "4"; - if (locust.locust.equals("Кобылка пёстрая")) locust.locust_id = "4"; - if (locust.locust.equals("Кобылка крестовая")) locust.locust_id = "4"; - if (locust.locust.equals("Кобылка сибирская")) locust.locust_id = "4"; - if (locust.locust.equals("Кобылка голубокрылая")) locust.locust_id = "4"; - if (locust.locust.equals("Кобылка бескрылая")) locust.locust_id = "4"; - if (locust.locust.equals("Кобылка чернополосая")) locust.locust_id = "4"; - if (locust.locust.equals("Кобылка трескучая")) locust.locust_id = "4"; - if (locust.locust.equals("Кобылка египетская")) locust.locust_id = "4"; - if (locust.locust.equals("Трещотка ширококрылая")) locust.locust_id = "4"; - if (locust.locust.equals("Бахчевая кобылка")) locust.locust_id = "4"; - if (locust.locust.equals("Малая крестовичка")) locust.locust_id = "4"; + locust.locust_type_id = ""; + if (locust.locust.equals("Короткокрылый зеленчук")) locust.locust_type_id = "4"; + if (locust.locust.equals("Среднерусская перелётная саранча")) locust.locust_type_id = "4"; + if (locust.locust.equals("Сибирская кобылка")) locust.locust_type_id = "4"; + if (locust.locust.equals("Кобылка изменчивая")) locust.locust_type_id = "4"; + if (locust.locust.equals("Кобылка пёстрая")) locust.locust_type_id = "4"; + if (locust.locust.equals("Кобылка крестовая")) locust.locust_type_id = "4"; + if (locust.locust.equals("Кобылка сибирская")) locust.locust_type_id = "4"; + if (locust.locust.equals("Кобылка голубокрылая")) locust.locust_type_id = "4"; + if (locust.locust.equals("Кобылка бескрылая")) locust.locust_type_id = "4"; + if (locust.locust.equals("Кобылка чернополосая")) locust.locust_type_id = "4"; + if (locust.locust.equals("Кобылка трескучая")) locust.locust_type_id = "4"; + if (locust.locust.equals("Кобылка египетская")) locust.locust_type_id = "4"; + if (locust.locust.equals("Трещотка ширококрылая")) locust.locust_type_id = "4"; + if (locust.locust.equals("Бахчевая кобылка")) locust.locust_type_id = "4"; + if (locust.locust.equals("Малая крестовичка")) locust.locust_type_id = "4"; if (locust.locust.equals("Конёк белополосый (белополосая кобылка)")) - locust.locust_id = "4"; - if (locust.locust.equals("Конек обыкновенный")) locust.locust_id = "4"; - if (locust.locust.equals("Конек обыкновенный")) locust.locust_id = "4"; - if (locust.locust.equals("Кобылка темнокрылая")) locust.locust_id = "4"; - if (locust.locust.equals("Краснокрылая кобылка")) locust.locust_id = "4"; - if (locust.locust.equals("Краснокрылая кобылка")) locust.locust_id = "4"; - if (locust.locust.equals("Степная кобылка")) locust.locust_id = "4"; - if (locust.locust.equals("Гребневка")) locust.locust_id = "4"; - if (locust.locust.equals("Азиатская перелётная саранча")) locust.locust_id = "3"; - if (locust.locust.equals("Итальянский прус")) locust.locust_id = "1"; + locust.locust_type_id = "4"; + if (locust.locust.equals("Конек обыкновенный")) locust.locust_type_id = "4"; + if (locust.locust.equals("Конек обыкновенный")) locust.locust_type_id = "4"; + if (locust.locust.equals("Кобылка темнокрылая")) locust.locust_type_id = "4"; + if (locust.locust.equals("Краснокрылая кобылка")) locust.locust_type_id = "4"; + if (locust.locust.equals("Краснокрылая кобылка")) locust.locust_type_id = "4"; + if (locust.locust.equals("Степная кобылка")) locust.locust_type_id = "4"; + if (locust.locust.equals("Гребневка")) locust.locust_type_id = "4"; + if (locust.locust.equals("Азиатская перелётная саранча")) locust.locust_type_id = "3"; + if (locust.locust.equals("Итальянский прус")) locust.locust_type_id = "1"; if (locust.locust.equals("Мароккская саранча, мароккская кобылка, марокканка")) - locust.locust_id = "2"; + locust.locust_type_id = "2"; //фаза саранчи if (!jsonObjSub.isNull("phaseEvolutionName")) @@ -994,20 +1017,20 @@ public class AcceptJSON implements ServletContextAware { } //Если те виды что нам нужны - if (locust.region == null || locust.region.isEmpty() || locust.lat == 0 || locust.lon == 0 || locust.locust.equals("Совка ипсилон") || locust.locust.equals("Восточный майский хрущ") || locust.locust.equals("Кукурузный стеблевой мотылек") || locust.locust.equals("Картофельная, или болотная совка, лиловатая яровая совка") || locust.locust.equals("Луговой мотылёк") || locust.locust.equals("Хлопковая совка") || locust.locust.equals("Стеблевой кукурузный мотылек") || locust.locust.equals("Восточная луговая совка") || locust.locust.equals("Коричневая щитовка") || locust.locust.equals("Продолговатая (чайная) подушечница") || locust.locust.equals("Яблоневая запятовидная щитовка") || locust.locust.equals("Виноградная филлоксера") || locust.locust.equals("Бахчевая коровка")) { + if (regionName == null || regionName.isEmpty() || locust.lat == 0 || locust.lon == 0 || locust.locust.equals("Совка ипсилон") || locust.locust.equals("Восточный майский хрущ") || locust.locust.equals("Кукурузный стеблевой мотылек") || locust.locust.equals("Картофельная, или болотная совка, лиловатая яровая совка") || locust.locust.equals("Луговой мотылёк") || locust.locust.equals("Хлопковая совка") || locust.locust.equals("Стеблевой кукурузный мотылек") || locust.locust.equals("Восточная луговая совка") || locust.locust.equals("Коричневая щитовка") || locust.locust.equals("Продолговатая (чайная) подушечница") || locust.locust.equals("Яблоневая запятовидная щитовка") || locust.locust.equals("Виноградная филлоксера") || locust.locust.equals("Бахчевая коровка")) { } else { - if (locust.locust_id.isEmpty()) { + if (locust.locust_type_id.isEmpty()) { System.out.println("locust.locust = "+locust.locust); - model.addAttribute("PreviewTable", "locust.locust_id == 0 locust name = " + locust.locust); + model.addAttribute("PreviewTable", "locust.locust_type_id == 0 locust name = " + locust.locust); logger.error("Error, not find locust.locust = "+locust.locust); return "json"; } if (locust.region_id.isEmpty()) { - System.out.println("locust.region = "+locust.region); - model.addAttribute("PreviewTable", "locust.region_id == 0 region name = " + locust.region); - logger.error("Error, not find locust.region = "+locust.region); + System.out.println("locust.region = "+regionName); + model.addAttribute("PreviewTable", "locust.region_id == 0 region name = " + regionName); + logger.error("Error, not find locust.region = "+regionName); return "json"; } @@ -1050,10 +1073,10 @@ public class AcceptJSON implements ServletContextAware { locust.terrain = "null"; //У росиян нет сельского округа row = ""; - if (locust.region_id == null || locust.region_id.isEmpty() || locust.district_id == null || locust.district_id.isEmpty() || locust.locust_id == null || locust.locust_id.isEmpty()) { + if (locust.region_id == null || locust.region_id.isEmpty() || locust.district_id == null || locust.district_id.isEmpty() || locust.locust_type_id == null || locust.locust_type_id.isEmpty()) { row = ""; } - row += "" + String.valueOf(cntO+cntV) + "" + locust.eid + "" + locust.lat + "" + locust.lon + "" + locust.region + " = " + locust.region_id + "" + locust.district + " = " + locust.district_id + "" + locust.terrain + "" + locust.village + "" + locust.locust + " = " + locust.locust_id + "" + locust.phase + " = " + locust.locust_have + "" + locust.evp + "" + locust.size + " = " + locust.drawPolygon + "" + locust.date + ""; + row += "" + String.valueOf(cntO+cntV) + "" + locust.eid + "" + locust.lat + "" + locust.lon + "" + regionName + " = " + locust.region_id + "" + locust.district + " = " + locust.district_id + "" + locust.terrain + "" + locust.village + "" + locust.locust + " = " + locust.locust_type_id + "" + locust.phase + " = " + locust.locust_have + "" + locust.evp + "" + locust.size + " = " + locust.drawPolygon + "" + locust.date + ""; row += "\n"; //Если записи не существует то вставляем если существует то обновляем @@ -1160,7 +1183,7 @@ public class AcceptJSON implements ServletContextAware { } try { - stmt.setInt(1, locust.eid); + stmt.setLong(1, locust.eid); stmt.setDouble(2, locust.lat); stmt.setDouble(3, locust.lon); stmt.setInt(4, 7); @@ -1170,7 +1193,7 @@ public class AcceptJSON implements ServletContextAware { stmt.setString(8, locust.date); //27.04.2020 09:17 stmt.setString(9, locust.description); stmt.setString(10, locust.drawPolygon); - stmt.setInt(11, Integer.parseInt(locust.locust_id)); + stmt.setInt(11, Integer.parseInt(locust.locust_type_id)); if (locust.imago_density != null) stmt.setFloat(12, Float.parseFloat(locust.imago_density)); else @@ -1373,978 +1396,945 @@ public class AcceptJSON implements ServletContextAware { return "json"; } //--------------------------------------------------------------------------- + //https://127.0.0.1:8081/AcceptJSON_UZB @ResponseBody - @RequestMapping(value = "/AcceptJSON_UZB", method = { RequestMethod.GET, RequestMethod.POST }) + @RequestMapping(value = "/AcceptJSON_UZB", method = { RequestMethod.GET, RequestMethod.POST }, produces = MediaType.APPLICATION_JSON_VALUE) public String acceptUZB(@ModelAttribute User user) { + JSONObject json = new JSONObject(); + try{ + json.put("error_code",0); + json.put("error_message",""); - Connection conn = null; - try { - Class.forName("org.postgresql.Driver"); - conn = DriverManager.getConnection(db_url, db_login, db_password); - } catch (Exception ex) { - ex.printStackTrace(); - return "{\"error_code\":10000}"; - } + String sql; - //Set UTC time - Statement stm=null; - try { - stm = conn.createStatement(); - try { - stm.execute("SET timezone TO 'UTC';"); - } catch( SQLException ex ) { - ex.printStackTrace(); - } - stm.close(); - } catch (SQLException ex) { - ex.printStackTrace(); - } - - - String sqlData=""; - String table=""; - table+=""; - - //Выбираю максимальную дату проверяю что она меньше текущей минус 2 дня и пытаюсь загрузить её - LocalDate lastDate = null;// = LocalDate.parse("2018-05-05"); - Statement stt = null; - ResultSet rs = null; - try { - stt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); - rs = stt.executeQuery("select to_char(max(date), 'YYYY-MM-DD') as date from integration.days_uz"); - if (rs != null) { - try { - if (rs.next()) { - String value = rs.getString(1); - if(value!=null) - lastDate = LocalDate.parse(value); - } - rs.close(); - } catch (SQLException ex) { - ex.printStackTrace(); + //I select the maximum date, check that it is less than the current minus 2 days and try to load it + LocalDate lastDate = null; + sql= """ + select to_char(max(date), 'YYYY-MM-DD') as date from integration.days_uz + """; + MapSqlParameterSource parameters = new MapSqlParameterSource(); + //parameters.addValue("user_id", claims.getBody().get("user_id")); + List ret = jdbcTemplate.query(sql, parameters, new DBTools.JsonRowMapper()); + List data = new ArrayList<>(); + for (String s : ret) { + JSONObject obj = new JSONObject(s); + if(!obj.isNull("date")) { + lastDate = LocalDate.parse(obj.getString("date")); } } - } catch (SQLException ex) { - ex.printStackTrace(); - }finally { - if(rs!=null) try{rs.close();}catch(SQLException ex){ ex.printStackTrace(); } - if(stt!=null) try{stt.close();}catch(SQLException ex){ ex.printStackTrace(); } + if(lastDate==null) lastDate = LocalDate.parse("2024-10-01"); + + + //By number of day downloading data and write result of downloading to database, try or false, after repair need repeat download + while(lastDate.isBefore(LocalDate.now().minusDays(3))){ + lastDate=lastDate.plusDays(1); + + String dateBegin=lastDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + String dateEnd=dateBegin; + + System.out.println( "date = " + dateEnd ); + + //Download JSON data from server + String content=null; + + String strURL = "https://locust.uz/api/integration/ccalm/survey-list/?recorded_date_gte=" + dateBegin + "&recorded_date_lte=" + dateEnd; + URI uri = URI.create(strURL); + HttpClient client = HttpClient.newHttpClient(); + HttpRequest request = HttpRequest.newBuilder() + .uri(uri) + .header("Accept", "application/json") + .GET() + .build(); + HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); + if (response.statusCode() / 100 == 2) { // 2xx — успешные коды + content = response.body(); + } else { + throw new CustomException(10000, "Error download data from: " + strURL,null,true); + } + + if(content!=null && !content.isEmpty()) { + + + JSONArray jsonArray = new JSONArray(content); + for (Object o : jsonArray) { + JSONObject jsonObj = (JSONObject) o; + + FrmLocustModel locust = convertUZBJSONToLocustModel(jsonObj); + + + //Проверяю есть ли уже такая запись в базе данных + + + + +// +// locust.date = jsonObj.getString("date"); +// String regionName=""; +// if (!jsonObj.isNull("region_name")) +// regionName = jsonObj.getString("region_name"); +// +// if (!jsonObj.isNull("town_name")) +// locust.district = jsonObj.getString("town_name"); +// +// if (!jsonObj.isNull("point")) { +// locust.lon = jsonObj.getJSONObject("point").getJSONArray("coordinates").getDouble(0); +// locust.lat = jsonObj.getJSONObject("point").getJSONArray("coordinates").getDouble(1); +// } +// +// //Контур зоны распространения ВО Polygon (geoJSON) +// locust.drawPolygon = null; +// if (!jsonObj.isNull("drawPolygon")) { +// locust.drawPolygon = jsonObj.getJSONObject("drawPolygon").toString(); +// } +// +// //Площадь контура зоны распространения, в случае если специалист указал его +// locust.size = "null"; +// if (!jsonObj.isNull("polygonArea")) +// locust.size = String.valueOf(jsonObj.getDouble("polygonArea")); +// +// //jsonObj.drawPolygon Краснодар +// +// if (locust.region.length() > 0) { +// //Выбираю ID области +// locust.region_id = ""; +// //Statement stt = null; +// //ResultSet rs = null; +// try { +// +// stt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); +// String sql_query = "select id from main.countriesregions where name like '%" + locust.region + "%';"; +// rs = stt.executeQuery(sql_query); +// if (rs != null) { +// try { +// if (rs.next()) { +// locust.region_id = rs.getString(1); +// } +// rs.close(); +// } catch (SQLException ex) { +// ex.printStackTrace(); +// } +// } +// } catch (SQLException ex) { +// ex.printStackTrace(); +// } finally { +// if (rs != null) try { +// rs.close(); +// } catch (SQLException ex) { +// ex.printStackTrace(); +// } +// if (stt != null) try { +// stt.close(); +// } catch (SQLException ex) { +// ex.printStackTrace(); +// } +// } +// +// +// /*if(locust.region_id.isEmpty()){ +// if(locust.region.indexOf("Воронежс��ая область")>=0) locust.region_id="110"; +// if(locust.region.indexOf("Кра��нодарский край")>=0) locust.region_id="164"; +// if(locust.region.indexOf("Астраха��ская область")>=0) locust.region_id="68"; //dayOfYear: 97 at year: 2022 = 07.04.2022 +// if(locust.region.indexOf("Астраханская област��")>=0) locust.region_id="68"; // dayOfYear: 101 at year: 2022 = 11.04.2022 +// }*/ +// +// if (locust.region_id.length() > 0) { +// //Выбираю id региона (main.countriesdistricts) +// locust.district_id = ""; +// stt = null; +// rs = null; +// try { +// +// if (locust.district.equals("Алапаевский район")) +// locust.district = "городской округ Алапаевское"; +// if (locust.district.equals("Сухоложский район")) +// locust.district = "городской округ Сухой Лог"; +// if (locust.district.equals("Талицкий район")) +// locust.district = "Талицкий городской округ"; +// if (locust.district.equals("Артинский район")) +// locust.district = "Талицкий городской округ"; +// if (locust.district.equals("Богдановичский район")) +// locust.district = "городской округ Богданович"; +// if (locust.district.equals("Красноуфимский район")) +// locust.district = "Красноуфимский округ"; +// if (locust.district.equals("Белоярский район")) locust.region_id = "210"; +// if (locust.district.equals("Пышминский район")) +// locust.district = "Пышминский городской округ"; +// if (locust.district.equals("Ирбитский район")) +// locust.district = "городской округ Ирбитское"; +// if (locust.district.equals("Фрязино г.о.")) locust.district = "городской округ Фрязино"; +// if (locust.district.equals("Коломенский г.о.")) locust.district = "Коломенский район"; +// if (locust.district.equals("Протвино г.о.")) +// locust.district = "городской округ Протвино"; +// if (locust.district.equals("Зарайск г.о.")) locust.district = "Зарайский район"; +// if (locust.district.equals("Анапский район")) locust.district = "городской округ Анапа"; +// if (locust.district.equals("Луховицы г.о.")) locust.district = "Луховицкий район"; +// if (locust.district.equals("Дергачевский район")) +// locust.district = "Дергачёвский район"; +// if (locust.district.equals("Чистоозерный район")) +// locust.district = "Чистоозёрный район"; +// if (locust.district.equals("Сунжа город")) locust.district = "Сунженский район"; +// if (locust.district.equals("Буденновский район")) +// locust.district = "Будённовский район"; +// if (locust.district.equals("Новоселовский район")) { +// locust.district = "Новоселицкий район"; +// locust.region_id = "168"; +// } +// if (locust.district.equals("Тимашевский район")) locust.district = "Тимашёвский район"; +// if (locust.district.equals("Славгородский район")) +// locust.district = "городской округ Славгород"; +// if (locust.district.equals("Режевский район")) +// locust.district = "Режевской городской округ"; +// if (locust.district.equals("Веселовский район")) locust.district = "Весёловский район"; +// if (locust.district.equals("Карабулак город")) +// locust.district = "городской округ Карабулак"; +// if (locust.district.equals("Пугачевский район")) locust.district = "Пугачёвский район"; +// if (locust.district.equals("Кущевский район")) locust.district = "Кущёвский район"; +// if (locust.district.equals("Репьевский район")) locust.district = "Репьёвский район"; +// if (locust.district.equals("Калачевский район")) locust.district = "Калачёвский район"; +// if (locust.district.equals("Гайский район")) +// locust.district = "Гайский городской округ"; +// if (locust.district.equals("Новохоперский район")) +// locust.district = "Новохопёрский район"; +// if (locust.district.equals("Федоровский район")) locust.district = "Фёдоровский район"; +// if (locust.district.equals("Серебряные Пруды г.о.")) +// locust.district = "городской округ Серебряные Пруды"; +// if (locust.district.equals("Минераловодский район")) +// locust.district = "Минераловодский городской округ"; +// if (locust.district.equals("Рузский г.о.")) locust.district = "Рузский район"; +// if (locust.district.equals("Воробьевский район")) +// locust.district = "Воробьёвский район"; +// if (locust.district.equals("Ачитский район")) +// locust.district = "Ачитский городской округ"; +// if (locust.district.equals("Грачевский район")) locust.district = "Грачёвский район"; +// if (locust.district.equals("Уссурийский район")) +// locust.district = "Уссурийский городской округ"; +// if (locust.district.equals("Сорочинский район")) +// locust.district = "Сорочинский городской округ"; +// if (locust.district.equals("Ясненский район")) +// locust.district = "Ясненский городской округ"; +// +// stt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); +// String sql_query = "select id from main.countriesdistricts where region_id=" + locust.region_id + " and name like '%" + locust.district + "%';"; +// rs = stt.executeQuery(sql_query); +// if (rs != null) { +// try { +// if (rs.next()) { +// locust.district_id = rs.getString(1); +// } +// rs.close(); +// } catch (SQLException ex) { +// ex.printStackTrace(); +// } +// } +// } catch (SQLException ex) { +// ex.printStackTrace(); +// } finally { +// if (rs != null) try { +// rs.close(); +// } catch (SQLException ex) { +// ex.printStackTrace(); +// } +// if (stt != null) try { +// stt.close(); +// } catch (SQLException ex) { +// ex.printStackTrace(); +// } +// } +// } +// } +// +// String row = ""; +// +// if (!jsonObj.isNull("subjectList")) { +// JSONArray jsonArraySub = jsonObj.getJSONArray("subjectList"); +// +// for (Object o2 : jsonArraySub) { +// JSONObject jsonObjSub = (JSONObject) o2; +// +// locust.eid = jsonObjSub.getInt("id"); +// locust.phytoType = jsonObjSub.getString("phytoType"); //"Вредители" или "Обработка" +// if (locust.phytoType.equals("Обработка")) { +// /* +// locust.insecticide_name = jsonObjSub.getString("nameSubject"); //Наименование действующего вещества +// if (!jsonObjSub.isNull("nameLatSubject")) +// locust.insecticide_active_substance = jsonObjSub.getString("nameLatSubject"); //Латинское наименование действующего вещества +// if (!jsonObjSub.isNull("protectionDoze")) +// locust.insecticide_dose = String.valueOf(jsonObjSub.getFloat("protectionDoze")); //Доза внесения препарата (л/га) +// +// if (!jsonObjSub.isNull("agroTreatmentType")) { +// String agroTreatmentType = jsonObjSub.getString("agroTreatmentType"); //Тип обработки (Агротехнический, Авиационный, Наземный) +// if (agroTreatmentType != null && !agroTreatmentType.isEmpty()) { +// if (agroTreatmentType.equals("GROUND")) { +// locust.spray_platform = "3"; +// } else if (agroTreatmentType.equals("AGROTECHNICAL")) { +// locust.spray_platform = "5"; +// } else if (agroTreatmentType.equals("AVIATION")) { +// locust.spray_platform = "1"; +// } +// } +// if (locust.spray_platform == null || locust.spray_platform.isEmpty()) { +// //model.addAttribute("PreviewTable", "Error spray_platform"); +// return "json"; +// } +// } +// +// //То что не знаю куда записывать записываю в description +// locust.description = ""; +// if (!jsonObjSub.isNull("agroTreatmentPercentage")) +// locust.description += "Процент обработанной площади: " + String.valueOf(jsonObjSub.getFloat("agroTreatmentPercentage")) + "\n"; +// if (!jsonObjSub.isNull("agroTreatmentPow")) +// locust.description += "Степень обработки: " + jsonObjSub.getString("agroTreatmentPow") + "\n"; +// +// //Если записи не существует то вставляем если существует то обновляем +// boolean exists = false; //Is there a record. +// Statement st; +// try { +// st = conn.createStatement(); +// //ResultSet rs=null; +// try { +// String sql = "select 1 from main.frmlocustdel where eid=" + String.valueOf(locust.eid); +// rs = st.executeQuery(sql); +// } catch (SQLException ex) { +// ex.printStackTrace(); +// //model.addAttribute("PreviewTable", "Error select"); +// return "json"; +// } +// if (rs != null) { +// if (rs.next()) +// exists = true; +// } +// st.close(); +// } catch (SQLException ex) { +// ex.printStackTrace(); +// //model.addAttribute("PreviewTable", "Error select 2"); +// return "json"; +// } +// +// PreparedStatement stmt = null; +// String sql = ""; +// if (exists) { +// System.out.println(String.valueOf(cntV)+") update main.frmlocustdel"); +// sql = "update main.frmlocustdel set\n" +// + " eid=?,\n" +// + " lat_center=?,\n" +// + " lon_center=?,\n" +// + " country_id=?,\n" +// + " region_id=?,\n" +// + " area=?,\n" +// + " district=?,\n" +// + " date=TO_TIMESTAMP(?, 'DD.MM.YYYY HH24:MI'),\n" +// + " description=?,\n" +// + " geom=ST_SetSRID(ST_GeomFromGeoJSON(?),4326),\n" +// +// + " insecticide_name=?,\n" +// + " insecticide_active_substance=?,\n" +// + " insecticide_dose=?,\n" +// + " spray_platform=?\n" +// + " where eid='" + locust.eid + "'"; +// try { +// stmt = conn.prepareStatement(sql); +// } catch (SQLException ex) { +// ex.printStackTrace(); +// //model.addAttribute("PreviewTable", "Error prepare 1"); +// return "json"; +// } +// } else { +// System.out.println(String.valueOf(cntV)+") insert into main.frmlocustdel"); +// sql = "insert into main.frmlocustdel(\n" +// + " eid,\n" //1 +// + " lat_center,\n" //2 +// + " lon_center,\n" //3 +// + " country_id,\n" //4 +// + " region_id,\n" //5 +// + " area,\n" //6 +// + " district,\n" //7 +// + " date,\n" //8 +// + " description,\n" //9 +// + " geom,\n" //10 +// +// + " insecticide_name,\n" //11 +// + " insecticide_active_substance,\n" //12 +// + " insecticide_dose,\n" //13 +// + " spray_platform\n" //14 +// +// + ")values(\n" +// + " ?,\n" //1 eid +// + " ?,\n" //2 lat1 +// + " ?,\n" //3 lon1 +// + " ?,\n" //4 country_id +// + " ?,\n" //5 region_id +// + " ?,\n" //6 district (area) +// + " ?,\n" //7 district (area) +// + " TO_TIMESTAMP(?, 'DD.MM.YYYY HH24:MI'),\n" //8 date +// + " ?,\n" //9 description +// + " ST_SetSRID(ST_GeomFromGeoJSON(?),4326),\n" //10 geom +// +// + " ?,\n" //11 insecticide_name +// + " ?,\n" //12 insecticide_active_substance +// + " ?,\n" //13 insecticide_dose +// + " ?\n" //14 spray_platform +// + ")"; +// try { +// stmt = conn.prepareStatement(sql); +// } catch (SQLException ex) { +// ex.printStackTrace(); +// //model.addAttribute("PreviewTable", "Error prepare 2"); +// return "json"; +// } +// } +// +// try { +// stmt.setInt(1, locust.eid); +// stmt.setDouble(2, locust.lat); +// stmt.setDouble(3, locust.lon); +// stmt.setInt(4, 7); //country_id +// stmt.setInt(5, Integer.parseInt(locust.region_id)); //region_id +// stmt.setString(6, locust.district); //Пишу в поле "area" +// stmt.setString(7, null); +// stmt.setString(8, locust.date); //27.04.2020 09:17 +// stmt.setString(9, locust.description); +// stmt.setString(10, locust.drawPolygon); +// +// stmt.setString(11, locust.insecticide_name); +// stmt.setString(12, locust.insecticide_active_substance); +// if (locust.insecticide_dose == null || locust.insecticide_dose.isEmpty()) +// stmt.setNull(13, Types.DOUBLE); +// else +// stmt.setDouble(13, Double.parseDouble(locust.insecticide_dose)); +// +// if (locust.spray_platform == null || locust.spray_platform.isEmpty()) +// stmt.setNull(14, Types.INTEGER); +// else +// stmt.setInt(14, Integer.parseInt(locust.spray_platform)); +// +// } catch (SQLException ex) { +// ex.printStackTrace(); +// //model.addAttribute("PreviewTable", "Error set data"); +// return "json"; +// } +// +// //Выпоняю запрос на свтавку либо обновление +// try { +// stmt.execute(); +// } catch (SQLException ex) { +// ex.printStackTrace(); +// //model.addAttribute("PreviewTable", "Error execute frmlocustdel"); +// return "json"; +// } +// cntO++; +// */ +// } else if (locust.phytoType.equals("Вредители")) { +// if (!jsonObjSub.isNull("nameSubject")) +// locust.locust = jsonObjSub.getString("nameSubject"); +// +// //Вид саранчи +// locust.locust_type_id = ""; +// if (locust.locust.equals("Короткокрылый зеленчук")) locust.locust_type_id = "4"; +// if (locust.locust.equals("Среднерусская перелётная саранча")) locust.locust_type_id = "4"; +// if (locust.locust.equals("Сибирская кобылка")) locust.locust_type_id = "4"; +// if (locust.locust.equals("Кобылка изменчивая")) locust.locust_type_id = "4"; +// if (locust.locust.equals("Кобылка пёстрая")) locust.locust_type_id = "4"; +// if (locust.locust.equals("Кобылка крестовая")) locust.locust_type_id = "4"; +// if (locust.locust.equals("Кобылка сибирская")) locust.locust_type_id = "4"; +// if (locust.locust.equals("Кобылка голубокрылая")) locust.locust_type_id = "4"; +// if (locust.locust.equals("Кобылка бескрылая")) locust.locust_type_id = "4"; +// if (locust.locust.equals("Кобылка чернополосая")) locust.locust_type_id = "4"; +// if (locust.locust.equals("Кобылка трескучая")) locust.locust_type_id = "4"; +// if (locust.locust.equals("Кобылка египетская")) locust.locust_type_id = "4"; +// if (locust.locust.equals("Трещотка ширококрылая")) locust.locust_type_id = "4"; +// if (locust.locust.equals("Бахчевая кобылка")) locust.locust_type_id = "4"; +// if (locust.locust.equals("Малая крестовичка")) locust.locust_type_id = "4"; +// if (locust.locust.equals("Конёк белополосый (белополосая кобылка)")) +// locust.locust_type_id = "4"; +// if (locust.locust.equals("Конек обыкновенный")) locust.locust_type_id = "4"; +// if (locust.locust.equals("Конек обыкновенный")) locust.locust_type_id = "4"; +// if (locust.locust.equals("Кобылка темнокрылая")) locust.locust_type_id = "4"; +// if (locust.locust.equals("Краснокрылая кобылка")) locust.locust_type_id = "4"; +// if (locust.locust.equals("Краснокрылая кобылка")) locust.locust_type_id = "4"; +// if (locust.locust.equals("Степная кобылка")) locust.locust_type_id = "4"; +// if (locust.locust.equals("Гребневка")) locust.locust_type_id = "4"; +// if (locust.locust.equals("Азиатская перелётная саранча")) locust.locust_type_id = "3"; +// if (locust.locust.equals("Итальянский прус")) locust.locust_type_id = "1"; +// if (locust.locust.equals("Мароккская саранча, мароккская кобылка, марокканка")) +// locust.locust_type_id = "2"; +// +// //фаза саранчи +// if (!jsonObjSub.isNull("phaseEvolutionName")) +// locust.phase = jsonObjSub.getString("phaseEvolutionName"); +// +// locust.locust_have = "3"; +// if (locust.phase != null) { +// if (locust.phase.equals("Кубышка")) locust.locust_have = "2"; //Кубышка = Яйца +// if (locust.phase.equals("Гусеница")) locust.locust_have = "3"; +// if (locust.phase.equals("Личинка 2-го возраста")) locust.locust_have = "3"; +// if (locust.phase.equals("Личинка 3-го возраста")) locust.locust_have = "3"; +// if (locust.phase.equals("Личинка 4-го возраста")) locust.locust_have = "3"; +// if (locust.phase.equals("Личинка 5-го возраста")) locust.locust_have = "3"; +// if (locust.phase.equals("Имаго")) locust.locust_have = "5"; +// } +// //Если эта анкета "Имаго" то записываем плотность имаго на m2 +// if (locust.locust_have.equals("5")) { +// if (!jsonObjSub.isNull("subPestCount")) +// locust.imago_density = String.valueOf(jsonObjSub.getFloat("subPestCount")); +// } +// //Если эта анкета "Кубышка"="Яйца" то записываем плотность кулиг на m2 +// if (locust.locust_have.equals("2")) { +// if (!jsonObjSub.isNull("subPestCount")) +// locust.eggs_capsules_density = String.valueOf(jsonObjSub.getFloat("subPestCount")); +// } +// //Если эта анкета "Кулиги" то записываем плотность кулиг на m2 +// if (locust.locust_have.equals("4")) { +// if (!jsonObjSub.isNull("subPestCount")) +// locust.kuliguli_density = String.valueOf(jsonObjSub.getFloat("subPestCount")); +// } +// //Если эта анкета "Личинок" то записываем плотность личинок на m2 +// if (locust.locust_have.equals("3")) { +// if (!jsonObjSub.isNull("subPestCount")) +// locust.larva_density = String.valueOf(jsonObjSub.getFloat("subPestCount")); +// } +// +// //Биотоп +// switch (jsonObjSub.getString("faoBiotopeName")) { +// case "CIT степь": +// locust.bio_biotope_id = "1"; +// break; +// case "CIT залежь": +// locust.bio_biotope_id = "2"; +// break; +// case "CIT посевы": +// locust.bio_biotope_id = "3"; +// break; +// case "CIT пастбища": +// locust.bio_biotope_id = "11"; +// break; +// case "CIT холмы, горы": +// locust.bio_biotope_id = "19"; +// break; +// case "DMA равнины": +// locust.bio_biotope_id = "4"; +// break; +// case "DMA посевы": +// locust.bio_biotope_id = "6"; +// break; +// case "DMA пастбища": +// locust.bio_biotope_id = "13"; +// break; +// case "DMA холмы, горы": +// locust.bio_biotope_id = "14"; +// break; +// case "LMI низкие сухие тростники": +// locust.bio_biotope_id = "7"; +// break; +// case "LMI высокие влажные тростники": +// locust.bio_biotope_id = "8"; +// break; +// case "LMI другое": +// locust.bio_biotope_id = "10"; +// break; +// case "Другие саранчовые на посевах": +// locust.bio_biotope_id = "15"; +// break; +// case "Другие саранчовые на равнине": +// locust.bio_biotope_id = "16"; +// break; +// case "Другие саранчовые на холмах": +// locust.bio_biotope_id = "17"; +// break; +// case "Другое": +// locust.bio_biotope_id = "18"; +// break; +// default: +// locust.bio_biotope_id = null; +// break; +// } +// +// //Если те виды что нам нужны +// if (locust.region == null || locust.region.isEmpty() || locust.lat == 0 || locust.lon == 0 || locust.locust.equals("Совка ипсилон") || locust.locust.equals("Восточный майский хрущ") || locust.locust.equals("Кукурузный стеблевой мотылек") || locust.locust.equals("Картофельная, или болотная совка, лиловатая яровая совка") || locust.locust.equals("Луговой мотылёк") || locust.locust.equals("Хлопковая совка") || locust.locust.equals("Стеблевой кукурузный мотылек") || locust.locust.equals("Восточная луговая совка") || locust.locust.equals("Коричневая щитовка") || locust.locust.equals("Продолговатая (чайная) подушечница") || locust.locust.equals("Яблоневая запятовидная щитовка") || locust.locust.equals("Виноградная филлоксера") || locust.locust.equals("Бахчевая коровка")) { +// +// } else { +// +// if (locust.locust_type_id.isEmpty()) { +// System.out.println("locust.locust = "+locust.locust); +// //model.addAttribute("PreviewTable", "locust.locust_type_id == 0 locust name = " + locust.locust); +// logger.error("Error, not find locust.locust = "+locust.locust); +// return "json"; +// } +// if (locust.region_id.isEmpty()) { +// System.out.println("locust.region = "+locust.region); +// //model.addAttribute("PreviewTable", "locust.region_id == 0 region name = " + locust.region); +// logger.error("Error, not find locust.region = "+locust.region); +// return "json"; +// } +// +// //Тех полей что нет в анкете вствляю в комментарии +// try { +// locust.description = ""; +// +// if (jsonObjSub.getBoolean("notFound")) +// locust.description += "Вредитель не обнаружен: " + jsonObjSub.getString("nameSubject") + "\n"; +// else +// locust.description += "Вредитель обнаружен: " + jsonObjSub.getString("nameSubject") + "\n"; +// +// if (!jsonObjSub.isNull("phaseEvolutionName")) +// locust.description += "Фаза: " + jsonObjSub.getString("phaseEvolutionName") + "\n"; //Так как фаза у росиян более подробная +// if (!jsonObjSub.isNull("subPestCount")) { +// locust.description += "Вредителей: " + jsonObjSub.getFloat("subPestCount"); +// if (!jsonObjSub.isNull("unitName")) +// locust.description += " " + jsonObjSub.getString("unitName"); +// locust.description += "\n"; +// } +// +// if (!jsonObj.isNull("cropCurrentType")) +// locust.description += "Тип сева: " + jsonObj.getString("cropCurrentType") + "\n"; +// if (!jsonObj.isNull("cropCurrentCulture")) +// locust.description += "Наименование культуры: " + jsonObj.getString("cropCurrentCulture") + "\n"; +// if (!jsonObj.isNull("cropCurrentCultureSort")) +// locust.description += "Наименование сорта культуры: " + jsonObj.getString("cropCurrentCultureSort") + "\n"; +// if (!jsonObj.isNull("cropCurrentGrowthPhase")) +// locust.description += "Фаза роста культуры: " + jsonObj.getString("cropCurrentGrowthPhase") + "\n"; +// if (!jsonObj.isNull("cropFieldArea")) { +// locust.description += "Площадь поля: " + jsonObj.getFloat("cropFieldArea") + "\n"; +// locust.bio_hectare = String.valueOf(jsonObj.getFloat("cropFieldArea")); +// } +// +// +// } catch (Exception ex) { +// ex.printStackTrace(); +// } +// +// locust.terrain = "null"; //У росиян нет сельского округа +// +// row = ""; +// if (locust.region_id == null || locust.region_id.isEmpty() || locust.district_id == null || locust.district_id.isEmpty() || locust.locust_type_id == null || locust.locust_type_id.isEmpty()) { +// row = ""; +// } +// row += ""; +// row += "\n"; +// +// //Если записи не существует то вставляем если существует то обновляем +// boolean exists = false; //Is there a record. +// Statement st; +// try { +// st = conn.createStatement(); +// //ResultSet rs=null; +// try { +// String sql = "select 1 from main.frmlocust where eid=" + String.valueOf(locust.eid); +// rs = st.executeQuery(sql); +// } catch (SQLException ex) { +// ex.printStackTrace(); +// //model.addAttribute("PreviewTable", "Error select"); +// return "json"; +// } +// if (rs != null) { +// if (rs.next()) +// exists = true; +// } +// st.close(); +// } catch (SQLException ex) { +// ex.printStackTrace(); +// //model.addAttribute("PreviewTable", "Error select 2"); +// return "json"; +// } +// +// PreparedStatement stmt = null; +// String sql = ""; +// if (exists) { +// System.out.println(String.valueOf(cntV)+") update main.frmlocust"); +// sql = "update main.frmlocust set\n" +// + " eid=?,\n" +// + " lat_center=?,\n" +// + " lon_center=?,\n" +// + " country_id=?,\n" +// + " region_id=?,\n" +// + " area=?,\n" +// + " district=?,\n" +// + " date=TO_TIMESTAMP(?, 'DD.MM.YYYY HH24:MI'),\n" +// + " description=?,\n" +// + " geom=ST_SetSRID(ST_GeomFromGeoJSON(?),4326),\n" +// + " locust_type_id=?,\n" +// + " imago_density=?,\n" +// + " kuliguli_density=?,\n" +// + " larva_density=?,\n" +// + " bio_hectare=?\n," +// + " eggs_capsules_density=?,\n" +// + " bio_biotope_id=?\n" +// + " where eid='" + locust.eid + "'"; +// try { +// stmt = conn.prepareStatement(sql); +// } catch (SQLException ex) { +// ex.printStackTrace(); +// //model.addAttribute("PreviewTable", "Error prepare 1"); +// return "json"; +// } +// } else { +// System.out.println(String.valueOf(cntV)+") insert into main.frmlocust"); +// sql = "insert into main.frmlocust(\n" +// + " eid,\n" //1 +// + " lat_center,\n" //2 +// + " lon_center,\n" //3 +// + " country_id,\n" //4 +// + " region_id,\n" //5 +// + " area,\n" //6 +// + " district,\n" //7 +// + " date,\n" //8 +// + " description,\n" //9 +// + " geom,\n" //10 +// + " locust_type_id,\n" //11 +// + " imago_density,\n" //12 +// + " kuliguli_density,\n" //13 +// + " larva_density,\n" //14 +// + " bio_hectare,\n" //15 +// + " eggs_capsules_density,\n" //16 +// + " bio_biotope_id\n" //17 +// + ")values(\n" +// + " ?,\n" //1 eid +// + " ?,\n" //2 lat1 +// + " ?,\n" //3 lon1 +// + " ?,\n" //4 country_id +// + " ?,\n" //5 region_id +// + " ?,\n" //6 district (area) +// + " ?,\n" //7 district (area) +// + " TO_TIMESTAMP(?, 'DD.MM.YYYY HH24:MI'),\n" //8 date +// + " ?,\n" //9 description +// + " ST_SetSRID(ST_GeomFromGeoJSON(?),4326),\n" //10 geom +// + " ?,\n" //11 locust_type_id +// + " ?,\n" //12 imago_density +// + " ?,\n" //13 kuliguli_density +// + " ?,\n" //14 larva_density +// + " ?,\n" //15 +// + " ?,\n" //16 +// + " ?\n" //17 +// + ")"; +// try { +// stmt = conn.prepareStatement(sql); +// } catch (SQLException ex) { +// ex.printStackTrace(); +// //model.addAttribute("PreviewTable", "Error prepare 2"); +// return "json"; +// } +// } +// +// try { +// stmt.setInt(1, locust.eid); +// stmt.setDouble(2, locust.lat); +// stmt.setDouble(3, locust.lon); +// stmt.setInt(4, 7); +// stmt.setInt(5, Integer.parseInt(locust.region_id)); +// stmt.setString(6, locust.district); //Пишу в поле "area" +// stmt.setString(7, null); +// stmt.setString(8, locust.date); //27.04.2020 09:17 +// stmt.setString(9, locust.description); +// stmt.setString(10, locust.drawPolygon); +// stmt.setInt(11, Integer.parseInt(locust.locust_type_id)); +// if (locust.imago_density != null) +// stmt.setFloat(12, Float.parseFloat(locust.imago_density)); +// else +// stmt.setNull(12, Types.FLOAT); +// if (locust.kuliguli_density != null) +// stmt.setFloat(13, Float.parseFloat(locust.kuliguli_density)); +// else +// stmt.setNull(13, Types.FLOAT); +// if (locust.larva_density != null) +// stmt.setFloat(14, Float.parseFloat(locust.larva_density)); +// else +// stmt.setNull(14, Types.FLOAT); +// if (locust.bio_hectare != null) +// stmt.setFloat(15, Float.parseFloat(locust.bio_hectare)); +// else +// stmt.setNull(15, Types.FLOAT); +// if (locust.eggs_capsules_density != null) +// stmt.setFloat(16, Float.parseFloat(locust.eggs_capsules_density)); +// else +// stmt.setNull(16, Types.FLOAT); +// if (locust.bio_biotope_id != null) +// stmt.setFloat(17, Float.parseFloat(locust.bio_biotope_id)); +// else +// stmt.setNull(17, Types.INTEGER); +// +// } catch (SQLException ex) { +// ex.printStackTrace(); +// //model.addAttribute("PreviewTable", "Error set data"); +// return "json"; +// } +// //Выпоняю запрос на свтавку либо обновление +// try { +// stmt.execute(); +// } catch (SQLException ex) { +// ex.printStackTrace(); +// //model.addAttribute("PreviewTable", "Error execute 0"); +// return "json"; +// } +// cntV++; +// +// //Скачиваю фотографию для анкеты +// sb = new StringBuilder(); +// try { +// String strURL = "https://rscagex.ru/pmon/rest/getPhotosByParentId?token=QVOUE97HBSI6LBSGJGQZMP3KPSS1QK&parentId=" + locust.eid; +// URL url = new URL(strURL); +// HttpURLConnection hConn = (HttpURLConnection) url.openConnection(); +// hConn.setRequestMethod("GET"); +// //hConn.setRequestProperty("Range","bytes=" + posStart + "-" + posEnd); +// hConn.connect(); +// int responseCode = hConn.getResponseCode(); +// if (responseCode / 100 == 2) //Code 206 is "Partial Content" +// { +// InputStream inputStream = hConn.getInputStream(); +// //FileOutputStream outputStream = new FileOutputStream(strFile); +// int bytesRead; +// byte[] buffer = new byte[BUFFER_SIZE]; +// while ((bytesRead = inputStream.read(buffer)) != -1) { +// //outputStream.write(buffer, 0, bytesRead); +// sb.append(new String(buffer, 0, bytesRead)); +// } +// //outputStream.close(); +// inputStream.close(); +// } +// hConn.disconnect(); +// } catch (IOException e) { +// e.printStackTrace(); +// } +// +// String base64 = sb.toString(); +// if (base64.length() > 10) { +// //Так как мне присылаю неправильный jSOM то пытаюсь его поправить,. +// base64 = base64.replace("[", "[\""); +// base64 = base64.replace("]", "\"]"); +// base64 = base64.replace(", ", "\",\""); +// +// String strFile = "O:\\temp\\CCALM\\ru_" + locust.eid; +// int pos = 0; +// +// JSONArray jsonArrayIMGS = new JSONArray(base64); +// for (Object oStr : jsonArrayIMGS) { +// String jsonObjIMG = (String) oStr; +// pos++; +// if (pos > 3) break; +// +// //try { +// // BufferedWriter writer = new BufferedWriter(new FileWriter(strFile)); +// // writer.write(jsonObjIMG); +// // writer.close(); +// //} catch (IOException e1) { +// // e1.printStackTrace(); +// //} +// +// byte[] decodedString = null; +// try { +// decodedString = Base64.getDecoder().decode(jsonObjIMG); +// } catch (Exception e) { +// e.printStackTrace(); +// //model.addAttribute("PreviewTable", "Error decode"); +// return "json"; +// } +// +// if (decodedString != null) { +// try { +// FileUtils.writeByteArrayToFile(new File(strFile + "_" + pos + ".jpg"), decodedString); +// } catch (IOException e) { +// e.printStackTrace(); +// } +// } +// decodedString = null; +// +// BufferedImage imageOnDisk = null; +// try { +// imageOnDisk = ImageIO.read(new File(strFile + "_" + pos + ".jpg")); +// } catch (IOException e) { +// e.printStackTrace(); +// } +// if (imageOnDisk != null) { +// Image img; +// BufferedImage buffered; +// if (imageOnDisk.getWidth() > imageOnDisk.getHeight()) { +// img = imageOnDisk.getScaledInstance(1024, 768, Image.SCALE_DEFAULT); +// buffered = new BufferedImage(1024, 768, BufferedImage.TYPE_INT_RGB); +// buffered.getGraphics().drawImage(img, 0, 0, null); +// } else { +// img = imageOnDisk.getScaledInstance(768, 1024, Image.SCALE_DEFAULT); +// buffered = new BufferedImage(768, 1024, BufferedImage.TYPE_INT_RGB); +// buffered.getGraphics().drawImage(img, 0, 0, null); +// } +// try { +// //BufferedImage bIMG = toBufferedImage(img); +// ImageIO.write(buffered, "jpg", new File(strFile + "_" + pos + ".jpg")); +// } catch (IOException ex) { +// ex.printStackTrace(); +// } +// } +// +// +// if (pos > 3) { +// break; +// } else { +// sql = ""; +// if (pos == 1) { +// sql = "update main.frmlocust set image_name1='ru_" + locust.eid + "_" + pos + ".jpg" + "' where eid=" + locust.eid; +// } +// if (pos == 2) { +// sql = "update main.frmlocust set image_name2='ru_" + locust.eid + "_" + pos + ".jpg" + "' where eid=" + locust.eid; +// } +// if (pos == 3) { +// sql = "update main.frmlocust set image_name3='ru_" + locust.eid + "_" + pos + ".jpg" + "' where eid=" + locust.eid; +// } +// if (sql.length() > 0) { +// try { +// st = conn.createStatement(); +// st.execute(sql); +// st.close(); +// } catch (SQLException ex) { +// ex.printStackTrace(); +// //model.addAttribute("PreviewTable", "Error update img"); +// return "json"; +// } +// } +// } +// } +// } +// } +// +// } //equals("Вредители") +// +// } +// +// } +// +// table += row; + } +// System.out.println("Обработка = "+String.valueOf(cntO)); +// System.out.println("Вредители = "+String.valueOf(cntV)); +// +// +// table += "
Ext idLatitude (Широта)Longitude (Долгота)Oblast (область)District (Район)Сельский округХозяйство или местностьВид саранчиФазаЭПВЗаселено ГаДата
" + String.valueOf(cntO+cntV) + "" + locust.eid + "" + locust.lat + "" + locust.lon + "" + locust.region + " = " + locust.region_id + "" + locust.district + " = " + locust.district_id + "" + locust.terrain + "" + locust.village + "" + locust.locust + " = " + locust.locust_type_id + "" + locust.phase + " = " + locust.locust_have + "" + locust.evp + "" + locust.size + " = " + locust.drawPolygon + "" + locust.date + "
"; +// +// //json=json.substring(0,json.length()-1); //Удаляю последнюю запятую +// //json+="\n]}"; +// +// //Сохраняю lastDate в базу данных +// try { +// Statement st = conn.createStatement(); +// st.execute("insert into integration.days_ru(date,count)values('" + lastDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "'," + String.valueOf(cntV+cntO) + ");"); +// st.close(); +// } catch (SQLException ex) { +// ex.printStackTrace(); +// //model.addAttribute("PreviewTable", "Error update img"); +// return "json"; +// } + } + } + + + } catch (CustomException e) { + if(e.isSaveToLog()){ + String uuid = UUID.randomUUID().toString(); + logger.error(uuid,e); + } + json = e.getJson(); + } catch (Exception e) { + String uuid = UUID.randomUUID().toString(); + logger.error(uuid,e); + json = Tools.createJSONError(10000,"Internal_Server_Error", (String)null, uuid); } - if(lastDate==null) lastDate = LocalDate.parse("2024-10-01"); - - - //By number of day downloading data and write result of downloading to database, try or false, after repair need repeat download - while(lastDate.isBefore(LocalDate.now().minusDays(3))){ - lastDate=lastDate.plusDays(1); - - String dateBegin=lastDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); - String dateEnd=dateBegin; - - System.out.println( "date = " + dateEnd ); - - //Download JSON data from server - StringBuilder sb = new StringBuilder(); - try - { - String strURL="https://locust.uz/api/integration/ccalm/survey-list/?recorded_date_gte="+dateBegin+"&recorded_date_lte="+dateEnd; - - URL url = new URL(strURL); - HttpURLConnection hConn = (HttpURLConnection) url.openConnection(); - hConn.setRequestMethod("GET"); - hConn.setRequestProperty("Accept", "application/json"); - hConn.connect(); - int responseCode = hConn.getResponseCode(); - if (responseCode / 100 == 2) //Code 206 is "Partial Content" - { - //InputStream inputStream = hConn.getInputStream(); - InputStreamReader inputStream = new InputStreamReader(hConn.getInputStream(), "UTF-8"); - int bytesRead; - char[] buffer = new char[BUFFER_SIZE]; - while ((bytesRead = inputStream.read(buffer)) != -1) { - sb.append(new String(buffer,0,bytesRead)); - } - inputStream.close(); - } - hConn.disconnect(); - } - catch (IOException e) - { - e.printStackTrace(); - } - String content=sb.toString(); - if(content!=null && !content.isEmpty()) { - - //byte[] data = sb.toByteArray(in); - //String content=new String(data, Charsets.UTF_8); - - //Iterate over the elements of the array. - int cntO = 1; - int cntV = 1; - JSONArray jsonArray = new JSONArray(content); - for (Object o : jsonArray) { - JSONObject jsonObj = (JSONObject) o; - Locust locust = new Locust(); - - locust.date = jsonObj.getString("date"); - - if (!jsonObj.isNull("region_name")) - locust.region = jsonObj.getString("region_name"); - else - locust.region = ""; - - if (!jsonObj.isNull("town_name")) - locust.district = jsonObj.getString("town_name"); - - if (!jsonObj.isNull("point")) { - locust.lon = jsonObj.getJSONObject("point").getJSONArray("coordinates").getDouble(0); - locust.lat = jsonObj.getJSONObject("point").getJSONArray("coordinates").getDouble(1); - } - - //Контур зоны распространения ВО Polygon (geoJSON) - locust.drawPolygon = null; - if (!jsonObj.isNull("drawPolygon")) { - locust.drawPolygon = jsonObj.getJSONObject("drawPolygon").toString(); - } - - //Площадь контура зоны распространения, в случае если специалист указал его - locust.size = "null"; - if (!jsonObj.isNull("polygonArea")) - locust.size = String.valueOf(jsonObj.getDouble("polygonArea")); - - //jsonObj.drawPolygon Краснодар - - if (locust.region.length() > 0) { - //Выбираю ID области - locust.region_id = ""; - //Statement stt = null; - //ResultSet rs = null; - try { - - stt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); - String sql_query = "select id from main.countriesregions where name like '%" + locust.region + "%';"; - rs = stt.executeQuery(sql_query); - if (rs != null) { - try { - if (rs.next()) { - locust.region_id = rs.getString(1); - } - rs.close(); - } catch (SQLException ex) { - ex.printStackTrace(); - } - } - } catch (SQLException ex) { - ex.printStackTrace(); - } finally { - if (rs != null) try { - rs.close(); - } catch (SQLException ex) { - ex.printStackTrace(); - } - if (stt != null) try { - stt.close(); - } catch (SQLException ex) { - ex.printStackTrace(); - } - } - - - /*if(locust.region_id.isEmpty()){ - if(locust.region.indexOf("Воронежс��ая область")>=0) locust.region_id="110"; - if(locust.region.indexOf("Кра��нодарский край")>=0) locust.region_id="164"; - if(locust.region.indexOf("Астраха��ская область")>=0) locust.region_id="68"; //dayOfYear: 97 at year: 2022 = 07.04.2022 - if(locust.region.indexOf("Астраханская област��")>=0) locust.region_id="68"; // dayOfYear: 101 at year: 2022 = 11.04.2022 - }*/ - - if (locust.region_id.length() > 0) { - //Выбираю id региона (main.countriesdistricts) - locust.district_id = ""; - stt = null; - rs = null; - try { - - if (locust.district.equals("Алапаевский район")) - locust.district = "городской округ Алапаевское"; - if (locust.district.equals("Сухоложский район")) - locust.district = "городской округ Сухой Лог"; - if (locust.district.equals("Талицкий район")) - locust.district = "Талицкий городской округ"; - if (locust.district.equals("Артинский район")) - locust.district = "Талицкий городской округ"; - if (locust.district.equals("Богдановичский район")) - locust.district = "городской округ Богданович"; - if (locust.district.equals("Красноуфимский район")) - locust.district = "Красноуфимский округ"; - if (locust.district.equals("Белоярский район")) locust.region_id = "210"; - if (locust.district.equals("Пышминский район")) - locust.district = "Пышминский городской округ"; - if (locust.district.equals("Ирбитский район")) - locust.district = "городской округ Ирбитское"; - if (locust.district.equals("Фрязино г.о.")) locust.district = "городской округ Фрязино"; - if (locust.district.equals("Коломенский г.о.")) locust.district = "Коломенский район"; - if (locust.district.equals("Протвино г.о.")) - locust.district = "городской округ Протвино"; - if (locust.district.equals("Зарайск г.о.")) locust.district = "Зарайский район"; - if (locust.district.equals("Анапский район")) locust.district = "городской округ Анапа"; - if (locust.district.equals("Луховицы г.о.")) locust.district = "Луховицкий район"; - if (locust.district.equals("Дергачевский район")) - locust.district = "Дергачёвский район"; - if (locust.district.equals("Чистоозерный район")) - locust.district = "Чистоозёрный район"; - if (locust.district.equals("Сунжа город")) locust.district = "Сунженский район"; - if (locust.district.equals("Буденновский район")) - locust.district = "Будённовский район"; - if (locust.district.equals("Новоселовский район")) { - locust.district = "Новоселицкий район"; - locust.region_id = "168"; - } - if (locust.district.equals("Тимашевский район")) locust.district = "Тимашёвский район"; - if (locust.district.equals("Славгородский район")) - locust.district = "городской округ Славгород"; - if (locust.district.equals("Режевский район")) - locust.district = "Режевской городской округ"; - if (locust.district.equals("Веселовский район")) locust.district = "Весёловский район"; - if (locust.district.equals("Карабулак город")) - locust.district = "городской округ Карабулак"; - if (locust.district.equals("Пугачевский район")) locust.district = "Пугачёвский район"; - if (locust.district.equals("Кущевский район")) locust.district = "Кущёвский район"; - if (locust.district.equals("Репьевский район")) locust.district = "Репьёвский район"; - if (locust.district.equals("Калачевский район")) locust.district = "Калачёвский район"; - if (locust.district.equals("Гайский район")) - locust.district = "Гайский городской округ"; - if (locust.district.equals("Новохоперский район")) - locust.district = "Новохопёрский район"; - if (locust.district.equals("Федоровский район")) locust.district = "Фёдоровский район"; - if (locust.district.equals("Серебряные Пруды г.о.")) - locust.district = "городской округ Серебряные Пруды"; - if (locust.district.equals("Минераловодский район")) - locust.district = "Минераловодский городской округ"; - if (locust.district.equals("Рузский г.о.")) locust.district = "Рузский район"; - if (locust.district.equals("Воробьевский район")) - locust.district = "Воробьёвский район"; - if (locust.district.equals("Ачитский район")) - locust.district = "Ачитский городской округ"; - if (locust.district.equals("Грачевский район")) locust.district = "Грачёвский район"; - if (locust.district.equals("Уссурийский район")) - locust.district = "Уссурийский городской округ"; - if (locust.district.equals("Сорочинский район")) - locust.district = "Сорочинский городской округ"; - if (locust.district.equals("Ясненский район")) - locust.district = "Ясненский городской округ"; - - stt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); - String sql_query = "select id from main.countriesdistricts where region_id=" + locust.region_id + " and name like '%" + locust.district + "%';"; - rs = stt.executeQuery(sql_query); - if (rs != null) { - try { - if (rs.next()) { - locust.district_id = rs.getString(1); - } - rs.close(); - } catch (SQLException ex) { - ex.printStackTrace(); - } - } - } catch (SQLException ex) { - ex.printStackTrace(); - } finally { - if (rs != null) try { - rs.close(); - } catch (SQLException ex) { - ex.printStackTrace(); - } - if (stt != null) try { - stt.close(); - } catch (SQLException ex) { - ex.printStackTrace(); - } - } - } - } - - String row = ""; - - if (!jsonObj.isNull("subjectList")) { - JSONArray jsonArraySub = jsonObj.getJSONArray("subjectList"); - - for (Object o2 : jsonArraySub) { - JSONObject jsonObjSub = (JSONObject) o2; - - locust.eid = jsonObjSub.getInt("id"); - locust.phytoType = jsonObjSub.getString("phytoType"); //"Вредители" или "Обработка" - if (locust.phytoType.equals("Обработка")) { -/* - locust.insecticide_name = jsonObjSub.getString("nameSubject"); //Наименование действующего вещества - if (!jsonObjSub.isNull("nameLatSubject")) - locust.insecticide_active_substance = jsonObjSub.getString("nameLatSubject"); //Латинское наименование действующего вещества - if (!jsonObjSub.isNull("protectionDoze")) - locust.insecticide_dose = String.valueOf(jsonObjSub.getFloat("protectionDoze")); //Доза внесения препарата (л/га) - - if (!jsonObjSub.isNull("agroTreatmentType")) { - String agroTreatmentType = jsonObjSub.getString("agroTreatmentType"); //Тип обработки (Агротехнический, Авиационный, Наземный) - if (agroTreatmentType != null && !agroTreatmentType.isEmpty()) { - if (agroTreatmentType.equals("GROUND")) { - locust.spray_platform = "3"; - } else if (agroTreatmentType.equals("AGROTECHNICAL")) { - locust.spray_platform = "5"; - } else if (agroTreatmentType.equals("AVIATION")) { - locust.spray_platform = "1"; - } - } - if (locust.spray_platform == null || locust.spray_platform.isEmpty()) { - //model.addAttribute("PreviewTable", "Error spray_platform"); - return "json"; - } - } - - //То что не знаю куда записывать записываю в description - locust.description = ""; - if (!jsonObjSub.isNull("agroTreatmentPercentage")) - locust.description += "Процент обработанной площади: " + String.valueOf(jsonObjSub.getFloat("agroTreatmentPercentage")) + "\n"; - if (!jsonObjSub.isNull("agroTreatmentPow")) - locust.description += "Степень обработки: " + jsonObjSub.getString("agroTreatmentPow") + "\n"; - - //Если записи не существует то вставляем если существует то обновляем - boolean exists = false; //Is there a record. - Statement st; - try { - st = conn.createStatement(); - //ResultSet rs=null; - try { - String sql = "select 1 from main.frmlocustdel where eid=" + String.valueOf(locust.eid); - rs = st.executeQuery(sql); - } catch (SQLException ex) { - ex.printStackTrace(); - //model.addAttribute("PreviewTable", "Error select"); - return "json"; - } - if (rs != null) { - if (rs.next()) - exists = true; - } - st.close(); - } catch (SQLException ex) { - ex.printStackTrace(); - //model.addAttribute("PreviewTable", "Error select 2"); - return "json"; - } - - PreparedStatement stmt = null; - String sql = ""; - if (exists) { - System.out.println(String.valueOf(cntV)+") update main.frmlocustdel"); - sql = "update main.frmlocustdel set\n" - + " eid=?,\n" - + " lat_center=?,\n" - + " lon_center=?,\n" - + " country_id=?,\n" - + " region_id=?,\n" - + " area=?,\n" - + " district=?,\n" - + " date=TO_TIMESTAMP(?, 'DD.MM.YYYY HH24:MI'),\n" - + " description=?,\n" - + " geom=ST_SetSRID(ST_GeomFromGeoJSON(?),4326),\n" - - + " insecticide_name=?,\n" - + " insecticide_active_substance=?,\n" - + " insecticide_dose=?,\n" - + " spray_platform=?\n" - + " where eid='" + locust.eid + "'"; - try { - stmt = conn.prepareStatement(sql); - } catch (SQLException ex) { - ex.printStackTrace(); - //model.addAttribute("PreviewTable", "Error prepare 1"); - return "json"; - } - } else { - System.out.println(String.valueOf(cntV)+") insert into main.frmlocustdel"); - sql = "insert into main.frmlocustdel(\n" - + " eid,\n" //1 - + " lat_center,\n" //2 - + " lon_center,\n" //3 - + " country_id,\n" //4 - + " region_id,\n" //5 - + " area,\n" //6 - + " district,\n" //7 - + " date,\n" //8 - + " description,\n" //9 - + " geom,\n" //10 - - + " insecticide_name,\n" //11 - + " insecticide_active_substance,\n" //12 - + " insecticide_dose,\n" //13 - + " spray_platform\n" //14 - - + ")values(\n" - + " ?,\n" //1 eid - + " ?,\n" //2 lat1 - + " ?,\n" //3 lon1 - + " ?,\n" //4 country_id - + " ?,\n" //5 region_id - + " ?,\n" //6 district (area) - + " ?,\n" //7 district (area) - + " TO_TIMESTAMP(?, 'DD.MM.YYYY HH24:MI'),\n" //8 date - + " ?,\n" //9 description - + " ST_SetSRID(ST_GeomFromGeoJSON(?),4326),\n" //10 geom - - + " ?,\n" //11 insecticide_name - + " ?,\n" //12 insecticide_active_substance - + " ?,\n" //13 insecticide_dose - + " ?\n" //14 spray_platform - + ")"; - try { - stmt = conn.prepareStatement(sql); - } catch (SQLException ex) { - ex.printStackTrace(); - //model.addAttribute("PreviewTable", "Error prepare 2"); - return "json"; - } - } - - try { - stmt.setInt(1, locust.eid); - stmt.setDouble(2, locust.lat); - stmt.setDouble(3, locust.lon); - stmt.setInt(4, 7); //country_id - stmt.setInt(5, Integer.parseInt(locust.region_id)); //region_id - stmt.setString(6, locust.district); //Пишу в поле "area" - stmt.setString(7, null); - stmt.setString(8, locust.date); //27.04.2020 09:17 - stmt.setString(9, locust.description); - stmt.setString(10, locust.drawPolygon); - - stmt.setString(11, locust.insecticide_name); - stmt.setString(12, locust.insecticide_active_substance); - if (locust.insecticide_dose == null || locust.insecticide_dose.isEmpty()) - stmt.setNull(13, Types.DOUBLE); - else - stmt.setDouble(13, Double.parseDouble(locust.insecticide_dose)); - - if (locust.spray_platform == null || locust.spray_platform.isEmpty()) - stmt.setNull(14, Types.INTEGER); - else - stmt.setInt(14, Integer.parseInt(locust.spray_platform)); - - } catch (SQLException ex) { - ex.printStackTrace(); - //model.addAttribute("PreviewTable", "Error set data"); - return "json"; - } - - //Выпоняю запрос на свтавку либо обновление - try { - stmt.execute(); - } catch (SQLException ex) { - ex.printStackTrace(); - //model.addAttribute("PreviewTable", "Error execute frmlocustdel"); - return "json"; - } - cntO++; -*/ - } else if (locust.phytoType.equals("Вредители")) { - if (!jsonObjSub.isNull("nameSubject")) - locust.locust = jsonObjSub.getString("nameSubject"); - - //Вид саранчи - locust.locust_id = ""; - if (locust.locust.equals("Короткокрылый зеленчук")) locust.locust_id = "4"; - if (locust.locust.equals("Среднерусская перелётная саранча")) locust.locust_id = "4"; - if (locust.locust.equals("Сибирская кобылка")) locust.locust_id = "4"; - if (locust.locust.equals("Кобылка изменчивая")) locust.locust_id = "4"; - if (locust.locust.equals("Кобылка пёстрая")) locust.locust_id = "4"; - if (locust.locust.equals("Кобылка крестовая")) locust.locust_id = "4"; - if (locust.locust.equals("Кобылка сибирская")) locust.locust_id = "4"; - if (locust.locust.equals("Кобылка голубокрылая")) locust.locust_id = "4"; - if (locust.locust.equals("Кобылка бескрылая")) locust.locust_id = "4"; - if (locust.locust.equals("Кобылка чернополосая")) locust.locust_id = "4"; - if (locust.locust.equals("Кобылка трескучая")) locust.locust_id = "4"; - if (locust.locust.equals("Кобылка египетская")) locust.locust_id = "4"; - if (locust.locust.equals("Трещотка ширококрылая")) locust.locust_id = "4"; - if (locust.locust.equals("Бахчевая кобылка")) locust.locust_id = "4"; - if (locust.locust.equals("Малая крестовичка")) locust.locust_id = "4"; - if (locust.locust.equals("Конёк белополосый (белополосая кобылка)")) - locust.locust_id = "4"; - if (locust.locust.equals("Конек обыкновенный")) locust.locust_id = "4"; - if (locust.locust.equals("Конек обыкновенный")) locust.locust_id = "4"; - if (locust.locust.equals("Кобылка темнокрылая")) locust.locust_id = "4"; - if (locust.locust.equals("Краснокрылая кобылка")) locust.locust_id = "4"; - if (locust.locust.equals("Краснокрылая кобылка")) locust.locust_id = "4"; - if (locust.locust.equals("Степная кобылка")) locust.locust_id = "4"; - if (locust.locust.equals("Гребневка")) locust.locust_id = "4"; - if (locust.locust.equals("Азиатская перелётная саранча")) locust.locust_id = "3"; - if (locust.locust.equals("Итальянский прус")) locust.locust_id = "1"; - if (locust.locust.equals("Мароккская саранча, мароккская кобылка, марокканка")) - locust.locust_id = "2"; - - //фаза саранчи - if (!jsonObjSub.isNull("phaseEvolutionName")) - locust.phase = jsonObjSub.getString("phaseEvolutionName"); - - locust.locust_have = "3"; - if (locust.phase != null) { - if (locust.phase.equals("Кубышка")) locust.locust_have = "2"; //Кубышка = Яйца - if (locust.phase.equals("Гусеница")) locust.locust_have = "3"; - if (locust.phase.equals("Личинка 2-го возраста")) locust.locust_have = "3"; - if (locust.phase.equals("Личинка 3-го возраста")) locust.locust_have = "3"; - if (locust.phase.equals("Личинка 4-го возраста")) locust.locust_have = "3"; - if (locust.phase.equals("Личинка 5-го возраста")) locust.locust_have = "3"; - if (locust.phase.equals("Имаго")) locust.locust_have = "5"; - } - //Если эта анкета "Имаго" то записываем плотность имаго на m2 - if (locust.locust_have.equals("5")) { - if (!jsonObjSub.isNull("subPestCount")) - locust.imago_density = String.valueOf(jsonObjSub.getFloat("subPestCount")); - } - //Если эта анкета "Кубышка"="Яйца" то записываем плотность кулиг на m2 - if (locust.locust_have.equals("2")) { - if (!jsonObjSub.isNull("subPestCount")) - locust.eggs_capsules_density = String.valueOf(jsonObjSub.getFloat("subPestCount")); - } - //Если эта анкета "Кулиги" то записываем плотность кулиг на m2 - if (locust.locust_have.equals("4")) { - if (!jsonObjSub.isNull("subPestCount")) - locust.kuliguli_density = String.valueOf(jsonObjSub.getFloat("subPestCount")); - } - //Если эта анкета "Личинок" то записываем плотность личинок на m2 - if (locust.locust_have.equals("3")) { - if (!jsonObjSub.isNull("subPestCount")) - locust.larva_density = String.valueOf(jsonObjSub.getFloat("subPestCount")); - } - - //Биотоп - switch (jsonObjSub.getString("faoBiotopeName")) { - case "CIT степь": - locust.bio_biotope_id = "1"; - break; - case "CIT залежь": - locust.bio_biotope_id = "2"; - break; - case "CIT посевы": - locust.bio_biotope_id = "3"; - break; - case "CIT пастбища": - locust.bio_biotope_id = "11"; - break; - case "CIT холмы, горы": - locust.bio_biotope_id = "19"; - break; - case "DMA равнины": - locust.bio_biotope_id = "4"; - break; - case "DMA посевы": - locust.bio_biotope_id = "6"; - break; - case "DMA пастбища": - locust.bio_biotope_id = "13"; - break; - case "DMA холмы, горы": - locust.bio_biotope_id = "14"; - break; - case "LMI низкие сухие тростники": - locust.bio_biotope_id = "7"; - break; - case "LMI высокие влажные тростники": - locust.bio_biotope_id = "8"; - break; - case "LMI другое": - locust.bio_biotope_id = "10"; - break; - case "Другие саранчовые на посевах": - locust.bio_biotope_id = "15"; - break; - case "Другие саранчовые на равнине": - locust.bio_biotope_id = "16"; - break; - case "Другие саранчовые на холмах": - locust.bio_biotope_id = "17"; - break; - case "Другое": - locust.bio_biotope_id = "18"; - break; - default: - locust.bio_biotope_id = null; - break; - } - - //Если те виды что нам нужны - if (locust.region == null || locust.region.isEmpty() || locust.lat == 0 || locust.lon == 0 || locust.locust.equals("Совка ипсилон") || locust.locust.equals("Восточный майский хрущ") || locust.locust.equals("Кукурузный стеблевой мотылек") || locust.locust.equals("Картофельная, или болотная совка, лиловатая яровая совка") || locust.locust.equals("Луговой мотылёк") || locust.locust.equals("Хлопковая совка") || locust.locust.equals("Стеблевой кукурузный мотылек") || locust.locust.equals("Восточная луговая совка") || locust.locust.equals("Коричневая щитовка") || locust.locust.equals("Продолговатая (чайная) подушечница") || locust.locust.equals("Яблоневая запятовидная щитовка") || locust.locust.equals("Виноградная филлоксера") || locust.locust.equals("Бахчевая коровка")) { - - } else { - - if (locust.locust_id.isEmpty()) { - System.out.println("locust.locust = "+locust.locust); - //model.addAttribute("PreviewTable", "locust.locust_id == 0 locust name = " + locust.locust); - logger.error("Error, not find locust.locust = "+locust.locust); - return "json"; - } - if (locust.region_id.isEmpty()) { - System.out.println("locust.region = "+locust.region); - //model.addAttribute("PreviewTable", "locust.region_id == 0 region name = " + locust.region); - logger.error("Error, not find locust.region = "+locust.region); - return "json"; - } - - //Тех полей что нет в анкете вствляю в комментарии - try { - locust.description = ""; - - if (jsonObjSub.getBoolean("notFound")) - locust.description += "Вредитель не обнаружен: " + jsonObjSub.getString("nameSubject") + "\n"; - else - locust.description += "Вредитель обнаружен: " + jsonObjSub.getString("nameSubject") + "\n"; - - if (!jsonObjSub.isNull("phaseEvolutionName")) - locust.description += "Фаза: " + jsonObjSub.getString("phaseEvolutionName") + "\n"; //Так как фаза у росиян более подробная - if (!jsonObjSub.isNull("subPestCount")) { - locust.description += "Вредителей: " + jsonObjSub.getFloat("subPestCount"); - if (!jsonObjSub.isNull("unitName")) - locust.description += " " + jsonObjSub.getString("unitName"); - locust.description += "\n"; - } - - if (!jsonObj.isNull("cropCurrentType")) - locust.description += "Тип сева: " + jsonObj.getString("cropCurrentType") + "\n"; - if (!jsonObj.isNull("cropCurrentCulture")) - locust.description += "Наименование культуры: " + jsonObj.getString("cropCurrentCulture") + "\n"; - if (!jsonObj.isNull("cropCurrentCultureSort")) - locust.description += "Наименование сорта культуры: " + jsonObj.getString("cropCurrentCultureSort") + "\n"; - if (!jsonObj.isNull("cropCurrentGrowthPhase")) - locust.description += "Фаза роста культуры: " + jsonObj.getString("cropCurrentGrowthPhase") + "\n"; - if (!jsonObj.isNull("cropFieldArea")) { - locust.description += "Площадь поля: " + jsonObj.getFloat("cropFieldArea") + "\n"; - locust.bio_hectare = String.valueOf(jsonObj.getFloat("cropFieldArea")); - } - - - } catch (Exception ex) { - ex.printStackTrace(); - } - - locust.terrain = "null"; //У росиян нет сельского округа - - row = ""; - if (locust.region_id == null || locust.region_id.isEmpty() || locust.district_id == null || locust.district_id.isEmpty() || locust.locust_id == null || locust.locust_id.isEmpty()) { - row = ""; - } - row += "" + String.valueOf(cntO+cntV) + "" + locust.eid + "" + locust.lat + "" + locust.lon + "" + locust.region + " = " + locust.region_id + "" + locust.district + " = " + locust.district_id + "" + locust.terrain + "" + locust.village + "" + locust.locust + " = " + locust.locust_id + "" + locust.phase + " = " + locust.locust_have + "" + locust.evp + "" + locust.size + " = " + locust.drawPolygon + "" + locust.date + ""; - row += "\n"; - - //Если записи не существует то вставляем если существует то обновляем - boolean exists = false; //Is there a record. - Statement st; - try { - st = conn.createStatement(); - //ResultSet rs=null; - try { - String sql = "select 1 from main.frmlocust where eid=" + String.valueOf(locust.eid); - rs = st.executeQuery(sql); - } catch (SQLException ex) { - ex.printStackTrace(); - //model.addAttribute("PreviewTable", "Error select"); - return "json"; - } - if (rs != null) { - if (rs.next()) - exists = true; - } - st.close(); - } catch (SQLException ex) { - ex.printStackTrace(); - //model.addAttribute("PreviewTable", "Error select 2"); - return "json"; - } - - PreparedStatement stmt = null; - String sql = ""; - if (exists) { - System.out.println(String.valueOf(cntV)+") update main.frmlocust"); - sql = "update main.frmlocust set\n" - + " eid=?,\n" - + " lat_center=?,\n" - + " lon_center=?,\n" - + " country_id=?,\n" - + " region_id=?,\n" - + " area=?,\n" - + " district=?,\n" - + " date=TO_TIMESTAMP(?, 'DD.MM.YYYY HH24:MI'),\n" - + " description=?,\n" - + " geom=ST_SetSRID(ST_GeomFromGeoJSON(?),4326),\n" - + " locust_type_id=?,\n" - + " imago_density=?,\n" - + " kuliguli_density=?,\n" - + " larva_density=?,\n" - + " bio_hectare=?\n," - + " eggs_capsules_density=?,\n" - + " bio_biotope_id=?\n" - + " where eid='" + locust.eid + "'"; - try { - stmt = conn.prepareStatement(sql); - } catch (SQLException ex) { - ex.printStackTrace(); - //model.addAttribute("PreviewTable", "Error prepare 1"); - return "json"; - } - } else { - System.out.println(String.valueOf(cntV)+") insert into main.frmlocust"); - sql = "insert into main.frmlocust(\n" - + " eid,\n" //1 - + " lat_center,\n" //2 - + " lon_center,\n" //3 - + " country_id,\n" //4 - + " region_id,\n" //5 - + " area,\n" //6 - + " district,\n" //7 - + " date,\n" //8 - + " description,\n" //9 - + " geom,\n" //10 - + " locust_type_id,\n" //11 - + " imago_density,\n" //12 - + " kuliguli_density,\n" //13 - + " larva_density,\n" //14 - + " bio_hectare,\n" //15 - + " eggs_capsules_density,\n" //16 - + " bio_biotope_id\n" //17 - + ")values(\n" - + " ?,\n" //1 eid - + " ?,\n" //2 lat1 - + " ?,\n" //3 lon1 - + " ?,\n" //4 country_id - + " ?,\n" //5 region_id - + " ?,\n" //6 district (area) - + " ?,\n" //7 district (area) - + " TO_TIMESTAMP(?, 'DD.MM.YYYY HH24:MI'),\n" //8 date - + " ?,\n" //9 description - + " ST_SetSRID(ST_GeomFromGeoJSON(?),4326),\n" //10 geom - + " ?,\n" //11 locust_type_id - + " ?,\n" //12 imago_density - + " ?,\n" //13 kuliguli_density - + " ?,\n" //14 larva_density - + " ?,\n" //15 - + " ?,\n" //16 - + " ?\n" //17 - + ")"; - try { - stmt = conn.prepareStatement(sql); - } catch (SQLException ex) { - ex.printStackTrace(); - //model.addAttribute("PreviewTable", "Error prepare 2"); - return "json"; - } - } - - try { - stmt.setInt(1, locust.eid); - stmt.setDouble(2, locust.lat); - stmt.setDouble(3, locust.lon); - stmt.setInt(4, 7); - stmt.setInt(5, Integer.parseInt(locust.region_id)); - stmt.setString(6, locust.district); //Пишу в поле "area" - stmt.setString(7, null); - stmt.setString(8, locust.date); //27.04.2020 09:17 - stmt.setString(9, locust.description); - stmt.setString(10, locust.drawPolygon); - stmt.setInt(11, Integer.parseInt(locust.locust_id)); - if (locust.imago_density != null) - stmt.setFloat(12, Float.parseFloat(locust.imago_density)); - else - stmt.setNull(12, Types.FLOAT); - if (locust.kuliguli_density != null) - stmt.setFloat(13, Float.parseFloat(locust.kuliguli_density)); - else - stmt.setNull(13, Types.FLOAT); - if (locust.larva_density != null) - stmt.setFloat(14, Float.parseFloat(locust.larva_density)); - else - stmt.setNull(14, Types.FLOAT); - if (locust.bio_hectare != null) - stmt.setFloat(15, Float.parseFloat(locust.bio_hectare)); - else - stmt.setNull(15, Types.FLOAT); - if (locust.eggs_capsules_density != null) - stmt.setFloat(16, Float.parseFloat(locust.eggs_capsules_density)); - else - stmt.setNull(16, Types.FLOAT); - if (locust.bio_biotope_id != null) - stmt.setFloat(17, Float.parseFloat(locust.bio_biotope_id)); - else - stmt.setNull(17, Types.INTEGER); - - } catch (SQLException ex) { - ex.printStackTrace(); - //model.addAttribute("PreviewTable", "Error set data"); - return "json"; - } - //Выпоняю запрос на свтавку либо обновление - try { - stmt.execute(); - } catch (SQLException ex) { - ex.printStackTrace(); - //model.addAttribute("PreviewTable", "Error execute 0"); - return "json"; - } - cntV++; - - //Скачиваю фотографию для анкеты - sb = new StringBuilder(); - try { - String strURL = "https://rscagex.ru/pmon/rest/getPhotosByParentId?token=QVOUE97HBSI6LBSGJGQZMP3KPSS1QK&parentId=" + locust.eid; - URL url = new URL(strURL); - HttpURLConnection hConn = (HttpURLConnection) url.openConnection(); - hConn.setRequestMethod("GET"); - //hConn.setRequestProperty("Range","bytes=" + posStart + "-" + posEnd); - hConn.connect(); - int responseCode = hConn.getResponseCode(); - if (responseCode / 100 == 2) //Code 206 is "Partial Content" - { - InputStream inputStream = hConn.getInputStream(); - //FileOutputStream outputStream = new FileOutputStream(strFile); - int bytesRead; - byte[] buffer = new byte[BUFFER_SIZE]; - while ((bytesRead = inputStream.read(buffer)) != -1) { - //outputStream.write(buffer, 0, bytesRead); - sb.append(new String(buffer, 0, bytesRead)); - } - //outputStream.close(); - inputStream.close(); - } - hConn.disconnect(); - } catch (IOException e) { - e.printStackTrace(); - } - - String base64 = sb.toString(); - if (base64.length() > 10) { - //Так как мне присылаю неправильный jSOM то пытаюсь его поправить,. - base64 = base64.replace("[", "[\""); - base64 = base64.replace("]", "\"]"); - base64 = base64.replace(", ", "\",\""); - - String strFile = "O:\\temp\\CCALM\\ru_" + locust.eid; - int pos = 0; - - JSONArray jsonArrayIMGS = new JSONArray(base64); - for (Object oStr : jsonArrayIMGS) { - String jsonObjIMG = (String) oStr; - pos++; - if (pos > 3) break; - - //try { - // BufferedWriter writer = new BufferedWriter(new FileWriter(strFile)); - // writer.write(jsonObjIMG); - // writer.close(); - //} catch (IOException e1) { - // e1.printStackTrace(); - //} - - byte[] decodedString = null; - try { - decodedString = Base64.getDecoder().decode(jsonObjIMG); - } catch (Exception e) { - e.printStackTrace(); - //model.addAttribute("PreviewTable", "Error decode"); - return "json"; - } - - if (decodedString != null) { - try { - FileUtils.writeByteArrayToFile(new File(strFile + "_" + pos + ".jpg"), decodedString); - } catch (IOException e) { - e.printStackTrace(); - } - } - decodedString = null; - - BufferedImage imageOnDisk = null; - try { - imageOnDisk = ImageIO.read(new File(strFile + "_" + pos + ".jpg")); - } catch (IOException e) { - e.printStackTrace(); - } - if (imageOnDisk != null) { - Image img; - BufferedImage buffered; - if (imageOnDisk.getWidth() > imageOnDisk.getHeight()) { - img = imageOnDisk.getScaledInstance(1024, 768, Image.SCALE_DEFAULT); - buffered = new BufferedImage(1024, 768, BufferedImage.TYPE_INT_RGB); - buffered.getGraphics().drawImage(img, 0, 0, null); - } else { - img = imageOnDisk.getScaledInstance(768, 1024, Image.SCALE_DEFAULT); - buffered = new BufferedImage(768, 1024, BufferedImage.TYPE_INT_RGB); - buffered.getGraphics().drawImage(img, 0, 0, null); - } - try { - //BufferedImage bIMG = toBufferedImage(img); - ImageIO.write(buffered, "jpg", new File(strFile + "_" + pos + ".jpg")); - } catch (IOException ex) { - ex.printStackTrace(); - } - } - - - if (pos > 3) { - break; - } else { - sql = ""; - if (pos == 1) { - sql = "update main.frmlocust set image_name1='ru_" + locust.eid + "_" + pos + ".jpg" + "' where eid=" + locust.eid; - } - if (pos == 2) { - sql = "update main.frmlocust set image_name2='ru_" + locust.eid + "_" + pos + ".jpg" + "' where eid=" + locust.eid; - } - if (pos == 3) { - sql = "update main.frmlocust set image_name3='ru_" + locust.eid + "_" + pos + ".jpg" + "' where eid=" + locust.eid; - } - if (sql.length() > 0) { - try { - st = conn.createStatement(); - st.execute(sql); - st.close(); - } catch (SQLException ex) { - ex.printStackTrace(); - //model.addAttribute("PreviewTable", "Error update img"); - return "json"; - } - } - } - } - } - } - - } //equals("Вредители") - - } - - } - - table += row; - } - System.out.println("Обработка = "+String.valueOf(cntO)); - System.out.println("Вредители = "+String.valueOf(cntV)); - - - table += ""; - - //json=json.substring(0,json.length()-1); //Удаляю последнюю запятую - //json+="\n]}"; - - //Сохраняю lastDate в базу данных - try { - Statement st = conn.createStatement(); - st.execute("insert into integration.days_ru(date,count)values('" + lastDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "'," + String.valueOf(cntV+cntO) + ");"); - st.close(); - } catch (SQLException ex) { - ex.printStackTrace(); - //model.addAttribute("PreviewTable", "Error update img"); - return "json"; - } - } - } - //model.addAttribute("PreviewTable",table); - //model.addAttribute("PreviewGEOJSON",json); - //model.addAttribute("PreviewSQL",sqlData); - - return "json"; + return json.toString(); } //--------------------------------------------------------------------------- public static BufferedImage toBufferedImage(Image img) @@ -2382,49 +2372,563 @@ public class AcceptJSON implements ServletContextAware { return result; } //--------------------------------------------------------------------------- - class Locust{ - int eid; //Внешний идентификатор - String phytoType; //Вредители либо обработка - - double lon; - double lat; - String region; //Область - String region_id; - - String district; //Район - String district_id; - - String terrain=""; //Название месности - - String village; //Хозяйство или местность - - String locust; //Вид саранчи - String locust_id; //Вид саранчи - - String phase=null; //Фаза саранчи - String locust_have; //id Фазы саранчи - String evp; //ЭФП - String drawPolygon="null"; //Область обследования GeoGSON - String size; //Заселённая площадь (polygonArea Площадь контура зоны распространения, в случае если специалист указал его) - String date; //Дата - - String description=""; - + public FrmLocustModel convertUZBJSONToLocustModel(JSONObject obj) throws CustomException { - String eggs_capsules_density=null; //Плотность яиц - String kuliguli_density=null; //Плотность кулиг на м² - String imago_density=null; //Плотность имаго (/м²)* - String larva_density=null; //Плотность личинок - - String bio_hectare=null; //Обследованная площадь - String bio_biotope_id=null; //Тип тиотопа - - //Ниже то что относиться только к обработке - String insecticide_name=null; - String insecticide_active_substance=null; - String insecticide_dose=null; - String spray_platform=null; - + FrmLocustModel result = new FrmLocustModel(); + + result.company_uid = "dc271f2e-1a4b-4987-96ec-7afd91350684"; //Компания: "Узбекистан саранча" + result.eid = obj.getInt("id"); + result.seq = obj.getLong("seq")*1000; + result.country_id = 10; //Uzbekistan + result.country_uid = "05592f5a-1c8b-4d87-a47f-67697cc12c49"; //Uzbekistan + + if(!obj.isNull("region_name")) { + switch (obj.getString("region_name")) { + case "Sirdaryo viloyati": + result.region_id = "31"; + result.region_uid = "8f4f586f-6159-4fbf-a627-2c8d637abb5e"; + break; + case "Toshkent shahri": + result.region_id = "156"; + result.region_uid = "1ed7b6f3-47a8-4128-ae0a-c160f5c3af08"; + break; + case "Toshkent viloyati": + result.region_id = "157"; + result.region_uid = "c8fccdc4-256a-4699-ab09-16c51351bf28"; + break; + case "Surxondaryo viloyati": + result.region_id = "30"; + result.region_uid = "369c296d-5ff5-4570-88ad-0e94ccf9cb7c"; + break; + case "Jizzax viloyati": + result.region_id = "25"; + result.region_uid = "a7185680-7afc-47f1-954e-3d0f8b296592"; + break; + case "Республики Каракалпакстан": + result.region_id = "22"; + result.region_uid = "421ce759-b571-454e-b390-a73bee9b8b2c"; + break; + case "Xorazm viloyati": + result.region_id = "34"; + result.region_uid = "8bc74ac4-ce06-4317-9982-b1492c72edb7"; + break; + case "Andijon viloyati": + result.region_id = "23"; + result.region_uid = "a045faa8-eb12-40db-be30-be6e41e59bb2"; + break; + case "Fargʻona viloyati": + result.region_id = "33"; + result.region_uid = "e97ac81d-dab5-4496-9e0f-0c5508972539"; + break; + case "Namangan viloyati": + result.region_id = "28"; + result.region_uid = "e931af2e-0035-4149-b3b9-00895e4e1453"; + break; + case "Buxoro viloyati": + result.region_id = "24"; + result.region_uid = "0caf3854-48ad-40ed-9602-302c28b1a5b8"; + break; + case "Navoiy viloyati": + result.region_id = "27"; + result.region_uid = "ef244a76-8e7c-4e16-ad80-058b740fa6ca"; + break; + case "Qashqadaryo viloyati": + result.region_id = "158"; + result.region_uid = "cf9a0a6e-18fa-41a0-bd9d-39c5fd1260c1"; + break; + case "Samarqand viloyati": + result.region_id = "29"; + result.region_uid = "2a6adb56-19a7-4f28-9a00-87559db91db9"; + break; + default: + System.out.println(obj.getString("region_name")); + throw new CustomException(10000, "Not find region by region_name: " + obj.getString("region_name"), null, true); + } + } + result.district = obj.getString("town_name"); + result.date = obj.getString("date"); + + result.bio_hectare = obj.getString("surveyed_area"); + if (!obj.isNull("point")) { + result.lon = obj.getJSONObject("point").getJSONArray("coordinates").getDouble(0); + result.lat = obj.getJSONObject("point").getJSONArray("coordinates").getDouble(1); + } + + //Биотоп + if(!obj.isNull("biotope_type")) { + switch (obj.getString("biotope_type")) { + case "CIT степь","CIT steppe": + result.bio_biotope_id = "1"; + result.bio_biotope_uid = "e6fa860a-ca2f-4cd7-8cfc-b97d86d2cd2d"; + break; + case "CIT залежь","CIT fallow": + result.bio_biotope_id = "2"; + result.bio_biotope_uid = "54dca7f3-80c3-4437-b523-c022f3f22104"; + break; + case "CIT посевы","CIT crops": + result.bio_biotope_id = "3"; + result.bio_biotope_uid = "ef2b054a-1b06-4c81-8c34-d5185b1ac468"; + break; + case "CIT пастбища","CIT pastures": + result.bio_biotope_id = "11"; + result.bio_biotope_uid = "1c04ef99-ebdd-4920-880d-d9f615576e36"; + break; + case "CIT холмы, горы","CIT hills, mountains": + result.bio_biotope_id = "19"; + result.bio_biotope_uid = "e076bc30-7a47-4f69-b3c2-154328341c8e"; + break; + case "DMA равнины","DMA flatlands": + result.bio_biotope_id = "4"; + result.bio_biotope_uid = "8b815530-4b12-43af-89b6-31736f331b2d"; + break; + case "DMA посевы","DMA crops": + result.bio_biotope_id = "6"; + result.bio_biotope_uid = "54fcd2da-3130-4a69-a5ff-b048d863a9a5"; + break; + case "DMA пастбища","DMA pastures": + result.bio_biotope_id = "13"; + result.bio_biotope_uid = "4082f926-3f36-4782-b656-5484340a30b5"; + break; + case "DMA холмы, горы","DMA hills, mountains": + result.bio_biotope_id = "14"; + result.bio_biotope_uid = "e4596123-d6c3-4525-a9a5-ee2270767894"; + break; + case "LMI низкие сухие тростники","LMI low dry reeds": + result.bio_biotope_id = "7"; + result.bio_biotope_uid = "4ca678e5-d9d8-4941-85c0-51010fb212d3"; + break; + case "LMI высокие влажные тростники","LMI high wet reeds": + result.bio_biotope_id = "8"; + result.bio_biotope_uid = "ccc53f69-ce5f-4eb4-8158-85146c591b69"; + break; + case "LMI другое","LMI others": + result.bio_biotope_id = "10"; + result.bio_biotope_uid = "f91b4f3e-16e1-45af-bbb0-5ff474273da3"; + break; + case "Другие саранчовые на посевах","Other locust crops": + result.bio_biotope_id = "15"; + result.bio_biotope_uid = "8fee003a-b3b4-462e-b76e-a7b89d439647"; + break; + case "Другие саранчовые на равнине","Other locust flatlands": + result.bio_biotope_id = "16"; + result.bio_biotope_uid = "692123dd-6c02-4c96-a075-ce94789eeabe"; + break; + case "Другие саранчовые на холмах","Other locust hills": + result.bio_biotope_id = "17"; + result.bio_biotope_uid = "c82f2609-b50a-4ca4-babc-ae3426f22b81"; + break; + case "Другое","Other locust": + result.bio_biotope_id = "18"; + result.bio_biotope_uid = "e99a8868-2582-41e8-9c01-bef5fca8f0d1"; + break; + default: + throw new CustomException(10000, "Not find biotopee: " + obj.getString("biotope_type"), null, true); + } + } + + //растительность + if(!obj.isNull("vegetation")) { + switch (obj.getString("vegetation")) { + case "Plant absent": + result.bio_greenery_id = "8"; + result.bio_greenery_uid = "5621f2f2-56e8-486f-abc0-7eba996b6724"; + break; + case "Plant dry": + result.bio_greenery_id = "7"; + result.bio_greenery_uid = "04ba0a4a-0557-490f-a08b-0db51a83cf7c"; + break; + case "Желтеющая трава": //Plant drying + result.bio_greenery_id = "6"; + result.bio_greenery_uid = "99381409-ad1a-4ac8-95df-415ccb1334e1"; + break; + case "Plant green": + result.bio_greenery_id = "5"; + result.bio_greenery_uid = "8fab82b8-8924-458d-b3f1-90a18ed75f9b"; + break; + case "Plant greening": + result.bio_greenery_id = "4"; + result.bio_greenery_uid = "682993e1-3e5b-4aa0-9f11-c2a30a9c5908"; + break; + default: + throw new CustomException(10000, "Not find vegetation: " + obj.getString("vegetation"), null, true); + } + } + + //Густота растительного покрова + if(!obj.isNull("vegetation_cover")) { + switch (obj.getString("vegetation_cover")) { + case "Sparse": //Sparse + result.bio_greenery_cover_id = "8"; + result.bio_greenery_cover_uid = "c70a145b-cfe4-4ad9-9ef8-814c9e3a1fac"; + break; + case "Medium": //Medium + result.bio_greenery_cover_id = "9"; + result.bio_greenery_cover_uid = "d66bdde4-72a7-497f-b5e8-3174aebd7165"; + break; + case "Густая": //Dense + result.bio_greenery_cover_id = "10"; + result.bio_greenery_cover_uid = "4c12085b-4f42-4ba2-9236-465d5c5d0690"; + break; + case "Absent": //Absent + result.bio_greenery_cover_id = "0"; + result.bio_greenery_cover_uid = "f712fe9a-2e42-44b9-b3dc-a7a1dc4767e8"; + break; + default: + throw new CustomException(10000, "Not find vegetation_cover: " + obj.getString("vegetation_cover"), null, true); + } + } + + result.bio_temperature = obj.getString("air_temperature"); + if(result.bio_temperature.isEmpty()) result.bio_temperature = null; + + result.bio_wind = obj.getString("wind_speed"); + if(result.bio_wind.isEmpty()) result.bio_wind = null; + + //Вид саранчи + if(!obj.isNull("subject_name")) { + switch (obj.getString("subject_name")) { + case "Мароккская саранча": + result.locust_type_id = "2"; + break; + case "Итальянский прус": + result.locust_type_id = "1"; + break; + case "Азиатская саранча": + result.locust_type_id = "3"; + break; + default: + throw new CustomException(10000, "Not find vegetation_cover: " + obj.getString("vegetation_cover"), null, true); + } + } + + //Area infested (ha) + result.locust_populated = obj.getString("infested_area"); + + result.eggs_capsules_area = obj.getString("eggs_bed_area"); + result.eggs_capsules_density = obj.getString("eggs_pods_density_from_m2"); + result.eggs_capsules_density_to = obj.getString("eggs_pods_density_to_m2"); + result.eggs_capsules = obj.getString("eggs_average_number_egg_pod"); + result.eggs_live = obj.getString("eggs_viable"); + if(!obj.isNull("eggs_natural_enemies")) { + switch (obj.getString("eggs_natural_enemies")) { + case "not", "Нет": + result.eggs_enemies_id = "5"; + result.eggs_enemies_uid = "52580c53-3d13-4b93-b84e-fcf9cbd50e01"; + break; + case "Other", "Другое": + result.eggs_enemies_id = "4"; + result.eggs_enemies_uid = "d13c793f-f65e-4a34-9307-940289cd4265"; + break; + case "Larvae of beetles", "Личинки жуков": + result.eggs_enemies_id = "3"; + result.eggs_enemies_uid = "76cf72d8-8ac5-44de-98f3-a7221d2c7985"; + break; + case "Larvae of flies", "Личинки мух": + result.eggs_enemies_id = "2"; + result.eggs_enemies_uid = "e2e573a3-9859-46f9-99e6-f97d7fc37ea2"; + break; + case "Fungal diseases", "Грибные заболевания": + result.eggs_enemies_id = "1"; + result.eggs_enemies_uid = "d0cf06f4-6e1f-4da2-b836-45dfdef5da98"; + break; + default: + throw new CustomException(10000, "Not find eggs_natural_enemies: " + obj.getString("eggs_natural_enemies"), null, true); + } + } + + result.larva_born = null; // not used + if(!obj.isNull("hoppers_hatching")){ + switch (obj.getString("hoppers_hatching")) { + case "Beginning","Начало": + result.larva_born_id="1"; + result.larva_born_uid="392db9f2-bfaa-44e0-8ca3-bb3cf1ff937a"; + break; + case "Mass","Массовое": + result.larva_born_id="2"; + result.larva_born_uid="3210fcfb-3885-4b0e-92c7-3c6f6a0b7134"; + break; + default: + throw new CustomException(10000, "Not find hoppers_hatching: " + obj.getString("hoppers_hatching"),null,true); + } + } + + //Hopper stages + if(!obj.isNull("hoppers_stages")){ + switch (obj.getString("hoppers_stages")) { + case "Early","Младшие": + result.larva_age_id="1"; + result.larva_age_uid="becdbc31-094e-48bb-aef0-93f88abff12d"; + break; + case "Early & Mid","Младшие и средние": + result.larva_age_id="5"; + result.larva_age_uid="7d4f7ed7-bcd1-4063-b42e-e82eb570ba56"; + break; + case "Middle","Средние": + result.larva_age_id="2"; + result.larva_age_uid="69339c47-f4d2-4c71-a594-b021acaccfab"; + break; + case "Late","Старшие": + result.larva_age_id="3"; + result.larva_age_uid="6f95d125-e328-47c2-8793-d67979378f5f"; + break; + case "Mixed","Смешанные возраста": + result.larva_age_id="6"; + result.larva_age_uid="5acd65b3-e32f-4984-83ad-dfba2b7f0205"; + break; + default: + throw new CustomException(10000, "Not find hoppers_hatching: " + obj.getString("hoppers_hatching"),null,true); + } + } + + //Appearance + if(!obj.isNull("hoppers_appearance")){ + switch (obj.getString("hoppers_appearance")) { + case "Solitary","Одиночная": + result.larva_age_id="1"; + result.larva_age_uid="30fa1f49-166e-4a17-9cd8-d611b36844f8"; + break; + case "Transiens","Переходная": + result.larva_age_id="2"; + result.larva_age_uid="a0146c08-17b4-4384-8764-b7541c106d10"; + break; + case "Gregarious","Стадная": + result.larva_age_id="3"; + result.larva_age_uid="683cdba3-2f4c-4e61-b667-936c524136b4"; + break; + default: + throw new CustomException(10000, "Not find hoppers_hatching: " + obj.getString("hoppers_hatching"),null,true); + } + } + + //Spatial distribution + if(!obj.isNull("hoppers_spatial_distribution")){ + switch (obj.getString("hoppers_spatial_distribution")) { + case "Isolated","Одиночные": + result.larva_behavior_id="1"; + result.larva_behavior_uid="64a7a8f5-b44d-4fd7-b78c-3c0837f57b99"; + break; + case "Scattered","Разреженные": + result.larva_behavior_id="2"; + result.larva_behavior_uid="14f64f3a-f35c-416d-a955-5896f55c7e41"; + break; + case "Groups","Группы": + result.larva_behavior_id="3"; + result.larva_behavior_uid="bc8c7de0-0e79-4b40-8260-a74787e19902"; + break; + default: + throw new CustomException(10000, "Not find hoppers_spatial_distribution: " + obj.getString("hoppers_spatial_distribution"),null,true); + } + } + result.larva_density = obj.getString("hoppers_density_from_m2"); //Hopper density numeric, + result.larva_density_to = obj.getString("hoppers_density_to_m2"); //Hopper density to numeric, + + result.kuliguli_density = obj.getString("bands_density_from_m2"); + result.kuliguli_density_to = obj.getString("bands_density_to_m2"); + result.kuliguli_size = obj.getString("bands_sizes_m2"); + result.kuliguli_count = obj.getString("bands_number_in_ha"); + if(!obj.isNull("bands_behaviour")){ + switch (obj.getString("bands_behaviour")) { + case "Marching","Миграция": + result.kuliguli_action_id="1"; + result.kuliguli_action_uid="4399f28c-b1ed-44f6-8af5-351cd944d408"; + break; + case "Feeding","Питание": + result.kuliguli_action_id="2"; + result.kuliguli_action_uid="49cd15e0-8a55-4a8f-8a2a-3872f770f248"; + break; + case "Decreased activity","Понижение активности": + result.kuliguli_action_id="3"; + result.kuliguli_action_uid="0fca9acd-9447-4653-9ca7-7dcac7cb495e"; + break; + case "Stupor","Оцепенение": + result.kuliguli_action_id="4"; + result.kuliguli_action_uid="63bb9eba-c4ad-4e2d-a1cd-ada1695abac5"; + break; + case "Molting","Линька": + result.kuliguli_action_id="5"; + result.kuliguli_action_uid="65bf377f-040b-4b5f-8dca-581e1d5d679f"; + break; + default: + throw new CustomException(10000, "Not find bands_behaviour: " + obj.getString("bands_behaviour"),null,true); + } + } + if(!obj.isNull("bands_stages")){ + switch (obj.getString("bands_stages")) { + case "Early","Младшие": + result.kuliguli_age_id="1"; + result.kuliguli_age_uid="becdbc31-094e-48bb-aef0-93f88abff12d"; + break; + case "Middle","средние": + result.kuliguli_age_id="2"; + result.kuliguli_age_uid="69339c47-f4d2-4c71-a594-b021acaccfab"; + break; + case "Late","Старшие": + result.kuliguli_age_id="3"; + result.kuliguli_age_uid="6f95d125-e328-47c2-8793-d67979378f5f"; + break; + case "Early & Mid","Младшие и средние": + result.kuliguli_age_id="5"; + result.kuliguli_age_uid="7d4f7ed7-bcd1-4063-b42e-e82eb570ba56"; + break; + case "Mixed","Смешанные возраста": + result.kuliguli_age_id="6"; + result.kuliguli_age_uid="5acd65b3-e32f-4984-83ad-dfba2b7f0205"; + break; + default: + throw new CustomException(10000, "Not find bands_behaviour: " + obj.getString("bands_behaviour"),null,true); + } + } + + //Adults (Имаго) + if(!obj.isNull("adults_fledging")){ + switch (obj.getString("adults_fledging")) { + case "Beginning","Начало": + result.imago_wing_id="7"; + result.imago_wing_uid="312bf2ac-dbdb-40be-b716-7f02f751a65e"; + break; + case "Mass","Массовое": + result.imago_wing_id="6"; + result.imago_wing_uid="97d5a02c-c3ed-4627-ae14-4f92d6eb2945"; + break; + default: + throw new CustomException(10000, "Not find adults_fledging: " + obj.getString("adults_fledging"),null,true); + } + } + if(!obj.isNull("adults_maturity")){ //Половозрелость (да, нет) + switch (obj.getString("adults_maturity").toLowerCase()) { + case "yes","да": + result.imago_maturity="true"; + break; + case "no","нет": + result.imago_maturity="false"; + break; + default: + throw new CustomException(10000, "Not find adults_maturity: " + obj.getString("adults_maturity"),null,true); + } + } + if(!obj.isNull("bands_stages")){ // Bands stages + switch (obj.getString("bands_stages")) { + case "Solitary","Стадная": + result.imago_phase_id="4"; + result.imago_phase_uid="a1325ab8-15f5-406a-be8d-d6ba78b18d11"; + break; + case "Transiens","Одиночная": + result.imago_phase_id="5"; + result.imago_phase_uid="454ad32d-e513-4cda-90eb-e3fcac9bd41c"; + break; + case "Gregarious","Переходная": + result.imago_phase_id="6"; + result.imago_phase_uid="5a7cacb9-c0f5-48e1-aa8c-c354565bf2f1"; + break; + default: + throw new CustomException(10000, "Not find bands_stages: " + obj.getString("bands_stages"),null,true); + } + } + + if(!obj.isNull("adults_spatial_distribution")){ // Bands stages + switch (obj.getString("adults_spatial_distribution")) { + case "Isolated","Одиночные": + result.imago_action_id="1"; + result.imago_action_uid="c0b25ce8-7454-459a-9a54-b459eea1573a"; + break; + case "Scattered","Разреженные": + result.imago_action_id="2"; + result.imago_action_uid="ccf21065-0548-46da-a123-fc93be1298b3"; + break; + case "Groups","Группы": + result.imago_action_id="3"; + result.imago_action_uid="c120254b-cbb9-415a-8e41-fc4bb0ffe983"; + break; + default: + throw new CustomException(10000, "Not find adults_spatial_distribution: " + obj.getString("adults_spatial_distribution"),null,true); + } + } + result.imago_density = obj.getString("adults_density_m2"); + result.imago_density_ga = obj.getString("adults_density_ha"); + if(!obj.isNull("adults_roosting")){ //Половозрелость (да, нет) + switch (obj.getString("adults_roosting").toLowerCase()) { + case "yes","да": + result.imago_feeding="true"; + break; + case "no","нет": + result.imago_feeding="false"; + break; + default: + throw new CustomException(10000, "Not find adults_roosting: " + obj.getString("adults_roosting"),null,true); + } + } + + if(!obj.isNull("adults_copulation")){ // Спаривание + switch (obj.getString("adults_copulation").toLowerCase()) { + case "yes","да": + result.imago_copulation = "true"; + break; + case "no","нет": + result.imago_copulation = "false"; + break; + default: + throw new CustomException(10000, "Not find adults_copulation: " + obj.getString("adults_copulation"),null,true); + } + } + //result.imago_laying = obj.getString("adults_laying"); + if(!obj.isNull("adults_laying")){ // Яйцекладка + switch (obj.getString("adults_laying").toLowerCase()) { + case "yes","да": + result.imago_laying="true"; + break; + case "no","нет": + result.imago_laying="false"; + break; + default: + throw new CustomException(10000, "Not find adults_laying: " + obj.getString("adults_laying"),null,true); + } + } + //result.imago_flying = obj.getString("adults_flying"); + if(!obj.isNull("adults_flying")){ // Полёты + switch (obj.getString("adults_flying").toLowerCase()) { + case "yes","да": + result.imago_flying="true"; + break; + case "no","нет": + result.imago_flying="false"; + break; + default: + throw new CustomException(10000, "Not find adults_flying: " + obj.getString("adults_flying"),null,true); + } + } + + result.swarm_maturity = obj.getString("swarms_maturity"); // boolean, + result.swarm_density_id = obj.getString("swarms_density"); // integer, + result.swarm_size = obj.getString("swarms_size"); // double precision, + result.swarm_count = obj.getString("swarms_count"); // double precision, + //result.swarm_copulation = obj.getString(""); // boolean, + //result.swarm_laying = obj.getString(""); // boolean, + result.swarm_flying_direction_id = obj.getString("swarms_flying_direction"); // integer, + if(obj.getString("swarms_height")!=null) { + switch (obj.getString("swarms_height")) { + case "Low height", "Низкая": + result.swarm_height_id = "1"; + result.swarm_height_uid = "0d60a2d7-d732-4199-b966-bd72870a07cc"; + break; + case "Middle height", "Средние": + result.swarm_height_id = "2"; + result.swarm_height_uid = "1f28d742-b121-4a52-a193-39c3cb6695e0"; + break; + case "High height", "Высокая": + result.swarm_height_id = "3"; + result.swarm_height_uid = "305d3224-ac2e-4abe-8adc-058373f20127"; + break; + default: + throw new CustomException(10000, "Not find swarms_height: " + obj.getString("swarms_height"), null, true); + } + } + result.description = obj.getString("description"); + //"status":2 не знаю что за поле + + result.update(); + return result; } + + } diff --git a/src/main/java/org/ccalm/main/UpdateLocust.java b/src/main/java/org/ccalm/main/UpdateLocust.java new file mode 100644 index 0000000..220eee1 --- /dev/null +++ b/src/main/java/org/ccalm/main/UpdateLocust.java @@ -0,0 +1,413 @@ +package org.ccalm.main; + +import org.ccalm.main.models.FrmLocustModel; +import org.json.JSONObject; +import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; +import tools.DBTools; + +import java.sql.Types; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +public class UpdateLocust { + + private final NamedParameterJdbcTemplate jdbcTemplate; + + UpdateLocust(NamedParameterJdbcTemplate jdbcTemplate){ + this.jdbcTemplate = jdbcTemplate; + } + + public boolean update(FrmLocustModel locust){ + + String sql; + boolean exists=false; //Is there a record. + + //Если данные пришли из внешнего источника то проверяем по ID компании и eid + if(locust.eid!=null && locust.uid==null) { + sql = """ + select uid from main.frmlocust where eid=:eid and company_uid=CAST(:company_uid AS uuid) + """; + MapSqlParameterSource parameters = new MapSqlParameterSource(); + parameters.addValue("eid", locust.eid, Types.BIGINT); + parameters.addValue("company_uid", locust.company_uid, Types.VARCHAR); + List ret = jdbcTemplate.query(sql, parameters, new DBTools.JsonRowMapper()); + for (String s : ret) { + JSONObject obj = new JSONObject(s); + if(!obj.isNull("uid")) { + locust.uid = obj.getString("uid"); + exists=true; + } + } + } + //Check exist record by uid + sql= """ + select uid from main.frmlocust where uid=CAST(:uid AS uuid); + """; + MapSqlParameterSource parameters = new MapSqlParameterSource(); + parameters.addValue("uid", locust.uid, Types.VARCHAR); + List ret = jdbcTemplate.query(sql, parameters, new DBTools.JsonRowMapper()); + for (String s : ret) { + exists=true; + } + + if(exists) + { + sql= """ + update main.frmlocust set + changed = false, + user_id=:user_id, + device_id=:device_id, + image_name1=:image_name1, + image_name2=:image_name2, + image_name3=:image_name3, + country_id=:country_id, + region_id=:region_id, + area=:area, + district=:district, + village=:village, + terrain=:terrain, + observer=:observer, + date=:date, + timezone=CAST(:timezone AS interval), + lat_center=:lat_center, + lon_center=:lon_center, + bio_hectare=:bio_hectare, + bio_biotope_id=:bio_biotope_id, + bio_greenery_id=:bio_greenery_id, + bio_greenery_cover_id=:bio_greenery_cover_id, + bio_temperature=:bio_temperature, + bio_wind=:bio_wind, + locust_have=:locust_have, + locust_type_id=:locust_type_id, + locust_populated=:locust_populated, + eggs_capsules_area=:eggs_capsules_area, + eggs_capsules_density=:eggs_capsules_density, + eggs_capsules_density_to=:eggs_capsules_density_to, + eggs_capsules=:eggs_capsules, + eggs_live=:eggs_live, + eggs_enemies_id=:eggs_enemies_id, + larva_born_id=:larva_born_id, + larva_age_id=:larva_age_id, + larva_painting_id=:larva_painting_id, + larva_behavior_id=:larva_behavior_id, + larva_density=:larva_density, + larva_density_to=:larva_density_to, + kuliguli_age_id=:kuliguli_age_id, + kuliguli_density=:kuliguli_density, + kuliguli_density_to=:kuliguli_density_to, + kuliguli_size=:kuliguli_size, + kuliguli_count=:kuliguli_count, + kuliguli_action_id=:kuliguli_action_id, + imago_wing_id=:imago_wing_id, + imago_maturity=:imago_maturity, + imago_phase_id=:imago_phase_id, + imago_action_id=:imago_action_id, + imago_density=:imago_density, + imago_density_ga=:imago_density_ga, + imago_feeding=:imago_feeding, + imago_copulation=:imago_copulation, + imago_laying=:imago_laying, + imago_flying=:imago_flying, + swarm_maturity=:swarm_maturity, + swarm_density_id=:swarm_density_id, + swarm_size=:swarm_size, + swarm_count=:swarm_count, + swarm_copulation=:swarm_copulation, + swarm_laying=:swarm_laying, + swarm_flying_direction_id=:swarm_flying_direction_id, + swarm_height_id=:swarm_height_id, + description=:description, + geom=ST_SetSRID(ST_GeomFromGeoJSON(:geom),4326), + test=:test + where uid=CAST(:uid AS uuid) + """; + }else{ + sql=""" + insert into main.frmlocust( + changed, + user_id, + device_id, + image_name1, + image_name2, + image_name3, + country_id, + region_id, + area, + district, + village, + terrain, + observer, + date, + timezone, + lat_center, + lon_center, + bio_hectare, + bio_biotope_id, + bio_greenery_id, + bio_greenery_cover_id, + bio_temperature, + bio_wind, + locust_have, + locust_type_id, + locust_populated, + eggs_capsules_area, + eggs_capsules_density, + eggs_capsules_density_to, + eggs_capsules, + eggs_live, + eggs_enemies_id, + larva_born_id, + larva_age_id, + larva_painting_id, + larva_behavior_id, + larva_density, + larva_density_to, + kuliguli_age_id, + kuliguli_density, + kuliguli_density_to, + kuliguli_size, + kuliguli_count, + kuliguli_action_id, + imago_wing_id, + imago_maturity, + imago_phase_id, + imago_action_id, + imago_density, + imago_density_ga, + imago_feeding, + imago_copulation, + imago_laying, + imago_flying, + swarm_maturity, + swarm_density_id, + swarm_size, + swarm_count, + swarm_copulation, + swarm_laying, + swarm_flying_direction_id, + swarm_height_id, + description, + geom, + test, + uid + )values( + false, + :user_id, + :device_id, + :image_name1, + :image_name2, + :image_name3, + :country_id, + :region_id, + :area, + :district, + :village, + :terrain, + :observer, + :date, + CAST(:timezone AS interval), + :lat_center, + :lon_center, + :bio_hectare, + :bio_biotope_id, + :bio_greenery_id, + :bio_greenery_cover_id, + :bio_temperature, + :bio_wind, + :locust_have, + :locust_type_id, + :locust_populated, + :eggs_capsules_area, + :eggs_capsules_density, + :eggs_capsules_density_to, + :eggs_capsules, + :eggs_live, + :eggs_enemies_id, + :larva_born_id, + :larva_age_id, + :larva_painting_id, + :larva_behavior_id, + :larva_density, + :larva_density_to, + :kuliguli_age_id, + :kuliguli_density, + :kuliguli_density_to, + :kuliguli_size, + :kuliguli_count, + :kuliguli_action_id, + :imago_wing_id, + :imago_maturity, + :imago_phase_id, + :imago_action_id, + :imago_density, + :imago_density_ga, + :imago_feeding, + :imago_copulation, + :imago_laying, + :imago_flying, + :swarm_maturity, + :swarm_density_id, + :swarm_size, + :swarm_count, + :swarm_copulation, + :swarm_laying, + :swarm_flying_direction_id, + :swarm_height_id, + :description, + ST_SetSRID(ST_GeomFromGeoJSON(:geom),4326), + :test, + :uid + ) + """; + } + MapSqlParameterSource parameters = new MapSqlParameterSource(); + parameters.addValue("uid", locust.uid, Types.VARCHAR); + + if(locust.user_id == null) { parameters.addValue("user_id", null, Types.BIGINT); } else { parameters.addValue("user_id", Long.parseLong(locust.user_id), Types.BIGINT); } + + parameters.addValue("device_id", locust.device_id, Types.VARCHAR); + + parameters.addValue("image_name1", locust.image_name1, Types.VARCHAR); + parameters.addValue("image_name2", locust.image_name2, Types.VARCHAR); + parameters.addValue("image_name3", locust.image_name3, Types.VARCHAR); + + if(locust.country_id == null) { parameters.addValue("country_id", null, Types.BIGINT); } else { parameters.addValue("country_id", Long.parseLong(locust.country_id), Types.BIGINT); } + + + if(locust.region_id == null) { parameters.addValue("region_id", null, Types.BIGINT); } else { parameters.addValue("region_id", Long.parseLong(locust.region_id), Types.BIGINT); } + + parameters.addValue("area", locust.area, Types.VARCHAR); + parameters.addValue("district", locust.district, Types.VARCHAR); + + parameters.addValue("village", locust.village, Types.VARCHAR); + parameters.addValue("terrain", locust.terrain, Types.VARCHAR); + + parameters.addValue("observer", locust.observer, Types.VARCHAR); + if(locust.date==null) + { + parameters.addValue("date", null, Types.DATE); + }else + { + if(date.indexOf("-")==-1) //If old date format in UNIX time + { + int uDate=Integer.parseInt(date)+1; + java.sql.Timestamp tm=new java.sql.Timestamp((long)uDate*1000); + stmt.setTimestamp(14, tm); + }else + { + java.sql.Timestamp tm=null; + DateFormat dfm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //2016-05-29 18:00:01 in "GMT" + try{ + tm = new java.sql.Timestamp(dfm.parse(date).getTime()); + } catch (Exception ex) { + logger.error("Error",ex.getMessage()); + } + stmt.setTimestamp(14, tm); + } + } + + parameters.addValue("timezone", locust.timezone, Types.VARCHAR); + + if(locust.lat_center==null) parameters.addValue("lat_center", null, Types.DOUBLE); else parameters.addValue("lat_center", Double.parseDouble(locust.lat_center), Types.DOUBLE); + if(locust.lon_center==null) parameters.addValue("lon_center", null, Types.DOUBLE); else parameters.addValue("lon_center", Double.parseDouble(locust.lon_center), Types.DOUBLE); + + if(locust.bio_hectare==null) parameters.addValue("bio_hectare", null, Types.DOUBLE); else parameters.addValue("bio_hectare",Double.parseDouble(locust.bio_hectare), Types.DOUBLE); + if(locust.bio_biotope_id==null) parameters.addValue("bio_biotope_id", null, Types.BIGINT); else parameters.addValue("bio_biotope_id",Long.parseLong(locust.bio_biotope_id), Types.BIGINT); + if(locust.bio_greenery_id==null) parameters.addValue("bio_greenery_id", null, Types.BIGINT); else parameters.addValue("bio_greenery_id", Long.parseLong(locust.bio_greenery_id), Types.BIGINT); + if(locust.bio_greenery_cover_id==null) parameters.addValue("bio_greenery_cover_id", null, Types.BIGINT); else parameters.addValue("bio_greenery_cover_id",Long.parseLong(locust.bio_greenery_cover_id), Types.BIGINT); + if(locust.bio_temperature==null) parameters.addValue("bio_temperature", null, Types.DOUBLE); else parameters.addValue("bio_temperature",Double.parseDouble(locust.bio_temperature), Types.DOUBLE); + if(locust.bio_wind==null) parameters.addValue("bio_wind", null, Types.DOUBLE); else parameters.addValue("bio_wind",Double.parseDouble(locust.bio_wind), Types.DOUBLE); + if(locust.locust_have==null) parameters.addValue("locust_have", null, Types.BIGINT); else parameters.addValue("locust_have",Long.parseLong(locust.locust_have), Types.BIGINT); + if(locust.locust_type_id==null) parameters.addValue("locust_type_id", null, Types.BIGINT); else parameters.addValue("locust_type_id",Long.parseLong(locust.locust_type_id), Types.BIGINT); + if(locust.locust_populated==null) parameters.addValue("locust_populated", null, Types.DOUBLE); else parameters.addValue("locust_populated",Double.parseDouble(locust.locust_populated), Types.DOUBLE); + + if(locust.eggs_capsules_area==null) parameters.addValue("eggs_capsules_area", null, Types.DOUBLE); else parameters.addValue("eggs_capsules_area",Double.parseDouble(locust.eggs_capsules_area), Types.DOUBLE); + if(locust.eggs_capsules_density==null) parameters.addValue("eggs_capsules_density", null, Types.DOUBLE); else parameters.addValue("eggs_capsules_density",Double.parseDouble(locust.eggs_capsules_density), Types.DOUBLE); + if(locust.eggs_capsules_density_to==null) parameters.addValue("eggs_capsules_density_to", null, Types.DOUBLE); else parameters.addValue("eggs_capsules_density_to",Double.parseDouble(locust.eggs_capsules_density_to), Types.DOUBLE); + if(locust.eggs_capsules==null) parameters.addValue("eggs_capsules", null, Types.DOUBLE); else parameters.addValue("eggs_capsules",Double.parseDouble(locust.eggs_capsules), Types.DOUBLE); + if(locust.eggs_live==null) parameters.addValue("eggs_live", null, Types.DOUBLE); else parameters.addValue("eggs_live",Double.parseDouble(locust.eggs_live), Types.DOUBLE); + if(locust.eggs_enemies_id==null) parameters.addValue("eggs_enemies_id", null, Types.BIGINT); else parameters.addValue("eggs_enemies_id",Long.parseLong(locust.eggs_enemies_id), Types.BIGINT); + + if(locust.larva_born_id==null) parameters.addValue("larva_born_id", null, Types.BIGINT); else parameters.addValue("larva_born_id",Long.parseLong(locust.larva_born_id), Types.BIGINT); + if(locust.larva_age_id==null) parameters.addValue("larva_age_id", null, Types.BIGINT); else parameters.addValue("larva_age_id",Long.parseLong(locust.larva_age_id), Types.BIGINT); + if(locust.larva_painting_id==null) parameters.addValue("larva_painting_id", null, Types.BIGINT); else parameters.addValue("larva_painting_id",Long.parseLong(locust.larva_painting_id), Types.BIGINT); + if(locust.larva_behavior_id==null) parameters.addValue("larva_behavior_id", null, Types.BIGINT); else parameters.addValue("larva_behavior_id",Long.parseLong(locust.larva_behavior_id), Types.BIGINT); + + if(locust.larva_density==null) parameters.addValue("larva_density", null, Types.DOUBLE); else parameters.addValue("larva_density",Double.parseDouble(locust.larva_density), Types.DOUBLE); + if(locust.larva_density_to==null) parameters.addValue("larva_density_to", null, Types.DOUBLE); else parameters.addValue("larva_density_to",Double.parseDouble(locust.larva_density_to), Types.DOUBLE); + if(locust.kuliguli_age_id==null) parameters.addValue("kuliguli_age_id", null, Types.BIGINT); else parameters.addValue("kuliguli_age_id",Long.parseLong(locust.kuliguli_age_id), Types.BIGINT); + + if(locust.kuliguli_density==null) parameters.addValue("kuliguli_density", null, Types.DOUBLE); else parameters.addValue("kuliguli_density",Double.parseDouble(locust.kuliguli_density), Types.DOUBLE); + if(locust.kuliguli_density_to==null) parameters.addValue("kuliguli_density_to", null, Types.DOUBLE); else parameters.addValue("kuliguli_density_to",Double.parseDouble(locust.kuliguli_density_to), Types.DOUBLE); + if(locust.kuliguli_size==null) parameters.addValue("kuliguli_size", null, Types.DOUBLE); else parameters.addValue("kuliguli_size",Double.parseDouble(locust.kuliguli_size), Types.DOUBLE); + if(locust.kuliguli_count==null) parameters.addValue("kuliguli_count", null, Types.DOUBLE); else parameters.addValue("kuliguli_count",Double.parseDouble(locust.kuliguli_count), Types.DOUBLE); + if(locust.kuliguli_action_id==null) parameters.addValue("kuliguli_action_id", null, Types.BIGINT); else parameters.addValue("kuliguli_action_id",Long.parseLong(locust.kuliguli_action_id), Types.BIGINT); + if(locust.imago_wing_id==null) parameters.addValue("imago_wing_id", null, Types.BIGINT); else parameters.addValue("imago_wing_id",Long.parseLong(locust.imago_wing_id), Types.BIGINT); + if(locust.imago_maturity==null) parameters.addValue("imago_maturity", null, Types.BOOLEAN); + else { + if(locust.imago_maturity.equals("1")) parameters.addValue("imago_maturity",true,Types.BOOLEAN); + else parameters.addValue("imago_maturity",false,Types.BOOLEAN); + } + if(locust.imago_phase_id==null) parameters.addValue("imago_phase_id", null, Types.BIGINT); else parameters.addValue("imago_phase_id",Long.parseLong(locust.imago_phase_id), Types.BIGINT); + if(locust.imago_action_id==null) parameters.addValue("imago_action_id", null, Types.BIGINT); else parameters.addValue("imago_action_id",Long.parseLong(locust.imago_action_id), Types.BIGINT); + + if(locust.imago_density==null) parameters.addValue("imago_density", null, Types.DOUBLE); else parameters.addValue("imago_density",Double.parseDouble(locust.imago_density), Types.DOUBLE); + if(locust.imago_density_ga==null) parameters.addValue("imago_density_ga", null, Types.DOUBLE); else parameters.addValue("imago_density_ga",Double.parseDouble(locust.imago_density_ga), Types.DOUBLE); + if(locust.imago_feeding==null) parameters.addValue("imago_feeding", null, Types.BOOLEAN); + else { + if(locust.imago_feeding.equals("1")) parameters.addValue("imago_feeding",true,Types.BOOLEAN); + else parameters.addValue("imago_feeding",false,Types.BOOLEAN); + } + if(locust.imago_copulation==null) parameters.addValue("imago_copulation", null, Types.BOOLEAN); + else { + if(locust.imago_copulation.equals("1")) parameters.addValue("imago_copulation",true,Types.BOOLEAN); + else parameters.addValue("imago_copulation",false,Types.BOOLEAN); + } + if(locust.imago_laying==null) parameters.addValue("imago_laying", null, Types.BOOLEAN); + else { + if(locust.imago_laying.equals("1")) parameters.addValue("imago_laying",true,Types.BOOLEAN); + else parameters.addValue("imago_laying",false,Types.BOOLEAN); + } + if(locust.imago_flying==null) parameters.addValue("imago_flying", null, Types.BOOLEAN); + else { + if(locust.imago_flying.equals("1")) parameters.addValue("imago_flying",true,Types.BOOLEAN); + else parameters.addValue("imago_flying",false,Types.BOOLEAN); + } + if(locust.swarm_maturity==null) parameters.addValue("swarm_maturity", null, Types.BOOLEAN); + else { + if(locust.swarm_maturity.equals("1")) parameters.addValue("swarm_maturity",true,Types.BOOLEAN); + else parameters.addValue("swarm_maturity",false,Types.BOOLEAN); + } + if(locust.swarm_density_id==null) parameters.addValue("swarm_density_id", null, Types.BIGINT); else parameters.addValue("swarm_density_id",Long.parseLong(locust.swarm_density_id), Types.BIGINT); + if(locust.swarm_size==null) parameters.addValue("swarm_size", null, Types.DOUBLE); else parameters.addValue("swarm_size",Double.parseDouble(locust.swarm_size), Types.DOUBLE); + if(locust.swarm_count==null) parameters.addValue("swarm_count", null, Types.DOUBLE); else parameters.addValue("swarm_count",Double.parseDouble(locust.swarm_count), Types.DOUBLE); + if(locust.swarm_copulation==null) parameters.addValue("swarm_copulation", null, Types.BOOLEAN); + else { + if(locust.swarm_copulation.equals("1")) parameters.addValue("swarm_copulation",true,Types.DOUBLE); + else parameters.addValue("swarm_copulation",false,Types.DOUBLE); + } + if(locust.swarm_laying==null) parameters.addValue("swarm_laying", null, Types.BOOLEAN); + else { + if(locust.swarm_laying.equals("1")) parameters.addValue("swarm_laying",true,Types.DOUBLE); + else parameters.addValue("swarm_laying",false,Types.DOUBLE); + } + if(locust.swarm_flying_direction_id==null) parameters.addValue("swarm_flying_direction_id", null, Types.BIGINT); else parameters.addValue("swarm_flying_direction_id",Long.parseLong(locust.swarm_flying_direction_id), Types.BIGINT); + if(locust.swarm_height_id==null) parameters.addValue("swarm_height_id", null, Types.BIGINT); else parameters.addValue("swarm_height_id",Long.parseLong(locust.swarm_height_id), Types.BIGINT); + + parameters.addValue("description", Types.VARCHAR); + parameters.addValue("geom", Types.VARCHAR); + if(locust.test==null) parameters.addValue("test", null, Types.BOOLEAN); + else { + if(locust.test.equals("1")) parameters.addValue("test",true, Types.BOOLEAN); + else parameters.addValue("test",false,Types.BOOLEAN); + } + + + return true; + } + +} diff --git a/src/main/java/org/ccalm/main/models/ErrorResponseModel.java b/src/main/java/org/ccalm/main/models/ErrorResponseModel.java new file mode 100644 index 0000000..f8bab65 --- /dev/null +++ b/src/main/java/org/ccalm/main/models/ErrorResponseModel.java @@ -0,0 +1,96 @@ +package org.ccalm.main.models; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; + +import java.util.Collections; +import java.util.List; + +@Schema( + description = "Error API response", + example = "{ \"error_code\": 10000, \"error_message\": [\"Internal_Server_Error\",\"Please_log_in\"], \"error_setting\": [\"99;day\",\"1;2\"], \"error_marker\": \"2a449883-c7c6-468e-b3ae-5f73fc96627d\" }" +) + +public class ErrorResponseModel { + + @Schema(description = "Error code", example = "10000") + @JsonProperty("error_code") + private int errorCode; + + @Schema(description = "List of error descriptions", example = "[\"Internal_Server_Error\",\"Please_log_in\"]") + @JsonProperty("error_message") + private List errorMessage; + + @Schema(description = "Options for translated text", example = "[\"99;day\",\"1;2\"]") + @JsonProperty("error_setting") + private List errorSetting; + + @Schema(description = "Unique identifier for searching in the database", example = "4260aad8-f7ee-4be4-b52c-15d56ec83232") + @JsonProperty("error_marker") + private String errorMarker; + + public ErrorResponseModel(int errorCode) { + this.errorCode = errorCode; + this.errorMessage = null; + this.errorSetting = null; + this.errorMarker = null; + } + + public ErrorResponseModel(int errorCode, List errorMessage, String errorMarker) { + this.errorCode = errorCode; + this.errorMessage = errorMessage; + this.errorMarker = errorMarker; + } + + public ErrorResponseModel(int errorCode, String errorMessage, String errorMarker) { + this.errorCode = errorCode; + this.errorMessage = Collections.singletonList(errorMessage); + this.errorMarker = errorMarker; + } + + public ErrorResponseModel(int errorCode, String errorMessage, String errorSetting, String errorMarker) { + this.errorCode = errorCode; + this.errorMessage = Collections.singletonList(errorMessage); + this.errorSetting = Collections.singletonList(errorSetting); + this.errorMarker = errorMarker; + } + + public ErrorResponseModel(int errorCode, List errorMessage, List errorSetting, String errorMarker) { + this.errorCode = errorCode; + this.errorMessage = errorMessage; + this.errorSetting = errorSetting; + this.errorMarker = errorMarker; + } + + public int getError_code() { + return errorCode; + } + + public void setError_code(int errorCode) { + this.errorCode = errorCode; + } + + public List getError_message() { + return errorMessage; + } + + public void setError_message(List errorMessage) { + this.errorMessage = errorMessage; + } + + public void setError_setting(List errorSetting) { + this.errorSetting = errorSetting; + } + + public List getError_setting() { + return errorSetting; + } + + public void setError_marker(String errorMarker) { + this.errorMarker = errorMarker; + } + + public String getError_marker() { + return errorMarker; + } +} \ No newline at end of file diff --git a/src/main/java/org/ccalm/main/models/FrmLocustModel.java b/src/main/java/org/ccalm/main/models/FrmLocustModel.java new file mode 100644 index 0000000..c8cb3df --- /dev/null +++ b/src/main/java/org/ccalm/main/models/FrmLocustModel.java @@ -0,0 +1,151 @@ +package org.ccalm.main.models; + +import lombok.Getter; +import lombok.Setter; +import org.ccalm.main.utils.CustomException; + +import java.sql.Types; + +public class FrmLocustModel { + public String uid; + public String eid; //Внешний идентификатор + public long seq; + public long country_id; + public String country_uid; + + public String phytoType; //Вредители либо обработка + public String observer; + + public String device_id = null; + + public String image_name1 = null; + public String image_name2 = null; + public String image_name3 = null; + + public String lon_center; + public String lat_center; + //Область + public String region_id; //Область + public String region_uid; //Область + + public String district; //Район + public String district_id; + + public String terrain=""; //Название месности + + public String village; //Хозяйство или местность + + public String locust; //Вид саранчи + //public String locust_id; //Вид саранчи + public String locust_type_id; //Locust species (Вид саранчи) + public String locust_populated; //Area infested (ha) + + public String bio_temperature; //air temperature + public String bio_wind; //Ветер (м/с) + public String bio_greenery_id; //растительность + public String bio_greenery_uid; //растительность + public String bio_greenery_cover_id; //Густота растительного покрова + public String bio_greenery_cover_uid; //Густота растительного покрова + + public String phase=null; //Фаза саранчи + public String locust_have; //id Фазы саранчи + public String evp; //ЭФП + public String drawPolygon="null"; //Область обследования GeoGSON + public String size; //Заселённая площадь (polygonArea Площадь контура зоны распространения, в случае если специалист указал его) + public String date; //Дата + + public String description=""; + + //Hopper + public String larva_born = null; //Hatching character varying(255) COLLATE pg_catalog."default" DEFAULT NULL::character varying, + public String larva_born_id = null; // integer, + public String larva_born_uid = null; + public String larva_age_id = null; //Hopper stages integer, + public String larva_age_uid = null; //Hopper stages integer, + public String larva_painting_id = null; //Appearance integer, + public String larva_behavior = null; //Behaviour character varying(50) COLLATE pg_catalog."default" DEFAULT NULL::character varying, + public String larva_behavior_id = null; // integer, + public String larva_behavior_uid = null; // integer, + public String larva_density = null; //Hopper density numeric, + public String larva_density_to = null; //Hopper density to numeric, + + //Eggs + public String eggs_capsules_area = null; //Egg-bed (surface in ha) + public String eggs_capsules_density = null; //Плотность яиц + public String eggs_capsules_density_to = null; //Egg-pods (density) to + public String eggs_capsules = null; //Eggs (average) + public String eggs_live = null; //Eggs (viable) + public String eggs_enemies_id = null; //Natural enemies present + public String eggs_enemies_uid = null; //Natural enemies present + //public String eggs_enemies = null; //not using TODO delete field from database + + //Bands (кулиги) + public String kuliguli_density=null; //Плотность кулиг на м² + public String kuliguli_density_to = null; //плотность максимальная в кулиге + public String kuliguli_size = null; // Размер кулиг + public String kuliguli_count = null; // Количество кулиг + public String kuliguli_action_id = null; // Поведение + public String kuliguli_action_uid = null; // Поведение + public String kuliguli_age_id = null; // Возраст личинок + public String kuliguli_age_uid = null; // Возраст личинок + + //Adults (Имаго) + public String imago_wing_id = null; + public String imago_wing_uid = null; + public String imago_maturity = null; + //public String imago_phase = null; not using + public String imago_phase_id = null; + public String imago_phase_uid = null; + public String imago_action = null; + public String imago_action_id = null; + public String imago_action_uid = null; + public String imago_density = null; //Плотность имаго (/м²)* + public String imago_density_ga = null; + public String imago_feeding = null; + public String imago_copulation = null; + public String imago_laying = null; + public String imago_flying = null; + + + public String larva_density=null; //Плотность личинок + + public String bio_hectare=null; //Обследованная площадь + public String bio_biotope_id=null; //Тип тиотопа + public String bio_biotope_uid=null; //Тип тиотопа + + public String swarms = null; // For CheckBox + public String swarm_maturity = null; //Maturity boolean, + public String swarm_density_id = null; //Density of swarm integer, + public String swarm_size = null; //Swarm size double precision, + public String swarm_count = null; //Number of swarms double precision, + public String swarm_copulation = null; //Not used boolean, + public String swarm_laying = null; //Not used boolean, + public String swarm_flying_direction_id = null; //Flying direction integer, + public String swarm_height_id = null; //Flying height integer, + public String swarm_height_uid = null; //Flying height integer, + + public String company_uid=null; + + //Ниже то что относиться только к обработке + public String insecticide_name=null; + public String insecticide_active_substance=null; + public String insecticide_dose=null; + public String spray_platform=null; + + public String test=null; + + public void update(){ + if( + swarm_maturity!=null || + swarm_density_id!=null || + swarm_size!=null || + swarm_count!=null || + swarm_copulation!=null || + swarm_laying!=null || + swarm_flying_direction_id!=null || + swarm_height_id!=null || + swarm_height_uid!=null + ) swarms = "true"; + } + +} diff --git a/src/main/java/org/ccalm/main/utils/CustomException.java b/src/main/java/org/ccalm/main/utils/CustomException.java new file mode 100644 index 0000000..27c0e51 --- /dev/null +++ b/src/main/java/org/ccalm/main/utils/CustomException.java @@ -0,0 +1,79 @@ +package org.ccalm.main.utils; + +import lombok.Getter; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.ccalm.main.models.ErrorResponseModel; +import org.json.JSONException; +import org.json.JSONObject; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +import java.util.List; + +@ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR) +public class CustomException extends Exception { + private static final Logger logger = LogManager.getLogger(CustomException.class); + + private ErrorResponseModel error; + @Getter + private boolean saveToLog = false; + + public CustomException(int errorCode, String errorMessage, String marker, boolean saveToLog) { + super(errorMessage); + error = new ErrorResponseModel(errorCode, errorMessage, marker); + this.saveToLog = saveToLog; + } + + public CustomException(int errorCode, String errorMessage, String errorSetting, String marker, boolean saveToLog) { + super(errorMessage); + error = new ErrorResponseModel(errorCode, errorMessage, errorSetting, marker); + this.saveToLog = saveToLog; + } + + public CustomException(int errorCode, List errorMessages, String marker, boolean saveToLog) { + super(String.join(" ", errorMessages)); + error = new ErrorResponseModel(errorCode, errorMessages, marker); + this.saveToLog = saveToLog; + } + + public CustomException(int errorCode, List errorMessages, List errorSettings, String marker, boolean saveToLog) { + super(String.join(" ", errorMessages)); + error = new ErrorResponseModel(errorCode, errorMessages, errorSettings, marker); + this.saveToLog = saveToLog; + } + + public int getErrorCode() { + return error.getError_code(); + } + + public String getErrorMarker() { + return error.getError_marker(); + } + + public List getErrorMessages() { + return error.getError_message(); + } + + public List getErrorSettings() { + return error.getError_setting(); + } + + public JSONObject getJson() { + JSONObject json = new JSONObject(); + try { + json.put("error_code", this.getErrorCode()); + json.put("error_message", this.getErrorMessages()); + json.put("error_setting", this.getErrorSettings()); + json.put("error_marker", this.getErrorMarker()); + } catch (JSONException e) { + logger.error("Error", e); + } + return json; + } + + public ErrorResponseModel getErrorResponseModel() { + return error; + } + +} diff --git a/src/main/java/org/ccalm/main/utils/Tools.java b/src/main/java/org/ccalm/main/utils/Tools.java new file mode 100644 index 0000000..7d01d8b --- /dev/null +++ b/src/main/java/org/ccalm/main/utils/Tools.java @@ -0,0 +1,167 @@ +package org.ccalm.main.utils; + +import io.jsonwebtoken.SignatureAlgorithm; +import io.jsonwebtoken.security.Keys; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.json.JSONException; +import org.json.JSONObject; + +import javax.crypto.*; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import java.nio.charset.StandardCharsets; +import java.security.*; +import java.util.Arrays; +import java.util.Base64; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class Tools { + //--------------------------------------------------------------------------- + private static final Logger logger = LogManager.getLogger(Tools.class); + //--------------------------------------------------------------------------- + public static JSONObject createJSONError(int code, String message, String setting, String marker) { + JSONObject json = new JSONObject(); + try { + json.put("error_code", code); + json.put("error_message", Arrays.asList(message)); + json.put("error_setting", Arrays.asList(setting)); + json.put("error_marker", marker); + } catch (JSONException e) { + logger.error(e); + } + return json; + } + //--------------------------------------------------------------------------- + //Зашифровать + public static String encryptText(String pass,String data){ + String encryptedBase64=""; + String encryptionIV = "jazz_tyt_net_111"; // Ваш вектор инициализации + try { + Cipher cipher = Cipher.getInstance("AES/CTR/NoPadding"); + SecretKeySpec key = new SecretKeySpec(Base64.getDecoder().decode(pass), "AES"); + IvParameterSpec iv = new IvParameterSpec(encryptionIV.getBytes()); // Создание объекта IvParameterSpec для вектора инициализации + cipher.init(Cipher.ENCRYPT_MODE, key, iv); // Инициализация шифра с ключом и вектором инициализации + byte[] encrypted = cipher.doFinal(data.getBytes()); // Шифрование строки + encryptedBase64 = Base64.getEncoder().encodeToString(encrypted); // Преобразование зашифрованных данных в base64 + } catch (InvalidKeyException e) { + throw new RuntimeException(e); + } catch (InvalidAlgorithmParameterException e) { + throw new RuntimeException(e); + } catch (NoSuchPaddingException e) { + throw new RuntimeException(e); + } catch (IllegalBlockSizeException e) { + throw new RuntimeException(e); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException(e); + } catch (BadPaddingException e) { + throw new RuntimeException(e); + } + return encryptedBase64; + } + + public static String decryptText(String pass,String data){ + String encryptionIV = "jazz_tyt_net_111"; // Ваш вектор инициализации + String decryptedText= ""; + try { + Cipher cipher = Cipher.getInstance("AES/CTR/NoPadding"); + SecretKeySpec key = new SecretKeySpec(Base64.getDecoder().decode(pass), "AES"); + IvParameterSpec iv = new IvParameterSpec(encryptionIV.getBytes()); // Создание объекта IvParameterSpec для вектора инициализации + cipher.init(Cipher.DECRYPT_MODE, key, iv); // Инициализация шифра с ключом и вектором инициализации + + byte[] decrypted = cipher.doFinal(Base64.getDecoder().decode(data)); // Расшифровка данных + decryptedText = new String(decrypted); // Преобразование расшифрованных данных в строку + } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | + InvalidAlgorithmParameterException | IllegalBlockSizeException | BadPaddingException e) { + e.printStackTrace(); + } + return decryptedText; + } + + public static String generateSignature(String pass,String input) { + try { + SecretKey secretKey = new SecretKeySpec(Base64.getDecoder().decode(pass), "HmacSHA256"); + + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + byte[] encodedInput = digest.digest(input.getBytes(StandardCharsets.UTF_8)); + byte[] encodedKey = secretKey.getEncoded(); + + // Создание HMAC-подписи + SecretKeySpec keySpec = new SecretKeySpec(encodedKey, "HmacSHA256"); + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(keySpec); + byte[] rawHmac = mac.doFinal(encodedInput); + + // Кодирование подписи в base64 + return Base64.getEncoder().encodeToString(rawHmac); + } catch (NoSuchAlgorithmException | InvalidKeyException e) { + e.printStackTrace(); + return null; + } + } + + public static boolean isValidEmail(String email) { + if(email==null || email.isEmpty()) return false; + String EMAIL_REGEX = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$"; + Pattern pattern = Pattern.compile(EMAIL_REGEX); + Matcher matcher = pattern.matcher(email); + return matcher.matches(); + } + + public static boolean isInteger(String str) { + if (str == null || str.isEmpty()) { + return false; + } + try { + Integer.parseInt(str); + return true; + } catch (NumberFormatException e) { + return false; + } + } + + public static String genKey(){ + SecretKey key = Keys.secretKeyFor(SignatureAlgorithm.HS256); + byte[] keyBytes = key.getEncoded(); + return Base64.getEncoder().encodeToString(keyBytes); + } + + public static String generatePassword(int length) { + String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + SecureRandom random = new SecureRandom(); + StringBuilder sb = new StringBuilder(length); + for (int i = 0; i < length; i++) { + int randomIndex = random.nextInt(CHARACTERS.length()); + sb.append(CHARACTERS.charAt(randomIndex)); + } + return sb.toString(); + } + + // Метод для извлечения подписи из JWT токена + public static String extractSignature(String jwtToken) { + String[] jwtParts = jwtToken.split("\\."); + if (jwtParts.length != 3) { + return null; + } + return jwtParts[2]; + } + + //Для извлечения содержимого токена + public static JSONObject extractToken(String jwtToken) { + String[] jwtParts = jwtToken.split("\\."); + if (jwtParts.length != 3) { + return null; + } + String payloadJson = new String(Base64.getUrlDecoder().decode(jwtParts[1])); + JSONObject payload=null; + try { + payload = new JSONObject(payloadJson); + } catch (JSONException e) { + return null; + } + return payload; + } + + +}