From 6671cb69c9ffae8eda4d767f8667050869f62f0b Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Tue, 10 May 2022 19:37:52 +0800 Subject: [PATCH] =?UTF-8?q?=E9=97=AE=E9=A2=98=E5=B7=B2=E4=BF=AE=E6=AD=A3?= =?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 | 35 +----------- .../src/main/java/AppMain.java | 36 +++++++++---- .../wechat/officalAccount/sendMessage.java | 54 +++++++++---------- 3 files changed, 55 insertions(+), 70 deletions(-) diff --git a/code/java/DisasterWarning/pom.xml b/code/java/DisasterWarning/pom.xml index bc67e03..f84e896 100644 --- a/code/java/DisasterWarning/pom.xml +++ b/code/java/DisasterWarning/pom.xml @@ -8,9 +8,7 @@ com.oracle ojdbc8 - 1.0 - system - ${project.basedir}/lib/ojdbc8.jar + 19.3.0.0.0 org.apache.httpcomponents @@ -23,37 +21,6 @@ 4.13.2 test - com.fasterxml.jackson.core jackson-core diff --git a/code/java/DisasterWarning/src/main/java/AppMain.java b/code/java/DisasterWarning/src/main/java/AppMain.java index 9373c01..619ca2a 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-10 16:28:07 + * @LastEditTime: 2022-05-10 19:03:56 * @FilePath: \DisasterWarning\src\main\java\AppMain.java * @Description: 和风天气预警推送厦门太保公众号主程序! * @@ -11,6 +11,7 @@ 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.QWeatherDisasterWarningItem; import com.cpic.xim.notify.disaster.WeatherDisasterWarningGrabber; import com.cpic.xim.wechat.officalAccount.sendMessage; import com.cpic.xim.config.WeatherDisasterNotifyConfig; @@ -79,23 +80,40 @@ public class AppMain logger.log( Level.INFO, "查询{0}天气预警,结果:{1}。", new Object[] { city.getCityName(), json} ); - // 判断是否有警报 - if ( warning.getWarning().isEmpty() == true) + Vector warningItems = warning.getWarning(); + + // 判断是否有警报,没有警报就结束当前城市的处理 + if ( warningItems.isEmpty() == true) { logger.log( Level.INFO, "查询{0}天气预警,无警报!。", new Object[] { city.getCityName()} ); continue; } - logger.log( Level.INFO, "查询{0}天气预警,发送日志。", new Object[] - { city.getCityName()} ); + // 有警报,就遍历警报数组 + for ( QWeatherDisasterWarningItem item : warningItems ) + { + // 先检查是否已经发送过 + if ( sendMessage.checkWarningHasSended( item.getId() ) == false) + { + logger.log( Level.INFO, "查询{0}天气预警,ID:{1},已有发送记录,跳过。", new Object[] + { city.getCityName(), item.getId()} ); - sendMessage.sendWeatherDisasterWarning( config.getWechatOfficalAccountURL(), - warning ); + continue; + } - logger.log( Level.INFO, "{0}天气预警,日志发送成功。", new Object[] - { city.getCityName()} ); + // 没有发送过 + logger.log( Level.INFO, "查询{0}天气预警,发送日志。", new Object[] + { city.getCityName()} ); + sendMessage.sendWeatherDisasterWarning( config.getWechatOfficalAccountURL(), + item ); + + logger.log( Level.INFO, "{0}天气预警,日志发送成功。", new Object[] + { city.getCityName()} ); + } + + // 将发送的警报,保存起来 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 198e768..e98c82b 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-06 11:14:32 + * @LastEditTime: 2022-05-10 19:02:32 * @FilePath: \DisasterWarning\src\main\java\com\cpic\xim\wechat\officalAccount\sendMessage.java * @Description: 用来推送公众号消息的程序库。 * @@ -17,7 +17,6 @@ import com.fasterxml.jackson.annotation.JsonProperty; import java.io.IOException; import java.net.MalformedURLException; import java.util.HashMap; -import java.util.Vector; import java.sql.Connection; import java.sql.DriverManager; @@ -40,12 +39,12 @@ public class sendMessage * 推送天气灾害预警!接口文档参考 彭奕洁 编写《消息发送接口调用文档》 * 使用 post 方式,请求体内容以最基础的 post 格式。 * @param officalAccountURL 产险厦门分公司公众号接口网址 - * @param warning 灾害预警对象 + * @param warningItem 灾害预警对象 */ public static void sendWeatherDisasterWarning( String officalAccountURL, - QWeatherDisasterWarning warning ) + QWeatherDisasterWarningItem warningItem ) { - Vector warningItems = warning.getWarning(); + // Vector warningItems = warningItem.getWarning(); StringBuilder requestBody = null; // 设置请求头参数 @@ -56,30 +55,29 @@ public class sendMessage headers.put( "Content-Type", "application/x-www-form-urlencoded;charset=UTF-8" ); // 遍历消息,将消息推送出去。 - for ( QWeatherDisasterWarningItem item : warningItems ) + + // 拼接消息内容 + String title = warningItem.getTitle(); + String text = warningItem.getText(); + String color = warningLevel.keySet().contains( warningItem.getLevel() ) + ? warningLevel.get( warningItem.getLevel() ) + : "#000000"; + requestBody = new StringBuilder(); + + requestBody.append( "tplid=57&groupid=1&first=尊敬的#realname#,您好!&" ); + requestBody.append( "keyword1=" ).append( title ).append( "&" ); + requestBody.append( "keyword1color=" ).append( color ).append( "&" ); + requestBody.append( "keyword2=" ).append( text ); + + try { - // 拼接消息内容 - String title = item.getTitle(); - String text = item.getText(); - String color = warningLevel.keySet().contains( item.getLevel() ) - ? warningLevel.get( item.getLevel() ) - : "#000000"; - requestBody = new StringBuilder(); - - requestBody.append( "tplid=57&groupid=1&first=尊敬的#realname#,您好!&" ); - requestBody.append( "keyword1=" ).append( title ).append( "&" ); - requestBody.append( "keyword1color=" ).append( color ).append( "&" ); - requestBody.append( "keyword2=" ).append( text ); - - try - { - HttpUtils.postHttpRequest( officalAccountURL, headers, requestBody.toString() ); - } - catch ( MalformedURLException error ) - { - error.printStackTrace(); - } + HttpUtils.postHttpRequest( officalAccountURL, headers, requestBody.toString() ); } + catch ( MalformedURLException error ) + { + error.printStackTrace(); + } + } /** @@ -197,6 +195,8 @@ public class sendMessage conn = DriverManager.getConnection( jdbcURL, userName, password ); stmt = conn.prepareStatement( sql ); + conn.setAutoCommit( false ); + for ( QWeatherDisasterWarningItem warning : warnings.getWarning() ) { java.sql.Timestamp pubTime =