Commit 5079db1d authored by 耿迪迪's avatar 耿迪迪

上报市局监控

parents
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
/*
* Copyright 2007-present the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import java.net.*;
import java.io.*;
import java.nio.channels.*;
import java.util.Properties;
public class MavenWrapperDownloader {
private static final String WRAPPER_VERSION = "0.5.6";
/**
* Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
*/
private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
+ WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
/**
* Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
* use instead of the default one.
*/
private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
".mvn/wrapper/maven-wrapper.properties";
/**
* Path where the maven-wrapper.jar will be saved to.
*/
private static final String MAVEN_WRAPPER_JAR_PATH =
".mvn/wrapper/maven-wrapper.jar";
/**
* Name of the property which should be used to override the default download url for the wrapper.
*/
private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
public static void main(String args[]) {
System.out.println("- Downloader started");
File baseDirectory = new File(args[0]);
System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
// If the maven-wrapper.properties exists, read it and check if it contains a custom
// wrapperUrl parameter.
File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
String url = DEFAULT_DOWNLOAD_URL;
if(mavenWrapperPropertyFile.exists()) {
FileInputStream mavenWrapperPropertyFileInputStream = null;
try {
mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
Properties mavenWrapperProperties = new Properties();
mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
} catch (IOException e) {
System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
} finally {
try {
if(mavenWrapperPropertyFileInputStream != null) {
mavenWrapperPropertyFileInputStream.close();
}
} catch (IOException e) {
// Ignore ...
}
}
}
System.out.println("- Downloading from: " + url);
File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
if(!outputFile.getParentFile().exists()) {
if(!outputFile.getParentFile().mkdirs()) {
System.out.println(
"- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
}
}
System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
try {
downloadFileFromURL(url, outputFile);
System.out.println("Done");
System.exit(0);
} catch (Throwable e) {
System.out.println("- Error downloading");
e.printStackTrace();
System.exit(1);
}
}
private static void downloadFileFromURL(String urlString, File destination) throws Exception {
if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
String username = System.getenv("MVNW_USERNAME");
char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
}
URL website = new URL(urlString);
ReadableByteChannel rbc;
rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream(destination);
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
fos.close();
rbc.close();
}
}
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.1/apache-maven-3.8.1-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
This diff is collapsed.
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements. See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership. The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License. You may obtain a copy of the License at
@REM
@REM https://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied. See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Maven Start Up Batch script
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@REM M2_HOME - location of maven2's installed home dir
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
@REM ----------------------------------------------------------------------------
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo off
@REM set title of command window
title %0
@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
@REM set %HOME% to equivalent of $HOME
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
@REM Execute a user defined script before this one
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
:skipRcPre
@setlocal
set ERROR_CODE=0
@REM To isolate internal variables from possible post scripts, we use another setlocal
@setlocal
@REM ==== START VALIDATION ====
if not "%JAVA_HOME%" == "" goto OkJHome
echo.
echo Error: JAVA_HOME not found in your environment. >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
:OkJHome
if exist "%JAVA_HOME%\bin\java.exe" goto init
echo.
echo Error: JAVA_HOME is set to an invalid directory. >&2
echo JAVA_HOME = "%JAVA_HOME%" >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
@REM ==== END VALIDATION ====
:init
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
@REM Fallback to current working directory if not found.
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
set EXEC_DIR=%CD%
set WDIR=%EXEC_DIR%
:findBaseDir
IF EXIST "%WDIR%"\.mvn goto baseDirFound
cd ..
IF "%WDIR%"=="%CD%" goto baseDirNotFound
set WDIR=%CD%
goto findBaseDir
:baseDirFound
set MAVEN_PROJECTBASEDIR=%WDIR%
cd "%EXEC_DIR%"
goto endDetectBaseDir
:baseDirNotFound
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
cd "%EXEC_DIR%"
:endDetectBaseDir
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
@setlocal EnableExtensions EnableDelayedExpansion
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
:endReadAdditionalConfig
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
)
@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
if exist %WRAPPER_JAR% (
if "%MVNW_VERBOSE%" == "true" (
echo Found %WRAPPER_JAR%
)
) else (
if not "%MVNW_REPOURL%" == "" (
SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
)
if "%MVNW_VERBOSE%" == "true" (
echo Couldn't find %WRAPPER_JAR%, downloading it ...
echo Downloading from: %DOWNLOAD_URL%
)
powershell -Command "&{"^
"$webclient = new-object System.Net.WebClient;"^
"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
"}"^
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
"}"
if "%MVNW_VERBOSE%" == "true" (
echo Finished downloading %WRAPPER_JAR%
)
)
@REM End of extension
@REM Provide a "standardized" way to retrieve the CLI args that will
@REM work with both Windows and non-Windows executions.
set MAVEN_CMD_LINE_ARGS=%*
%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
if ERRORLEVEL 1 goto error
goto end
:error
set ERROR_CODE=1
:end
@endlocal & set ERROR_CODE=%ERROR_CODE%
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
@REM check for post script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
:skipRcPost
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
if "%MAVEN_BATCH_PAUSE%" == "on" pause
if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
exit /B %ERROR_CODE%
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.zehong</groupId>
<artifactId>monitor-reprotdata-frogovernment</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>monitor-reprotdata-frogovernment</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.5.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.20</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
<!--json转换-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
</dependency>
<!--commons-lang-->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
package com.zehong.monitorreprotdatafrogovernment;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)
@MapperScan("com.zehong.monitorreprotdatafrogovernment.dao")
public class MonitorReprotdataFrogovernmentApplication {
public static void main(String[] args) {
SpringApplication.run(MonitorReprotdataFrogovernmentApplication.class, args);
}
}
package com.zehong.monitorreprotdatafrogovernment.dao;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.zehong.monitorreprotdatafrogovernment.entity.DetectorInfo;
@DS("db1")
public interface JingyeDetectorInfoDao {
/**
* 获取最新上报数据
* @return DetectorInfo 上报数据实体
*/
DetectorInfo getRecentSendData();
}
package com.zehong.monitorreprotdatafrogovernment.dao;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.zehong.monitorreprotdatafrogovernment.entity.DetectorInfo;
@DS("db2")
public interface YingdeDetectorInfoDao {
/**
* 获取最新上报数据
* @return DetectorInfo 上报数据实体
*/
DetectorInfo getRecentSendData();
}
package com.zehong.monitorreprotdatafrogovernment.dao;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.zehong.monitorreprotdatafrogovernment.entity.DetectorInfo;
@DS("db3")
public interface ZhengyuanDetectorInfoDao {
/**
* 获取最新上报数据
* @return DetectorInfo 上报数据实体
*/
DetectorInfo getRecentSendData();
}
package com.zehong.monitorreprotdatafrogovernment.entity;
import lombok.Data;
import java.util.Date;
@Data
public class DetectorInfo{
private Integer id;
private String code;
private Date time;
private String value;
private String type;
private String flag;
private String alarmSend;
private String realtimeSend;
private String guid;
private Date updateTime;
}
\ No newline at end of file
package com.zehong.monitorreprotdatafrogovernment.model;
import lombok.Data;
@Data
public class SendSmsParam {
/** 发送短信秘钥 **/
private String secretKey;
/** 发送短信号码 **/
private String phoneNumberJson;
/** 发送短信签名 **/
private String signNameJson;
/** 发送短信模板编码 **/
private String templateCode;
/** 发送短信内容 **/
private String templateParamJson;
}
package com.zehong.monitorreprotdatafrogovernment.result;
import java.io.Serializable;
public class Result implements Serializable{
private String code;
private String msg;
private Object data;
public Result(String code, String msg, Object data) {
this.code = code;
this.msg = msg;
this.data = data;
}
public Result(String code, String msg) {
this.code = code;
this.msg = msg;
}
public Result(ResultEnum resultEnum){
this.code = resultEnum.getCode();
this.msg = resultEnum.getMsg();
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
package com.zehong.monitorreprotdatafrogovernment.result;
public enum ResultEnum {
/**
* 请求成功
*/
SUCCESS("0","接口请求成功!"),BUSSINESS_FAIL("1","业务异常!"),FAIL("2","接口请求失败!"),SYSTEM_EXCEPTION("3","系统异常!")
,NOT_IN_IPWHITE("4","当前IP不在白名单中,请联系管理员"),SECRETKRY_ERROR("5","secretKey不存在或秘钥不正确!")
,VALIDATA_ERROR("6","");
private String code;
private String msg;
ResultEnum(String code, String msg) {
this.code = code;
this.msg = msg;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
package com.zehong.monitorreprotdatafrogovernment.task;
import com.zehong.monitorreprotdatafrogovernment.dao.JingyeDetectorInfoDao;
import com.zehong.monitorreprotdatafrogovernment.dao.YingdeDetectorInfoDao;
import com.zehong.monitorreprotdatafrogovernment.dao.ZhengyuanDetectorInfoDao;
import com.zehong.monitorreprotdatafrogovernment.entity.DetectorInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import javax.annotation.Resource;
import java.util.Date;
@Configuration
@EnableScheduling
@PropertySource(value = "classpath:application.yml")
public class SaticScheduleTask {
@Resource
private JingyeDetectorInfoDao jingyeDetectorInfoDao;
@Resource
private YingdeDetectorInfoDao yingdeDetectorInfoDao;
@Resource
private ZhengyuanDetectorInfoDao zhengyuanDetectorInfoDao;
@Autowired
private SendSmsTask dynamicTask;
@Value("${sendSmsCron}")
private String sendSmsCron;
@Scheduled(cron = "${cron}")
private void configureTasks() {
DetectorInfo jingye = jingyeDetectorInfoDao.getRecentSendData();
compareReportDate(jingye.getUpdateTime(),"jingye");
DetectorInfo yingde = yingdeDetectorInfoDao.getRecentSendData();
compareReportDate(yingde.getUpdateTime(),"yingde");
DetectorInfo zhengyuan = zhengyuanDetectorInfoDao.getRecentSendData();
compareReportDate(zhengyuan.getUpdateTime(),"zhengyuan");
}
/**
* 比较上报时间 超过五分钟为发送数据发送短信预警
* @param reportDate 上报时间
* @param company 公司
*/
private void compareReportDate(Date reportDate,String company){
long period = System.currentTimeMillis() - reportDate.getTime();
//超过五分钟未发送数据发送短信报警
if(5 < period/(60 * 1000)){
//如未及时处理没半小时发送一次短信
if(!dynamicTask.isExist(company)){
//发送短信
dynamicTask.sendSms(company);
//启动定时半小时后重新发送
dynamicTask.add(company,sendSmsCron);
}
return;
}
if (dynamicTask.isExist(company)){
dynamicTask.stop(company);
}
}
}
package com.zehong.monitorreprotdatafrogovernment.task;
import com.alibaba.fastjson.JSONObject;
import com.zehong.monitorreprotdatafrogovernment.model.SendSmsParam;
import com.zehong.monitorreprotdatafrogovernment.result.Result;
import com.zehong.monitorreprotdatafrogovernment.result.ResultEnum;
import com.zehong.monitorreprotdatafrogovernment.utils.HttpUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ScheduledFuture;
@Component
public class SendSmsTask {
private static final Logger logger = LoggerFactory.getLogger(SendSmsTask.class);
private Map<String, ScheduledFuture<?>> taskMap = new HashMap<>();
@Value("${secretKey}")
private String secretKey;
@Value("${phoneNums}")
private String[] phoneNums;
@Value("${signName}")
private String signName;
@Value("${templateCode}")
private String templateCode;
@Value("${sendSmsUrl}")
private String sendSmsUrl;
@Autowired
private ThreadPoolTaskScheduler threadPoolTaskScheduler;
public boolean add(String name, String cron) {
if(null != taskMap.get(name)) {
return false;
}
ScheduledFuture<?> schedule = threadPoolTaskScheduler.schedule(new TaskRunnable(name), new CronTrigger(cron));
taskMap.put(name, schedule);
return true;
}
public boolean stop(String name) {
if(null == taskMap.get(name)) {
return false;
}
ScheduledFuture<?> scheduledFuture = taskMap.get(name);
scheduledFuture.cancel(true);
taskMap.remove(name);
return true;
}
public boolean isExist(String task){
return taskMap.containsKey(task);
}
private class TaskRunnable implements Runnable {
private String name;
public TaskRunnable(String name) {
this.name = name;
}
@Override
public void run() {
sendSms(name);
}
}
public void sendSms(String company){
String param = JSONObject.toJSONString(assemableParam(company));
try {
logger.info("发送短信参数为:"+param);
Result result = HttpUtil.doPost(sendSmsUrl,param);
if(ResultEnum.FAIL.getCode().equals(result.getCode()) || !"0".equals(JSONObject.parseObject(result.getMsg()).get("code"))){
throw new Exception(result.getMsg());
}
} catch (Exception e) {
logger.error("发送短信失败:"+e);
logger.error("发送短信失败参数为:"+param);
}
}
/**
* 获取公司名称
* @param company 公司标志
* @return String
*/
private String getCompanyName(String company){
switch(company){
case "jingye":
company = "敬业";
break;
case "yingde":
company = "盈得";
break;
case "zhengyuan":
company = "正元";
break;
default:
company = "";
}
return company;
}
/**
* 拼装请求参数
* @param company 公司
* @return SendSmsParam
*/
private SendSmsParam assemableParam(String company){
SendSmsParam sendSmsParam = new SendSmsParam();
sendSmsParam.setSecretKey(secretKey);
StringBuilder phoneNumberJson = new StringBuilder("[");
StringBuilder signNameJson = new StringBuilder("[");
StringBuilder templateParamJson = new StringBuilder("[");
for(String phone : phoneNums){
phoneNumberJson.append("\"");
phoneNumberJson.append(phone);
phoneNumberJson.append("\",");
signNameJson.append("\"");
signNameJson.append(signName);
signNameJson.append("\",");
templateParamJson.append("{\"company\":\"");
templateParamJson.append(getCompanyName(company));
templateParamJson.append("\"},");
}
//群发号码
phoneNumberJson.deleteCharAt(phoneNumberJson.length() - 1);
phoneNumberJson.append("]");
//群发签名
signNameJson.deleteCharAt(signNameJson.length() - 1);
signNameJson.append("]");
//群发内容
templateParamJson.deleteCharAt(templateParamJson.length() - 1);
templateParamJson.append("]");
sendSmsParam.setPhoneNumberJson(phoneNumberJson.toString());
sendSmsParam.setSignNameJson(signNameJson.toString());
sendSmsParam.setTemplateCode(templateCode);
sendSmsParam.setTemplateParamJson(templateParamJson.toString());
return sendSmsParam;
}
}
package com.zehong.monitorreprotdatafrogovernment.utils;
import com.zehong.monitorreprotdatafrogovernment.result.Result;
import com.zehong.monitorreprotdatafrogovernment.result.ResultEnum;
import org.apache.http.*;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class HttpUtil {
/**
* get请求
* @return
*/
public static Result doGet(String url) throws IOException {
HttpClient client = new DefaultHttpClient();
//发送get请求
HttpGet request = new HttpGet(url);
HttpResponse response = client.execute(request);
/**请求发送成功,并得到响应**/
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
/**读取服务器返回过来的json字符串数据**/
String strResult = EntityUtils.toString(response.getEntity());
return new Result(ResultEnum.SUCCESS.getCode(),strResult);
}
return new Result(ResultEnum.FAIL.getCode(),EntityUtils.toString(response.getEntity()));
}
/**
* post请求(用于key-value格式的参数)
* @param url
* @param params
* @return
*/
public static Result doPost(String url, Map params) throws IOException, URISyntaxException {
// 定义HttpClient
HttpClient client = new DefaultHttpClient();
// 实例化HTTP方法
HttpPost request = new HttpPost();
request.setURI(new URI(url));
//设置参数
List<NameValuePair> nvps = new ArrayList<>();
for (Iterator iter = params.keySet().iterator(); iter.hasNext();) {
String name = (String) iter.next();
String value = String.valueOf(params.get(name));
nvps.add(new BasicNameValuePair(name, value));
}
request.setEntity(new UrlEncodedFormEntity(nvps,HTTP.UTF_8));
HttpResponse response = client.execute(request);
int code = response.getStatusLine().getStatusCode();
BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity()
.getContent(),"utf-8"));
StringBuffer sb = new StringBuffer("");
String line = "";
String NL = System.getProperty("line.separator");
while ((line = in.readLine()) != null) {
sb.append(line + NL);
}
in.close();
//请求成功
if(code == 200){
return new Result(ResultEnum.SUCCESS.getCode(),sb.toString());
}
return new Result(ResultEnum.FAIL.getCode(),sb.toString());
}
/**
* post请求(用于请求json格式的参数)
* @param url
* @param params
* @return
*/
public static Result doPost(String url, String params) throws Exception {
CloseableHttpClient httpclient = HttpClients.createDefault();
// 创建httpPost
HttpPost httpPost = new HttpPost(url);
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-Type", "application/json");
String charSet = "UTF-8";
StringEntity entity = new StringEntity(params, charSet);
httpPost.setEntity(entity);
CloseableHttpResponse response = null;
try {
response = httpclient.execute(httpPost);
StatusLine status = response.getStatusLine();
int state = status.getStatusCode();
HttpEntity responseEntity = response.getEntity();
String jsonString = EntityUtils.toString(responseEntity);
if (state == HttpStatus.SC_OK) {
return new Result(ResultEnum.SUCCESS.getCode(),jsonString);
}
return new Result(ResultEnum.FAIL.getCode(),jsonString);
}finally {
if (response != null) {
response.close();
}
httpclient.close();
}
}
}
server:
port: 8802
spring:
datasource:
dynamic:
primary: db1 # 配置默认数据库
datasource:
db1: # 数据源1配置 敬业数据库
url: jdbc:mysql://92.168.1.232:3306/jingye?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8
username: windows
password: mysql@zehong.com
driver-class-name: com.mysql.cj.jdbc.Driver
db2: # 数据源2配置 盈得数据库
url: jdbc:mysql://localhost:3306/yingde?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8
username: root
password: mysql@zehong.com
driver-class-name: com.mysql.cj.jdbc.Driver
db3: # 数据源3配置 正元数据库
url: jdbc:mysql://localhost:3306/zhengyuan?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8
username: root
password: mysql@zehong.com
driver-class-name: com.mysql.cj.jdbc.Driver
durid:
initial-size: 1
max-active: 20
min-idle: 1
max-wait: 60000
autoconfigure:
exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 去除druid配置
mybatis:
type-aliases-package: com.zehong.monitorreprotdatafrogovernment.entity
mapper-locations: classpath*:mapper/**/*Mapper.xml
#定时检测时间
cron: 0/5 * * * * ?
#定时发送短信时间
sendSmsCron: 0 0/30 * * * ?
sendSmsUrl: http://192.168.2.23:8801/sms/sendBatchSms
#通知号码
secretKey: f225e66813e6d6a663daf919c1935dcb
phoneNums: 13930125936,13315145077
signName: 泽宏云
templateCode: SMS_221736528
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.zehong.monitorreprotdatafrogovernment.dao.JingyeDetectorInfoDao" >
<select id="getRecentSendData" resultType="com.zehong.monitorreprotdatafrogovernment.entity.DetectorInfo">
SELECT
id,
code,
time,
value,
type,
flag,
alarm_send,
realtime_send,
guid,
update_time
FROM
detector_info
WHERE realtime_send = '1'
ORDER BY update_time DESC
LIMIT 1
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.zehong.monitorreprotdatafrogovernment.dao.YingdeDetectorInfoDao" >
<select id="getRecentSendData" resultType="com.zehong.monitorreprotdatafrogovernment.entity.DetectorInfo">
SELECT
id,
code,
time,
value,
type,
flag,
alarm_send,
realtime_send,
guid,
update_time
FROM
detector_info
WHERE realtime_send = '1'
ORDER BY update_time DESC
LIMIT 1
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.zehong.monitorreprotdatafrogovernment.dao.ZhengyuanDetectorInfoDao" >
<select id="getRecentSendData" resultType="com.zehong.monitorreprotdatafrogovernment.entity.DetectorInfo">
SELECT
id,
code,
time,
value,
type,
flag,
alarm_send,
realtime_send,
guid,
update_time
FROM
detector_info
WHERE realtime_send = '1'
ORDER BY update_time DESC
LIMIT 1
</select>
</mapper>
\ No newline at end of file
package com.zehong.monitorreprotdatafrogovernment;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class MonitorReprotdataFrogovernmentApplicationTests {
@Test
void contextLoads() {
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment