Commit 716a211e 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.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.zehong</groupId>
<artifactId>communication</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>communication</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>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
<!--阿里云短信sdk-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.0.6</version> <!-- 注:如提示报错,先升级基础包版,无法解决可联系技术支持 -->
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.1.0</version>
</dependency>
<!--json转换-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
<!--log日志-->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!--commons-lang-->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<!--aop-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!--mybatis-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
package com.zehong.communication;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.zehong.communication.dao")
public class CommunicationApplication {
public static void main(String[] args) {
SpringApplication.run(CommunicationApplication.class, args);
}
}
package com.zehong.communication.common.interceptor;
import com.zehong.communication.common.result.Result;
import com.zehong.communication.common.result.ResultEnum;
import com.zehong.communication.util.IPUtils;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
@Order(0)
@Aspect
@Component
public class AopInterceptor {
private static final Logger logger = LoggerFactory.getLogger(AopInterceptor.class);
@Value("${iPWhite}")
private String iPWhite;
/**
* 定义拦截器规则
*/
@Pointcut("execution(* com.zehong.communication.controller.*.*(..))")
public void pointCut() {
}
/**
* 拦截器具体实现
*
* @throws Throwable
*/
@Around(value = "pointCut()")
public Object around(ProceedingJoinPoint point) throws Throwable {
try {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
//判断是否为黑名单用户
String ip = IPUtils.getIpAddress(request);
if (checkIpWhite(ip)) {
logger.info("当前请求ip:" + ip +",在白名单名单中");
return point.proceed();
} else {
//ip不在黑名单中返回true
logger.info( "当前请求ip:" + ip + ",不存在白名单中,拒绝访问");
return new Result(ResultEnum.NOT_IN_IPWHITE);
}
} catch (Exception e) {
logger.error("白名单拦截出错:"+e);
return new Result(ResultEnum.SYSTEM_EXCEPTION);
}
}
/**
* 对比白名单IP
* @param ip 请求ip
* @return
* @throws Exception
*/
public boolean checkIpWhite(String ip) throws Exception {
String[] ipWhites = iPWhite.split(",");
for(String whiteIp : ipWhites){
return whiteIp.equals(ip);
}
return false;
}
}
package com.zehong.communication.common.interceptor;
import com.alibaba.fastjson.JSONObject;
import com.zehong.communication.common.result.Result;
import com.zehong.communication.common.result.ResultEnum;
import com.zehong.communication.entity.RequestLog;
import com.zehong.communication.model.BaseRequestModel;
import com.zehong.communication.service.RequestLogService;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.UUID;
@Order(0)
@Aspect
@Component
public class LogInterceptor {
private static final Logger logger = LoggerFactory.getLogger(LogInterceptor.class);
@Autowired
private RequestLogService requestLogService;
@Value("${secretKey}")
private String secretKey;
/**
* 定义拦截器规则
*/
@Pointcut("execution(* com.zehong.communication.controller.*.*(..))")
public void pointCut() {
}
/**
* 拦截器具体实现
*
*/
@Around(value = "pointCut()")
public Object around(ProceedingJoinPoint point){
// 获取方法参数
Object[] pointParams = point.getArgs();
String params = Arrays.toString(pointParams);
try{
for(Object pointParam : pointParams){
if(pointParam instanceof BaseRequestModel){
String secretKey = ((BaseRequestModel) pointParam).getSecretKey();
if(!this.secretKey.equals(secretKey)){
return new Result(ResultEnum.SECRETKRY_ERROR);
}
}
}
Object result = point.proceed();
insertRequestLogRecord(params,JSONObject.toJSONString(result));
return result;
}catch (Throwable e){
logger.error("日志拦截出错:"+e);
insertRequestLogRecord(params,e.getMessage());
return new Result(ResultEnum.SYSTEM_EXCEPTION);
}
}
/**
* 记录请求日志
* @param params 请求参数
* @param result 请求结果
*/
private void insertRequestLogRecord(String params,String result){
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
request.getParameter("secretKey");
RequestLog requestLog = new RequestLog();
requestLog.setId(UUID.randomUUID().toString().replaceAll("-",""));
requestLog.setRequestMapping(request.getRequestURL().toString());
requestLog.setParams(params);
requestLog.setSecretKey(secretKey);
requestLog.setPostTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
requestLog.setResult(JSONObject.toJSONString(result));
requestLogService.insert(requestLog);
}
}
package com.zehong.communication.common.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.communication.common.result;
public enum ResultEnum {
/**
* 请求成功
*/
SUCCESS("0","接口请求成功!"),BUSSINESS_FAIL("1","业务异常!"),FAIL("2","接口请求失败!"),SYSTEM_EXCEPTION("3","系统异常!")
,NOT_IN_IPWHITE("4","当前IP不在白名单中,请联系管理员"),SECRETKRY_ERROR("5","secretKey不存在或秘钥不正确!");
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.communication.controller;
import com.aliyuncs.exceptions.ClientException;
import com.zehong.communication.common.result.Result;
import com.zehong.communication.common.result.ResultEnum;
import com.zehong.communication.model.SendBatchSms;
import com.zehong.communication.model.SendSms;
import com.zehong.communication.service.SmsService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.PropertySource;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
/**
* 发送短信
* @author gengdidi
*/
@RestController
@RequestMapping("/sms")
@PropertySource(value= "classpath:application.yml",encoding = "UTF-8")
public class SmsController {
private static final Logger logger = LoggerFactory.getLogger(SmsController.class);
@Autowired
private SmsService smsService;
/**
* 短信发送
* @param sendSms 短信实体
* @return Result
*/
@RequestMapping(value="/sendSms",method = RequestMethod.GET)
public Result sendSms(@RequestBody SendSms sendSms){
try {
return smsService.sendSms(sendSms.getPhoneNumber());
} catch (ClientException e) {
logger.info("短信发送失败,phoneNumber:%",sendSms.getPhoneNumber(),e);
return new Result(ResultEnum.SYSTEM_EXCEPTION);
}
}
/**
* 群发短信
* @param sendBatchSms 群发短信实体
* @return Result
*/
@RequestMapping(value="/sendBatchSms",method = RequestMethod.POST)
public Result sendBatchSms(@RequestBody SendBatchSms sendBatchSms){
try {
return smsService.sendBatchSms(sendBatchSms.getPhoneNumbers());
} catch (ClientException e) {
logger.info("批量发送短信失败,phoneNumbers:%",sendBatchSms.getPhoneNumbers(),e);
return new Result(ResultEnum.SYSTEM_EXCEPTION);
}
}
}
package com.zehong.communication.controller;
import com.zehong.communication.common.result.Result;
import com.zehong.communication.common.result.ResultEnum;
import com.zehong.communication.model.SendBatchVoiceNotify;
import com.zehong.communication.model.SendVoiceNotify;
import com.zehong.communication.service.VoiceNotifyService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.net.URISyntaxException;
/**
*发送语音
* @author gengdidi
*/
@RestController
@RequestMapping("/voiceNotify")
public class VoiceNotifyController {
private static final Logger logger = LoggerFactory.getLogger(VoiceNotifyController.class);
@Autowired
private VoiceNotifyService voiceNotifyService;
/**
* 发送语音 被叫号码,限单个,仅支持11位国内号码
* @param sendVoiceNotify 发送语音实体
* @return String
*/
@RequestMapping(value = "/sendVoiceNotify",method = RequestMethod.GET)
public Result sendVoiceNotify(@RequestBody SendVoiceNotify sendVoiceNotify){
try {
return voiceNotifyService.sendVoiceNotify(sendVoiceNotify.getPhoneNumber());
} catch (IOException | URISyntaxException e) {
logger.info("语音发送失败!phoneNumber:%",sendVoiceNotify.getPhoneNumber(),e);
return new Result(ResultEnum.SYSTEM_EXCEPTION);
}
}
/**
*批量发送语音 被叫号码,模版无变量多个则以英文半角分号“;”分割;模板带变量,多个号码以英文分号“;”分割,号码和变量以英文逗号“,”隔开, 多个变量以竖线“|”隔开,如 130XXXXXXXX,123|456;186XXXXXXXX,321|654(注意:文件语音模板类型 号码之间分隔用“,”隔开)
* @param sendBatchVoiceNotify 批量发送语音实体
* @return String
*/
@RequestMapping(value = "/sendBatchVoiceNotify",method = RequestMethod.GET)
public Result sendBatchVoiceNotify(@RequestBody SendBatchVoiceNotify sendBatchVoiceNotify){
try {
return voiceNotifyService.sendBatchVoiceNotify(sendBatchVoiceNotify.getPhoneNumbers());
} catch (IOException | URISyntaxException e) {
logger.info("群发语音失败!phoneNumbers:%",sendBatchVoiceNotify.getPhoneNumbers(),e);
return new Result(ResultEnum.SYSTEM_EXCEPTION);
}
}
}
package com.zehong.communication.dao;
import com.zehong.communication.entity.RequestLog;
import com.zehong.communication.entity.RequestLogExample;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface RequestLogMapper {
int countByExample(RequestLogExample example);
int deleteByExample(RequestLogExample example);
int deleteByPrimaryKey(String id);
int insert(RequestLog record);
int insertSelective(RequestLog record);
List<RequestLog> selectByExample(RequestLogExample example);
RequestLog selectByPrimaryKey(String id);
int updateByExampleSelective(@Param("record") RequestLog record, @Param("example") RequestLogExample example);
int updateByExample(@Param("record") RequestLog record, @Param("example") RequestLogExample example);
int updateByPrimaryKeySelective(RequestLog record);
int updateByPrimaryKey(RequestLog record);
}
\ No newline at end of file
package com.zehong.communication.entity;
import java.io.Serializable;
public class RequestLog implements Serializable {
private String id;
private String secretKey;
private String requestMapping;
private String params;
private String postTime;
private String result;
private static final long serialVersionUID = 1L;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id == null ? null : id.trim();
}
public String getSecretKey() {
return secretKey;
}
public void setSecretKey(String secretKey) {
this.secretKey = secretKey == null ? null : secretKey.trim();
}
public String getRequestMapping() {
return requestMapping;
}
public void setRequestMapping(String requestMapping) {
this.requestMapping = requestMapping == null ? null : requestMapping.trim();
}
public String getParams() {
return params;
}
public void setParams(String params) {
this.params = params == null ? null : params.trim();
}
public String getPostTime() {
return postTime;
}
public void setPostTime(String postTime) {
this.postTime = postTime == null ? null : postTime.trim();
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result == null ? null : result.trim();
}
}
\ No newline at end of file
package com.zehong.communication.model;
import lombok.Data;
import java.io.Serializable;
@Data
public class BaseRequestModel implements Serializable{
private String secretKey;
}
package com.zehong.communication.model;
import lombok.Data;
@Data
public class SendBatchSms extends BaseRequestModel{
private String[] phoneNumbers;
}
package com.zehong.communication.model;
import lombok.Data;
@Data
public class SendBatchVoiceNotify extends BaseRequestModel {
private String phoneNumbers;
}
package com.zehong.communication.model;
import lombok.Data;
@Data
public class SendSms extends BaseRequestModel {
private String phoneNumber;
}
package com.zehong.communication.model;
import lombok.Data;
@Data
public class SendVoiceNotify extends BaseRequestModel {
private String phoneNumber;
}
package com.zehong.communication.service;
import com.zehong.communication.entity.RequestLog;
import com.zehong.communication.entity.RequestLogExample;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface RequestLogService {
int countByExample(RequestLogExample example);
int deleteByExample(RequestLogExample example);
int deleteByPrimaryKey(String id);
int insert(RequestLog record);
int insertSelective(RequestLog record);
List<RequestLog> selectByExample(RequestLogExample example);
RequestLog selectByPrimaryKey(String id);
int updateByExampleSelective(@Param("record") RequestLog record, @Param("example") RequestLogExample example);
int updateByExample(@Param("record") RequestLog record, @Param("example") RequestLogExample example);
int updateByPrimaryKeySelective(RequestLog record);
int updateByPrimaryKey(RequestLog record);
}
package com.zehong.communication.service;
import com.aliyuncs.exceptions.ClientException;
import com.zehong.communication.common.result.Result;
public interface SmsService {
Result sendSms(String phoneNumber) throws ClientException;
Result sendBatchSms(String[] phoneNumbers) throws ClientException;
}
package com.zehong.communication.service;
import com.zehong.communication.common.result.Result;
import java.io.IOException;
import java.net.URISyntaxException;
public interface VoiceNotifyService {
/**
* 发送语音 被叫号码,限单个,仅支持11位国内号码
* @param phoneNumber 手机号
* @return String
*/
Result sendVoiceNotify(String phoneNumber) throws IOException, URISyntaxException;
/**
*批量发送语音 被叫号码,模版无变量多个则以英文半角分号“;”分割;模板带变量,多个号码以英文分号“;”分割,号码和变量以英文逗号“,”隔开, 多个变量以竖线“|”隔开,如 130XXXXXXXX,123|456;186XXXXXXXX,321|654(注意:文件语音模板类型 号码之间分隔用“,”隔开)
* @param phoneNumbers 手机号
* @return String
*/
Result sendBatchVoiceNotify(String phoneNumbers) throws IOException, URISyntaxException;
}
package com.zehong.communication.service.impl;
import com.zehong.communication.dao.RequestLogMapper;
import com.zehong.communication.entity.RequestLog;
import com.zehong.communication.entity.RequestLogExample;
import com.zehong.communication.service.RequestLogService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class RequestLogServiceImpl implements RequestLogService {
@Resource
private RequestLogMapper requestLogMapper;
@Override
public int countByExample(RequestLogExample example) {
return requestLogMapper.countByExample(example);
}
@Override
public int deleteByExample(RequestLogExample example) {
return requestLogMapper.deleteByExample(example);
}
@Override
public int deleteByPrimaryKey(String id) {
return requestLogMapper.deleteByPrimaryKey(id);
}
@Override
public int insert(RequestLog record) {
return requestLogMapper.insert(record);
}
@Override
public int insertSelective(RequestLog record) {
return requestLogMapper.insertSelective(record);
}
@Override
public List<RequestLog> selectByExample(RequestLogExample example) {
return requestLogMapper.selectByExample(example);
}
@Override
public RequestLog selectByPrimaryKey(String id) {
return requestLogMapper.selectByPrimaryKey(id);
}
@Override
public int updateByExampleSelective(RequestLog record, RequestLogExample example) {
return requestLogMapper.updateByExampleSelective(record, example);
}
@Override
public int updateByExample(RequestLog record, RequestLogExample example) {
return requestLogMapper.updateByExample(record,example);
}
@Override
public int updateByPrimaryKeySelective(RequestLog record) {
return requestLogMapper.updateByPrimaryKeySelective(record);
}
@Override
public int updateByPrimaryKey(RequestLog record) {
return requestLogMapper.updateByPrimaryKey(record);
}
}
package com.zehong.communication.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendBatchSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendBatchSmsResponse;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import com.zehong.communication.common.result.Result;
import com.zehong.communication.common.result.ResultEnum;
import com.zehong.communication.service.SmsService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.Arrays;
@Service
public class SmsServiceImpl implements SmsService {
@Value("${accessKeyId}")
private String accessKeyId;
@Value("${accessKeySecret}")
private String accessKeySecret;
@Value("${signName}")
private String signName;
@Value("${templateCode}")
private String templateCode;
@Value("${signNameJson}")
private String SignNameJson;
/**
* 短信API产品名称(短信产品名固定,无需修改)
*/
private final String PRODUCT = "Dysmsapi";
/**
* 短信API产品域名(接口地址固定,无需修改)
*/
private final String DOMAIN = "dysmsapi.aliyuncs.com";
@Override
public Result sendSms(String phoneNumber) throws ClientException {
//设置超时时间-可自行调整
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
//初始化ascClient需要的几个参数
//初始化ascClient,暂时不支持多region(请勿修改)
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId,
accessKeySecret);
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", PRODUCT, DOMAIN);
IAcsClient acsClient = new DefaultAcsClient(profile);
SendSmsRequest request = getSmsRequest();
//必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式;发送国际/港澳台消息时,接收号码格式为国际区号+号码,如“85200000000”
request.setPhoneNumbers(phoneNumber);
//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
//友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败
//参考:request.setTemplateParam("{\"变量1\":\"值1\",\"变量2\":\"值2\",\"变量3\":\"值3\"}")
request.setTemplateParam("{\"cphone\":\""+phoneNumber+"\"}");
//请求失败这里会抛ClientException异常
SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
if(sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
//请求成功
return new Result(ResultEnum.SUCCESS.getCode(),sendSmsResponse.getMessage());
}
return new Result(ResultEnum.FAIL.getCode(),sendSmsResponse.getMessage());
}
@Override
public Result sendBatchSms(String[] phoneNumbers) throws ClientException {
//设置超时时间-可自行调整
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
//初始化ascClient,暂时不支持多region(请勿修改)
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId,
accessKeySecret);
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", PRODUCT, DOMAIN);
IAcsClient acsClient = new DefaultAcsClient(profile);
//组装请求对象
SendBatchSmsRequest request = new SendBatchSmsRequest();
//使用post提交
request.setMethod(MethodType.POST);
//必填:待发送手机号。支持JSON格式的批量调用,批量上限为100个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
//"[\"1500000000\",\"1500000001\"]"
request.setPhoneNumberJson(new JSONArray(Arrays.asList(phoneNumbers)).toJSONString());
//必填:短信签名-支持不同的号码发送不同的短信签名
request.setSignNameJson(SignNameJson);
//必填:短信模板-可在短信控制台中找到
request.setTemplateCode(templateCode);
//必填:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
//友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败
request.setTemplateParamJson(getTemplateParamJson(phoneNumbers));
//可选-上行短信扩展码(扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段)
//request.setSmsUpExtendCodeJson("[\"90997\",\"90998\"]");
//请求失败这里会抛ClientException异常
SendBatchSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
if(sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
//请求成功
return new Result(ResultEnum.SUCCESS.getCode(),sendSmsResponse.getMessage());
}
return new Result(ResultEnum.FAIL.getCode(),sendSmsResponse.getMessage());
}
private SendSmsRequest getSmsRequest(){
//组装请求对象
SendSmsRequest request = new SendSmsRequest();
//使用post提交
request.setMethod(MethodType.POST);
//必填:短信签名-可在短信控制台中找到
request.setSignName(signName);
//必填:短信模板-可在短信控制台中找到,发送国际/港澳台消息时,请使用国际/港澳台短信模版
request.setTemplateCode(templateCode);
//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
request.setOutId("yourOutId");
return request;
}
private String getTemplateParamJson(String[] phoneNumbers){
StringBuilder templateParamJson = new StringBuilder("[");
for(String phoneNumber : phoneNumbers){
templateParamJson.append("{\"cphone\":\"");
templateParamJson.append(phoneNumber);
templateParamJson.append("\"}");
}
templateParamJson.append("]");
return templateParamJson.toString();
}
}
package com.zehong.communication.service.impl;
import com.zehong.communication.common.result.Result;
import com.zehong.communication.service.VoiceNotifyService;
import com.zehong.communication.util.HttpUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.Map;
@Service
public class VoiceNotifyServiceImpl implements VoiceNotifyService {
@Value("${voiceNotifyURL}")
private String voiceNotifyURL;
@Value("${appId}")
private String appId;
@Value("${appKey}")
private String appKey;
@Value("${templateId}")
private String templateId;
@Value("${batchVoiceNotifyURL}")
private String batchVoiceNotifyURL;
@Override
public Result sendVoiceNotify(String phoneNumber) throws IOException, URISyntaxException {
Map<String,Object> params = getParams();
params.put("mobile",phoneNumber);
return HttpUtil.doPost(voiceNotifyURL,params);
}
@Override
public Result sendBatchVoiceNotify(String phoneNumbers) throws IOException, URISyntaxException {
Map<String,Object> params = getParams();
params.put("mobile",phoneNumbers);
return HttpUtil.doPost(batchVoiceNotifyURL,params);
}
private Map<String,Object> getParams(){
Map<String,Object> params = new HashMap<>();
params.put("appId",appId);
params.put("appKey",appKey);
params.put("templateId",templateId);
params.put("param","2222,某某街道,报警器报警(手机号后四位,地址,原因");
return params;
}
}
package com.zehong.communication.util;
import com.zehong.communication.common.result.Result;
import com.zehong.communication.common.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) {
try {
response.close();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
httpclient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
package com.zehong.communication.util;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
public class IPUtils {
public final static String getIpAddress(HttpServletRequest request)
throws IOException {
// 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
if (ip == null || ip.length() == 0
|| "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0
|| "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0
|| "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (ip == null || ip.length() == 0
|| "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0
|| "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
} else if (ip.length() > 15) {
String[] ips = ip.split(",");
for (int index = 0; index < ips.length; index++) {
String strIp = (String) ips[index];
if (!("unknown".equalsIgnoreCase(strIp))) {
ip = strIp;
break;
}
}
}
return ip;
}
}
package com.zehong.communication.util;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;
public class MD5Utils {
/**
* f225e66813e6d6a663daf919c1935dcb md5
*/
static final String TARGET = "zehongcommunicationservice";
/**
* 不可逆算法 MD5
* @param target 目标字符串
* @return
*/
public static String Md5(String target){
return DigestUtils.md5Hex(target);
}
/**
* 不可逆算法 SHA1
* @param target 目标字符串
* @param type 加密算法
* @return String
*/
public static String sha1(String target,String type){
switch (type){
case "shaHex" :
return DigestUtils.shaHex(target);
case "sha256Hex" :
return DigestUtils.sha256Hex(target);
case "sha384Hex" :
return DigestUtils.sha384Hex(target);
case "sha512Hex":
return DigestUtils.sha512Hex(target);
default:
return null;
}
}
/**
* 可逆算法 BASE64加密算法
* @param target 目标字符串
* @return String
*/
public static String encodeBase64(String target){
//加密
byte[] b = Base64.encodeBase64(target.getBytes(), true);
return new String(b);
}
/**
* 可逆算法 BASE64解密算法
* @param target 目标字符串
* @return String
*/
public static String decodeBase64(String target){
//解密
byte[] b1 = Base64.decodeBase64(target);
return new String(b1);
}
}
# 开发环境配置
server:
# 服务器的HTTP端口,默认为8080
port: 8080
servlet:
# 应用的访问路径
context-path: /
tomcat:
# tomcat的URI编码
uri-encoding: UTF-8
# tomcat最大线程数,默认为200
max-threads: 800
# Tomcat启动初始化的线程数,默认值25
min-spare-threads: 30
# 数据源配置
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://36.148.23.59:3306/communication?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: root@123
mybatis:
type-aliases-package: com.zehong.communication.entity
mapper-locations: classpath*:mapper/**/*Mapper.xml
#语音通知接口
voiceNotifyURL: https://api.253.com/open/notify/voice-notify
appId: N69N0WkT
appKey: IE5F7Jih
templateId: 4371
#批量发送语音
batchVoiceNotifyURL: https://api.253.com/open/notify/batch-voice-notify
#阿里云发送短信
accessKeyId: LTAI2xiZNF3iV2aV
accessKeySecret: bprEWwn1M0xgglRQCQEMYSPiYctDk4
signName: 泽宏云
templateCode: SMS_162524468
#阿里批量发送短信
signNameJson: [\"泽宏云\"]
#ip白名单
iPWhite: 192.168.2.23
#秘钥
secretKey: f225e66813e6d6a663daf919c1935dcb
\ 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.communication.dao.RequestLogMapper" >
<resultMap id="BaseResultMap" type="com.zehong.communication.entity.RequestLog" >
<id column="id" property="id" jdbcType="CHAR" />
<result column="secret_key" property="secretKey" jdbcType="CHAR" />
<result column="request_mapping" property="requestMapping" jdbcType="VARCHAR" />
<result column="params" property="params" jdbcType="CHAR" />
<result column="post_time" property="postTime" jdbcType="CHAR" />
<result column="result" property="result" jdbcType="CHAR" />
</resultMap>
<sql id="Example_Where_Clause" >
<where >
<foreach collection="oredCriteria" item="criteria" separator="or" >
<if test="criteria.valid" >
<trim prefix="(" suffix=")" prefixOverrides="and" >
<foreach collection="criteria.criteria" item="criterion" >
<choose >
<when test="criterion.noValue" >
and ${criterion.condition}
</when>
<when test="criterion.singleValue" >
and ${criterion.condition} #{criterion.value}
</when>
<when test="criterion.betweenValue" >
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
</when>
<when test="criterion.listValue" >
and ${criterion.condition}
<foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</where>
</sql>
<sql id="Update_By_Example_Where_Clause" >
<where >
<foreach collection="example.oredCriteria" item="criteria" separator="or" >
<if test="criteria.valid" >
<trim prefix="(" suffix=")" prefixOverrides="and" >
<foreach collection="criteria.criteria" item="criterion" >
<choose >
<when test="criterion.noValue" >
and ${criterion.condition}
</when>
<when test="criterion.singleValue" >
and ${criterion.condition} #{criterion.value}
</when>
<when test="criterion.betweenValue" >
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
</when>
<when test="criterion.listValue" >
and ${criterion.condition}
<foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</where>
</sql>
<sql id="Base_Column_List" >
id, secret_key, request_mapping, params, post_time, result
</sql>
<select id="selectByExample" resultMap="BaseResultMap" parameterType="com.zehong.communication.entity.RequestLogExample" >
select
<if test="distinct" >
distinct
</if>
<include refid="Base_Column_List" />
from request_log
<if test="_parameter != null" >
<include refid="Example_Where_Clause" />
</if>
<if test="orderByClause != null" >
order by ${orderByClause}
</if>
</select>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" >
select
<include refid="Base_Column_List" />
from request_log
where id = #{id,jdbcType=CHAR}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.String" >
delete from request_log
where id = #{id,jdbcType=CHAR}
</delete>
<delete id="deleteByExample" parameterType="com.zehong.communication.entity.RequestLogExample" >
delete from request_log
<if test="_parameter != null" >
<include refid="Example_Where_Clause" />
</if>
</delete>
<insert id="insert" parameterType="com.zehong.communication.entity.RequestLog" >
insert into request_log (id, secret_key, request_mapping,
params, post_time, result)
values (#{id,jdbcType=CHAR}, #{secretKey,jdbcType=CHAR}, #{requestMapping,jdbcType=VARCHAR},
#{params,jdbcType=CHAR}, #{postTime,jdbcType=CHAR}, #{result,jdbcType=CHAR})
</insert>
<insert id="insertSelective" parameterType="com.zehong.communication.entity.RequestLog" >
insert into request_log
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="id != null" >
id,
</if>
<if test="secretKey != null" >
secret_key,
</if>
<if test="requestMapping != null" >
request_mapping,
</if>
<if test="params != null" >
params,
</if>
<if test="postTime != null" >
post_time,
</if>
<if test="result != null" >
result,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides="," >
<if test="id != null" >
#{id,jdbcType=CHAR},
</if>
<if test="secretKey != null" >
#{secretKey,jdbcType=CHAR},
</if>
<if test="requestMapping != null" >
#{requestMapping,jdbcType=VARCHAR},
</if>
<if test="params != null" >
#{params,jdbcType=CHAR},
</if>
<if test="postTime != null" >
#{postTime,jdbcType=CHAR},
</if>
<if test="result != null" >
#{result,jdbcType=CHAR},
</if>
</trim>
</insert>
<select id="countByExample" parameterType="com.zehong.communication.entity.RequestLogExample" resultType="java.lang.Integer" >
select count(*) from request_log
<if test="_parameter != null" >
<include refid="Example_Where_Clause" />
</if>
</select>
<update id="updateByExampleSelective" parameterType="map" >
update request_log
<set >
<if test="record.id != null" >
id = #{record.id,jdbcType=CHAR},
</if>
<if test="record.secretKey != null" >
secret_key = #{record.secretKey,jdbcType=CHAR},
</if>
<if test="record.requestMapping != null" >
request_mapping = #{record.requestMapping,jdbcType=VARCHAR},
</if>
<if test="record.params != null" >
params = #{record.params,jdbcType=CHAR},
</if>
<if test="record.postTime != null" >
post_time = #{record.postTime,jdbcType=CHAR},
</if>
<if test="record.result != null" >
result = #{record.result,jdbcType=CHAR},
</if>
</set>
<if test="_parameter != null" >
<include refid="Update_By_Example_Where_Clause" />
</if>
</update>
<update id="updateByExample" parameterType="map" >
update request_log
set id = #{record.id,jdbcType=CHAR},
secret_key = #{record.secretKey,jdbcType=CHAR},
request_mapping = #{record.requestMapping,jdbcType=VARCHAR},
params = #{record.params,jdbcType=CHAR},
post_time = #{record.postTime,jdbcType=CHAR},
result = #{record.result,jdbcType=CHAR}
<if test="_parameter != null" >
<include refid="Update_By_Example_Where_Clause" />
</if>
</update>
<update id="updateByPrimaryKeySelective" parameterType="com.zehong.communication.entity.RequestLog" >
update request_log
<set >
<if test="secretKey != null" >
secret_key = #{secretKey,jdbcType=CHAR},
</if>
<if test="requestMapping != null" >
request_mapping = #{requestMapping,jdbcType=VARCHAR},
</if>
<if test="params != null" >
params = #{params,jdbcType=CHAR},
</if>
<if test="postTime != null" >
post_time = #{postTime,jdbcType=CHAR},
</if>
<if test="result != null" >
result = #{result,jdbcType=CHAR},
</if>
</set>
where id = #{id,jdbcType=CHAR}
</update>
<update id="updateByPrimaryKey" parameterType="com.zehong.communication.entity.RequestLog" >
update request_log
set secret_key = #{secretKey,jdbcType=CHAR},
request_mapping = #{requestMapping,jdbcType=VARCHAR},
params = #{params,jdbcType=CHAR},
post_time = #{postTime,jdbcType=CHAR},
result = #{result,jdbcType=CHAR}
where id = #{id,jdbcType=CHAR}
</update>
</mapper>
\ No newline at end of file
package com.zehong.communication;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class CommunicationApplicationTests {
@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