Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
push-message
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
liucheng
push-message
Commits
2e392e32
Commit
2e392e32
authored
Oct 26, 2020
by
lc@weface.com.cn
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Initial commit
parents
Changes
25
Hide whitespace changes
Inline
Side-by-side
Showing
25 changed files
with
1506 additions
and
0 deletions
+1506
-0
.gitignore
.gitignore
+33
-0
MavenWrapperDownloader.java
.mvn/wrapper/MavenWrapperDownloader.java
+118
-0
maven-wrapper.jar
.mvn/wrapper/maven-wrapper.jar
+0
-0
maven-wrapper.properties
.mvn/wrapper/maven-wrapper.properties
+2
-0
mvnw
mvnw
+322
-0
mvnw.cmd
mvnw.cmd
+182
-0
pom.xml
pom.xml
+110
-0
PushMessageApplication.java
src/main/java/com/weface/PushMessageApplication.java
+15
-0
CommonResult.java
src/main/java/com/weface/code/CommonResult.java
+111
-0
IErrorCode.java
src/main/java/com/weface/code/IErrorCode.java
+11
-0
ResultCode.java
src/main/java/com/weface/code/ResultCode.java
+24
-0
GeTuiPush.java
src/main/java/com/weface/component/GeTuiPush.java
+188
-0
GeTuiSDK.java
src/main/java/com/weface/component/GeTuiSDK.java
+191
-0
APPConfig.java
src/main/java/com/weface/config/APPConfig.java
+5
-0
ExecutorConfig.java
src/main/java/com/weface/config/ExecutorConfig.java
+34
-0
PushController.java
src/main/java/com/weface/controller/PushController.java
+29
-0
MsgDTO.java
src/main/java/com/weface/dto/MsgDTO.java
+11
-0
PushDTO.java
src/main/java/com/weface/dto/PushDTO.java
+9
-0
AsyncService.java
src/main/java/com/weface/service/AsyncService.java
+12
-0
PushService.java
src/main/java/com/weface/service/PushService.java
+12
-0
AsyncServiceImpl.java
src/main/java/com/weface/serviceimpl/AsyncServiceImpl.java
+32
-0
PushServiceImpl.java
src/main/java/com/weface/serviceimpl/PushServiceImpl.java
+29
-0
Dockerfile
src/main/java/docker/Dockerfile
+2
-0
application.yml
src/main/resources/application.yml
+11
-0
PushMessageApplicationTests.java
src/test/java/com/weface/PushMessageApplicationTests.java
+13
-0
No files found.
.gitignore
0 → 100644
View file @
2e392e32
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/
.mvn/wrapper/MavenWrapperDownloader.java
0 → 100644
View file @
2e392e32
/*
* 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
();
}
}
.mvn/wrapper/maven-wrapper.jar
0 → 100644
View file @
2e392e32
File added
.mvn/wrapper/maven-wrapper.properties
0 → 100644
View file @
2e392e32
distributionUrl
=
https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
wrapperUrl
=
https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
mvnw
0 → 100644
View file @
2e392e32
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Maven Start Up Batch script
#
# Required ENV vars:
# ------------------
# JAVA_HOME - location of a JDK home dir
#
# Optional ENV vars
# -----------------
# M2_HOME - location of maven2's installed home dir
# MAVEN_OPTS - parameters passed to the Java VM when running Maven
# e.g. to debug Maven itself, use
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
# ----------------------------------------------------------------------------
if
[
-z
"
$MAVEN_SKIP_RC
"
]
;
then
if
[
-f
/etc/mavenrc
]
;
then
.
/etc/mavenrc
fi
if
[
-f
"
$HOME
/.mavenrc"
]
;
then
.
"
$HOME
/.mavenrc"
fi
fi
# OS specific support. $var _must_ be set to either true or false.
cygwin
=
false
darwin
=
false
mingw
=
false
case
"
$(
uname
)
"
in
CYGWIN
*
)
cygwin
=
true
;;
MINGW
*
)
mingw
=
true
;;
Darwin
*
)
darwin
=
true
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html
if
[
-z
"
$JAVA_HOME
"
]
;
then
if
[
-x
"/usr/libexec/java_home"
]
;
then
export
JAVA_HOME
=
"
$(
/usr/libexec/java_home
)
"
else
export
JAVA_HOME
=
"/Library/Java/Home"
fi
fi
;;
esac
if
[
-z
"
$JAVA_HOME
"
]
;
then
if
[
-r
/etc/gentoo-release
]
;
then
JAVA_HOME
=
$(
java-config
--jre-home
)
fi
fi
if
[
-z
"
$M2_HOME
"
]
;
then
## resolve links - $0 may be a link to maven's home
PRG
=
"
$0
"
# need this for relative symlinks
while
[
-h
"
$PRG
"
]
;
do
ls
=
$(
ls
-ld
"
$PRG
"
)
link
=
$(
expr
"
$ls
"
:
'.*-> \(.*\)$'
)
if
expr
"
$link
"
:
'/.*'
>
/dev/null
;
then
PRG
=
"
$link
"
else
PRG
=
"
$(
dirname
"
$PRG
"
)
/
$link
"
fi
done
saveddir
=
$(
pwd
)
M2_HOME
=
$(
dirname
"
$PRG
"
)
/..
# make it fully qualified
M2_HOME
=
$(
cd
"
$M2_HOME
"
&&
pwd
)
cd
"
$saveddir
"
# echo Using m2 at $M2_HOME
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if
$cygwin
;
then
[
-n
"
$M2_HOME
"
]
&&
M2_HOME
=
$(
cygpath
--unix
"
$M2_HOME
"
)
[
-n
"
$JAVA_HOME
"
]
&&
JAVA_HOME
=
$(
cygpath
--unix
"
$JAVA_HOME
"
)
[
-n
"
$CLASSPATH
"
]
&&
CLASSPATH
=
$(
cygpath
--path
--unix
"
$CLASSPATH
"
)
fi
# For Mingw, ensure paths are in UNIX format before anything is touched
if
$mingw
;
then
[
-n
"
$M2_HOME
"
]
&&
M2_HOME
=
"
$(
(
cd
"
$M2_HOME
"
pwd
)
)"
[
-n
"
$JAVA_HOME
"
]
&&
JAVA_HOME
=
"
$(
(
cd
"
$JAVA_HOME
"
pwd
)
)"
fi
if
[
-z
"
$JAVA_HOME
"
]
;
then
javaExecutable
=
"
$(
which javac
)
"
if
[
-n
"
$javaExecutable
"
]
&&
!
[
"
$(
expr
\"
$javaExecutable
\"
:
'\([^ ]*\)'
)
"
=
"no"
]
;
then
# readlink(1) is not available as standard on Solaris 10.
readLink
=
$(
which
readlink
)
if
[
!
$(
expr
"
$readLink
"
:
'\([^ ]*\)'
)
=
"no"
]
;
then
if
$darwin
;
then
javaHome
=
"
$(
dirname
\"
$javaExecutable
\"
)
"
javaExecutable
=
"
$(
cd
\"
$javaHome
\"
&&
pwd
-P
)
/javac"
else
javaExecutable
=
"
$(
readlink
-f
\"
$javaExecutable
\"
)
"
fi
javaHome
=
"
$(
dirname
\"
$javaExecutable
\"
)
"
javaHome
=
$(
expr
"
$javaHome
"
:
'\(.*\)/bin'
)
JAVA_HOME
=
"
$javaHome
"
export
JAVA_HOME
fi
fi
fi
if
[
-z
"
$JAVACMD
"
]
;
then
if
[
-n
"
$JAVA_HOME
"
]
;
then
if
[
-x
"
$JAVA_HOME
/jre/sh/java"
]
;
then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD
=
"
$JAVA_HOME
/jre/sh/java"
else
JAVACMD
=
"
$JAVA_HOME
/bin/java"
fi
else
JAVACMD
=
"
$(
which java
)
"
fi
fi
if
[
!
-x
"
$JAVACMD
"
]
;
then
echo
"Error: JAVA_HOME is not defined correctly."
>
&2
echo
" We cannot execute
$JAVACMD
"
>
&2
exit
1
fi
if
[
-z
"
$JAVA_HOME
"
]
;
then
echo
"Warning: JAVA_HOME environment variable is not set."
fi
CLASSWORLDS_LAUNCHER
=
org.codehaus.plexus.classworlds.launcher.Launcher
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir
()
{
if
[
-z
"
$1
"
]
;
then
echo
"Path not specified to find_maven_basedir"
return
1
fi
basedir
=
"
$1
"
wdir
=
"
$1
"
while
[
"
$wdir
"
!=
'/'
]
;
do
if
[
-d
"
$wdir
"
/.mvn
]
;
then
basedir
=
$wdir
break
fi
# workaround for JBEAP-8937 (on Solaris 10/Sparc)
if
[
-d
"
${
wdir
}
"
]
;
then
wdir
=
$(
cd
"
$wdir
/.."
pwd
)
fi
# end of workaround
done
echo
"
${
basedir
}
"
}
# concatenates all lines of a file
concat_lines
()
{
if
[
-f
"
$1
"
]
;
then
echo
"
$(
tr
-s
'\n'
' '
<
"
$1
"
)
"
fi
}
BASE_DIR
=
$(
find_maven_basedir
"
$(
pwd
)
"
)
if
[
-z
"
$BASE_DIR
"
]
;
then
exit
1
fi
##########################################################################################
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
# This allows using the maven wrapper in projects that prohibit checking in binary data.
##########################################################################################
if
[
-r
"
$BASE_DIR
/.mvn/wrapper/maven-wrapper.jar"
]
;
then
if
[
"
$MVNW_VERBOSE
"
=
true
]
;
then
echo
"Found .mvn/wrapper/maven-wrapper.jar"
fi
else
if
[
"
$MVNW_VERBOSE
"
=
true
]
;
then
echo
"Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
fi
if
[
-n
"
$MVNW_REPOURL
"
]
;
then
jarUrl
=
"
$MVNW_REPOURL
/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
else
jarUrl
=
"https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
fi
while
IFS
=
"="
read
key value
;
do
case
"
$key
"
in
wrapperUrl
)
jarUrl
=
"
$value
"
break
;;
esac
done
<
"
$BASE_DIR
/.mvn/wrapper/maven-wrapper.properties"
if
[
"
$MVNW_VERBOSE
"
=
true
]
;
then
echo
"Downloading from:
$jarUrl
"
fi
wrapperJarPath
=
"
$BASE_DIR
/.mvn/wrapper/maven-wrapper.jar"
if
$cygwin
;
then
wrapperJarPath
=
$(
cygpath
--path
--windows
"
$wrapperJarPath
"
)
fi
if
command
-v
wget
>
/dev/null
;
then
if
[
"
$MVNW_VERBOSE
"
=
true
]
;
then
echo
"Found wget ... using wget"
fi
if
[
-z
"
$MVNW_USERNAME
"
]
||
[
-z
"
$MVNW_PASSWORD
"
]
;
then
wget
"
$jarUrl
"
-O
"
$wrapperJarPath
"
else
wget
--http-user
=
$MVNW_USERNAME
--http-password
=
$MVNW_PASSWORD
"
$jarUrl
"
-O
"
$wrapperJarPath
"
fi
elif
command
-v
curl
>
/dev/null
;
then
if
[
"
$MVNW_VERBOSE
"
=
true
]
;
then
echo
"Found curl ... using curl"
fi
if
[
-z
"
$MVNW_USERNAME
"
]
||
[
-z
"
$MVNW_PASSWORD
"
]
;
then
curl
-o
"
$wrapperJarPath
"
"
$jarUrl
"
-f
else
curl
--user
$MVNW_USERNAME
:
$MVNW_PASSWORD
-o
"
$wrapperJarPath
"
"
$jarUrl
"
-f
fi
else
if
[
"
$MVNW_VERBOSE
"
=
true
]
;
then
echo
"Falling back to using Java to download"
fi
javaClass
=
"
$BASE_DIR
/.mvn/wrapper/MavenWrapperDownloader.java"
# For Cygwin, switch paths to Windows format before running javac
if
$cygwin
;
then
javaClass
=
$(
cygpath
--path
--windows
"
$javaClass
"
)
fi
if
[
-e
"
$javaClass
"
]
;
then
if
[
!
-e
"
$BASE_DIR
/.mvn/wrapper/MavenWrapperDownloader.class"
]
;
then
if
[
"
$MVNW_VERBOSE
"
=
true
]
;
then
echo
" - Compiling MavenWrapperDownloader.java ..."
fi
# Compiling the Java class
(
"
$JAVA_HOME
/bin/javac"
"
$javaClass
"
)
fi
if
[
-e
"
$BASE_DIR
/.mvn/wrapper/MavenWrapperDownloader.class"
]
;
then
# Running the downloader
if
[
"
$MVNW_VERBOSE
"
=
true
]
;
then
echo
" - Running MavenWrapperDownloader.java ..."
fi
(
"
$JAVA_HOME
/bin/java"
-cp
.mvn/wrapper MavenWrapperDownloader
"
$MAVEN_PROJECTBASEDIR
"
)
fi
fi
fi
fi
##########################################################################################
# End of extension
##########################################################################################
export
MAVEN_PROJECTBASEDIR
=
${
MAVEN_BASEDIR
:-
"
$BASE_DIR
"
}
if
[
"
$MVNW_VERBOSE
"
=
true
]
;
then
echo
$MAVEN_PROJECTBASEDIR
fi
MAVEN_OPTS
=
"
$(
concat_lines
"
$MAVEN_PROJECTBASEDIR
/.mvn/jvm.config"
)
$MAVEN_OPTS
"
# For Cygwin, switch paths to Windows format before running java
if
$cygwin
;
then
[
-n
"
$M2_HOME
"
]
&&
M2_HOME
=
$(
cygpath
--path
--windows
"
$M2_HOME
"
)
[
-n
"
$JAVA_HOME
"
]
&&
JAVA_HOME
=
$(
cygpath
--path
--windows
"
$JAVA_HOME
"
)
[
-n
"
$CLASSPATH
"
]
&&
CLASSPATH
=
$(
cygpath
--path
--windows
"
$CLASSPATH
"
)
[
-n
"
$MAVEN_PROJECTBASEDIR
"
]
&&
MAVEN_PROJECTBASEDIR
=
$(
cygpath
--path
--windows
"
$MAVEN_PROJECTBASEDIR
"
)
fi
# Provide a "standardized" way to retrieve the CLI args that will
# work with both Windows and non-Windows executions.
MAVEN_CMD_LINE_ARGS
=
"
$MAVEN_CONFIG
$@
"
export
MAVEN_CMD_LINE_ARGS
WRAPPER_LAUNCHER
=
org.apache.maven.wrapper.MavenWrapperMain
exec
"
$JAVACMD
"
\
$MAVEN_OPTS
\
-classpath
"
$MAVEN_PROJECTBASEDIR
/.mvn/wrapper/maven-wrapper.jar"
\
"-Dmaven.home=
${
M2_HOME
}
"
"-Dmaven.multiModuleProjectDirectory=
${
MAVEN_PROJECTBASEDIR
}
"
\
${
WRAPPER_LAUNCHER
}
$MAVEN_CONFIG
"
$@
"
mvnw.cmd
0 → 100644
View file @
2e392e32
@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%
pom.xml
0 → 100644
View file @
2e392e32
<?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.3.4.RELEASE
</version>
<relativePath/>
<!-- lookup parent from repository -->
</parent>
<groupId>
com.weface
</groupId>
<artifactId>
push-message
</artifactId>
<version>
0.0.1-SNAPSHOT
</version>
<name>
push-message
</name>
<description>
push message
</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.projectlombok
</groupId>
<artifactId>
lombok
</artifactId>
<optional>
true
</optional>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-test
</artifactId>
<scope>
test
</scope>
<exclusions>
<exclusion>
<groupId>
org.junit.vintage
</groupId>
<artifactId>
junit-vintage-engine
</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>
cn.hutool
</groupId>
<artifactId>
hutool-all
</artifactId>
<version>
4.6.8
</version>
</dependency>
<dependency>
<groupId>
com.gexin.platform
</groupId>
<artifactId>
gexin-rp-sdk-http
</artifactId>
<version>
4.1.1.4
</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>
getui-nexus
</id>
<url>
http://mvn.gt.getui.com/nexus/content/repositories/releases/
</url>
</repository>
</repositories>
<build>
<finalName>
getui-push
</finalName>
<plugins>
<!--add this for docker-->
<plugin>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-maven-plugin
</artifactId>
</plugin>
<plugin>
<groupId>
com.spotify
</groupId>
<artifactId>
docker-maven-plugin
</artifactId>
<version>
1.2.0
</version>
<configuration>
<serverId>
docker_ops
</serverId>
<registryUrl>
registry-vpc.cn-shanghai.aliyuncs.com
</registryUrl>
<imageName>
registry-vpc.cn-shanghai.aliyuncs.com/kankanops/getui-push:V1.0
</imageName>
<dockerDirectory>
${project.basedir}/src/main/docker
</dockerDirectory>
<skipDockerBuild>
false
</skipDockerBuild>
<pushImage>
true
</pushImage>
<resources>
<resource>
<directory>
${project.build.directory}
</directory>
<include>
${project.build.finalName}.jar
</include>
</resource>
</resources>
</configuration>
</plugin>
<!--add this for docker-->
<plugin>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-maven-plugin
</artifactId>
</plugin>
<plugin>
<artifactId>
maven-compiler-plugin
</artifactId>
<configuration>
<source>
1.8
</source>
<target>
1.8
</target>
<encoding>
UTF-8
</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
src/main/java/com/weface/PushMessageApplication.java
0 → 100644
View file @
2e392e32
package
com
.
weface
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.scheduling.annotation.EnableAsync
;
@SpringBootApplication
@EnableAsync
public
class
PushMessageApplication
{
public
static
void
main
(
String
[]
args
)
{
SpringApplication
.
run
(
PushMessageApplication
.
class
,
args
);
}
}
src/main/java/com/weface/code/CommonResult.java
0 → 100644
View file @
2e392e32
package
com
.
weface
.
code
;
public
class
CommonResult
<
T
>
{
private
long
code
;
private
String
message
;
private
T
data
;
protected
CommonResult
()
{
}
protected
CommonResult
(
long
code
,
String
message
,
T
data
)
{
this
.
code
=
code
;
this
.
message
=
message
;
this
.
data
=
data
;
}
/**
* 成功返回结果
*
* @param data 获取的数据
*/
public
static
<
T
>
CommonResult
<
T
>
success
(
T
data
)
{
return
new
CommonResult
<
T
>(
ResultCode
.
SUCCESS
.
getCode
(),
ResultCode
.
SUCCESS
.
getMessage
(),
data
);
}
/**
* 成功返回结果
*
* @param data 获取的数据
* @param message 提示信息
*/
public
static
<
T
>
CommonResult
<
T
>
success
(
T
data
,
String
message
)
{
return
new
CommonResult
<
T
>(
ResultCode
.
SUCCESS
.
getCode
(),
message
,
data
);
}
/**
* 失败返回结果
* @param errorCode 错误码
*/
public
static
<
T
>
CommonResult
<
T
>
failed
(
IErrorCode
errorCode
)
{
return
new
CommonResult
<
T
>(
errorCode
.
getCode
(),
errorCode
.
getMessage
(),
null
);
}
/**
* 失败返回结果
* @param message 提示信息
*/
public
static
<
T
>
CommonResult
<
T
>
failed
(
String
message
)
{
return
new
CommonResult
<
T
>(
ResultCode
.
FAILED
.
getCode
(),
message
,
null
);
}
/**
* 失败返回结果
*/
public
static
<
T
>
CommonResult
<
T
>
failed
()
{
return
failed
(
ResultCode
.
FAILED
);
}
/**
* 参数验证失败返回结果
*/
public
static
<
T
>
CommonResult
<
T
>
validateFailed
()
{
return
failed
(
ResultCode
.
VALIDATE_FAILED
);
}
/**
* 参数验证失败返回结果
* @param message 提示信息
*/
public
static
<
T
>
CommonResult
<
T
>
validateFailed
(
String
message
)
{
return
new
CommonResult
<
T
>(
ResultCode
.
VALIDATE_FAILED
.
getCode
(),
message
,
null
);
}
/**
* 未登录返回结果
*/
public
static
<
T
>
CommonResult
<
T
>
unauthorized
(
T
data
)
{
return
new
CommonResult
<
T
>(
ResultCode
.
UNAUTHORIZED
.
getCode
(),
ResultCode
.
UNAUTHORIZED
.
getMessage
(),
data
);
}
/**
* 未授权返回结果
*/
public
static
<
T
>
CommonResult
<
T
>
forbidden
(
T
data
)
{
return
new
CommonResult
<
T
>(
ResultCode
.
FORBIDDEN
.
getCode
(),
ResultCode
.
FORBIDDEN
.
getMessage
(),
data
);
}
public
long
getCode
()
{
return
code
;
}
public
void
setCode
(
long
code
)
{
this
.
code
=
code
;
}
public
String
getMessage
()
{
return
message
;
}
public
void
setMessage
(
String
message
)
{
this
.
message
=
message
;
}
public
T
getData
()
{
return
data
;
}
public
void
setData
(
T
data
)
{
this
.
data
=
data
;
}
}
src/main/java/com/weface/code/IErrorCode.java
0 → 100644
View file @
2e392e32
package
com
.
weface
.
code
;
/**
* 封装API的错误码
* Created by martin on 2019/7/16.
*/
public
interface
IErrorCode
{
long
getCode
();
String
getMessage
();
}
src/main/java/com/weface/code/ResultCode.java
0 → 100644
View file @
2e392e32
package
com
.
weface
.
code
;
public
enum
ResultCode
implements
IErrorCode
{
SUCCESS
(
200
,
"操作成功"
),
FAILED
(
500
,
"操作失败"
),
VALIDATE_FAILED
(
404
,
"参数检验失败"
),
UNAUTHORIZED
(
401
,
"暂未登录或token已经过期"
),
FORBIDDEN
(
403
,
"没有相关权限"
);
private
long
code
;
private
String
message
;
private
ResultCode
(
long
code
,
String
message
)
{
this
.
code
=
code
;
this
.
message
=
message
;
}
public
long
getCode
()
{
return
code
;
}
public
String
getMessage
()
{
return
message
;
}
}
src/main/java/com/weface/component/GeTuiPush.java
0 → 100644
View file @
2e392e32
package
com
.
weface
.
component
;
import
cn.hutool.core.util.IdUtil
;
import
cn.hutool.http.HttpResponse
;
import
cn.hutool.http.HttpUtil
;
import
cn.hutool.json.JSONObject
;
import
cn.hutool.json.JSONUtil
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
import
java.io.UnsupportedEncodingException
;
import
java.security.MessageDigest
;
import
java.security.NoSuchAlgorithmException
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
@Component
public
class
GeTuiPush
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
GeTuiPush
.
class
);
@Value
(
"config.getui.appkey"
)
private
String
appkey
;
@Value
(
"config.getui.mastersecret"
)
private
String
mastersecret
;
@Value
(
"config.getui.appId"
)
private
String
appId
;
@Value
(
"config.getui.baseUrl"
)
private
String
baseUrl
;
public
String
token
()
{
Map
<
String
,
Object
>
param
=
new
HashMap
<>();
long
timestamp
=
System
.
currentTimeMillis
();
param
.
put
(
"appkey"
,
appkey
);
param
.
put
(
"timestamp"
,
timestamp
);
param
.
put
(
"sign"
,
getSHA256
(
appkey
+
timestamp
+
mastersecret
));
String
res
=
HttpUtil
.
post
(
baseUrl
+
"/auth"
,
JSONUtil
.
toJsonStr
(
param
));
JSONObject
jsonObject
=
new
JSONObject
(
res
);
JSONObject
data
=
jsonObject
.
getJSONObject
(
"data"
);
return
data
.
getStr
(
"token"
);
}
public
void
toSinglePush
(
String
alia
)
{
Map
<
String
,
Object
>
param
=
new
HashMap
<>();
param
.
put
(
"request_id"
,
String
.
valueOf
(
IdUtil
.
createSnowflake
(
1
,
1
).
nextId
()));
Map
<
String
,
Object
>
audience
=
new
HashMap
<>();
List
<
String
>
alias
=
new
ArrayList
<>();
alias
.
add
(
alia
);
audience
.
put
(
"alias"
,
alias
);
String
msg
=
"测试"
;
param
.
put
(
"audience"
,
JSONUtil
.
parseFromMap
(
audience
));
param
.
put
(
"settings"
,
setSetting
());
param
.
put
(
"push_message"
,
setMessage
(
msg
));
param
.
put
(
"push_channel"
,
setChannel
(
msg
));
String
token
=
token
();
logger
.
info
(
"token:{}"
,
token
);
logger
.
info
(
"请求参数:{}"
,
JSONUtil
.
toJsonStr
(
param
));
HttpResponse
res
=
HttpUtil
.
createPost
(
baseUrl
+
"/push/single/alias"
)
.
body
(
JSONUtil
.
toJsonStr
(
param
))
.
header
(
"token"
,
token
)
.
header
(
"Content-Type"
,
"application/json;charset=utf-8"
)
.
execute
();
logger
.
info
(
"返回:{}"
,
res
.
body
());
}
public
void
toSingleBatchPush
(
String
alia
)
{
Map
<
String
,
Object
>
param
=
new
HashMap
<>();
param
.
put
(
"request_id"
,
String
.
valueOf
(
IdUtil
.
createSnowflake
(
1
,
1
).
nextId
()));
Map
<
String
,
Object
>
audience
=
new
HashMap
<>();
List
<
String
>
alias
=
new
ArrayList
<>();
alias
.
add
(
alia
);
audience
.
put
(
"alias"
,
alias
);
String
msg
=
"测试"
;
param
.
put
(
"audience"
,
JSONUtil
.
parseFromMap
(
audience
));
param
.
put
(
"settings"
,
setSetting
());
param
.
put
(
"push_message"
,
setMessage
(
msg
));
param
.
put
(
"push_channel"
,
setChannel
(
msg
));
String
token
=
token
();
logger
.
info
(
"token:{}"
,
token
);
logger
.
info
(
"请求参数:{}"
,
JSONUtil
.
toJsonStr
(
param
));
HttpResponse
res
=
HttpUtil
.
createPost
(
baseUrl
+
"/push/single/batch/alias"
)
.
body
(
JSONUtil
.
toJsonStr
(
param
))
.
header
(
"token"
,
token
)
.
header
(
"Content-Type"
,
"application/json;charset=utf-8"
)
.
execute
();
logger
.
info
(
"返回:{}"
,
res
.
body
());
}
public
JSONObject
setSetting
()
{
Map
<
String
,
Object
>
settings
=
new
HashMap
();
settings
.
put
(
"ttl"
,
-
1
);
// 不离线
Map
<
String
,
Object
>
strategy
=
new
HashMap
<>();
strategy
.
put
(
"default"
,
1
);
strategy
.
put
(
"ios"
,
4
);
strategy
.
put
(
"st"
,
4
);
settings
.
put
(
"strategy"
,
JSONUtil
.
parseFromMap
(
strategy
));
return
JSONUtil
.
parseFromMap
(
settings
);
}
// 定义消息
public
JSONObject
setMessage
(
String
msg
)
{
Map
<
String
,
Object
>
message
=
new
HashMap
();
Map
<
String
,
Object
>
notification
=
new
HashMap
();
notification
.
put
(
"title"
,
"标题测试"
);
notification
.
put
(
"body"
,
"内容测试"
);
notification
.
put
(
"click_type"
,
"none"
);
notification
.
put
(
"channel_level"
,
4
);
message
.
put
(
"notification"
,
notification
);
// message.put("transmission",msg);
return
JSONUtil
.
parseFromMap
(
message
);
}
public
JSONObject
setChannel
(
String
msg
)
{
Map
<
String
,
Object
>
channel
=
new
HashMap
();
Map
<
String
,
Object
>
ios
=
new
HashMap
<>();
Map
<
String
,
Object
>
aps
=
new
HashMap
<>();
aps
.
put
(
"content-available"
,
0
);
Map
<
String
,
Object
>
alert
=
new
HashMap
<>();
alert
.
put
(
"title"
,
"ios标题"
);
alert
.
put
(
"body"
,
"ios内容"
);
aps
.
put
(
"alert"
,
JSONUtil
.
parseFromMap
(
alert
));
ios
.
put
(
"type"
,
"notify"
);
ios
.
put
(
"payload"
,
msg
);
ios
.
put
(
"aps"
,
JSONUtil
.
parseFromMap
(
aps
));
channel
.
put
(
"ios"
,
JSONUtil
.
parseFromMap
(
ios
));
Map
<
String
,
Object
>
android
=
new
HashMap
<>();
Map
<
String
,
Object
>
ups
=
new
HashMap
<>();
Map
<
String
,
Object
>
notification
=
new
HashMap
<>();
notification
.
put
(
"title"
,
"android标题"
);
notification
.
put
(
"body"
,
"android内容"
);
notification
.
put
(
"click_type"
,
"none"
);
ups
.
put
(
"notification"
,
JSONUtil
.
parseFromMap
(
notification
));
android
.
put
(
"ups"
,
JSONUtil
.
parseFromMap
(
ups
));
channel
.
put
(
"android"
,
JSONUtil
.
parseFromMap
(
android
));
return
JSONUtil
.
parseFromMap
(
channel
);
}
public
String
getSHA256
(
String
str
)
{
MessageDigest
messageDigest
;
String
encodestr
=
""
;
try
{
messageDigest
=
MessageDigest
.
getInstance
(
"SHA-256"
);
messageDigest
.
update
(
str
.
getBytes
(
"UTF-8"
));
encodestr
=
byte2Hex
(
messageDigest
.
digest
());
}
catch
(
NoSuchAlgorithmException
e
)
{
e
.
printStackTrace
();
}
catch
(
UnsupportedEncodingException
e
)
{
e
.
printStackTrace
();
}
return
encodestr
;
}
/**
* 将byte转为16进制
*
* @param bytes
* @return
*/
private
String
byte2Hex
(
byte
[]
bytes
)
{
StringBuffer
stringBuffer
=
new
StringBuffer
();
String
temp
=
null
;
for
(
int
i
=
0
;
i
<
bytes
.
length
;
i
++)
{
temp
=
Integer
.
toHexString
(
bytes
[
i
]
&
0xFF
);
if
(
temp
.
length
()
==
1
)
{
// 1得到一位的进行补0操作
stringBuffer
.
append
(
"0"
);
}
stringBuffer
.
append
(
temp
);
}
return
stringBuffer
.
toString
();
}
}
src/main/java/com/weface/component/GeTuiSDK.java
0 → 100644
View file @
2e392e32
package
com
.
weface
.
component
;
import
cn.hutool.core.util.StrUtil
;
import
com.gexin.rp.sdk.base.IBatch
;
import
com.gexin.rp.sdk.base.IIGtPush
;
import
com.gexin.rp.sdk.base.IPushResult
;
import
com.gexin.rp.sdk.base.ITemplate
;
import
com.gexin.rp.sdk.base.impl.SingleMessage
;
import
com.gexin.rp.sdk.base.impl.Target
;
import
com.gexin.rp.sdk.base.payload.APNPayload
;
import
com.gexin.rp.sdk.base.payload.MultiMedia
;
import
com.gexin.rp.sdk.exceptions.RequestException
;
import
com.gexin.rp.sdk.http.Constants
;
import
com.gexin.rp.sdk.http.IGtPush
;
import
com.gexin.rp.sdk.template.NotificationTemplate
;
import
com.gexin.rp.sdk.template.style.Style0
;
import
com.weface.dto.MsgDTO
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
import
java.util.List
;
@Component
@Slf4j
public
class
GeTuiSDK
{
@Value
(
"${config.getui.appkey}"
)
private
String
appKey
;
@Value
(
"${config.getui.mastersecret}"
)
private
String
masterSecret
;
@Value
(
"${config.getui.appId}"
)
private
String
appId
;
@Value
(
"${config.getui.baseUrl}"
)
private
String
host
;
public
IPushResult
pushSingle
(
String
alias
,
String
title
,
String
body
)
{
// 设置后,根据别名推送,会返回每个cid的推送结果
System
.
setProperty
(
Constants
.
GEXIN_PUSH_SINGLE_ALIAS_DETAIL
,
"true"
);
IGtPush
push
=
new
IGtPush
(
host
,
appKey
,
masterSecret
);
NotificationTemplate
template
=
getNotificationTemplate
(
title
,
body
);
SingleMessage
message
=
new
SingleMessage
();
message
.
setOffline
(
true
);
// 离线有效时间,单位为毫秒
message
.
setOfflineExpireTime
(
24
*
3600
*
1000
);
message
.
setData
(
template
);
// 可选,1为wifi,0为不限制网络环境。根据手机处于的网络情况,决定是否下发
message
.
setPushNetWorkType
(
0
);
// 厂商通道下发策略
message
.
setStrategyJson
(
"{\"default\":4,\"ios\":4,\"st\":4}"
);
Target
target
=
new
Target
();
target
.
setAppId
(
appId
);
//target.setClientId(CID);
target
.
setAlias
(
alias
);
IPushResult
ret
=
null
;
try
{
ret
=
push
.
pushMessageToSingle
(
message
,
target
);
log
.
info
(
alias
+
"->返回:{}"
,
ret
.
getResponse
().
toString
());
}
catch
(
RequestException
e
)
{
e
.
printStackTrace
();
log
.
debug
(
e
.
getMessage
());
ret
=
push
.
pushMessageToSingle
(
message
,
target
,
e
.
getRequestId
());
}
return
ret
;
}
public
NotificationTemplate
getNotificationTemplate
(
String
title
,
String
body
)
{
NotificationTemplate
template
=
new
NotificationTemplate
();
// 设置APPID与APPKEY
template
.
setAppId
(
appId
);
template
.
setAppkey
(
appKey
);
Style0
style
=
new
Style0
();
// 设置通知栏标题与内容
style
.
setTitle
(
title
);
style
.
setText
(
body
);
// 配置通知栏图标
style
.
setLogo
(
"icon.png"
);
// 配置通知栏网络图标
style
.
setLogoUrl
(
""
);
// 设置通知是否响铃,震动,或者可清除
style
.
setRing
(
true
);
style
.
setVibrate
(
true
);
style
.
setClearable
(
true
);
//style.setChannel("通知渠道id");
//style.setChannelName("通知渠道名称");
style
.
setChannelLevel
(
3
);
//设置通知渠道重要性
template
.
setStyle
(
style
);
template
.
setTransmissionType
(
1
);
// 透传消息接受方式设置,1:立即启动APP,2:客户端收到消息后需要自行处理
template
.
setTransmissionContent
(
"请输入您要透传的内容"
);
template
.
setAPNInfo
(
getAPNPayload
(
body
));
//详见【推送模板说明】iOS通知样式设置
return
template
;
}
private
APNPayload
getAPNPayload
(
String
body
)
{
APNPayload
payload
=
new
APNPayload
();
//在已有数字基础上加1显示,设置为-1时,在已有数字上减1显示,设置为数字时,显示指定数字
payload
.
setAutoBadge
(
"+1"
);
payload
.
setContentAvailable
(
0
);
//ios 12.0 以上可以使用 Dictionary 类型的 sound
payload
.
setSound
(
"default"
);
payload
.
setCategory
(
"$由客户端定义"
);
payload
.
addCustomMsg
(
"由客户自定义消息key"
,
"由客户自定义消息value"
);
//简单模式APNPayload.SimpleMsg
payload
.
setAlertMsg
(
new
APNPayload
.
SimpleAlertMsg
(
body
));
//payload.setAlertMsg(getDictionaryAlertMsg()); //字典模式使用APNPayload.DictionaryAlertMsg
//设置语音播报类型,int类型,0.不可用 1.播放body 2.播放自定义文本
payload
.
setVoicePlayType
(
2
);
//设置语音播报内容,String类型,非必须参数,用户自定义播放内容,仅在voicePlayMessage=2时生效
//注:当"定义类型"=2, "定义内容"为空时则忽略不播放
payload
.
setVoicePlayMessage
(
"定义内容"
);
// 添加多媒体资源
payload
.
addMultiMedia
(
new
MultiMedia
().
setResType
(
MultiMedia
.
MediaType
.
pic
)
.
setResUrl
(
"资源文件地址"
)
.
setOnlyWifi
(
true
));
return
payload
;
}
public
void
batchPush
(
List
<
MsgDTO
>
objs
)
throws
Exception
{
IIGtPush
push
=
new
IGtPush
(
host
,
appKey
,
masterSecret
);
IBatch
batch
=
push
.
getBatch
();
for
(
MsgDTO
msg
:
objs
)
{
constructClientNotifyMsg
(
msg
.
getFromApp
()
+
"_"
+
msg
.
getUserId
(),
msg
.
getTitle
(),
msg
.
getBody
(),
batch
);
}
batch
.
submit
();
}
public
void
constructClientNotifyMsg
(
String
alia
,
String
title
,
String
body
,
IBatch
batch
)
throws
Exception
{
SingleMessage
message
=
new
SingleMessage
();
ITemplate
template
=
notificationTemplateDemo
(
title
,
body
);
//template.setAPNInfo(getAPNPayload()); //详见【推送模板说明】iOS通知样式设置
message
.
setData
(
template
);
message
.
setOffline
(
true
);
message
.
setOfflineExpireTime
(
360
*
1000
);
// 厂商通道下发策略
message
.
setStrategyJson
(
"{\"default\":4,\"ios\":4,\"st\":4}"
);
// 设置推送目标,填入appid和clientId
Target
target
=
new
Target
();
target
.
setAppId
(
appId
);
target
.
setAlias
(
alia
);
batch
.
add
(
message
,
target
);
}
public
NotificationTemplate
notificationTemplateDemo
(
String
title
,
String
body
)
{
NotificationTemplate
template
=
new
NotificationTemplate
();
// 设置APPID与APPKEY
template
.
setAppId
(
appId
);
template
.
setAppkey
(
appKey
);
Style0
style
=
new
Style0
();
// 设置通知栏标题与内容
style
.
setTitle
(
title
);
style
.
setText
(
body
);
// 配置通知栏图标
style
.
setLogo
(
"icon.png"
);
// 配置通知栏网络图标
style
.
setLogoUrl
(
""
);
// 设置通知是否响铃,震动,或者可清除
style
.
setRing
(
true
);
style
.
setVibrate
(
true
);
style
.
setClearable
(
true
);
style
.
setChannel
(
"通知渠道id"
);
style
.
setChannelName
(
"通知渠道名称"
);
style
.
setChannelLevel
(
3
);
//设置通知渠道重要性
template
.
setStyle
(
style
);
// 透传消息接受方式设置,1:立即启动APP,2:客户端收到消息后需要自行处理
template
.
setTransmissionType
(
2
);
template
.
setTransmissionContent
(
"请输入您要透传的内容"
);
template
.
setAPNInfo
(
getAPNPayload
(
body
));
//详见【推送模板说明】iOS通知样式设置
return
template
;
}
}
src/main/java/com/weface/config/APPConfig.java
0 → 100644
View file @
2e392e32
package
com
.
weface
.
config
;
public
class
APPConfig
{
public
static
final
String
[]
apps
=
{
"kkwj"
,
"kkmz"
,
"kksb"
};
}
src/main/java/com/weface/config/ExecutorConfig.java
0 → 100644
View file @
2e392e32
package
com
.
weface
.
config
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.scheduling.annotation.EnableAsync
;
import
org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor
;
import
java.util.concurrent.ThreadPoolExecutor
;
@EnableAsync
@Configuration
public
class
ExecutorConfig
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
ExecutorConfig
.
class
);
public
static
Integer
smsAsynSize
=
Runtime
.
getRuntime
().
availableProcessors
();
@Bean
(
"asyncServiceExecutor"
)
public
ThreadPoolTaskExecutor
asyncServiceExecutor
()
{
logger
.
info
(
"当前系统处理器数:"
+
smsAsynSize
);
ThreadPoolTaskExecutor
taskExecutor
=
new
ThreadPoolTaskExecutor
();
taskExecutor
.
setCorePoolSize
(
smsAsynSize
);
taskExecutor
.
setMaxPoolSize
(
smsAsynSize
*
2
);
taskExecutor
.
setQueueCapacity
(
smsAsynSize
*
5
);
taskExecutor
.
setThreadNamePrefix
(
"SpringAsyncThread-"
);
taskExecutor
.
setRejectedExecutionHandler
(
new
ThreadPoolExecutor
.
CallerRunsPolicy
());
taskExecutor
.
initialize
();
return
taskExecutor
;
}
}
src/main/java/com/weface/controller/PushController.java
0 → 100644
View file @
2e392e32
package
com
.
weface
.
controller
;
import
com.weface.code.CommonResult
;
import
com.weface.dto.MsgDTO
;
import
com.weface.dto.PushDTO
;
import
com.weface.service.PushService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
@RestController
@RequestMapping
(
"push"
)
public
class
PushController
{
@Autowired
private
PushService
pushService
;
@PostMapping
(
"list"
)
public
CommonResult
pushList
(
@RequestBody
PushDTO
param
)
throws
Exception
{
return
pushService
.
pushList
(
param
);
}
@PostMapping
(
"single"
)
public
CommonResult
pushSingle
(
@RequestBody
MsgDTO
param
){
return
pushService
.
pushSingle
(
param
);
}
}
src/main/java/com/weface/dto/MsgDTO.java
0 → 100644
View file @
2e392e32
package
com
.
weface
.
dto
;
import
lombok.Data
;
@Data
public
class
MsgDTO
{
private
String
body
;
private
String
title
;
private
Integer
userId
;
private
String
fromApp
;
}
src/main/java/com/weface/dto/PushDTO.java
0 → 100644
View file @
2e392e32
package
com
.
weface
.
dto
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
PushDTO
{
private
List
<
MsgDTO
>
userList
;
}
src/main/java/com/weface/service/AsyncService.java
0 → 100644
View file @
2e392e32
package
com
.
weface
.
service
;
import
com.weface.dto.MsgDTO
;
import
java.util.List
;
public
interface
AsyncService
{
void
batchPush
(
List
<
MsgDTO
>
objs
)
throws
Exception
;
void
pushSingle
(
MsgDTO
param
);
}
src/main/java/com/weface/service/PushService.java
0 → 100644
View file @
2e392e32
package
com
.
weface
.
service
;
import
com.weface.code.CommonResult
;
import
com.weface.dto.MsgDTO
;
import
com.weface.dto.PushDTO
;
public
interface
PushService
{
CommonResult
pushList
(
PushDTO
param
)
throws
Exception
;
CommonResult
pushSingle
(
MsgDTO
param
);
}
src/main/java/com/weface/serviceimpl/AsyncServiceImpl.java
0 → 100644
View file @
2e392e32
package
com
.
weface
.
serviceimpl
;
import
cn.hutool.json.JSONUtil
;
import
com.weface.component.GeTuiSDK
;
import
com.weface.dto.MsgDTO
;
import
com.weface.service.AsyncService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.scheduling.annotation.Async
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
@Service
@Slf4j
public
class
AsyncServiceImpl
implements
AsyncService
{
@Autowired
private
GeTuiSDK
geTuiSDK
;
@Override
@Async
public
void
batchPush
(
List
<
MsgDTO
>
objs
)
throws
Exception
{
geTuiSDK
.
batchPush
(
objs
);
}
@Override
@Async
public
void
pushSingle
(
MsgDTO
param
)
{
log
.
info
(
"单推请求:{}"
,
JSONUtil
.
toJsonPrettyStr
(
param
));
geTuiSDK
.
pushSingle
(
param
.
getFromApp
()+
"_"
+
param
.
getUserId
(),
param
.
getTitle
(),
param
.
getBody
());
}
}
src/main/java/com/weface/serviceimpl/PushServiceImpl.java
0 → 100644
View file @
2e392e32
package
com
.
weface
.
serviceimpl
;
import
com.weface.code.CommonResult
;
import
com.weface.component.GeTuiSDK
;
import
com.weface.dto.MsgDTO
;
import
com.weface.dto.PushDTO
;
import
com.weface.service.AsyncService
;
import
com.weface.service.PushService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
@Service
public
class
PushServiceImpl
implements
PushService
{
@Autowired
private
AsyncService
asyncService
;
@Override
public
CommonResult
pushList
(
PushDTO
param
)
throws
Exception
{
asyncService
.
batchPush
(
param
.
getUserList
());
return
CommonResult
.
success
(
null
);
}
@Override
public
CommonResult
pushSingle
(
MsgDTO
param
)
{
asyncService
.
pushSingle
(
param
);
return
CommonResult
.
success
(
null
);
}
}
src/main/java/docker/Dockerfile
0 → 100644
View file @
2e392e32
FROM
registry.cn-shanghai.aliyuncs.com/kankanops/jdk8:V1.2
ADD
getui-push.jar /webapps/app.jar
src/main/resources/application.yml
0 → 100644
View file @
2e392e32
spring
:
application
:
name
:
service-web
server
:
port
:
9191
config
:
getui
:
appkey
:
"
vIBAFNAEk88qekbfS3miE8"
mastersecret
:
"
JojRk0duJd6oXiHIyFPqj"
appId
:
"
LhnWI1t7hc7ABsYbWokXD6"
baseUrl
:
"
http://api.getui.com/apiex.htm"
src/test/java/com/weface/PushMessageApplicationTests.java
0 → 100644
View file @
2e392e32
package
com
.
weface
;
import
org.junit.jupiter.api.Test
;
import
org.springframework.boot.test.context.SpringBootTest
;
@SpringBootTest
class
PushMessageApplicationTests
{
@Test
void
contextLoads
()
{
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment