From 07ae9f88a3de59b979b3d8afae55e1ebb8d3a48a Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Sun, 24 Apr 2022 11:34:49 +0800 Subject: [PATCH 01/21] =?UTF-8?q?=E5=AE=8C=E5=96=84=20jackson=20=E8=A7=A3?= =?UTF-8?q?=E6=9E=90=E6=97=B6=E9=97=B4=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../disaster/QWeatherDisasterWarning.java | 51 ++++++----- .../disaster/QWeatherDisasterWarningItem.java | 87 ++++++++----------- .../officalAccount/sendMessageTest.java | 6 +- 3 files changed, 72 insertions(+), 72 deletions(-) diff --git a/code/java/DisasterWarning/src/main/java/com/cpic/xim/notify/disaster/QWeatherDisasterWarning.java b/code/java/DisasterWarning/src/main/java/com/cpic/xim/notify/disaster/QWeatherDisasterWarning.java index e527a88..ec911b6 100644 --- a/code/java/DisasterWarning/src/main/java/com/cpic/xim/notify/disaster/QWeatherDisasterWarning.java +++ b/code/java/DisasterWarning/src/main/java/com/cpic/xim/notify/disaster/QWeatherDisasterWarning.java @@ -1,23 +1,24 @@ +/* + * @Author: Kane + * @Date: 2022-04-24 10:21:46 + * @LastEditors: Kane + * @LastEditTime: 2022-04-24 11:28:58 + * @FilePath: \DisasterWarning\src\main\java\com\cpic\xim\notify\disaster\QWeatherDisasterWarning.java + * @Description: + * + * Copyright (c) ${2022} by Kane, All Rights Reserved. + */ package com.cpic.xim.notify.disaster; +import java.util.Date; import java.util.Vector; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; public class QWeatherDisasterWarning { - public QWeatherDisasterWarning( String code, - String updateTime, - String fxLink, - Vector warning, - QWeatherDisasterWarningRefer refer ) - { - this.code = code; - this.updateTime = updateTime; - this.fxLink = fxLink; - this.warning = warning; - this.refer = refer; - } - - public QWeatherDisasterWarning() {} + public QWeatherDisasterWarning() + {} public String getCode() { @@ -29,12 +30,12 @@ public class QWeatherDisasterWarning this.code = code; } - public String getUpdateTime() + public Date getUpdateTime() { return updateTime; } - public void setUpdateTime( String updateTime ) + public void setUpdateTime( Date updateTime ) { this.updateTime = updateTime; } @@ -69,9 +70,19 @@ public class QWeatherDisasterWarning this.refer = refer; } - private String code; - private String updateTime; - private String fxLink; + @JsonProperty( "code") + private String code; + + @JsonProperty( "updateTime") + @JsonFormat( pattern = "yyyy-MM-dd\'T\'HH:mmXXX") + private Date updateTime; + + @JsonProperty( "fxLink") + private String fxLink; + + @JsonProperty( "warning") private Vector warning; - private QWeatherDisasterWarningRefer refer; + + @JsonProperty( "refer") + private QWeatherDisasterWarningRefer refer; } diff --git a/code/java/DisasterWarning/src/main/java/com/cpic/xim/notify/disaster/QWeatherDisasterWarningItem.java b/code/java/DisasterWarning/src/main/java/com/cpic/xim/notify/disaster/QWeatherDisasterWarningItem.java index ad4ba37..53397ea 100644 --- a/code/java/DisasterWarning/src/main/java/com/cpic/xim/notify/disaster/QWeatherDisasterWarningItem.java +++ b/code/java/DisasterWarning/src/main/java/com/cpic/xim/notify/disaster/QWeatherDisasterWarningItem.java @@ -1,79 +1,61 @@ package com.cpic.xim.notify.disaster; +import java.util.Date; import java.util.Objects; import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; //import com.fasterxml.jackson.annotation.JsonIgnore; public class QWeatherDisasterWarningItem { - public QWeatherDisasterWarningItem() {} - public QWeatherDisasterWarningItem( String id, - String sender, - String pubTime, - String title, - String status, - String level, - String type, - String typeName, - String text, - String related, - String urgency, String certainty ) + public QWeatherDisasterWarningItem() + {} + + public QWeatherDisasterWarningItem( String id, String sender, Date pubTime, String title, + String status, String level, String type, String typeName, String text, String related, + String urgency, String certainty) { - this.id = id; - this.sender = sender; - this.pubTime = pubTime; - this.title = title; - this.status = status; - this.level = level; - this.type = type; + this.id = id; + this.sender = sender; + this.pubTime = pubTime; + this.title = title; + this.status = status; + this.level = level; + this.type = type; this.typeName = typeName; - this.text = text; - this.related = related; - this.urgency = urgency; + this.text = text; + this.related = related; + this.urgency = urgency; this.certainty = certainty; } @Override public boolean equals( Object o ) { - if ( this == o ) + if ( this == o) { return true; } - if ( o == null || getClass() != o.getClass() ) + if ( o == null || getClass() != o.getClass()) { return false; } QWeatherDisasterWarningItem that = (QWeatherDisasterWarningItem) o; - return id.equals( that.id ) && Objects.equals( sender, that.sender ) && Objects.equals( pubTime, - that.pubTime ) && Objects.equals( - title, - that.title ) && Objects.equals( status, that.status ) && Objects.equals( level, - that.level ) && Objects.equals( - type, - that.type ) && Objects.equals( typeName, that.typeName ) && Objects.equals( text, - that.text ) && Objects.equals( - related, - that.related ) && Objects.equals( urgency, that.urgency ) && Objects.equals( certainty, - that.certainty ); + return id.equals( that.id ) && Objects.equals( sender, that.sender ) + && Objects.equals( pubTime, that.pubTime ) && Objects.equals( title, that.title ) + && Objects.equals( status, that.status ) && Objects.equals( level, that.level ) + && Objects.equals( type, that.type ) && Objects.equals( typeName, that.typeName ) + && Objects.equals( text, that.text ) && Objects.equals( related, that.related ) + && Objects.equals( urgency, that.urgency ) + && Objects.equals( certainty, that.certainty ); } @Override public int hashCode() { - return Objects.hash( id, - sender, - pubTime, - title, - status, - level, - type, - typeName, - text, - related, - urgency, - certainty ); + return Objects.hash( id, sender, pubTime, title, status, level, type, typeName, text, + related, urgency, certainty ); } public String getId() @@ -96,12 +78,12 @@ public class QWeatherDisasterWarningItem this.sender = sender; } - public String getPubTime() + public Date getPubTime() { return pubTime; } - public void setPubTime( String pubTime ) + public void setPubTime( Date pubTime ) { this.pubTime = pubTime; } @@ -198,8 +180,11 @@ public class QWeatherDisasterWarningItem private String id; private String sender; - @JsonFormat(pattern="yyyy-MM-dd'T'HH:mm") - private String pubTime; + + @JsonProperty( "pubTime") + @JsonFormat( shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd\'T\'HH:mmXXX") + private Date pubTime; + private String title; private String status; private String level; diff --git a/code/java/DisasterWarning/src/test/java/com/cpic/xim/wechat/officalAccount/sendMessageTest.java b/code/java/DisasterWarning/src/test/java/com/cpic/xim/wechat/officalAccount/sendMessageTest.java index 2cda05e..695247d 100644 --- a/code/java/DisasterWarning/src/test/java/com/cpic/xim/wechat/officalAccount/sendMessageTest.java +++ b/code/java/DisasterWarning/src/test/java/com/cpic/xim/wechat/officalAccount/sendMessageTest.java @@ -2,7 +2,7 @@ * @Author: Kane * @Date: 2022-04-22 10:53:49 * @LastEditors: Kane - * @LastEditTime: 2022-04-23 23:44:54 + * @LastEditTime: 2022-04-24 11:31:50 * @FilePath: \DisasterWarning\src\test\java\com\cpic\xim\wechat\officalAccount\sendMessageTest.java * @Description: * @@ -16,6 +16,7 @@ import org.junit.Test; import static org.junit.Assert.*; import com.cpic.xim.httpUtil.*; import java.io.IOException; +import java.text.SimpleDateFormat; import java.util.*; import com.fasterxml.jackson.databind.ObjectMapper; @@ -72,6 +73,9 @@ public class sendMessageTest QWeatherDisasterWarning warning = mapper.readValue( warningJSON, QWeatherDisasterWarning.class ); + SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd HH:mm" ); + String putTime = format.format( warning.getUpdateTime() ); + sendMessage.sendWeatherDisasterWarning( url, warning ); } catch (Exception error) From a78fad18eaa6fcce50bbfe1ff0630ca9d579a37f Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Mon, 25 Apr 2022 17:41:41 +0800 Subject: [PATCH 02/21] =?UTF-8?q?=E4=BF=9D=E5=AD=98=E8=BF=9B=E5=BA=A6?= =?UTF-8?q?=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/cpic/xim/wechat/officalAccount/sendMessage.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java b/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java index 221f4ca..5ff5f41 100644 --- a/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java +++ b/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java @@ -2,7 +2,7 @@ * @Author: Kane * @Date: 2022-04-22 10:53:49 * @LastEditors: Kane - * @LastEditTime: 2022-04-23 23:46:54 + * @LastEditTime: 2022-04-25 17:40:31 * @FilePath: \DisasterWarning\src\main\java\com\cpic\xim\wechat\officalAccount\sendMessage.java * @Description: 用来推送公众号消息的程序库。 * @@ -57,7 +57,6 @@ public class sendMessage String color = warningLevel.keySet().contains( item.getLevel() ) ? warningLevel.get( item.getLevel() ) : "#000000"; - requestBody = new StringBuilder(); requestBody.append( "tplid=57&groupid=1&first=尊敬的#realname#,您好!&" ); From 9d57987f0cb4402bc0b8a01fc74dd6a089708d9c Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Mon, 25 Apr 2022 23:27:38 +0800 Subject: [PATCH 03/21] =?UTF-8?q?=E6=94=B9=E5=8F=98=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E7=9A=84=E8=8E=B7=E5=8F=96=E6=96=B9=E5=BC=8F?= =?UTF-8?q?=EF=BC=81=E6=94=B9=E6=88=90singleton=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/java/DisasterWarning/db.json | 7 +- .../src/main/java/AppMain.java | 4 +- .../config/WeatherDisasterNotifyConfig.java | 16 ++-- .../com/cpic/xim/config/db/OracleConfig.java | 17 ++++- .../xim/config/db/OracleConfigLoader.java | 74 +++++++++++++++++++ .../wechat/officalAccount/sendMessage.java | 16 +++- 6 files changed, 121 insertions(+), 13 deletions(-) create mode 100644 code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/OracleConfigLoader.java diff --git a/code/java/DisasterWarning/db.json b/code/java/DisasterWarning/db.json index 7d27945..16c135f 100644 --- a/code/java/DisasterWarning/db.json +++ b/code/java/DisasterWarning/db.json @@ -1,12 +1,13 @@ { "tns_name": "xmcx1", "ip_addr": "10.39.0.86", - "user_name": "", - "password": "", + "jdbc_url": "", + "user_name": "xim_offical_account", + "password": "Cpic#1234", "tables": [ { "table_name": "", "table_description": "" } ] -} \ No newline at end of file +} diff --git a/code/java/DisasterWarning/src/main/java/AppMain.java b/code/java/DisasterWarning/src/main/java/AppMain.java index 1b52676..9fbf7b0 100644 --- a/code/java/DisasterWarning/src/main/java/AppMain.java +++ b/code/java/DisasterWarning/src/main/java/AppMain.java @@ -19,8 +19,6 @@ import java.util.Vector; public class AppMain { - private static final String CONFIG_FILE_PATH = "./config.json"; - public static void main( String[] args ) { String json; @@ -30,7 +28,7 @@ public class AppMain // 读取配置 try { - config = WeatherDisasterNotifyConfig.load( CONFIG_FILE_PATH ); + config = WeatherDisasterNotifyConfig.getConfig(); } catch (IOException error) { diff --git a/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/WeatherDisasterNotifyConfig.java b/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/WeatherDisasterNotifyConfig.java index f3bdeaf..1d4a13c 100644 --- a/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/WeatherDisasterNotifyConfig.java +++ b/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/WeatherDisasterNotifyConfig.java @@ -11,11 +11,17 @@ import com.fasterxml.jackson.databind.PropertyNamingStrategy; public class WeatherDisasterNotifyConfig { private static final int BUFFER_SIZE = 1024; + private static final String CONFIG_FILE_PATH = "./config.json"; + private static WeatherDisasterNotifyConfig appConfig = null; - public static WeatherDisasterNotifyConfig load( String filePath ) throws IOException + public static WeatherDisasterNotifyConfig getConfig() throws IOException { - WeatherDisasterNotifyConfig config = null; + if ( appConfig != null) + { + return appConfig; + } + ObjectMapper mapper = new ObjectMapper(); FileReader configFile = null; StringBuffer json = null; @@ -26,7 +32,7 @@ public class WeatherDisasterNotifyConfig try { - configFile = new FileReader( filePath ); + configFile = new FileReader( CONFIG_FILE_PATH ); json = new StringBuffer(); int length = configFile.read( buffer ); @@ -38,7 +44,7 @@ public class WeatherDisasterNotifyConfig length = configFile.read( buffer ); } - config = mapper.readValue( json.toString(), WeatherDisasterNotifyConfig.class ); + appConfig = mapper.readValue( json.toString(), WeatherDisasterNotifyConfig.class ); } finally { @@ -55,7 +61,7 @@ public class WeatherDisasterNotifyConfig } } - return config; + return appConfig; } public WeatherDisasterNotifyConfig() diff --git a/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/OracleConfig.java b/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/OracleConfig.java index 4caaccd..b85c739 100644 --- a/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/OracleConfig.java +++ b/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/OracleConfig.java @@ -2,7 +2,7 @@ * @Author: Kane * @Date: 2022-04-22 17:33:30 * @LastEditors: Kane - * @LastEditTime: 2022-04-23 23:51:46 + * @LastEditTime: 2022-04-25 21:33:07 * @FilePath: \DisasterWarning\src\main\java\com\cpic\xim\config\db\OracleConfig.java * @Description: * @@ -11,7 +11,11 @@ package com.cpic.xim.config.db; import java.util.Vector; +import com.fasterxml.jackson.annotation.JsonProperty; +/** + * @Description oracle数据库相关参数对象。 + */ public class OracleConfig { @@ -75,10 +79,21 @@ public class OracleConfig this.tables = tables; } + @JsonProperty( "tns_name") private String tnsName; + + @JsonProperty( "ip_addr") private String ipAddr; + + @JsonProperty( "jdbc_url") private String jdbcURL; + + @JsonProperty( "user_name") private String userName; + + @JsonProperty( "password") private String password; + + @JsonProperty( "tables") private Vector tables; } diff --git a/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/OracleConfigLoader.java b/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/OracleConfigLoader.java new file mode 100644 index 0000000..468ad6f --- /dev/null +++ b/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/OracleConfigLoader.java @@ -0,0 +1,74 @@ +/* + * @Author: Kane + * @Date: 2022-04-25 21:45:12 + * @LastEditors: Kane + * @LastEditTime: 2022-04-25 22:58:47 + * @FilePath: \DisasterWarning\src\main\java\com\cpic\xim\config\db\OracleConfigLoader.java + * @Description: oracle数据库配置文件加载类 + * + * Copyright (c) ${2022} by Kane, All Rights Reserved. + */ +package com.cpic.xim.config.db; + +import java.io.*; + +import com.fasterxml.jackson.databind.*; + +public class OracleConfigLoader +{ + private static final String CONFIG_FILE_PATH = "./db.json"; + private static final int BUFFER_SIZE = 1024; + private static OracleConfig dbConfig = null; + + private OracleConfigLoader() + {} + + public OracleConfig getOracleConfig() throws IOException + { + FileReader file = null; + StringBuffer json = null; + char[] buffer = new char[BUFFER_SIZE]; + + if ( dbConfig != null) + { + return dbConfig; + } + + try + { + file = new FileReader( CONFIG_FILE_PATH ); + json = new StringBuffer(); + + int count = file.read( buffer ); + + while (count != -1) + { + json.append( buffer ); + + count = file.read( buffer ); + } + + ObjectMapper mapper = new ObjectMapper(); + + dbConfig = mapper.readValue( json.toString(), OracleConfig.class ); + } + catch (IOException error) + { + throw error; + } + finally + { + try + { + file.close(); + } + catch (Exception error) + { + error.printStackTrace(); + } + + } + + return dbConfig; + } +} diff --git a/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java b/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java index 5ff5f41..2853e65 100644 --- a/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java +++ b/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java @@ -2,7 +2,7 @@ * @Author: Kane * @Date: 2022-04-22 10:53:49 * @LastEditors: Kane - * @LastEditTime: 2022-04-25 17:40:31 + * @LastEditTime: 2022-04-25 19:20:32 * @FilePath: \DisasterWarning\src\main\java\com\cpic\xim\wechat\officalAccount\sendMessage.java * @Description: 用来推送公众号消息的程序库。 * @@ -75,6 +75,20 @@ public class sendMessage } } + /** + * + * @param warningID + * @return + */ + private boolean checkWarningHasSended( String warningID ) + { + boolean result = false; + + + + return result; + } + static { // 预警级别色彩 From 59977ec9b67bb11b7d7c2b49f46ddd29244c191e Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Tue, 26 Apr 2022 23:17:24 +0800 Subject: [PATCH 04/21] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E8=AF=BB=E5=8F=96?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6utf-8=E7=BC=96=E7=A0=81?= =?UTF-8?q?=E7=9A=84bug=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/java/DisasterWarning/app.log.lck | 0 .../src/main/java/AppMain.java | 65 +++++++++++++++++-- .../config/WeatherDisasterNotifyConfig.java | 18 ++--- .../xim/config/db/OracleConfigLoader.java | 12 ++-- .../officalAccount/sendMessageTest.java | 14 ++-- 5 files changed, 83 insertions(+), 26 deletions(-) create mode 100644 code/java/DisasterWarning/app.log.lck diff --git a/code/java/DisasterWarning/app.log.lck b/code/java/DisasterWarning/app.log.lck new file mode 100644 index 0000000..e69de29 diff --git a/code/java/DisasterWarning/src/main/java/AppMain.java b/code/java/DisasterWarning/src/main/java/AppMain.java index 9fbf7b0..2fd1498 100644 --- a/code/java/DisasterWarning/src/main/java/AppMain.java +++ b/code/java/DisasterWarning/src/main/java/AppMain.java @@ -2,7 +2,7 @@ * @Author: Kane * @Date: 2022-04-22 10:53:49 * @LastEditors: Kane - * @LastEditTime: 2022-04-23 23:22:57 + * @LastEditTime: 2022-04-26 22:33:14 * @FilePath: \DisasterWarning\src\main\java\AppMain.java * @Description: 和风天气预警推送厦门太保公众号主程序! * @@ -12,29 +12,50 @@ import com.cpic.xim.config.City; import com.cpic.xim.notify.disaster.QWeatherDisasterWarning; import com.cpic.xim.notify.disaster.WeatherDisasterWarningGrabber; import com.cpic.xim.config.WeatherDisasterNotifyConfig; -import com.cpic.xim.wechat.officalAccount.sendMessage; import java.io.IOException; import java.util.Vector; +import java.util.logging.*; + public class AppMain { + private final static String LOG_FILE_PATH = "./app.log"; + public static void main( String[] args ) { String json; WeatherDisasterNotifyConfig config = null; QWeatherDisasterWarning warning = null; + Logger logger = null; + + // 配置logger + try + { + setRootLogger(); + + logger = Logger.getLogger( "com.cpicxim" ); + } + catch ( IOException error ) + { + System.out.println( "配置logger失败,原因:" + error.getMessage() ); + + return; + } + // 读取配置 try { config = WeatherDisasterNotifyConfig.getConfig(); } - catch (IOException error) + catch ( IOException error ) { System.out.println( "读取配置文件失败!" ); System.out.println( error.getMessage() ); + logger.log( Level.SEVERE, "读取配置文件失败:{0}", error.getMessage() ); + return; } @@ -43,30 +64,60 @@ public class AppMain String userKey = config.getKey(); // 遍历所有城市,查询是否有警报,有则推送。 - for ( City city : cities) + for ( City city : cities ) { try { + + json = WeatherDisasterWarningGrabber.getWeatherDisasterWarningJSON( queryURL, userKey, city.getCityCode() ); warning = WeatherDisasterWarningGrabber.convertWeatherDisasterWarning( json ); + logger.log( Level.INFO, "查询{0}天气预警,结果:{1}。", new Object[] + { city.getCityName(), json} ); + // 判断是否有警报 if ( warning.getWarning().isEmpty() == true) { continue; } - sendMessage.sendWeatherDisasterWarning( config.getWechatOfficalAccountURL(), - warning ); + logger.log( Level.INFO, "查询{0}天气预警,发送日志。", new Object[] + { city.getCityName()} ); + + // sendMessage.sendWeatherDisasterWarning( config.getWechatOfficalAccountURL(), + // warning ); } - catch (IOException error) + catch ( IOException error ) { System.out.println( "查询" + city.getCityName() + "出现异常!" ); System.out.println( error.getMessage() ); + logger.log( Level.SEVERE, "查询 {0} 出现异常:{1}。", new Object[] + { city.getCityName(), error.getMessage()} ); + continue; } } } + + /** + * 设置JUL的logger。 + */ + private static void setRootLogger() throws IOException + { + Logger rootLogger = Logger.getLogger( "com.cpicxim" ); + ConsoleHandler consoleHandler = new ConsoleHandler(); + FileHandler fileHandler = new FileHandler( LOG_FILE_PATH ); + SimpleFormatter formatter = new SimpleFormatter(); + + consoleHandler.setFormatter( formatter ); + fileHandler.setFormatter( formatter ); + rootLogger.addHandler( consoleHandler ); + rootLogger.addHandler( fileHandler ); + + rootLogger.setUseParentHandlers( false ); + rootLogger.setLevel( Level.ALL ); + } } diff --git a/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/WeatherDisasterNotifyConfig.java b/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/WeatherDisasterNotifyConfig.java index 1d4a13c..cafd3fe 100644 --- a/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/WeatherDisasterNotifyConfig.java +++ b/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/WeatherDisasterNotifyConfig.java @@ -1,6 +1,7 @@ package com.cpic.xim.config; -import java.io.FileReader; +import java.io.InputStreamReader; +import java.io.FileInputStream; import java.io.IOException; import java.util.Vector; @@ -11,6 +12,7 @@ import com.fasterxml.jackson.databind.PropertyNamingStrategy; public class WeatherDisasterNotifyConfig { private static final int BUFFER_SIZE = 1024; + private static final String CONFIG_FILE_CHARSET = "UTF-8"; private static final String CONFIG_FILE_PATH = "./config.json"; private static WeatherDisasterNotifyConfig appConfig = null; @@ -23,7 +25,8 @@ public class WeatherDisasterNotifyConfig } ObjectMapper mapper = new ObjectMapper(); - FileReader configFile = null; + FileInputStream configFile = null; + InputStreamReader in = null; StringBuffer json = null; char[] buffer = new char[BUFFER_SIZE]; @@ -32,16 +35,17 @@ public class WeatherDisasterNotifyConfig try { - configFile = new FileReader( CONFIG_FILE_PATH ); + configFile = new FileInputStream( CONFIG_FILE_PATH ); + in = new InputStreamReader( configFile, CONFIG_FILE_CHARSET ); json = new StringBuffer(); - int length = configFile.read( buffer ); + int length = in.read( buffer ); while (length != -1) { json.append( buffer ); - length = configFile.read( buffer ); + length = in.read( buffer ); } appConfig = mapper.readValue( json.toString(), WeatherDisasterNotifyConfig.class ); @@ -54,7 +58,7 @@ public class WeatherDisasterNotifyConfig { configFile.close(); } - catch (IOException e) + catch ( IOException e ) { e.printStackTrace(); } @@ -135,6 +139,4 @@ public class WeatherDisasterNotifyConfig private String wechatOfficalAccountURL; private Vector cities; private Vector notifyStuffs; - - } diff --git a/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/OracleConfigLoader.java b/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/OracleConfigLoader.java index 468ad6f..f67bf5d 100644 --- a/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/OracleConfigLoader.java +++ b/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/OracleConfigLoader.java @@ -17,6 +17,7 @@ import com.fasterxml.jackson.databind.*; public class OracleConfigLoader { private static final String CONFIG_FILE_PATH = "./db.json"; + private static final String CONFIG_FILE_CHARSET = "UTF-8"; private static final int BUFFER_SIZE = 1024; private static OracleConfig dbConfig = null; @@ -25,7 +26,8 @@ public class OracleConfigLoader public OracleConfig getOracleConfig() throws IOException { - FileReader file = null; + FileInputStream file = null; + InputStreamReader in = null; StringBuffer json = null; char[] buffer = new char[BUFFER_SIZE]; @@ -36,16 +38,18 @@ public class OracleConfigLoader try { - file = new FileReader( CONFIG_FILE_PATH ); + file = new FileInputStream( CONFIG_FILE_PATH ); + in = new InputStreamReader( file, CONFIG_FILE_CHARSET); json = new StringBuffer(); - int count = file.read( buffer ); + + int count = in.read( buffer ); while (count != -1) { json.append( buffer ); - count = file.read( buffer ); + count = in.read( buffer ); } ObjectMapper mapper = new ObjectMapper(); diff --git a/code/java/DisasterWarning/src/test/java/com/cpic/xim/wechat/officalAccount/sendMessageTest.java b/code/java/DisasterWarning/src/test/java/com/cpic/xim/wechat/officalAccount/sendMessageTest.java index 695247d..593e998 100644 --- a/code/java/DisasterWarning/src/test/java/com/cpic/xim/wechat/officalAccount/sendMessageTest.java +++ b/code/java/DisasterWarning/src/test/java/com/cpic/xim/wechat/officalAccount/sendMessageTest.java @@ -2,7 +2,7 @@ * @Author: Kane * @Date: 2022-04-22 10:53:49 * @LastEditors: Kane - * @LastEditTime: 2022-04-24 11:31:50 + * @LastEditTime: 2022-04-26 23:16:46 * @FilePath: \DisasterWarning\src\test\java\com\cpic\xim\wechat\officalAccount\sendMessageTest.java * @Description: * @@ -16,7 +16,7 @@ import org.junit.Test; import static org.junit.Assert.*; import com.cpic.xim.httpUtil.*; import java.io.IOException; -import java.text.SimpleDateFormat; +//import java.text.SimpleDateFormat; import java.util.*; import com.fasterxml.jackson.databind.ObjectMapper; @@ -33,7 +33,7 @@ public class sendMessageTest { // sendMessage.postNotifyMessageJSON( url, "警报", "警报标题", "警报内容!" ); } - catch (Exception error) + catch ( Exception error ) { fail( "测试失败!" ); } @@ -55,7 +55,7 @@ public class sendMessageTest { HttpUtils.postHttpRequest( url, headers, param ); } - catch (Exception error) + catch ( Exception error ) { } @@ -73,12 +73,12 @@ public class sendMessageTest QWeatherDisasterWarning warning = mapper.readValue( warningJSON, QWeatherDisasterWarning.class ); - SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd HH:mm" ); - String putTime = format.format( warning.getUpdateTime() ); + // SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd HH:mm" ); + // String putTime = format.format( warning.getUpdateTime() ); sendMessage.sendWeatherDisasterWarning( url, warning ); } - catch (Exception error) + catch ( Exception error ) { fail( error.getMessage() ); } From 51a28294330e457778b6ab4c60ffb2091f94db40 Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Tue, 26 Apr 2022 23:21:37 +0800 Subject: [PATCH 05/21] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=B0=8F=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index a13d8ff..f1cec00 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ code/java/天气灾害预警/target/ code/java/天气灾害预警/out/ *.jar -*.iws \ No newline at end of file +*.iws +*.log \ No newline at end of file From 64170d2e67271b25b47674a002e6f5b3c7a1a5af Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Tue, 26 Apr 2022 23:23:10 +0800 Subject: [PATCH 06/21] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=B0=8F=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/java/DisasterWarning/app.log.lck | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 code/java/DisasterWarning/app.log.lck diff --git a/code/java/DisasterWarning/app.log.lck b/code/java/DisasterWarning/app.log.lck deleted file mode 100644 index e69de29..0000000 From 0587001de0b7fd6a1300eb47cdade4666b38acc4 Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Tue, 26 Apr 2022 23:23:43 +0800 Subject: [PATCH 07/21] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=B0=8F=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index f1cec00..d07a6fa 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ code/java/天气灾害预警/target/ code/java/天气灾害预警/out/ *.jar *.iws -*.log \ No newline at end of file +*.log +*.lck \ No newline at end of file From 5da53f02ea84d3c112669627577a967f5693ba7b Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Wed, 27 Apr 2022 16:09:58 +0800 Subject: [PATCH 08/21] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E6=98=AF=E5=90=A6=E5=B7=B2=E5=8F=91=E9=80=81?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/java/DisasterWarning/db.json | 4 +- .../wechat/officalAccount/sendMessage.java | 58 +++++++++++++++++-- 2 files changed, 56 insertions(+), 6 deletions(-) diff --git a/code/java/DisasterWarning/db.json b/code/java/DisasterWarning/db.json index 16c135f..6b84635 100644 --- a/code/java/DisasterWarning/db.json +++ b/code/java/DisasterWarning/db.json @@ -2,8 +2,8 @@ "tns_name": "xmcx1", "ip_addr": "10.39.0.86", "jdbc_url": "", - "user_name": "xim_offical_account", - "password": "Cpic#1234", + "user_name": "wechat", + "password": "@rn7Q+t5zeyKIZ~s", "tables": [ { "table_name": "", diff --git a/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java b/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java index 2853e65..767371c 100644 --- a/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java +++ b/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java @@ -2,7 +2,7 @@ * @Author: Kane * @Date: 2022-04-22 10:53:49 * @LastEditors: Kane - * @LastEditTime: 2022-04-25 19:20:32 + * @LastEditTime: 2022-04-27 16:09:17 * @FilePath: \DisasterWarning\src\main\java\com\cpic\xim\wechat\officalAccount\sendMessage.java * @Description: 用来推送公众号消息的程序库。 * @@ -16,7 +16,13 @@ import com.fasterxml.jackson.annotation.JsonProperty; import java.net.MalformedURLException; import java.util.HashMap; import java.util.Vector; +import java.util.logging.*; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; import com.cpic.xim.notify.disaster.*; import com.cpic.xim.httpUtil.HttpUtils; @@ -49,7 +55,7 @@ public class sendMessage headers.put( "Content-Type", "application/x-www-form-urlencoded;charset=UTF-8" ); // 遍历消息,将消息推送出去。 - for ( QWeatherDisasterWarningItem item : warningItems) + for ( QWeatherDisasterWarningItem item : warningItems ) { // 拼接消息内容 String title = item.getTitle(); @@ -68,7 +74,7 @@ public class sendMessage { HttpUtils.postHttpRequest( officalAccountURL, headers, requestBody.toString() ); } - catch (MalformedURLException error) + catch ( MalformedURLException error ) { error.printStackTrace(); } @@ -80,11 +86,55 @@ public class sendMessage * @param warningID * @return */ - private boolean checkWarningHasSended( String warningID ) + public boolean checkWarningHasSended( String warningID ) + throws ClassNotFoundException, SQLException { boolean result = false; + // 暂时写死,以后改成读取配置方式 + String jdbcURL = "jdbc:oracle:thin@10.39.0.86:1521:wechat"; + String userName = "wechat"; + String password = "@rn7Q+t5zeyKIZ~s"; + String sql = "select count(*) from weather_disaster_notify where notify_id = ?"; + Connection conn = null; + PreparedStatement stmt = null; + ResultSet rs = null; + + // Logger logger = Logger.getLogger( "com.cpicxim.wechat.officalAccount.sendMessage" ); + + try + { + Class.forName( "oracle.jdbc.driver.OracleDriver" ); + + conn = DriverManager.getConnection( jdbcURL, userName, password ); + stmt = conn.prepareStatement( sql ); + stmt.setString( 1, warningID ); + + rs = stmt.executeQuery( sql ); + + if ( rs.next() && rs.getInt( 0 ) == 0) + { + result = true; + } + } + finally + { + if ( rs != null) + { + rs.close(); + } + + if ( stmt != null) + { + stmt.close(); + } + + if ( conn != null) + { + conn.close(); + } + } return result; } From 24cdc66b7d7c93982a20da9025edd3574fbe30f6 Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Wed, 27 Apr 2022 17:37:36 +0800 Subject: [PATCH 09/21] =?UTF-8?q?=E5=AE=8C=E6=88=90check=E5=87=BD=E6=95=B0?= =?UTF-8?q?=EF=BC=81=E4=BF=AE=E6=AD=A3jdbc=20url=E7=9A=84=E9=94=99?= =?UTF-8?q?=E8=AF=AF=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/java/DisasterWarning/db.json | 7 +++--- code/java/DisasterWarning/pom.xml | 7 ++++++ .../java/com/cpic/xim/config/db/DBTable.java | 7 +++++- .../com/cpic/xim/config/db/OracleConfig.java | 14 +++++++++++ .../xim/config/db/OracleConfigLoader.java | 11 ++++---- .../wechat/officalAccount/sendMessage.java | 25 +++++++++++-------- .../officalAccount/sendMessageTest.java | 19 ++++++++++++-- 7 files changed, 67 insertions(+), 23 deletions(-) diff --git a/code/java/DisasterWarning/db.json b/code/java/DisasterWarning/db.json index 6b84635..a8f5ddd 100644 --- a/code/java/DisasterWarning/db.json +++ b/code/java/DisasterWarning/db.json @@ -1,13 +1,14 @@ { "tns_name": "xmcx1", "ip_addr": "10.39.0.86", - "jdbc_url": "", + "jdbc_url": "jdbc:oracle:thin:@10.39.0.86:1521:xmcx1", + "table_space": "wechat", "user_name": "wechat", "password": "@rn7Q+t5zeyKIZ~s", "tables": [ { - "table_name": "", - "table_description": "" + "table_name": "weather_disaster_notify", + "table_description": "天气预警消息表" } ] } diff --git a/code/java/DisasterWarning/pom.xml b/code/java/DisasterWarning/pom.xml index f2ef2b1..027c851 100644 --- a/code/java/DisasterWarning/pom.xml +++ b/code/java/DisasterWarning/pom.xml @@ -5,6 +5,13 @@ disaster_warning 1.0-SNAPSHOT + + com.oracle + ojdbc8 + 1.0 + system + ${project.basedir}/lib/ojdbc8.jar + org.apache.httpcomponents httpclient diff --git a/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/DBTable.java b/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/DBTable.java index 2c5a8e1..a41c6a8 100644 --- a/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/DBTable.java +++ b/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/DBTable.java @@ -2,7 +2,7 @@ * @Author: Kane * @Date: 2022-04-22 17:33:30 * @LastEditors: Kane - * @LastEditTime: 2022-04-23 23:50:20 + * @LastEditTime: 2022-04-27 16:53:13 * @FilePath: \DisasterWarning\src\main\java\com\cpic\xim\config\db\DBTable.java * @Description: * @@ -12,6 +12,8 @@ package com.cpic.xim.config.db; import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; + public class DBTable { public DBTable() @@ -59,6 +61,9 @@ public class DBTable return Objects.hash( tableName, tableDescription ); } + @JsonProperty( "table_name") private String tableName; + + @JsonProperty( "table_description") private String tableDescription; } diff --git a/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/OracleConfig.java b/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/OracleConfig.java index b85c739..ff6c3ca 100644 --- a/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/OracleConfig.java +++ b/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/OracleConfig.java @@ -49,6 +49,17 @@ public class OracleConfig this.jdbcURL = jdbcURL; } + + public String getTableSpace() + { + return tableSpace; + } + + public void setTableSpace( String tableSpace ) + { + this.tableSpace = tableSpace; + } + public String getUserName() { return userName; @@ -88,6 +99,9 @@ public class OracleConfig @JsonProperty( "jdbc_url") private String jdbcURL; + @JsonProperty( "table_space") + private String tableSpace; + @JsonProperty( "user_name") private String userName; diff --git a/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/OracleConfigLoader.java b/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/OracleConfigLoader.java index f67bf5d..8c76065 100644 --- a/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/OracleConfigLoader.java +++ b/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/OracleConfigLoader.java @@ -2,7 +2,7 @@ * @Author: Kane * @Date: 2022-04-25 21:45:12 * @LastEditors: Kane - * @LastEditTime: 2022-04-25 22:58:47 + * @LastEditTime: 2022-04-27 17:10:57 * @FilePath: \DisasterWarning\src\main\java\com\cpic\xim\config\db\OracleConfigLoader.java * @Description: oracle数据库配置文件加载类 * @@ -24,7 +24,7 @@ public class OracleConfigLoader private OracleConfigLoader() {} - public OracleConfig getOracleConfig() throws IOException + public static OracleConfig getOracleConfig() throws IOException { FileInputStream file = null; InputStreamReader in = null; @@ -39,10 +39,9 @@ public class OracleConfigLoader try { file = new FileInputStream( CONFIG_FILE_PATH ); - in = new InputStreamReader( file, CONFIG_FILE_CHARSET); + in = new InputStreamReader( file, CONFIG_FILE_CHARSET ); json = new StringBuffer(); - int count = in.read( buffer ); while (count != -1) @@ -56,7 +55,7 @@ public class OracleConfigLoader dbConfig = mapper.readValue( json.toString(), OracleConfig.class ); } - catch (IOException error) + catch ( IOException error ) { throw error; } @@ -66,7 +65,7 @@ public class OracleConfigLoader { file.close(); } - catch (Exception error) + catch ( Exception error ) { error.printStackTrace(); } diff --git a/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java b/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java index 767371c..d9939f4 100644 --- a/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java +++ b/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java @@ -2,7 +2,7 @@ * @Author: Kane * @Date: 2022-04-22 10:53:49 * @LastEditors: Kane - * @LastEditTime: 2022-04-27 16:09:17 + * @LastEditTime: 2022-04-27 17:35:06 * @FilePath: \DisasterWarning\src\main\java\com\cpic\xim\wechat\officalAccount\sendMessage.java * @Description: 用来推送公众号消息的程序库。 * @@ -10,9 +10,11 @@ */ package com.cpic.xim.wechat.officalAccount; +import com.cpic.xim.config.db.OracleConfigLoader; +import com.cpic.xim.config.db.OracleConfig; import com.fasterxml.jackson.annotation.JsonProperty; - +import java.io.IOException; import java.net.MalformedURLException; import java.util.HashMap; import java.util.Vector; @@ -86,21 +88,22 @@ public class sendMessage * @param warningID * @return */ - public boolean checkWarningHasSended( String warningID ) - throws ClassNotFoundException, SQLException + public static boolean checkWarningHasSended( String warningID ) + throws ClassNotFoundException, SQLException, IOException { boolean result = false; - // 暂时写死,以后改成读取配置方式 - String jdbcURL = "jdbc:oracle:thin@10.39.0.86:1521:wechat"; - String userName = "wechat"; - String password = "@rn7Q+t5zeyKIZ~s"; - String sql = "select count(*) from weather_disaster_notify where notify_id = ?"; + OracleConfig dbConfig = OracleConfigLoader.getOracleConfig();; Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; + String jdbcURL = dbConfig.getJdbcURL(); + String userName = dbConfig.getUserName(); + String password = dbConfig.getPassword(); + String sql = "select count(*) from weather_disaster_notify where notify_id = ?"; + // Logger logger = Logger.getLogger( "com.cpicxim.wechat.officalAccount.sendMessage" ); try @@ -111,9 +114,9 @@ public class sendMessage stmt = conn.prepareStatement( sql ); stmt.setString( 1, warningID ); - rs = stmt.executeQuery( sql ); + rs = stmt.executeQuery(); - if ( rs.next() && rs.getInt( 0 ) == 0) + if ( rs.next() && rs.getInt( 1 ) == 0) { result = true; } diff --git a/code/java/DisasterWarning/src/test/java/com/cpic/xim/wechat/officalAccount/sendMessageTest.java b/code/java/DisasterWarning/src/test/java/com/cpic/xim/wechat/officalAccount/sendMessageTest.java index 593e998..d3a31c1 100644 --- a/code/java/DisasterWarning/src/test/java/com/cpic/xim/wechat/officalAccount/sendMessageTest.java +++ b/code/java/DisasterWarning/src/test/java/com/cpic/xim/wechat/officalAccount/sendMessageTest.java @@ -2,7 +2,7 @@ * @Author: Kane * @Date: 2022-04-22 10:53:49 * @LastEditors: Kane - * @LastEditTime: 2022-04-26 23:16:46 + * @LastEditTime: 2022-04-27 17:29:11 * @FilePath: \DisasterWarning\src\test\java\com\cpic\xim\wechat\officalAccount\sendMessageTest.java * @Description: * @@ -61,7 +61,7 @@ public class sendMessageTest } - @Test + // @Test public void testSendWeatherDisasterWarning() throws IOException { String warningJSON = @@ -83,4 +83,19 @@ public class sendMessageTest fail( error.getMessage() ); } } + + @Test + public void testCheckWarningHasSended() + { + String warningID = "10123060820220422061200476313081"; + + try + { + sendMessage.checkWarningHasSended( warningID ); + } + catch ( Exception error ) + { + error.printStackTrace(); + } + } } From 2d1d4dea662e4a7ea9aaee8d872f86c3d6c3ff8d Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Wed, 27 Apr 2022 23:38:47 +0800 Subject: [PATCH 10/21] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=B0=8F=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wechat/officalAccount/sendMessage.java | 107 ++++++++++++++++-- 1 file changed, 96 insertions(+), 11 deletions(-) diff --git a/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java b/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java index d9939f4..209b10f 100644 --- a/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java +++ b/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java @@ -2,7 +2,7 @@ * @Author: Kane * @Date: 2022-04-22 10:53:49 * @LastEditors: Kane - * @LastEditTime: 2022-04-27 17:35:06 + * @LastEditTime: 2022-04-27 22:55:44 * @FilePath: \DisasterWarning\src\main\java\com\cpic\xim\wechat\officalAccount\sendMessage.java * @Description: 用来推送公众号消息的程序库。 * @@ -39,7 +39,7 @@ public class sendMessage /** * 推送天气灾害预警!接口文档参考 彭奕洁 编写《消息发送接口调用文档》 - * + * 使用 post 方式,请求体内容以最基础的 post 格式。 * @param officalAccountURL 产险厦门分公司公众号接口网址 * @param warning 灾害预警对象 */ @@ -84,9 +84,11 @@ public class sendMessage } /** - * - * @param warningID - * @return + * 检查预警是否已经推送过,通过 QWeatherDisasterWarningItem 对象的 id 属性。 + * 查询 oracle xmcx1 数据库 wechat 表空间下 weather_disaster_notify 表, + * 统计 warningID 的数量,如果不为0,说明该预警已经保存过,视为已经推送过。 + * @param warningID 预警的id + * @return 如果推送过,返回false,否则返回 true。 */ public static boolean checkWarningHasSended( String warningID ) throws ClassNotFoundException, SQLException, IOException @@ -123,25 +125,108 @@ public class sendMessage } finally { - if ( rs != null) + try { - rs.close(); + if ( rs != null) + { + rs.close(); + } + } + catch ( Exception error ) + { + error.printStackTrace(); } - if ( stmt != null) + try { - stmt.close(); + if ( stmt != null) + { + stmt.close(); + } + } + catch ( Exception error ) + { + error.printStackTrace(); } - if ( conn != null) + try { - conn.close(); + if ( conn != null) + { + conn.close(); + } + } + catch ( Exception error ) + { + error.printStackTrace(); } } return result; } + /** + * 保存天气预警警报数据。 + * 保存至 oracle xmcx1 数据库 wechat 表空间下 weather_disaster_notify 表。 + * 保存的数据用来判断预警是否已经推送过,以防止反复推送数据。 + * @param city 城市名称 + * @param warning 预警数据,为 QWeatherDisasterWarningItem 对象。 + * @throws SQLException 执行sql时可能抛出的异常。 + * @throws IOException 读取数据库配置文件时可能抛出的异常。 + * @throws ClassNotFoundException 加载oracle jdbc驱动时可能抛出的异常。 + */ + public static void saveWeatherDisasterWarning( String city, + QWeatherDisasterWarningItem warning ) + throws SQLException, IOException, ClassNotFoundException + { + Connection conn = null; + PreparedStatement stmt = null; + + String sql = ""; + + OracleConfig dbConfig = OracleConfigLoader.getOracleConfig(); + + String jdbcURL = dbConfig.getJdbcURL(); + String userName = dbConfig.getUserName(); + String password = dbConfig.getPassword(); + + try + { + Class.forName( "oracle.jdbc.driver.OracleDriver" ); + + conn = DriverManager.getConnection( jdbcURL, userName, password ); + stmt = conn.prepareStatement( sql ); + stmt.execute(); + } + finally + { + try + { + if ( stmt != null) + { + stmt.close(); + } + } + catch ( Exception error ) + { + error.printStackTrace(); + } + + try + { + if ( conn != null) + { + conn.close(); + } + } + catch ( Exception error ) + { + error.printStackTrace(); + } + } + } + + static { // 预警级别色彩 From cd743c645f05afc8a29a2909c6f8c4af3f804f41 Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Thu, 28 Apr 2022 15:59:40 +0800 Subject: [PATCH 11/21] =?UTF-8?q?=E4=BF=9D=E5=AD=98=E8=BF=9B=E5=BA=A6?= =?UTF-8?q?=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/java/DisasterWarning/pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/java/DisasterWarning/pom.xml b/code/java/DisasterWarning/pom.xml index 027c851..273170b 100644 --- a/code/java/DisasterWarning/pom.xml +++ b/code/java/DisasterWarning/pom.xml @@ -79,6 +79,11 @@ compile + + + From 0fb8b9050948d43b4b323699e5c5e9869709e6a4 Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Wed, 4 May 2022 00:08:17 +0800 Subject: [PATCH 12/21] =?UTF-8?q?=E9=87=8D=E6=9E=84=E4=B8=80=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{OracleConfigLoader.java => OracleConfigManager.java} | 8 ++++---- .../com/cpic/xim/wechat/officalAccount/sendMessage.java | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) rename code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/{OracleConfigLoader.java => OracleConfigManager.java} (92%) diff --git a/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/OracleConfigLoader.java b/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/OracleConfigManager.java similarity index 92% rename from code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/OracleConfigLoader.java rename to code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/OracleConfigManager.java index 8c76065..3a32004 100644 --- a/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/OracleConfigLoader.java +++ b/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/db/OracleConfigManager.java @@ -2,8 +2,8 @@ * @Author: Kane * @Date: 2022-04-25 21:45:12 * @LastEditors: Kane - * @LastEditTime: 2022-04-27 17:10:57 - * @FilePath: \DisasterWarning\src\main\java\com\cpic\xim\config\db\OracleConfigLoader.java + * @LastEditTime: 2022-05-03 22:34:37 + * @FilePath: \DisasterWarning\src\main\java\com\cpic\xim\config\db\OracleConfigManager.java * @Description: oracle数据库配置文件加载类 * * Copyright (c) ${2022} by Kane, All Rights Reserved. @@ -14,14 +14,14 @@ import java.io.*; import com.fasterxml.jackson.databind.*; -public class OracleConfigLoader +public class OracleConfigManager { private static final String CONFIG_FILE_PATH = "./db.json"; private static final String CONFIG_FILE_CHARSET = "UTF-8"; private static final int BUFFER_SIZE = 1024; private static OracleConfig dbConfig = null; - private OracleConfigLoader() + private OracleConfigManager() {} public static OracleConfig getOracleConfig() throws IOException diff --git a/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java b/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java index 209b10f..c6611f0 100644 --- a/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java +++ b/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java @@ -10,7 +10,7 @@ */ package com.cpic.xim.wechat.officalAccount; -import com.cpic.xim.config.db.OracleConfigLoader; +import com.cpic.xim.config.db.OracleConfigManager; import com.cpic.xim.config.db.OracleConfig; import com.fasterxml.jackson.annotation.JsonProperty; @@ -95,7 +95,7 @@ public class sendMessage { boolean result = false; - OracleConfig dbConfig = OracleConfigLoader.getOracleConfig();; + OracleConfig dbConfig = OracleConfigManager.getOracleConfig();; Connection conn = null; PreparedStatement stmt = null; @@ -184,7 +184,7 @@ public class sendMessage String sql = ""; - OracleConfig dbConfig = OracleConfigLoader.getOracleConfig(); + OracleConfig dbConfig = OracleConfigManager.getOracleConfig(); String jdbcURL = dbConfig.getJdbcURL(); String userName = dbConfig.getUserName(); From 91c99ba8f9ee10604cef78303cad82d3cdd3bb4a Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Thu, 5 May 2022 16:59:28 +0800 Subject: [PATCH 13/21] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=8F=91=E9=80=81?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E4=BF=9D=E5=AD=98=E5=8A=9F=E8=83=BD=E3=80=82?= =?UTF-8?q?=E5=BE=85=E5=AE=8C=E5=96=84=E2=80=A6=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/AppMain.java | 32 +++++++++++++++---- .../wechat/officalAccount/sendMessage.java | 20 ++++++++++-- .../officalAccount/sendMessageTest.java | 16 +++++++--- 3 files changed, 56 insertions(+), 12 deletions(-) diff --git a/code/java/DisasterWarning/src/main/java/AppMain.java b/code/java/DisasterWarning/src/main/java/AppMain.java index 2fd1498..eb39f95 100644 --- a/code/java/DisasterWarning/src/main/java/AppMain.java +++ b/code/java/DisasterWarning/src/main/java/AppMain.java @@ -2,7 +2,7 @@ * @Author: Kane * @Date: 2022-04-22 10:53:49 * @LastEditors: Kane - * @LastEditTime: 2022-04-26 22:33:14 + * @LastEditTime: 2022-05-05 16:51:11 * @FilePath: \DisasterWarning\src\main\java\AppMain.java * @Description: 和风天气预警推送厦门太保公众号主程序! * @@ -11,9 +11,11 @@ import com.cpic.xim.config.City; import com.cpic.xim.notify.disaster.QWeatherDisasterWarning; import com.cpic.xim.notify.disaster.WeatherDisasterWarningGrabber; +import com.cpic.xim.wechat.officalAccount.sendMessage; import com.cpic.xim.config.WeatherDisasterNotifyConfig; import java.io.IOException; +import java.sql.SQLException; import java.util.Vector; import java.util.logging.*; @@ -68,8 +70,6 @@ public class AppMain { try { - - json = WeatherDisasterWarningGrabber.getWeatherDisasterWarningJSON( queryURL, userKey, city.getCityCode() ); warning = WeatherDisasterWarningGrabber.convertWeatherDisasterWarning( json ); @@ -86,8 +86,14 @@ public class AppMain logger.log( Level.INFO, "查询{0}天气预警,发送日志。", new Object[] { city.getCityName()} ); - // sendMessage.sendWeatherDisasterWarning( config.getWechatOfficalAccountURL(), - // warning ); + sendMessage.sendWeatherDisasterWarning( config.getWechatOfficalAccountURL(), + warning ); + + logger.log( Level.INFO, "{0}天气预警,日志发送成功。", new Object[] + { city.getCityName()} ); + + sendMessage.saveWeatherDisasterWarning( city.getCityName(), + warning.getWarning().get( 0 ) ); } catch ( IOException error ) { @@ -96,8 +102,22 @@ public class AppMain logger.log( Level.SEVERE, "查询 {0} 出现异常:{1}。", new Object[] { city.getCityName(), error.getMessage()} ); + } + catch ( SQLException error ) + { + logger.log( Level.SEVERE, "查询 {0} 写入数据库失败:{1}。", new Object[] + { city.getCityName(), error.getMessage()} ); + } + catch ( ClassNotFoundException error ) + { + logger.log( Level.SEVERE, "查询 {0} 加载oracle驱动失败:{1}。", new Object[] + { city.getCityName(), error.getMessage()} ); - continue; + } + catch ( Exception error ) + { + logger.log( Level.SEVERE, "查询 {0} 出现未知错误:{1}。", new Object[] + { city.getCityName(), error.getMessage()} ); } } } diff --git a/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java b/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java index c6611f0..fb6c251 100644 --- a/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java +++ b/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java @@ -2,7 +2,7 @@ * @Author: Kane * @Date: 2022-04-22 10:53:49 * @LastEditors: Kane - * @LastEditTime: 2022-04-27 22:55:44 + * @LastEditTime: 2022-05-05 11:26:35 * @FilePath: \DisasterWarning\src\main\java\com\cpic\xim\wechat\officalAccount\sendMessage.java * @Description: 用来推送公众号消息的程序库。 * @@ -182,7 +182,9 @@ public class sendMessage Connection conn = null; PreparedStatement stmt = null; - String sql = ""; + String sql = "insert into weather_disaster_notify(notify_id, sender, city," + + "warning_level, warning_type_code, warning_type_name, title," + + "text, pub_time) values( ?,?,?,?,?,?,?,?,?)"; OracleConfig dbConfig = OracleConfigManager.getOracleConfig(); @@ -196,7 +198,21 @@ public class sendMessage conn = DriverManager.getConnection( jdbcURL, userName, password ); stmt = conn.prepareStatement( sql ); + + java.sql.Timestamp pubTime = new java.sql.Timestamp( warning.getPubTime().getTime() ); + + stmt.setString( 1, warning.getId() ); + stmt.setString( 2, warning.getSender() ); + stmt.setString( 3, city ); + stmt.setString( 4, warning.getLevel() ); + stmt.setString( 5, warning.getType() ); + stmt.setString( 6, warning.getTypeName() ); + stmt.setString( 7, warning.getTitle() ); + stmt.setString( 8, warning.getText() ); + stmt.setTimestamp( 9, pubTime ); + stmt.execute(); + conn.commit(); } finally { diff --git a/code/java/DisasterWarning/src/test/java/com/cpic/xim/wechat/officalAccount/sendMessageTest.java b/code/java/DisasterWarning/src/test/java/com/cpic/xim/wechat/officalAccount/sendMessageTest.java index d3a31c1..a190bde 100644 --- a/code/java/DisasterWarning/src/test/java/com/cpic/xim/wechat/officalAccount/sendMessageTest.java +++ b/code/java/DisasterWarning/src/test/java/com/cpic/xim/wechat/officalAccount/sendMessageTest.java @@ -2,7 +2,7 @@ * @Author: Kane * @Date: 2022-04-22 10:53:49 * @LastEditors: Kane - * @LastEditTime: 2022-04-27 17:29:11 + * @LastEditTime: 2022-05-05 11:21:54 * @FilePath: \DisasterWarning\src\test\java\com\cpic\xim\wechat\officalAccount\sendMessageTest.java * @Description: * @@ -16,6 +16,7 @@ import org.junit.Test; import static org.junit.Assert.*; import com.cpic.xim.httpUtil.*; import java.io.IOException; +import java.sql.SQLException; //import java.text.SimpleDateFormat; import java.util.*; @@ -61,7 +62,7 @@ public class sendMessageTest } - // @Test + @Test public void testSendWeatherDisasterWarning() throws IOException { String warningJSON = @@ -73,10 +74,17 @@ public class sendMessageTest QWeatherDisasterWarning warning = mapper.readValue( warningJSON, QWeatherDisasterWarning.class ); + String city = "东山县"; + + + sendMessage.saveWeatherDisasterWarning( city, warning.getWarning().get( 0 ) ); + + + // SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd HH:mm" ); // String putTime = format.format( warning.getUpdateTime() ); - sendMessage.sendWeatherDisasterWarning( url, warning ); + // sendMessage.sendWeatherDisasterWarning( url, warning ); } catch ( Exception error ) { @@ -84,7 +92,7 @@ public class sendMessageTest } } - @Test + // @Test public void testCheckWarningHasSended() { String warningID = "10123060820220422061200476313081"; From eb7f53ad4b76b11695f158c0d02fd24e2e4d72c9 Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Thu, 5 May 2022 17:53:31 +0800 Subject: [PATCH 14/21] =?UTF-8?q?=E4=BF=9D=E5=AD=98=E8=BF=9B=E5=BA=A6?= =?UTF-8?q?=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wechat/officalAccount/sendMessage.java | 45 ++++++++++++------- .../officalAccount/sendMessageTest.java | 4 +- 2 files changed, 32 insertions(+), 17 deletions(-) diff --git a/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java b/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java index fb6c251..ad0f4aa 100644 --- a/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java +++ b/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java @@ -2,7 +2,7 @@ * @Author: Kane * @Date: 2022-04-22 10:53:49 * @LastEditors: Kane - * @LastEditTime: 2022-05-05 11:26:35 + * @LastEditTime: 2022-05-05 17:42:33 * @FilePath: \DisasterWarning\src\main\java\com\cpic\xim\wechat\officalAccount\sendMessage.java * @Description: 用来推送公众号消息的程序库。 * @@ -171,12 +171,11 @@ public class sendMessage * 保存的数据用来判断预警是否已经推送过,以防止反复推送数据。 * @param city 城市名称 * @param warning 预警数据,为 QWeatherDisasterWarningItem 对象。 - * @throws SQLException 执行sql时可能抛出的异常。 + * @throws SQLException 执行sql时可能抛出的异常。出现sql异常,就回滚事务。 * @throws IOException 读取数据库配置文件时可能抛出的异常。 * @throws ClassNotFoundException 加载oracle jdbc驱动时可能抛出的异常。 */ - public static void saveWeatherDisasterWarning( String city, - QWeatherDisasterWarningItem warning ) + public static void saveWeatherDisasterWarning( String city, QWeatherDisasterWarning warnings ) throws SQLException, IOException, ClassNotFoundException { Connection conn = null; @@ -199,21 +198,37 @@ public class sendMessage conn = DriverManager.getConnection( jdbcURL, userName, password ); stmt = conn.prepareStatement( sql ); - java.sql.Timestamp pubTime = new java.sql.Timestamp( warning.getPubTime().getTime() ); + for ( QWeatherDisasterWarningItem warning : warnings.getWarning() ) + { + java.sql.Timestamp pubTime = + new java.sql.Timestamp( warning.getPubTime().getTime() ); - stmt.setString( 1, warning.getId() ); - stmt.setString( 2, warning.getSender() ); - stmt.setString( 3, city ); - stmt.setString( 4, warning.getLevel() ); - stmt.setString( 5, warning.getType() ); - stmt.setString( 6, warning.getTypeName() ); - stmt.setString( 7, warning.getTitle() ); - stmt.setString( 8, warning.getText() ); - stmt.setTimestamp( 9, pubTime ); + stmt.setString( 1, warning.getId() ); + stmt.setString( 2, warning.getSender() ); + stmt.setString( 3, city ); + stmt.setString( 4, warning.getLevel() ); + stmt.setString( 5, warning.getType() ); + stmt.setString( 6, warning.getTypeName() ); + stmt.setString( 7, warning.getTitle() ); + stmt.setString( 8, warning.getText() ); + stmt.setTimestamp( 9, pubTime ); - stmt.execute(); + stmt.execute(); + } + + // 没有问题就提交 conn.commit(); } + catch ( SQLException error ) + { + // 出现sql错误,就回滚! + if ( conn != null) + { + conn.rollback(); + } + + throw error; + } finally { try diff --git a/code/java/DisasterWarning/src/test/java/com/cpic/xim/wechat/officalAccount/sendMessageTest.java b/code/java/DisasterWarning/src/test/java/com/cpic/xim/wechat/officalAccount/sendMessageTest.java index a190bde..10c1703 100644 --- a/code/java/DisasterWarning/src/test/java/com/cpic/xim/wechat/officalAccount/sendMessageTest.java +++ b/code/java/DisasterWarning/src/test/java/com/cpic/xim/wechat/officalAccount/sendMessageTest.java @@ -2,7 +2,7 @@ * @Author: Kane * @Date: 2022-04-22 10:53:49 * @LastEditors: Kane - * @LastEditTime: 2022-05-05 11:21:54 + * @LastEditTime: 2022-05-05 17:53:10 * @FilePath: \DisasterWarning\src\test\java\com\cpic\xim\wechat\officalAccount\sendMessageTest.java * @Description: * @@ -77,7 +77,7 @@ public class sendMessageTest String city = "东山县"; - sendMessage.saveWeatherDisasterWarning( city, warning.getWarning().get( 0 ) ); + sendMessage.saveWeatherDisasterWarning( city, warning ); From c0443d3a8bd1a645eb976b0f95d230c9cf07a5b6 Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Fri, 6 May 2022 11:15:04 +0800 Subject: [PATCH 15/21] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=9F=BA=E6=9C=AC?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/java/DisasterWarning/src/main/java/AppMain.java | 5 ++--- .../cpic/xim/wechat/officalAccount/sendMessage.java | 3 +-- .../xim/wechat/officalAccount/sendMessageTest.java | 12 ++---------- 3 files changed, 5 insertions(+), 15 deletions(-) diff --git a/code/java/DisasterWarning/src/main/java/AppMain.java b/code/java/DisasterWarning/src/main/java/AppMain.java index eb39f95..a5017c3 100644 --- a/code/java/DisasterWarning/src/main/java/AppMain.java +++ b/code/java/DisasterWarning/src/main/java/AppMain.java @@ -2,7 +2,7 @@ * @Author: Kane * @Date: 2022-04-22 10:53:49 * @LastEditors: Kane - * @LastEditTime: 2022-05-05 16:51:11 + * @LastEditTime: 2022-05-06 11:08:07 * @FilePath: \DisasterWarning\src\main\java\AppMain.java * @Description: 和风天气预警推送厦门太保公众号主程序! * @@ -92,8 +92,7 @@ public class AppMain logger.log( Level.INFO, "{0}天气预警,日志发送成功。", new Object[] { city.getCityName()} ); - sendMessage.saveWeatherDisasterWarning( city.getCityName(), - warning.getWarning().get( 0 ) ); + sendMessage.saveWeatherDisasterWarning( city.getCityName(), warning ); } catch ( IOException error ) { diff --git a/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java b/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java index ad0f4aa..198e768 100644 --- a/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java +++ b/code/java/DisasterWarning/src/main/java/com/cpic/xim/wechat/officalAccount/sendMessage.java @@ -2,7 +2,7 @@ * @Author: Kane * @Date: 2022-04-22 10:53:49 * @LastEditors: Kane - * @LastEditTime: 2022-05-05 17:42:33 + * @LastEditTime: 2022-05-06 11:14:32 * @FilePath: \DisasterWarning\src\main\java\com\cpic\xim\wechat\officalAccount\sendMessage.java * @Description: 用来推送公众号消息的程序库。 * @@ -18,7 +18,6 @@ import java.io.IOException; import java.net.MalformedURLException; import java.util.HashMap; import java.util.Vector; -import java.util.logging.*; import java.sql.Connection; import java.sql.DriverManager; diff --git a/code/java/DisasterWarning/src/test/java/com/cpic/xim/wechat/officalAccount/sendMessageTest.java b/code/java/DisasterWarning/src/test/java/com/cpic/xim/wechat/officalAccount/sendMessageTest.java index 10c1703..f4a6d21 100644 --- a/code/java/DisasterWarning/src/test/java/com/cpic/xim/wechat/officalAccount/sendMessageTest.java +++ b/code/java/DisasterWarning/src/test/java/com/cpic/xim/wechat/officalAccount/sendMessageTest.java @@ -2,7 +2,7 @@ * @Author: Kane * @Date: 2022-04-22 10:53:49 * @LastEditors: Kane - * @LastEditTime: 2022-05-05 17:53:10 + * @LastEditTime: 2022-05-06 11:14:35 * @FilePath: \DisasterWarning\src\test\java\com\cpic\xim\wechat\officalAccount\sendMessageTest.java * @Description: * @@ -16,8 +16,7 @@ import org.junit.Test; import static org.junit.Assert.*; import com.cpic.xim.httpUtil.*; import java.io.IOException; -import java.sql.SQLException; -//import java.text.SimpleDateFormat; + import java.util.*; import com.fasterxml.jackson.databind.ObjectMapper; @@ -78,13 +77,6 @@ public class sendMessageTest sendMessage.saveWeatherDisasterWarning( city, warning ); - - - - // SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd HH:mm" ); - // String putTime = format.format( warning.getUpdateTime() ); - - // sendMessage.sendWeatherDisasterWarning( url, warning ); } catch ( Exception error ) { From d1bcb3b956982547c1134931ea445f21e0c79a85 Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Fri, 6 May 2022 17:33:56 +0800 Subject: [PATCH 16/21] =?UTF-8?q?=E4=BF=9D=E5=AD=98=E8=BF=9B=E5=BA=A6?= =?UTF-8?q?=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/java/DisasterWarning/src/main/java/AppMain.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/java/DisasterWarning/src/main/java/AppMain.java b/code/java/DisasterWarning/src/main/java/AppMain.java index a5017c3..c71e3e6 100644 --- a/code/java/DisasterWarning/src/main/java/AppMain.java +++ b/code/java/DisasterWarning/src/main/java/AppMain.java @@ -2,7 +2,7 @@ * @Author: Kane * @Date: 2022-04-22 10:53:49 * @LastEditors: Kane - * @LastEditTime: 2022-05-06 11:08:07 + * @LastEditTime: 2022-05-06 17:21:27 * @FilePath: \DisasterWarning\src\main\java\AppMain.java * @Description: 和风天气预警推送厦门太保公众号主程序! * @@ -133,6 +133,7 @@ public class AppMain consoleHandler.setFormatter( formatter ); fileHandler.setFormatter( formatter ); + rootLogger.addHandler( consoleHandler ); rootLogger.addHandler( fileHandler ); From 53849e4f747298e7aa762c73d5e34ae4bbfa1e8b Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Mon, 9 May 2022 17:03:26 +0800 Subject: [PATCH 17/21] =?UTF-8?q?=E4=BF=9D=E5=AD=98=E8=BF=9B=E5=BA=A6?= =?UTF-8?q?=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/java/DisasterWarning/pom.xml | 18 ++++++++++++++++-- .../DisasterWarning/src/main/java/AppMain.java | 3 +-- .../src/main/resource/assembly.xml | 0 3 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 code/java/DisasterWarning/src/main/resource/assembly.xml diff --git a/code/java/DisasterWarning/pom.xml b/code/java/DisasterWarning/pom.xml index 273170b..98bcb1c 100644 --- a/code/java/DisasterWarning/pom.xml +++ b/code/java/DisasterWarning/pom.xml @@ -80,9 +80,23 @@ compile - + ${maven-assmenbly-plugin.version} + + + make-assmenbly + package + + single + + + + + src/main/resource/assmebly.xml + + diff --git a/code/java/DisasterWarning/src/main/java/AppMain.java b/code/java/DisasterWarning/src/main/java/AppMain.java index c71e3e6..7562096 100644 --- a/code/java/DisasterWarning/src/main/java/AppMain.java +++ b/code/java/DisasterWarning/src/main/java/AppMain.java @@ -2,7 +2,7 @@ * @Author: Kane * @Date: 2022-04-22 10:53:49 * @LastEditors: Kane - * @LastEditTime: 2022-05-06 17:21:27 + * @LastEditTime: 2022-05-09 15:43:57 * @FilePath: \DisasterWarning\src\main\java\AppMain.java * @Description: 和风天气预警推送厦门太保公众号主程序! * @@ -45,7 +45,6 @@ public class AppMain return; } - // 读取配置 try { diff --git a/code/java/DisasterWarning/src/main/resource/assembly.xml b/code/java/DisasterWarning/src/main/resource/assembly.xml new file mode 100644 index 0000000..e69de29 From fbe9f8e532292702c4db8bacd998c0839112ab38 Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Tue, 10 May 2022 14:24:07 +0800 Subject: [PATCH 18/21] =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=89=93=E5=8C=85?= =?UTF-8?q?=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/java/DisasterWarning/pom.xml | 26 ++++++++++++++----- .../officalAccount/sendMessageTest.java | 5 ++-- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/code/java/DisasterWarning/pom.xml b/code/java/DisasterWarning/pom.xml index 98bcb1c..ff8f52e 100644 --- a/code/java/DisasterWarning/pom.xml +++ b/code/java/DisasterWarning/pom.xml @@ -23,7 +23,7 @@ 4.13.2 test - + com.fasterxml.jackson.core jackson-core @@ -79,11 +79,28 @@ compile + + + org.apache.maven.plugins + maven-surefire-plugin + + true + + org.apache.maven.plugins maven-assembly-plugin - ${maven-assmenbly-plugin.version} + + + jar-with-dependencies + + + + AppMain + + + make-assmenbly @@ -93,9 +110,6 @@ - - src/main/resource/assmebly.xml - diff --git a/code/java/DisasterWarning/src/test/java/com/cpic/xim/wechat/officalAccount/sendMessageTest.java b/code/java/DisasterWarning/src/test/java/com/cpic/xim/wechat/officalAccount/sendMessageTest.java index f4a6d21..90078f6 100644 --- a/code/java/DisasterWarning/src/test/java/com/cpic/xim/wechat/officalAccount/sendMessageTest.java +++ b/code/java/DisasterWarning/src/test/java/com/cpic/xim/wechat/officalAccount/sendMessageTest.java @@ -2,7 +2,7 @@ * @Author: Kane * @Date: 2022-04-22 10:53:49 * @LastEditors: Kane - * @LastEditTime: 2022-05-06 11:14:35 + * @LastEditTime: 2022-05-10 11:33:41 * @FilePath: \DisasterWarning\src\test\java\com\cpic\xim\wechat\officalAccount\sendMessageTest.java * @Description: * @@ -12,7 +12,6 @@ package com.cpic.xim.wechat.officalAccount; import com.cpic.xim.notify.disaster.QWeatherDisasterWarning; -import org.junit.Test; import static org.junit.Assert.*; import com.cpic.xim.httpUtil.*; import java.io.IOException; @@ -61,7 +60,7 @@ public class sendMessageTest } - @Test + // @Test public void testSendWeatherDisasterWarning() throws IOException { String warningJSON = From 1231fe313230c4b7c4ef03db9950b2aa135ab214 Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Tue, 10 May 2022 16:03:40 +0800 Subject: [PATCH 19/21] =?UTF-8?q?=E4=BF=9D=E5=AD=98=E8=BF=9B=E5=BA=A6?= =?UTF-8?q?=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/java/DisasterWarning/.gitignore | 5 ++- code/java/DisasterWarning/logging.properties | 10 +++++ code/java/DisasterWarning/pom.xml | 1 + .../src/main/java/AppMain.java | 43 ++++++++++++------- .../main/{resource => resources}/assembly.xml | 0 .../src/main/resources/logging.properties | 10 +++++ 6 files changed, 53 insertions(+), 16 deletions(-) create mode 100644 code/java/DisasterWarning/logging.properties rename code/java/DisasterWarning/src/main/{resource => resources}/assembly.xml (100%) create mode 100644 code/java/DisasterWarning/src/main/resources/logging.properties diff --git a/code/java/DisasterWarning/.gitignore b/code/java/DisasterWarning/.gitignore index 569855c..612c062 100644 --- a/code/java/DisasterWarning/.gitignore +++ b/code/java/DisasterWarning/.gitignore @@ -133,4 +133,7 @@ $RECYCLE.BIN/ # Windows shortcuts *.lnk -target/* \ No newline at end of file +target/* + +logs/* +logs \ No newline at end of file diff --git a/code/java/DisasterWarning/logging.properties b/code/java/DisasterWarning/logging.properties new file mode 100644 index 0000000..f82b56f --- /dev/null +++ b/code/java/DisasterWarning/logging.properties @@ -0,0 +1,10 @@ + +handlers = java.util.logging.ConsoleHandler, java.util.logging.FileHandler + +.level = INFO + +java.util.logging.FileHandler.pattern = ./logs/log_%u.log +java.util.logging.FileHandler.limit = 50000 +java.util.logging.FileHandler.count = 1 +java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter +java.util.logging.FileHandler.append = true; diff --git a/code/java/DisasterWarning/pom.xml b/code/java/DisasterWarning/pom.xml index ff8f52e..bc67e03 100644 --- a/code/java/DisasterWarning/pom.xml +++ b/code/java/DisasterWarning/pom.xml @@ -84,6 +84,7 @@ org.apache.maven.plugins maven-surefire-plugin + 3.0.0-M6 true diff --git a/code/java/DisasterWarning/src/main/java/AppMain.java b/code/java/DisasterWarning/src/main/java/AppMain.java index 7562096..1c071ff 100644 --- a/code/java/DisasterWarning/src/main/java/AppMain.java +++ b/code/java/DisasterWarning/src/main/java/AppMain.java @@ -2,7 +2,7 @@ * @Author: Kane * @Date: 2022-04-22 10:53:49 * @LastEditors: Kane - * @LastEditTime: 2022-05-09 15:43:57 + * @LastEditTime: 2022-05-10 16:01:13 * @FilePath: \DisasterWarning\src\main\java\AppMain.java * @Description: 和风天气预警推送厦门太保公众号主程序! * @@ -13,7 +13,7 @@ import com.cpic.xim.notify.disaster.QWeatherDisasterWarning; import com.cpic.xim.notify.disaster.WeatherDisasterWarningGrabber; import com.cpic.xim.wechat.officalAccount.sendMessage; import com.cpic.xim.config.WeatherDisasterNotifyConfig; - +import java.io.FileInputStream; import java.io.IOException; import java.sql.SQLException; import java.util.Vector; @@ -22,7 +22,7 @@ import java.util.logging.*; public class AppMain { - private final static String LOG_FILE_PATH = "./app.log"; + // private final static String LOG_FILE_PATH = "./logs/app%u.log"; public static void main( String[] args ) { @@ -79,6 +79,8 @@ public class AppMain // 判断是否有警报 if ( warning.getWarning().isEmpty() == true) { + logger.log( Level.INFO, "查询{0}天气预警,无警报!。", new Object[] + { city.getCityName()} ); continue; } @@ -125,18 +127,29 @@ public class AppMain */ private static void setRootLogger() throws IOException { + // Logger rootLogger = Logger.getLogger( "com.cpicxim" ); + // ConsoleHandler consoleHandler = new ConsoleHandler(); + // FileHandler fileHandler = new FileHandler( LOG_FILE_PATH ); + // SimpleFormatter formatter = new SimpleFormatter(); + + // consoleHandler.setFormatter( formatter ); + // fileHandler.setFormatter( formatter ); + + // rootLogger.addHandler( consoleHandler ); + // rootLogger.addHandler( fileHandler ); + + // rootLogger.setUseParentHandlers( false ); + // rootLogger.setLevel( Level.ALL ); + + LogManager logManager = LogManager.getLogManager(); + // 使用外部的配置文件。 + FileInputStream configFile = new FileInputStream( "./logging.properties" ); + // 使用jar中的配置文件。 + // InputStream configFile = + // AppMain.class.getClassLoader().getResourceAsStream( "logging.properties" ); + + logManager.readConfiguration( configFile ); + Logger rootLogger = Logger.getLogger( "com.cpicxim" ); - ConsoleHandler consoleHandler = new ConsoleHandler(); - FileHandler fileHandler = new FileHandler( LOG_FILE_PATH ); - SimpleFormatter formatter = new SimpleFormatter(); - - consoleHandler.setFormatter( formatter ); - fileHandler.setFormatter( formatter ); - - rootLogger.addHandler( consoleHandler ); - rootLogger.addHandler( fileHandler ); - - rootLogger.setUseParentHandlers( false ); - rootLogger.setLevel( Level.ALL ); } } diff --git a/code/java/DisasterWarning/src/main/resource/assembly.xml b/code/java/DisasterWarning/src/main/resources/assembly.xml similarity index 100% rename from code/java/DisasterWarning/src/main/resource/assembly.xml rename to code/java/DisasterWarning/src/main/resources/assembly.xml diff --git a/code/java/DisasterWarning/src/main/resources/logging.properties b/code/java/DisasterWarning/src/main/resources/logging.properties new file mode 100644 index 0000000..707450e --- /dev/null +++ b/code/java/DisasterWarning/src/main/resources/logging.properties @@ -0,0 +1,10 @@ + +handlers = java.util.logging.ConsoleHandler, java.util.logging.FileHandler + +.level = INFO + +java.util.logging.FileHandler.pattern = ./logs/log_%u.log +java.util.logging.FileHandler.limit = 50000 +java.util.logging.FileHandler.count = 10 +java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter +java.util.logging.FileHandler.append = true; From 2847747f534bc964ec36c099d83dcdeb5b87417e Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Tue, 10 May 2022 16:32:59 +0800 Subject: [PATCH 20/21] =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E5=8A=9F=E8=83=BD!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/java/DisasterWarning/config.json | 1 + .../src/main/java/AppMain.java | 131 +++++++++--------- .../com/cpic/xim/config/AppConfigManager.java | 79 +++++++++++ .../config/WeatherDisasterNotifyConfig.java | 96 +++++-------- 4 files changed, 181 insertions(+), 126 deletions(-) create mode 100644 code/java/DisasterWarning/src/main/java/com/cpic/xim/config/AppConfigManager.java diff --git a/code/java/DisasterWarning/config.json b/code/java/DisasterWarning/config.json index 014224c..3795a43 100644 --- a/code/java/DisasterWarning/config.json +++ b/code/java/DisasterWarning/config.json @@ -3,6 +3,7 @@ "key": "fe9fa8eeeb6f4301a92541eed565dd15", "query_url": "https://devapi.qweather.com/v7/warning/now?", "wechat_officalaccount_url": "https://cxxmwx.cpic.com.cn/app/index.php?i=2&c=entry&do=send_group_tpl_api&m=ok_tplmessage", + "query_interval": 10, "cities": [ { "city_name": "厦门", diff --git a/code/java/DisasterWarning/src/main/java/AppMain.java b/code/java/DisasterWarning/src/main/java/AppMain.java index 1c071ff..9373c01 100644 --- a/code/java/DisasterWarning/src/main/java/AppMain.java +++ b/code/java/DisasterWarning/src/main/java/AppMain.java @@ -2,12 +2,13 @@ * @Author: Kane * @Date: 2022-04-22 10:53:49 * @LastEditors: Kane - * @LastEditTime: 2022-05-10 16:01:13 + * @LastEditTime: 2022-05-10 16:28:07 * @FilePath: \DisasterWarning\src\main\java\AppMain.java * @Description: 和风天气预警推送厦门太保公众号主程序! * * Copyright (c) ${2022} by Kane, All Rights Reserved. */ +import com.cpic.xim.config.AppConfigManager; import com.cpic.xim.config.City; import com.cpic.xim.notify.disaster.QWeatherDisasterWarning; import com.cpic.xim.notify.disaster.WeatherDisasterWarningGrabber; @@ -48,7 +49,7 @@ public class AppMain // 读取配置 try { - config = WeatherDisasterNotifyConfig.getConfig(); + config = AppConfigManager.getConfig(); } catch ( IOException error ) { @@ -65,59 +66,73 @@ public class AppMain String userKey = config.getKey(); // 遍历所有城市,查询是否有警报,有则推送。 - for ( City city : cities ) + while (true) { + for ( City city : cities ) + { + try + { + json = WeatherDisasterWarningGrabber.getWeatherDisasterWarningJSON( queryURL, + userKey, city.getCityCode() ); + warning = WeatherDisasterWarningGrabber.convertWeatherDisasterWarning( json ); + + logger.log( Level.INFO, "查询{0}天气预警,结果:{1}。", new Object[] + { city.getCityName(), json} ); + + // 判断是否有警报 + if ( warning.getWarning().isEmpty() == true) + { + logger.log( Level.INFO, "查询{0}天气预警,无警报!。", new Object[] + { city.getCityName()} ); + continue; + } + + logger.log( Level.INFO, "查询{0}天气预警,发送日志。", new Object[] + { city.getCityName()} ); + + sendMessage.sendWeatherDisasterWarning( config.getWechatOfficalAccountURL(), + warning ); + + logger.log( Level.INFO, "{0}天气预警,日志发送成功。", new Object[] + { city.getCityName()} ); + + sendMessage.saveWeatherDisasterWarning( city.getCityName(), warning ); + } + catch ( IOException error ) + { + System.out.println( "查询" + city.getCityName() + "出现异常!" ); + System.out.println( error.getMessage() ); + + logger.log( Level.SEVERE, "查询 {0} 出现异常:{1}。", new Object[] + { city.getCityName(), error.getMessage()} ); + } + catch ( SQLException error ) + { + logger.log( Level.SEVERE, "查询 {0} 写入数据库失败:{1}。", new Object[] + { city.getCityName(), error.getMessage()} ); + } + catch ( ClassNotFoundException error ) + { + logger.log( Level.SEVERE, "查询 {0} 加载oracle驱动失败:{1}。", new Object[] + { city.getCityName(), error.getMessage()} ); + + } + catch ( Exception error ) + { + logger.log( Level.SEVERE, "查询 {0} 出现未知错误:{1}。", new Object[] + { city.getCityName(), error.getMessage()} ); + } + } + try { - json = WeatherDisasterWarningGrabber.getWeatherDisasterWarningJSON( queryURL, - userKey, city.getCityCode() ); - warning = WeatherDisasterWarningGrabber.convertWeatherDisasterWarning( json ); - - logger.log( Level.INFO, "查询{0}天气预警,结果:{1}。", new Object[] - { city.getCityName(), json} ); - - // 判断是否有警报 - if ( warning.getWarning().isEmpty() == true) - { - logger.log( Level.INFO, "查询{0}天气预警,无警报!。", new Object[] - { city.getCityName()} ); - continue; - } - - logger.log( Level.INFO, "查询{0}天气预警,发送日志。", new Object[] - { city.getCityName()} ); - - sendMessage.sendWeatherDisasterWarning( config.getWechatOfficalAccountURL(), - warning ); - - logger.log( Level.INFO, "{0}天气预警,日志发送成功。", new Object[] - { city.getCityName()} ); - - sendMessage.saveWeatherDisasterWarning( city.getCityName(), warning ); + logger.log( Level.INFO, "查询结束,休眠{0}分钟。", config.getQueryInterval() ); + Thread.sleep( config.getQueryInterval() * 1000 * 60 ); } - catch ( IOException error ) + catch ( InterruptedException error ) { - System.out.println( "查询" + city.getCityName() + "出现异常!" ); - System.out.println( error.getMessage() ); - - logger.log( Level.SEVERE, "查询 {0} 出现异常:{1}。", new Object[] - { city.getCityName(), error.getMessage()} ); - } - catch ( SQLException error ) - { - logger.log( Level.SEVERE, "查询 {0} 写入数据库失败:{1}。", new Object[] - { city.getCityName(), error.getMessage()} ); - } - catch ( ClassNotFoundException error ) - { - logger.log( Level.SEVERE, "查询 {0} 加载oracle驱动失败:{1}。", new Object[] - { city.getCityName(), error.getMessage()} ); - - } - catch ( Exception error ) - { - logger.log( Level.SEVERE, "查询 {0} 出现未知错误:{1}。", new Object[] - { city.getCityName(), error.getMessage()} ); + logger.log( Level.SEVERE, "线程休眠异常,错误信息:{0}", new Object[] + { error.getMessage()} ); } } } @@ -127,20 +142,6 @@ public class AppMain */ private static void setRootLogger() throws IOException { - // Logger rootLogger = Logger.getLogger( "com.cpicxim" ); - // ConsoleHandler consoleHandler = new ConsoleHandler(); - // FileHandler fileHandler = new FileHandler( LOG_FILE_PATH ); - // SimpleFormatter formatter = new SimpleFormatter(); - - // consoleHandler.setFormatter( formatter ); - // fileHandler.setFormatter( formatter ); - - // rootLogger.addHandler( consoleHandler ); - // rootLogger.addHandler( fileHandler ); - - // rootLogger.setUseParentHandlers( false ); - // rootLogger.setLevel( Level.ALL ); - LogManager logManager = LogManager.getLogManager(); // 使用外部的配置文件。 FileInputStream configFile = new FileInputStream( "./logging.properties" ); @@ -150,6 +151,6 @@ public class AppMain logManager.readConfiguration( configFile ); - Logger rootLogger = Logger.getLogger( "com.cpicxim" ); + Logger.getLogger( "com.cpicxim" ); } } diff --git a/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/AppConfigManager.java b/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/AppConfigManager.java new file mode 100644 index 0000000..69fcfa0 --- /dev/null +++ b/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/AppConfigManager.java @@ -0,0 +1,79 @@ +/* + * @Author: Kane + * @Date: 2022-05-10 16:06:14 + * @LastEditors: Kane + * @LastEditTime: 2022-05-10 16:09:07 + * @FilePath: \DisasterWarning\src\main\java\com\cpic\xim\config\AppConfigManager.java + * @Description: + * + * Copyright (c) ${2022} by Kane, All Rights Reserved. + */ + +package com.cpic.xim.config; + +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.FileInputStream; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.PropertyNamingStrategy; + +public class AppConfigManager +{ + private static final int BUFFER_SIZE = 1024; + private static final String CONFIG_FILE_CHARSET = "UTF-8"; + private static final String CONFIG_FILE_PATH = "./config.json"; + private static WeatherDisasterNotifyConfig appConfig = null; + + public static WeatherDisasterNotifyConfig getConfig() throws IOException + + { + if ( appConfig != null) + { + return appConfig; + } + + ObjectMapper mapper = new ObjectMapper(); + FileInputStream configFile = null; + InputStreamReader in = null; + StringBuffer json = null; + char[] buffer = new char[BUFFER_SIZE]; + + // 设置json属性 + mapper.setPropertyNamingStrategy( PropertyNamingStrategy.SNAKE_CASE ); + + try + { + configFile = new FileInputStream( CONFIG_FILE_PATH ); + in = new InputStreamReader( configFile, CONFIG_FILE_CHARSET ); + json = new StringBuffer(); + + int length = in.read( buffer ); + + while (length != -1) + { + json.append( buffer ); + + length = in.read( buffer ); + } + + appConfig = mapper.readValue( json.toString(), WeatherDisasterNotifyConfig.class ); + } + finally + { + if ( configFile != null) + { + try + { + configFile.close(); + } + catch ( IOException e ) + { + e.printStackTrace(); + } + } + } + + return appConfig; + } +} diff --git a/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/WeatherDisasterNotifyConfig.java b/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/WeatherDisasterNotifyConfig.java index cafd3fe..dd1892d 100644 --- a/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/WeatherDisasterNotifyConfig.java +++ b/code/java/DisasterWarning/src/main/java/com/cpic/xim/config/WeatherDisasterNotifyConfig.java @@ -1,72 +1,22 @@ +/* + * @Author: Kane + * @Date: 2022-04-24 10:21:46 + * @LastEditors: Kane + * @LastEditTime: 2022-05-10 16:16:28 + * @FilePath: \DisasterWarning\src\main\java\com\cpic\xim\config\WeatherDisasterNotifyConfig.java + * @Description: + * + * Copyright (c) ${2022} by Kane, All Rights Reserved. + */ package com.cpic.xim.config; -import java.io.InputStreamReader; -import java.io.FileInputStream; -import java.io.IOException; import java.util.Vector; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.PropertyNamingStrategy; + public class WeatherDisasterNotifyConfig { - private static final int BUFFER_SIZE = 1024; - private static final String CONFIG_FILE_CHARSET = "UTF-8"; - private static final String CONFIG_FILE_PATH = "./config.json"; - private static WeatherDisasterNotifyConfig appConfig = null; - - public static WeatherDisasterNotifyConfig getConfig() throws IOException - - { - if ( appConfig != null) - { - return appConfig; - } - - ObjectMapper mapper = new ObjectMapper(); - FileInputStream configFile = null; - InputStreamReader in = null; - StringBuffer json = null; - char[] buffer = new char[BUFFER_SIZE]; - - // 设置json属性 - mapper.setPropertyNamingStrategy( PropertyNamingStrategy.SNAKE_CASE ); - - try - { - configFile = new FileInputStream( CONFIG_FILE_PATH ); - in = new InputStreamReader( configFile, CONFIG_FILE_CHARSET ); - json = new StringBuffer(); - - int length = in.read( buffer ); - - while (length != -1) - { - json.append( buffer ); - - length = in.read( buffer ); - } - - appConfig = mapper.readValue( json.toString(), WeatherDisasterNotifyConfig.class ); - } - finally - { - if ( configFile != null) - { - try - { - configFile.close(); - } - catch ( IOException e ) - { - e.printStackTrace(); - } - } - } - - return appConfig; - } public WeatherDisasterNotifyConfig() {}; @@ -106,6 +56,18 @@ public class WeatherDisasterNotifyConfig return cities; } + + public int getQueryInterval() + { + return queryInterval; + } + + public void setQueryInterval( int queryInterval ) + { + this.queryInterval = queryInterval; + } + + public void setCities( Vector cities ) { this.cities = cities; @@ -131,12 +93,24 @@ public class WeatherDisasterNotifyConfig this.wechatOfficalAccountURL = wechatOfficalAccountURL; } + @JsonProperty( "title") private String title; + + @JsonProperty( "key") private String key; + + @JsonProperty( "query_url") private String queryUrl; + @JsonProperty( "query_interval") + private int queryInterval; + @JsonProperty( "wechat_officalaccount_url") private String wechatOfficalAccountURL; + + @JsonProperty( "cities") private Vector cities; + + @JsonProperty( "notify_stuffs") private Vector notifyStuffs; } From 8149e21e2f7b7ed666564799cc64a7c5c5755b45 Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Tue, 10 May 2022 16:35:07 +0800 Subject: [PATCH 21/21] =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E6=89=93=E5=8C=85!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 应用/1.0/config.json | 19 +++++++++++++++++++ 应用/1.0/db.json | 14 ++++++++++++++ 应用/1.0/logging.properties | 10 ++++++++++ 3 files changed, 43 insertions(+) create mode 100644 应用/1.0/config.json create mode 100644 应用/1.0/db.json create mode 100644 应用/1.0/logging.properties diff --git a/应用/1.0/config.json b/应用/1.0/config.json new file mode 100644 index 0000000..3795a43 --- /dev/null +++ b/应用/1.0/config.json @@ -0,0 +1,19 @@ +{ + "title": "天气灾害预警配置文件", + "key": "fe9fa8eeeb6f4301a92541eed565dd15", + "query_url": "https://devapi.qweather.com/v7/warning/now?", + "wechat_officalaccount_url": "https://cxxmwx.cpic.com.cn/app/index.php?i=2&c=entry&do=send_group_tpl_api&m=ok_tplmessage", + "query_interval": 10, + "cities": [ + { + "city_name": "厦门", + "city_code": "101230201" + } + ], + "notify_stuffs": [ + { + "stuff_name": "王炜", + "mobile_phone": "15959215339" + } + ] +} diff --git a/应用/1.0/db.json b/应用/1.0/db.json new file mode 100644 index 0000000..a8f5ddd --- /dev/null +++ b/应用/1.0/db.json @@ -0,0 +1,14 @@ +{ + "tns_name": "xmcx1", + "ip_addr": "10.39.0.86", + "jdbc_url": "jdbc:oracle:thin:@10.39.0.86:1521:xmcx1", + "table_space": "wechat", + "user_name": "wechat", + "password": "@rn7Q+t5zeyKIZ~s", + "tables": [ + { + "table_name": "weather_disaster_notify", + "table_description": "天气预警消息表" + } + ] +} diff --git a/应用/1.0/logging.properties b/应用/1.0/logging.properties new file mode 100644 index 0000000..f82b56f --- /dev/null +++ b/应用/1.0/logging.properties @@ -0,0 +1,10 @@ + +handlers = java.util.logging.ConsoleHandler, java.util.logging.FileHandler + +.level = INFO + +java.util.logging.FileHandler.pattern = ./logs/log_%u.log +java.util.logging.FileHandler.limit = 50000 +java.util.logging.FileHandler.count = 1 +java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter +java.util.logging.FileHandler.append = true;