Browse Source

项目初始化

dev
mh 5 months ago
commit
bc06e0e301
  1. 33
      .gitignore
  2. 117
      .mvn/wrapper/MavenWrapperDownloader.java
  3. BIN
      .mvn/wrapper/maven-wrapper.jar
  4. 2
      .mvn/wrapper/maven-wrapper.properties
  5. 2
      2024年新增脚本.sql
  6. 310
      mvnw
  7. 182
      mvnw.cmd
  8. 114
      pom.xml
  9. 15
      src/main/java/com/mh/garrison/GarrisonApplication.java
  10. 13
      src/main/java/com/mh/garrison/ServletInitializer.java
  11. 104
      src/main/java/com/mh/garrison/config/DruidConfig.java
  12. 172
      src/main/java/com/mh/garrison/config/DruidDataSourceProperties.java
  13. 18
      src/main/java/com/mh/garrison/constant/Constants.java
  14. 246
      src/main/java/com/mh/garrison/controller/DeviceController.java
  15. 14
      src/main/java/com/mh/garrison/controller/HelloController.java
  16. 82
      src/main/java/com/mh/garrison/controller/NewDeviceController.java
  17. 54
      src/main/java/com/mh/garrison/entity/AEPEntity.java
  18. 50
      src/main/java/com/mh/garrison/entity/DataBean.java
  19. 201
      src/main/java/com/mh/garrison/entity/DeviceInfo.java
  20. 77
      src/main/java/com/mh/garrison/entity/DeviceMessage.java
  21. 48
      src/main/java/com/mh/garrison/entity/DeviceMessageBean.java
  22. 40
      src/main/java/com/mh/garrison/entity/DevicesBean.java
  23. 80
      src/main/java/com/mh/garrison/entity/MSGEntity.java
  24. 75
      src/main/java/com/mh/garrison/entity/MeterHistoryBean.java
  25. 85
      src/main/java/com/mh/garrison/entity/MeterNowBean.java
  26. 64
      src/main/java/com/mh/garrison/entity/OrderEntity.java
  27. 49
      src/main/java/com/mh/garrison/entity/ServiceBean.java
  28. 69
      src/main/java/com/mh/garrison/entity/ThreeMeterBean.java
  29. 84
      src/main/java/com/mh/garrison/entity/ThreeMeterNowBean.java
  30. 137
      src/main/java/com/mh/garrison/entity/WaterBean.java
  31. 39
      src/main/java/com/mh/garrison/entity/WaterDataBean.java
  32. 105
      src/main/java/com/mh/garrison/entity/WaterDayBean.java
  33. 69
      src/main/java/com/mh/garrison/entity/WaterHistoryBean.java
  34. 121
      src/main/java/com/mh/garrison/job/DealMeterLogJob.java
  35. 107
      src/main/java/com/mh/garrison/job/DealWaterLogJob.java
  36. 109
      src/main/java/com/mh/garrison/job/NewDealMeterLogJob.java
  37. 236
      src/main/java/com/mh/garrison/job/QueryDeviceJob.java
  38. 123
      src/main/java/com/mh/garrison/job/SendMSGJob.java
  39. 216
      src/main/java/com/mh/garrison/job/SendOrderJob.java
  40. 35
      src/main/java/com/mh/garrison/mapper/DeviceMapper.java
  41. 43
      src/main/java/com/mh/garrison/mapper/MSGMapper.java
  42. 20
      src/main/java/com/mh/garrison/mapper/MeterHistoryMapper.java
  43. 29
      src/main/java/com/mh/garrison/mapper/MeterMapper.java
  44. 61
      src/main/java/com/mh/garrison/mapper/MeterNowMapper.java
  45. 34
      src/main/java/com/mh/garrison/mapper/OrderMapper.java
  46. 87
      src/main/java/com/mh/garrison/mapper/WaterDayMapper.java
  47. 28
      src/main/java/com/mh/garrison/mapper/WaterHistoryMapper.java
  48. 69
      src/main/java/com/mh/garrison/mapper/WaterMapper.java
  49. 784
      src/main/java/com/mh/garrison/mhutils/ByteUtilsWater.java
  50. 198
      src/main/java/com/mh/garrison/mhutils/Constant.java
  51. 198
      src/main/java/com/mh/garrison/mhutils/ConstantWater.java
  52. 259
      src/main/java/com/mh/garrison/mhutils/FastJson.java
  53. 206
      src/main/java/com/mh/garrison/mhutils/FastJsonUtil.java
  54. 29
      src/main/java/com/mh/garrison/mhutils/GetBalance.java
  55. 360
      src/main/java/com/mh/garrison/mhutils/HttpsUtil.java
  56. 139
      src/main/java/com/mh/garrison/mhutils/JsonUtil.java
  57. 58
      src/main/java/com/mh/garrison/mhutils/MD5Utils.java
  58. 260
      src/main/java/com/mh/garrison/mhutils/MSGClient.java
  59. 20
      src/main/java/com/mh/garrison/mhutils/Md5Digest.java
  60. 909
      src/main/java/com/mh/garrison/mhutils/MeterUtils.java
  61. 23
      src/main/java/com/mh/garrison/mhutils/PasswordUpdate.java
  62. 185
      src/main/java/com/mh/garrison/mhutils/PostCmdUtils.java
  63. 41
      src/main/java/com/mh/garrison/mhutils/SpringUtils.java
  64. 204
      src/main/java/com/mh/garrison/mhutils/StreamClosedHttpResponse.java
  65. 76
      src/main/java/com/mh/garrison/mhutils/StreamUtil.java
  66. 18
      src/main/java/com/mh/garrison/mhutils/StringUtil.java
  67. 34
      src/main/java/com/mh/garrison/mhutils/TimeUtils.java
  68. 26
      src/main/java/com/mh/garrison/mhutils/UUid.java
  69. 48
      src/main/java/com/mh/garrison/mhutils/WaterFastJson.java
  70. 42
      src/main/java/com/mh/garrison/service/DeviceService.java
  71. 20
      src/main/java/com/mh/garrison/service/MSGService.java
  72. 39
      src/main/java/com/mh/garrison/service/MeterHistoryService.java
  73. 72
      src/main/java/com/mh/garrison/service/MeterNowService.java
  74. 38
      src/main/java/com/mh/garrison/service/MeterService.java
  75. 19
      src/main/java/com/mh/garrison/service/OrderService.java
  76. 91
      src/main/java/com/mh/garrison/service/WaterDayService.java
  77. 53
      src/main/java/com/mh/garrison/service/WaterHistoryService.java
  78. 106
      src/main/java/com/mh/garrison/service/WaterServices.java
  79. 46
      src/main/java/com/mh/garrison/service/impl/MSGServiceImpl.java
  80. 35
      src/main/java/com/mh/garrison/service/impl/OrderServiceImpl.java
  81. 31
      src/main/resources/application.yml
  82. BIN
      src/main/resources/cert/ca.jks
  83. BIN
      src/main/resources/cert/outgoing.CertwithKey.pkcs12
  84. BIN
      src/main/resources/cert_bak.7z
  85. 32
      src/test/java/com/mh/garrison/GarrisonApplicationTests.java

33
.gitignore vendored

@ -0,0 +1,33 @@
read.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/

117
.mvn/wrapper/MavenWrapperDownloader.java vendored

@ -0,0 +1,117 @@
/*
* 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();
}
}

BIN
.mvn/wrapper/maven-wrapper.jar vendored

Binary file not shown.

2
.mvn/wrapper/maven-wrapper.properties vendored

@ -0,0 +1,2 @@
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

2
2024年新增脚本.sql

@ -0,0 +1,2 @@
alter table MeterInstall add PlateformType int default 0;
exec sp_addextendedproperty N'MS_Description', N'平台类型:0-OC平台,1:AEP平台', N'schema', N'dbo', N'table', N'MeterInstall', N'column', N'PlateformType';

310
mvnw vendored

@ -0,0 +1,310 @@
#!/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 "$@"

182
mvnw.cmd vendored

@ -0,0 +1,182 @@
@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%

114
pom.xml

@ -0,0 +1,114 @@
<?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.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.mh</groupId>
<artifactId>garrison</artifactId>
<version>1.0.0</version>
<packaging>war</packaging>
<name>garrison</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.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<!-- 定时执行包 -->
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<!-- <dependency>-->
<!-- <groupId>org.quartz-scheduler</groupId>-->
<!-- <artifactId>quartz</artifactId>-->
<!-- </dependency>-->
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.22</version>
</dependency>
<!-- &lt;!&ndash; https://mvnrepository.com/artifact/org.wso2.apache.httpcomponents/httpclient &ndash;&gt;-->
<!-- <dependency>-->
<!-- <groupId>org.wso2.apache.httpcomponents</groupId>-->
<!-- <artifactId>httpclient</artifactId>-->
<!-- <version>4.3.1.wso2v1</version>-->
<!-- </dependency>-->
<!-- &lt;!&ndash; https://mvnrepository.com/artifact/org.wso2.apache.httpcomponents/httpmime &ndash;&gt;-->
<!-- <dependency>-->
<!-- <groupId>org.wso2.apache.httpcomponents</groupId>-->
<!-- <artifactId>httpmime</artifactId>-->
<!-- <version>4.3.1.wso2v1</version>-->
<!-- </dependency> -->
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.72</version>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</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>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!-- 电信AEP平台SDK方式-->
<dependency>
<groupId>com.ctg.ag</groupId>
<artifactId>ag-sdk-biz-60039.tar.gz</artifactId>
<version>20210518.165353-SNAPSHOT</version>
</dependency>
<!-- 电信AEP平台SDK-->
<dependency>
<groupId>com.ctg.ag</groupId>
<artifactId>ctg-ag-sdk-core</artifactId>
<version>2.5.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

15
src/main/java/com/mh/garrison/GarrisonApplication.java

@ -0,0 +1,15 @@
package com.mh.garrison;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class GarrisonApplication {
public static void main(String[] args) {
SpringApplication.run(GarrisonApplication.class, args);
}
}

13
src/main/java/com/mh/garrison/ServletInitializer.java

@ -0,0 +1,13 @@
package com.mh.garrison;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(GarrisonApplication.class);
}
}

104
src/main/java/com/mh/garrison/config/DruidConfig.java

@ -0,0 +1,104 @@
package com.mh.garrison.config;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.servlet.Filter;
import javax.servlet.Servlet;
import javax.sql.DataSource;
import java.sql.SQLException;
/**
* @author ljf
* @title
* @description
* @updateTime 2020-03-13
* @throws
*/
@Configuration
@EnableConfigurationProperties({DruidDataSourceProperties.class})
public class DruidConfig {
private final DruidDataSourceProperties properties;
@Autowired
public DruidConfig(DruidDataSourceProperties properties) {
this.properties = properties;
}
@Bean
@ConditionalOnMissingBean
public DataSource druidDataSource() {
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setDriverClassName(properties.getDriverClassName());
druidDataSource.setUrl(properties.getUrl());
druidDataSource.setUsername(properties.getUsername());
druidDataSource.setPassword(properties.getPassword());
druidDataSource.setInitialSize(properties.getInitialSize());
druidDataSource.setMinIdle(properties.getMinIdle());
druidDataSource.setMaxActive(properties.getMaxActive());
druidDataSource.setMaxWait(properties.getMaxWait());
druidDataSource.setTimeBetweenEvictionRunsMillis(properties.getTimeBetweenEvictionRunsMillis());
druidDataSource.setMinEvictableIdleTimeMillis(properties.getMinEvictableIdleTimeMillis());
druidDataSource.setValidationQuery(properties.getValidationQuery());
druidDataSource.setTestWhileIdle(properties.isTestWhileIdle());
druidDataSource.setTestOnBorrow(properties.isTestOnBorrow());
druidDataSource.setTestOnReturn(properties.isTestOnReturn());
druidDataSource.setPoolPreparedStatements(properties.isPoolPreparedStatements());
druidDataSource.setMaxPoolPreparedStatementPerConnectionSize(properties.getMaxPoolPreparedStatementPerConnectionSize());
try {
druidDataSource.setFilters(properties.getFilters());
druidDataSource.init();
} catch (SQLException e) {
e.printStackTrace();
}
return druidDataSource;
}
/**
* 注册Servlet信息 配置监控视图
*
* @return
*/
@Bean
@ConditionalOnMissingBean
public ServletRegistrationBean<Servlet> druidServlet() {
ServletRegistrationBean<Servlet> servletRegistrationBean = new ServletRegistrationBean<Servlet>(new StatViewServlet(), "/druid/*");
//白名单:
servletRegistrationBean.addInitParameter("allow","127.0.0.1,139.196.87.48,134.175.248.88");
//IP黑名单 (存在共同时,deny优先于allow) : 如果满足deny的话提示:Sorry, you are not permitted to view this page.
servletRegistrationBean.addInitParameter("deny","192.168.1.223");
//登录查看信息的账号密码, 用于登录Druid监控后台
servletRegistrationBean.addInitParameter("loginUsername", "admin");
servletRegistrationBean.addInitParameter("loginPassword", "admin");
//是否能够重置数据.
servletRegistrationBean.addInitParameter("resetEnable", "true");
return servletRegistrationBean;
}
/**
* 注册Filter信息, 监控拦截器
*
* @return
*/
@Bean
@ConditionalOnMissingBean
public FilterRegistrationBean<Filter> filterRegistrationBean() {
FilterRegistrationBean<Filter> filterRegistrationBean = new FilterRegistrationBean<Filter>();
filterRegistrationBean.setFilter(new WebStatFilter());
filterRegistrationBean.addUrlPatterns("/*");
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
return filterRegistrationBean;
}
}

172
src/main/java/com/mh/garrison/config/DruidDataSourceProperties.java

@ -0,0 +1,172 @@
package com.mh.garrison.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* @author ljf
* @title
* @description
* @updateTime 2020-03-13
* @throws
*/
@ConfigurationProperties(prefix = "spring.datasource.druid")
public class DruidDataSourceProperties {
// jdbc
private String driverClassName;
private String url;
private String username;
private String password;
// jdbc connection pool
private int initialSize;
private int minIdle;
private int maxActive = 100;
private long maxWait;
private long timeBetweenEvictionRunsMillis;
private long minEvictableIdleTimeMillis;
private String validationQuery;
private boolean testWhileIdle;
private boolean testOnBorrow;
private boolean testOnReturn;
private boolean poolPreparedStatements;
private int maxPoolPreparedStatementPerConnectionSize;
// filter
private String filters;
public int getInitialSize() {
return initialSize;
}
public void setInitialSize(int initialSize) {
this.initialSize = initialSize;
}
public int getMinIdle() {
return minIdle;
}
public void setMinIdle(int minIdle) {
this.minIdle = minIdle;
}
public int getMaxActive() {
return maxActive;
}
public void setMaxActive(int maxActive) {
this.maxActive = maxActive;
}
public long getMaxWait() {
return maxWait;
}
public void setMaxWait(long maxWait) {
this.maxWait = maxWait;
}
public long getTimeBetweenEvictionRunsMillis() {
return timeBetweenEvictionRunsMillis;
}
public void setTimeBetweenEvictionRunsMillis(long timeBetweenEvictionRunsMillis) {
this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;
}
public long getMinEvictableIdleTimeMillis() {
return minEvictableIdleTimeMillis;
}
public void setMinEvictableIdleTimeMillis(long minEvictableIdleTimeMillis) {
this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;
}
public String getValidationQuery() {
return validationQuery;
}
public void setValidationQuery(String validationQuery) {
this.validationQuery = validationQuery;
}
public boolean isTestWhileIdle() {
return testWhileIdle;
}
public void setTestWhileIdle(boolean testWhileIdle) {
this.testWhileIdle = testWhileIdle;
}
public boolean isTestOnBorrow() {
return testOnBorrow;
}
public void setTestOnBorrow(boolean testOnBorrow) {
this.testOnBorrow = testOnBorrow;
}
public boolean isTestOnReturn() {
return testOnReturn;
}
public void setTestOnReturn(boolean testOnReturn) {
this.testOnReturn = testOnReturn;
}
public boolean isPoolPreparedStatements() {
return poolPreparedStatements;
}
public void setPoolPreparedStatements(boolean poolPreparedStatements) {
this.poolPreparedStatements = poolPreparedStatements;
}
public int getMaxPoolPreparedStatementPerConnectionSize() {
return maxPoolPreparedStatementPerConnectionSize;
}
public void setMaxPoolPreparedStatementPerConnectionSize(int maxPoolPreparedStatementPerConnectionSize) {
this.maxPoolPreparedStatementPerConnectionSize = maxPoolPreparedStatementPerConnectionSize;
}
public String getFilters() {
return filters;
}
public void setFilters(String filters) {
this.filters = filters;
}
public String getDriverClassName() {
return driverClassName;
}
public void setDriverClassName(String driverClassName) {
this.driverClassName = driverClassName;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}

18
src/main/java/com/mh/garrison/constant/Constants.java

@ -0,0 +1,18 @@
package com.mh.garrison.constant;
/**
* @author LJF
* @version 1.0
* @project garrison
* @description 常量
* @date 2024-12-05 15:00:08
*/
public class Constants {
// 测试
// public static final String NEW_NB_METER_FILE = "D:\\ljf\\项目文档以及资料\\物数和\\警备区\\MeterLogDatas\\";
// 生产
public static final String NEW_NB_METER_FILE = "E:\\MH_NB\\jingbeiqu\\AEP\\MeterLogDatas\\";
public static final String SUCCESS = "success";
}

246
src/main/java/com/mh/garrison/controller/DeviceController.java

@ -0,0 +1,246 @@
package com.mh.garrison.controller;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.mh.garrison.constant.Constants;
import com.mh.garrison.mhutils.UUid;
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.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSONObject;
/**
*
* @ClassName: DeviceController
* @Description:TODO(设备服务调用接口)
* @author: 铭汉科技LJF
* @date: 2020年7月20日 上午11:15:10
*
*/
@RestController
public class DeviceController {
/**
* 单个设备数据变化水表数据变化
* @param jsonParam
* @return
* @throws IOException
*/
@ResponseBody
@RequestMapping(value = "/na/iocm/devNotify/v1.1.0/updateDeviceData", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
public String getByJSON1(@RequestBody JSONObject jsonParam) throws IOException {
// 直接将json信息打印出来
System.out.println("单个设备数据变化————" + jsonParam.toJSONString() + ",大小长度:" + jsonParam.toJSONString().length());
SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss-SSS");
String formatStr2 = formatter2.format(new Date());
// System.out.println(formatStr2);// 2017-09-15
UUid uid = new UUid(); // 生成全球唯一标识
String uidStr = uid.uuid();
// FileOutputStream fileOutputStream = null;
// 把报文保存在本地
int length = jsonParam.toJSONString().length();
File file;
if (length > 500) {
file = new File( Constants.NEW_NB_METER_FILE + formatStr2 + "_" + uidStr + ".txt");
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
BufferedWriter out = null;
try {
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, true)));
out.write(jsonParam.toJSONString() + "\r\n");
} catch (Exception e) {
String causeStr = e.getCause().getMessage();
System.out.println(">>>>>>>-------------" + causeStr);
} finally {
try {
out.close();
} catch (IOException e) {
String causeStr = e.getCause().getMessage();
System.out.println(">>>>>>>-------------" + causeStr);
}
}
}
// else {
// file = new File("E:\\MH_NB\\jingbeiqu\\MeterLogDatas\\" + formatStr2 + "_" + uidStr + ".txt");
// }
// File file = new File("E:\\EEMS_NB\\XT_DBC\\LogDatas\\" + formatStr2 + "_" + uidStr + ".txt");
// File file = new File("E:\\GZ_WATER\\TEST\\LogDatas\\" + formatStr2 + "_" + uidStr + ".txt");
// 创建线程,读取本地报文文件
// 创建线程
// ThreadUtil threadUtil = new ThreadUtil();
// Thread thread = new Thread(threadUtil);
// if (thread.isAlive() == false) {
// thread.start();
// }else {
// System.out.println("线程已启动");
// }
// 将获取的json数据封装一层,然后在给返回
JSONObject result = new JSONObject();
result.put("msg", "ok");
return result.toJSONString();
}
/**
* 批量设备数据变化主要是电表
*
* @param jsonParam
* @return
* @throws IOException
*/
@ResponseBody
@RequestMapping(value = "/na/iocm/devNotify/v1.1.0/updateDeviceDatas", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
public String getByJSON(@RequestBody JSONObject jsonParam) throws IOException, InterruptedException {
// 直接将json信息打印出来
System.out.println("多个设备数据变化————" + jsonParam.toJSONString() + ",大小长度: " + jsonParam.toJSONString().length());
SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss-SSS");
String formatStr2 = formatter2.format(new Date());
System.out.println(formatStr2);// 2017-09-15
UUid uid = new UUid(); // 生成全球唯一标识
String uidStr = uid.uuid();
// FileOutputStream fileOutputStream = null;
// 把报文保存在本地
// D:\MH_NB\test\SingleMeterLogDatas
int length = jsonParam.toJSONString().length();
File file = null;
if (length > 500) {
System.out.println("保存水表记录值");
// file = new File("E:\\MH_NB\\jingbeiqu\\WaterLogDatas\\" + formatStr2 + "_" + uidStr + ".txt");
} else {
file = new File("E:\\MH_NB\\jingbeiqu\\MeterLogDatas\\" + formatStr2 + "_" + uidStr + ".txt");
}
// File file = new File("D:\\NB_Project\\xiamenshuangqiao\\MeterDataLogs\\" + formatStr2 + "_" + uidStr + ".txt");
assert file != null;
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
String causeStr = e.getCause().getMessage();
System.out.println(">>>>>>>-------------" + causeStr);
}
}
BufferedWriter out = null;
try {
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, true)));
out.write(jsonParam.toJSONString() + "\r\n");
} catch (Exception e) {
String causeStr = e.getCause().getMessage();
System.out.println(">>>>>>>-------------" + causeStr);
} finally {
try {
out.close();
} catch (IOException e) {
String causeStr = e.getCause().getMessage();
System.out.println(">>>>>>>-------------" + causeStr);
}
}
// Thread.sleep(300);
// 创建线程,读取本地报文文件
// 创建线程
// ThreadUtil threadUtil = new ThreadUtil();
// Thread thread = new Thread(threadUtil);
// if (thread.isAlive() == false) {
// thread.start();
// }else {
// System.out.println("线程已启动");
// }
// // 文件
// String fileStr = "D:\\MH_NB\\test\\SingleMeterLogDatas\\" + formatStr2 + "_" + uidStr + ".txt";
// ThreadUtil.GetTxts(fileStr);
// 将获取的json数据封装一层,然后在给返回
JSONObject result = new JSONObject();
result.put("msg", "ok");
return result.toJSONString();
}
/**
* 发送指令回返接收指令 add by ljf on 2018-10-12
*
* @param jsonParam
* @return
* @throws IOException
*/
@ResponseBody
@RequestMapping(value = "/na/iocm/devNotify/v1.1.0/reportCmdExecResult", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
public String getCMDResult(@RequestBody JSONObject jsonParam) throws IOException {
// 创建线程
// ThreadUtil threadUtil = new ThreadUtil();
// 直接将json信息打印出来
System.out.println("发送命令返回" + jsonParam.toJSONString());
SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss-SSS");
String formatStr2 = formatter2.format(new Date());
System.out.println(formatStr2);// 2017-09-15
UUid uid = new UUid(); // 生成全球唯一标识
String uidStr = uid.uuid();
// FileOutputStream fileOutputStream = null;
// 把报文保存在本地
File file = new File("E:\\MH_NB\\jingbeiqu\\MeterCMDDatas\\" + formatStr2 + "_" + uidStr + ".txt");
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
BufferedWriter out = null;
try {
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, true)));
out.write(jsonParam.toJSONString() + "\r\n");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// // 创建线程,读取本地报文文件
// Thread thread = new Thread(threadUtil);
// thread.start();
// 将获取的json数据封装一层,然后在给返回
JSONObject result = new JSONObject();
result.put("msg", "ok");
return result.toJSONString();
}
}

14
src/main/java/com/mh/garrison/controller/HelloController.java

@ -0,0 +1,14 @@
package com.mh.garrison.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping
public String Hello() {
return "Hello World";
}
}

82
src/main/java/com/mh/garrison/controller/NewDeviceController.java

@ -0,0 +1,82 @@
package com.mh.garrison.controller;
import com.alibaba.fastjson.JSONObject;
import com.mh.garrison.constant.Constants;
import com.mh.garrison.mhutils.UUid;
import org.springframework.web.bind.annotation.*;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
*
* @ClassName: DeviceController
* @Description:TODO(设备服务调用接口)
* @author: 铭汉科技LJF
* @date: 2024年7月20日 上午11:15:10
*
*/
@RestController
public class NewDeviceController {
/**
* 批量设备数据变化主要是电表
*
* @param jsonParam
* @return
* @throws IOException
*/
@ResponseBody
@RequestMapping(value = "/na/iocm/devNotify/v1.1.1/updateDeviceDatas", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
public String getByJSON(@RequestBody JSONObject jsonParam) throws IOException, InterruptedException {
// 直接将json信息打印出来
System.out.println("多个设备数据变化————" + jsonParam.toJSONString() + ",大小长度: " + jsonParam.toJSONString().length());
SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss-SSS");
String formatStr2 = formatter2.format(new Date());
System.out.println(formatStr2);// 2017-09-15
UUid uid = new UUid(); // 生成全球唯一标识
String uidStr = uid.uuid();
// FileOutputStream fileOutputStream = null;
// 把报文保存在本地
// D:\MH_NB\test\SingleMeterLogDatas
int length = jsonParam.toJSONString().length();
File file = new File(Constants.NEW_NB_METER_FILE + formatStr2 + "_" + uidStr + ".txt");
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
String causeStr = e.getCause().getMessage();
System.out.println(">>>>>>>-------------" + causeStr);
}
}
BufferedWriter out = null;
try {
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, true)));
out.write(jsonParam.toJSONString() + "\r\n");
} catch (Exception e) {
String causeStr = e.getCause().getMessage();
System.out.println(">>>>>>>-------------" + causeStr);
} finally {
try {
if (out != null) {
out.close();
}
} catch (IOException e) {
String causeStr = e.getCause().getMessage();
System.out.println(">>>>>>>-------------" + causeStr);
}
}
// 将获取的json数据封装一层,然后在给返回
JSONObject result = new JSONObject();
result.put("msg", "ok");
return result.toJSONString();
}
}

54
src/main/java/com/mh/garrison/entity/AEPEntity.java

@ -0,0 +1,54 @@
package com.mh.garrison.entity;
/**
* @author 铭汉科技LJL
* @date 2021-06-04 14:22
* @Description AEP电信产品设备组实体类
*/
public class AEPEntity {
private Integer productId;
private Integer deviceGroupId;
private String masterAPIKey;
public AEPEntity() {
}
public AEPEntity(Integer productId, Integer deviceGroupId, String masterAPIKey) {
this.productId = productId;
this.deviceGroupId = deviceGroupId;
this.masterAPIKey = masterAPIKey;
}
public Integer getProductId() {
return productId;
}
public void setProductId(Integer productId) {
this.productId = productId;
}
public Integer getDeviceGroupId() {
return deviceGroupId;
}
public void setDeviceGroupId(Integer deviceGroupId) {
this.deviceGroupId = deviceGroupId;
}
public String getMasterAPIKey() {
return masterAPIKey;
}
public void setMasterAPIKey(String masterAPIKey) {
this.masterAPIKey = masterAPIKey;
}
@Override
public String toString() {
return "AEPEntity{" +
"productId=" + productId +
", deviceGroupId=" + deviceGroupId +
", masterAPIKey='" + masterAPIKey + '\'' +
'}';
}
}

50
src/main/java/com/mh/garrison/entity/DataBean.java

@ -0,0 +1,50 @@
package com.mh.garrison.entity;
import java.util.Map;
/**
*
* @ClassName: DataBean
* @Description:TODO 解析电信平台回来Json数据的第三层数据
* @author: 铭汉科技LJF
* @date: 2018年8月1日 下午3:03:39
*
*/
public class DataBean {
private String MeterId;
private String onlineType;
private String onlineCode;
private Map<Integer, Object> MHMeterData;
// private String MHMeterData;
public String getMeterId() {
return MeterId;
}
public void setMeterId(String meterId) {
MeterId = meterId;
}
public String getOnlineType() {
return onlineType;
}
public void setOnlineType(String onlineType) {
this.onlineType = onlineType;
}
public String getOnlineCode() {
return onlineCode;
}
public void setOnlineCode(String onlineCode) {
this.onlineCode = onlineCode;
}
public Map<Integer, Object> getMHMeterData() {
return MHMeterData;
}
public void setMHMeterData(Map<Integer, Object> mHMeterData) {
MHMeterData = mHMeterData;
}
@Override
public String toString() {
return "DataBean [MeterId=" + MeterId + ", onlineType=" + onlineType + ", onlineCode=" + onlineCode
+ ", MHMeterData=" + MHMeterData + "]";
}
}

201
src/main/java/com/mh/garrison/entity/DeviceInfo.java

@ -0,0 +1,201 @@
package com.mh.garrison.entity;
public class DeviceInfo {
// "nodeId":"865352032588559",
// "name":"865352032588559",
// "description":null,
// "manufacturerId":"MH",
// "manufacturerName":"MH",
// "mac":null,
// "location":"Shenzhen",
// "deviceType":"MHMeter",
// "model":"DDS3666",
// "swVersion":null,
// "fwVersion":null,
// "hwVersion":null,
// "protocolType":"CoAP",
// "bridgeId":null,
// "status":"OFFLINE",
// "statusDetail":"NOT_ACTIVE",
// "mute":"FALSE",
// "supportedSecurity":null,
// "isSecurity":null,
// "signalStrength":null,
// "sigVersion":null,
// "serialNumber":null,
// "batteryLevel":null
private String nodeId;
private String name;
private String description;
private String manufactureId;
private String manufacturerName;
private String mac;
private String location;
private String deviceType;
private String model;
private String swVersion;
private String fwVersion;
private String hwVersion;
private String protocolType;
private String bridgeId;
private String status;
private String statusDetail;
private String mute;
private String supportedSecurity;
private String isSecurity;
private String signalStrength;
private String sigVersion;
private String serialNumber;
private String batteryLevel;
public String getNodeId() {
return nodeId;
}
public void setNodeId(String nodeId) {
this.nodeId = nodeId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getManufactureId() {
return manufactureId;
}
public void setManufactureId(String manufactureId) {
this.manufactureId = manufactureId;
}
public String getManufacturerName() {
return manufacturerName;
}
public void setManufacturerName(String manufacturerName) {
this.manufacturerName = manufacturerName;
}
public String getMac() {
return mac;
}
public void setMac(String mac) {
this.mac = mac;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public String getDeviceType() {
return deviceType;
}
public void setDeviceType(String deviceType) {
this.deviceType = deviceType;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public String getSwVersion() {
return swVersion;
}
public void setSwVersion(String swVersion) {
this.swVersion = swVersion;
}
public String getFwVersion() {
return fwVersion;
}
public void setFwVersion(String fwVersion) {
this.fwVersion = fwVersion;
}
public String getHwVersion() {
return hwVersion;
}
public void setHwVersion(String hwVersion) {
this.hwVersion = hwVersion;
}
public String getProtocolType() {
return protocolType;
}
public void setProtocolType(String protocolType) {
this.protocolType = protocolType;
}
public String getBridgeId() {
return bridgeId;
}
public void setBridgeId(String bridgeId) {
this.bridgeId = bridgeId;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getStatusDetail() {
return statusDetail;
}
public void setStatusDetail(String statusDetail) {
this.statusDetail = statusDetail;
}
public String getMute() {
return mute;
}
public void setMute(String mute) {
this.mute = mute;
}
public String getSupportedSecurity() {
return supportedSecurity;
}
public void setSupportedSecurity(String supportedSecurity) {
this.supportedSecurity = supportedSecurity;
}
public String getIsSecurity() {
return isSecurity;
}
public void setIsSecurity(String isSecurity) {
this.isSecurity = isSecurity;
}
public String getSignalStrength() {
return signalStrength;
}
public void setSignalStrength(String signalStrength) {
this.signalStrength = signalStrength;
}
public String getSigVersion() {
return sigVersion;
}
public void setSigVersion(String sigVersion) {
this.sigVersion = sigVersion;
}
public String getSerialNumber() {
return serialNumber;
}
public void setSerialNumber(String serialNumber) {
this.serialNumber = serialNumber;
}
public String getBatteryLevel() {
return batteryLevel;
}
public void setBatteryLevel(String batteryLevel) {
this.batteryLevel = batteryLevel;
}
@Override
public String toString() {
return "DeviceInfo [nodeId=" + nodeId + ", name=" + name + ", description=" + description + ", manufactureId="
+ manufactureId + ", manufacturerName=" + manufacturerName + ", mac=" + mac + ", location=" + location
+ ", deviceType=" + deviceType + ", model=" + model + ", swVersion=" + swVersion + ", fwVersion="
+ fwVersion + ", hwVersion=" + hwVersion + ", protocolType=" + protocolType + ", bridgeId=" + bridgeId
+ ", status=" + status + ", statusDetail=" + statusDetail + ", mute=" + mute + ", supportedSecurity="
+ supportedSecurity + ", isSecurity=" + isSecurity + ", signalStrength=" + signalStrength
+ ", sigVersion=" + sigVersion + ", serialNumber=" + serialNumber + ", batteryLevel=" + batteryLevel
+ "]";
}
}

77
src/main/java/com/mh/garrison/entity/DeviceMessage.java

@ -0,0 +1,77 @@
package com.mh.garrison.entity;
public class DeviceMessage {
private String deviceId;
private String gatewayId;
private String nodeType;
private String createTime;
private String lastModifiedTime;
private String deviceInfo;
private String services;
private String connectionInfo;
private String devGroupIds;
public String getDeviceId() {
return deviceId;
}
public void setDeviceId(String deviceId) {
this.deviceId = deviceId;
}
public String getGatewayId() {
return gatewayId;
}
public void setGatewayId(String gatewayId) {
this.gatewayId = gatewayId;
}
public String getNodeType() {
return nodeType;
}
public void setNodeType(String nodeType) {
this.nodeType = nodeType;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public String getLastModifiedTime() {
return lastModifiedTime;
}
public void setLastModifiedTime(String lastModifiedTime) {
this.lastModifiedTime = lastModifiedTime;
}
public String getDeviceInfo() {
return deviceInfo;
}
public void setDeviceInfo(String deviceInfo) {
this.deviceInfo = deviceInfo;
}
public String getServices() {
return services;
}
public void setServices(String services) {
this.services = services;
}
public String getConnectionInfo() {
return connectionInfo;
}
public void setConnectionInfo(String connectionInfo) {
this.connectionInfo = connectionInfo;
}
public String getDevGroupIds() {
return devGroupIds;
}
public void setDevGroupIds(String devGroupIds) {
this.devGroupIds = devGroupIds;
}
@Override
public String toString() {
return "DeviceMessage [deviceId=" + deviceId + ", gatewayId=" + gatewayId + ", nodeType=" + nodeType
+ ", createTime=" + createTime + ", lastModifiedTime=" + lastModifiedTime + ", deviceInfo=" + deviceInfo
+ ", services=" + services + ", connectionInfo=" + connectionInfo + ", devGroupIds=" + devGroupIds
+ "]";
}
}

48
src/main/java/com/mh/garrison/entity/DeviceMessageBean.java

@ -0,0 +1,48 @@
package com.mh.garrison.entity;
/**
*
* @ClassName: DeviceMessage
* @Description:解析电信平台返回来的json第一层
* @author: 铭汉科技LJF
* @date: 2018年8月1日 下午3:01:22
*
*/
public class DeviceMessageBean {
private String notiFyType;
private String serviceBean;
private String deviceId;
private String gatewayId;
public String getNotiFyType() {
return notiFyType;
}
public void setNotiFyType(String notiFyType) {
this.notiFyType = notiFyType;
}
public String getServiceBean() {
return serviceBean;
}
public void setServiceBean(String serviceBean) {
this.serviceBean = serviceBean;
}
public String getDeviceId() {
return deviceId;
}
public void setDeviceId(String deviceId) {
this.deviceId = deviceId;
}
public String getGatewayId() {
return gatewayId;
}
public void setGatewayId(String gatewayId) {
this.gatewayId = gatewayId;
}
@Override
public String toString() {
return "DeviceMessage [notiFyType=" + notiFyType + ", serviceBean=" + serviceBean + ", deviceId=" + deviceId
+ ", gatewayId=" + gatewayId + "]";
}
}

40
src/main/java/com/mh/garrison/entity/DevicesBean.java

@ -0,0 +1,40 @@
package com.mh.garrison.entity;
public class DevicesBean {
private long totalCount;
private long pageNo;
private long pageSize;
private String devices;
public long getTotalCount() {
return totalCount;
}
public void setTotalCount(long totalCount) {
this.totalCount = totalCount;
}
public long getPageNo() {
return pageNo;
}
public void setPageNo(long pageNo) {
this.pageNo = pageNo;
}
public long getPageSize() {
return pageSize;
}
public void setPageSize(long pageSize) {
this.pageSize = pageSize;
}
public String getDevices() {
return devices;
}
public void setDevices(String devices) {
this.devices = devices;
}
@Override
public String toString() {
return "DevicesBean [totalCount=" + totalCount + ", pageNo=" + pageNo + ", pageSize=" + pageSize + ", devices="
+ devices + "]";
}
}

80
src/main/java/com/mh/garrison/entity/MSGEntity.java

@ -0,0 +1,80 @@
package com.mh.garrison.entity;
/**
*
* @ClassName: MSGEntity
* @Description:TODO(查询短信需要的信息实体类)
* @author: 铭汉科技LJF
* @date: 2020年7月20日 上午9:22:24
*
*/
public class MSGEntity {
private String houseNum; // 房间号
private String cellphoneNum; // 手机号码
private String balanceMoney; // 余额
private String remark; // 备注或者是短信信息内容
private int sendTime; // 发送次数
private String createDate; // 创建时间
private String sendMsg; // 短信内容
public String getHouseNum() {
return houseNum;
}
public void setHouseNum(String houseNum) {
this.houseNum = houseNum;
}
public String getCellphoneNum() {
return cellphoneNum;
}
public void setCellphoneNum(String cellphoneNum) {
this.cellphoneNum = cellphoneNum;
}
public String getBalanceMoney() {
return balanceMoney;
}
public void setBalanceMoney(String balanceMoney) {
this.balanceMoney = balanceMoney;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public int getSendTime() {
return sendTime;
}
public void setSendTime(int sendTime) {
this.sendTime = sendTime;
}
public String getCreateDate() {
return createDate;
}
public void setCreateDate(String createDate) {
this.createDate = createDate;
}
public String getSendMsg() {
return sendMsg;
}
public void setSendMsg(String sendMsg) {
this.sendMsg = sendMsg;
}
@Override
public String toString() {
return "MSGEntity{" +
"houseNum='" + houseNum + '\'' +
", cellphoneNum='" + cellphoneNum + '\'' +
", balanceMoney='" + balanceMoney + '\'' +
", remark='" + remark + '\'' +
", sendTime=" + sendTime +
", createDate='" + createDate + '\'' +
", sendMsg='" + sendMsg + '\'' +
'}';
}
}

75
src/main/java/com/mh/garrison/entity/MeterHistoryBean.java

@ -0,0 +1,75 @@
package com.mh.garrison.entity;
public class MeterHistoryBean {
private long id; // id
private String mt_num; // 电表账号
private String mt_electric; // 电表读数
private String mt_state; // 电表状态
private String mt_device_id; // 设备在电信平台上的ID号
private String mt_time; // 电表上来时间
private String house_num; // 房间号
private String building_name; // 建筑名
private int grade; // 标志位
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getMt_num() {
return mt_num;
}
public void setMt_num(String mt_num) {
this.mt_num = mt_num;
}
public String getMt_electric() {
return mt_electric;
}
public void setMt_electric(String mt_electric) {
this.mt_electric = mt_electric;
}
public String getMt_state() {
return mt_state;
}
public void setMt_state(String mt_state) {
this.mt_state = mt_state;
}
public String getMt_time() {
return mt_time;
}
public void setMt_time(String mt_time) {
this.mt_time = mt_time;
}
public String getHouse_num() {
return house_num;
}
public void setHouse_num(String house_num) {
this.house_num = house_num;
}
public String getBuilding_name() {
return building_name;
}
public void setBuilding_name(String building_name) {
this.building_name = building_name;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
public String getMt_device_id() {
return mt_device_id;
}
public void setMt_device_id(String mt_device_id) {
this.mt_device_id = mt_device_id;
}
@Override
public String toString() {
return "MeterHistoryBean [id=" + id + ", mt_num=" + mt_num + ", mt_electric=" + mt_electric + ", mt_state="
+ mt_state + ", mt_device_id=" + mt_device_id + ", mt_time=" + mt_time + ", house_num=" + house_num
+ ", building_name=" + building_name + ", grade=" + grade + "]";
}
}

85
src/main/java/com/mh/garrison/entity/MeterNowBean.java

@ -0,0 +1,85 @@
package com.mh.garrison.entity;
public class MeterNowBean {
private long id; // id号
private String mt_num; // 电表表号
private String mt_electric; // 电表读数
private String mt_state; // 电表状态
private String mt_device_id; // 电表在电信平台上的ID号,发送指令需要
private String mt_time; // 电表数据上来的时间
private String limited_power; // 限容功率
private String house_num; // 房间号
private String building_name; // 所属楼层
private int grade; // 标志位
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getMt_num() {
return mt_num;
}
public void setMt_num(String mt_num) {
this.mt_num = mt_num;
}
public String getMt_electric() {
return mt_electric;
}
public void setMt_electric(String mt_electric) {
this.mt_electric = mt_electric;
}
public String getMt_state() {
return mt_state;
}
public void setMt_state(String mt_state) {
this.mt_state = mt_state;
}
public String getMt_time() {
return mt_time;
}
public void setMt_time(String mt_time) {
this.mt_time = mt_time;
}
public String getHouse_num() {
return house_num;
}
public void setHouse_num(String house_num) {
this.house_num = house_num;
}
public String getBuilding_name() {
return building_name;
}
public void setBuilding_name(String building_name) {
this.building_name = building_name;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
public String getLimited_power() {
return limited_power;
}
public void setLimited_power(String limited_power) {
this.limited_power = limited_power;
}
public String getMt_device_id() {
return mt_device_id;
}
public void setMt_device_id(String mt_device_id) {
this.mt_device_id = mt_device_id;
}
@Override
public String toString() {
return "MeterNowBean [id=" + id + ", mt_num=" + mt_num + ", mt_electric=" + mt_electric + ", mt_state="
+ mt_state + ", mt_device_id=" + mt_device_id + ", mt_time=" + mt_time + ", limited_power="
+ limited_power + ", house_num=" + house_num + ", building_name=" + building_name + ", grade=" + grade
+ "]";
}
}

64
src/main/java/com/mh/garrison/entity/OrderEntity.java

@ -0,0 +1,64 @@
package com.mh.garrison.entity;
import java.util.Date;
/**
*
* @ClassName: OrderEntity
* @Description:TODO(指令实体类)
* @author: 铭汉科技LJF
* @date: 2020年7月20日 上午10:37:44
*
*/
public class OrderEntity {
private String houseNum;
private String deviceNum;
private String imeiNum;
private String deviceId;
private String sendOrder;
private Date createDate;
public String getHouseNum() {
return houseNum;
}
public void setHouseNum(String houseNum) {
this.houseNum = houseNum;
}
public String getDeviceNum() {
return deviceNum;
}
public void setDeviceNum(String deviceNum) {
this.deviceNum = deviceNum;
}
public String getImeiNum() {
return imeiNum;
}
public void setImeiNum(String imeiNum) {
this.imeiNum = imeiNum;
}
public String getDeviceId() {
return deviceId;
}
public void setDeviceId(String deviceId) {
this.deviceId = deviceId;
}
public String getSendOrder() {
return sendOrder;
}
public void setSendOrder(String sendOrder) {
this.sendOrder = sendOrder;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
@Override
public String toString() {
return "OrderEntity [houseNum=" + houseNum + ", deviceNum=" + deviceNum + ", imeiNum=" + imeiNum + ", deviceId="
+ deviceId + ", sendOrder=" + sendOrder + ", createDate=" + createDate + "]";
}
}

49
src/main/java/com/mh/garrison/entity/ServiceBean.java

@ -0,0 +1,49 @@
package com.mh.garrison.entity;
/**
*
* @ClassName: ServiceBean
* @Description:解析返回来Json数据第二层
* @author: 铭汉科技LJF
* @date: 2018年8月1日 下午3:02:59
*
*/
public class ServiceBean {
private String serviceId;
private String serviceType;
private String dataBean;
private String eventTime;
public String getServiceId() {
return serviceId;
}
public void setServiceId(String serviceId) {
this.serviceId = serviceId;
}
public String getServiceType() {
return serviceType;
}
public void setServiceType(String serviceType) {
this.serviceType = serviceType;
}
public String getDataBean() {
return dataBean;
}
public void setDataBean(String dataBean) {
this.dataBean = dataBean;
}
public String getEventTime() {
return eventTime;
}
public void setEventTime(String eventTime) {
this.eventTime = eventTime;
}
@Override
public String toString() {
return "ServiceBean [serviceId=" + serviceId + ", serviceType=" + serviceType + ", dataBean=" + dataBean
+ ", eventTime=" + eventTime + "]";
}
}

69
src/main/java/com/mh/garrison/entity/ThreeMeterBean.java

@ -0,0 +1,69 @@
package com.mh.garrison.entity;
public class ThreeMeterBean {
private long id; // id
private String mt_num; // 电表账号
private Double mt_electric; // 电表读数
private String mt_state; // 电表状态
private String mt_time; // 电表上来时间
private String house_num; // 房间号
private String building_name; // 建筑名
private int grade; // 标志位
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getMt_num() {
return mt_num;
}
public void setMt_num(String mt_num) {
this.mt_num = mt_num;
}
public Double getMt_electric() {
return mt_electric;
}
public void setMt_electric(Double mt_electric) {
this.mt_electric = mt_electric;
}
public String getMt_state() {
return mt_state;
}
public void setMt_state(String mt_state) {
this.mt_state = mt_state;
}
public String getMt_time() {
return mt_time;
}
public void setMt_time(String mt_time) {
this.mt_time = mt_time;
}
public String getHouse_num() {
return house_num;
}
public void setHouse_num(String house_num) {
this.house_num = house_num;
}
public String getBuilding_name() {
return building_name;
}
public void setBuilding_name(String building_name) {
this.building_name = building_name;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
@Override
public String toString() {
return "ThreeMeterBean [id=" + id + ", mt_num=" + mt_num + ", mt_electric=" + mt_electric + ", mt_state="
+ mt_state + ", mt_time=" + mt_time + ", house_num=" + house_num + ", building_name=" + building_name
+ ", grade=" + grade + "]";
}
}

84
src/main/java/com/mh/garrison/entity/ThreeMeterNowBean.java

@ -0,0 +1,84 @@
package com.mh.garrison.entity;
public class ThreeMeterNowBean {
private long id; // id号
private String mt_num; // 电表表号
private Double mt_electric; // 电表读数
private String mt_state; // 电表状态
private String mt_device_id; // 电表在电信平台的ID号
private String mt_time; // 电表数据上来的时间
private String limited_power; // 限容功率
private String house_num; // 房间号
private String building_name; // 所属楼层
private int grade; // 标志位
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getMt_num() {
return mt_num;
}
public void setMt_num(String mt_num) {
this.mt_num = mt_num;
}
public Double getMt_electric() {
return mt_electric;
}
public void setMt_electric(Double mt_electric) {
this.mt_electric = mt_electric;
}
public String getMt_state() {
return mt_state;
}
public void setMt_state(String mt_state) {
this.mt_state = mt_state;
}
public String getMt_device_id() {
return mt_device_id;
}
public void setMt_device_id(String mt_device_id) {
this.mt_device_id = mt_device_id;
}
public String getMt_time() {
return mt_time;
}
public void setMt_time(String mt_time) {
this.mt_time = mt_time;
}
public String getLimited_power() {
return limited_power;
}
public void setLimited_power(String limited_power) {
this.limited_power = limited_power;
}
public String getHouse_num() {
return house_num;
}
public void setHouse_num(String house_num) {
this.house_num = house_num;
}
public String getBuilding_name() {
return building_name;
}
public void setBuilding_name(String building_name) {
this.building_name = building_name;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
@Override
public String toString() {
return "ThreeMeterNowBean [id=" + id + ", mt_num=" + mt_num + ", mt_electric=" + mt_electric + ", mt_state="
+ mt_state + ", mt_device_id=" + mt_device_id + ", mt_time=" + mt_time + ", limited_power="
+ limited_power + ", house_num=" + house_num + ", building_name=" + building_name + ", grade=" + grade
+ "]";
}
}

137
src/main/java/com/mh/garrison/entity/WaterBean.java

@ -0,0 +1,137 @@
package com.mh.garrison.entity;
public class WaterBean {
private String wt_num;
private String house_num;
private String IMEI;
private String IMSI;
private String cur_flow;
private String cur_date;
private String manufacture_id;
private int grade;
// add new params update by ljf on 2019-12-12
private Double voltage; // 电池电压
private int contra_flow; // 逆流标志
private int push_button; // 按键异常标志
private int store; // 存储故障标志
private int valve_status; // 阀门状态标志
private int valve_unusual; // 阀门异常标志
private int communication_status;// 通信标志
private int sos_key; // 应急按键标志
// 添加累计逆流量
private Double reflux_flow; // 累计逆流量
public Double getVoltage() {
return voltage;
}
public void setVoltage(Double voltage) {
this.voltage = voltage;
}
public int getContra_flow() {
return contra_flow;
}
public void setContra_flow(int contra_flow) {
this.contra_flow = contra_flow;
}
public int getPush_button() {
return push_button;
}
public void setPush_button(int push_button) {
this.push_button = push_button;
}
public int getStore() {
return store;
}
public void setStore(int store) {
this.store = store;
}
public int getValve_status() {
return valve_status;
}
public void setValve_status(int valve_status) {
this.valve_status = valve_status;
}
public int getValve_unusual() {
return valve_unusual;
}
public void setValve_unusual(int valve_unusual) {
this.valve_unusual = valve_unusual;
}
public int getCommunication_status() {
return communication_status;
}
public void setCommunication_status(int communication_status) {
this.communication_status = communication_status;
}
public int getSos_key() {
return sos_key;
}
public void setSos_key(int sos_key) {
this.sos_key = sos_key;
}
public Double getReflux_flow() {
return reflux_flow;
}
public void setReflux_flow(Double reflux_flow) {
this.reflux_flow = reflux_flow;
}
public String getWt_num() {
return wt_num;
}
public void setWt_num(String wt_num) {
this.wt_num = wt_num;
}
public String getHouse_num() {
return house_num;
}
public void setHouse_num(String house_num) {
this.house_num = house_num;
}
public String getIMEI() {
return IMEI;
}
public void setIMEI(String iMEI) {
IMEI = iMEI;
}
public String getIMSI() {
return IMSI;
}
public void setIMSI(String iMSI) {
IMSI = iMSI;
}
public String getCur_flow() {
return cur_flow;
}
public void setCur_flow(String cur_flow) {
this.cur_flow = cur_flow;
}
public String getCur_date() {
return cur_date;
}
public void setCur_date(String cur_date) {
this.cur_date = cur_date;
}
public String getManufacture_id() {
return manufacture_id;
}
public void setManufacture_id(String manufacture_id) {
this.manufacture_id = manufacture_id;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
@Override
public String toString() {
return "WaterBean [wt_num=" + wt_num + ", house_num=" + house_num + ", IMEI=" + IMEI + ", IMSI=" + IMSI
+ ", cur_flow=" + cur_flow + ", cur_date=" + cur_date + ", manufacture_id=" + manufacture_id
+ ", grade=" + grade + ", voltage=" + voltage + ", contra_flow=" + contra_flow + ", push_button="
+ push_button + ", store=" + store + ", valve_status=" + valve_status + ", valve_unusual="
+ valve_unusual + ", communication_status=" + communication_status + ", sos_key=" + sos_key
+ ", reflux_flow=" + reflux_flow + "]";
}
}

39
src/main/java/com/mh/garrison/entity/WaterDataBean.java

@ -0,0 +1,39 @@
package com.mh.garrison.entity;
/**
* @author ljf
* @title 水表返回报文
* @description
* @updateTime 2020-07-23
* @throws
*/
public class WaterDataBean {
private String MeterId;
private String onlineType;
private String onlineCode;
public String getMeterId() {
return MeterId;
}
public void setMeterId(String meterId) {
MeterId = meterId;
}
public String getOnlineType() {
return onlineType;
}
public void setOnlineType(String onlineType) {
this.onlineType = onlineType;
}
public String getOnlineCode() {
return onlineCode;
}
public void setOnlineCode(String onlineCode) {
this.onlineCode = onlineCode;
}
@Override
public String toString() {
return "DataBean [MeterId=" + MeterId + ", onlineType=" + onlineType + ", onlineCode=" + onlineCode + "]";
}
}

105
src/main/java/com/mh/garrison/entity/WaterDayBean.java

@ -0,0 +1,105 @@
package com.mh.garrison.entity;
public class WaterDayBean {
private long id;
private String house_num;
private String wt_num;
private String last_flow;
private String cur_flow;
private String calc_flow;
private String true_flow;
private String wt_ratio;
private String used_money;
private String after_money;
private String cur_date;
private String building_name;
// private int grade;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getHouse_num() {
return house_num;
}
public void setHouse_num(String house_num) {
this.house_num = house_num;
}
public String getWt_num() {
return wt_num;
}
public void setWt_num(String wt_num) {
this.wt_num = wt_num;
}
public String getLast_flow() {
return last_flow;
}
public void setLast_flow(String last_flow) {
this.last_flow = last_flow;
}
public String getCur_flow() {
return cur_flow;
}
public void setCur_flow(String cur_flow) {
this.cur_flow = cur_flow;
}
public String getCalc_flow() {
return calc_flow;
}
public void setCalc_flow(String calc_flow) {
this.calc_flow = calc_flow;
}
public String getTrue_flow() {
return true_flow;
}
public void setTrue_flow(String true_flow) {
this.true_flow = true_flow;
}
public String getWt_ratio() {
return wt_ratio;
}
public void setWt_ratio(String wt_ratio) {
this.wt_ratio = wt_ratio;
}
public String getUsed_money() {
return used_money;
}
public void setUsed_money(String used_money) {
this.used_money = used_money;
}
public String getAfter_money() {
return after_money;
}
public void setAfter_money(String after_money) {
this.after_money = after_money;
}
public String getCur_date() {
return cur_date;
}
public void setCur_date(String cur_date) {
this.cur_date = cur_date;
}
public String getBuilding_name() {
return building_name;
}
public void setBuilding_name(String building_name) {
this.building_name = building_name;
}
// public int getGrade() {
// return grade;
// }
// public void setGrade(int grade) {
// this.grade = grade;
// }
@Override
public String toString() {
return "WaterDayBean [id=" + id + ", house_num=" + house_num + ", wt_num=" + wt_num + ", last_flow=" + last_flow
+ ", cur_flow=" + cur_flow + ", calc_flow=" + calc_flow + ", true_flow=" + true_flow + ", wt_ratio="
+ wt_ratio + ", used_money=" + used_money + ", after_money=" + after_money + ", cur_date=" + cur_date
+ ", building_name=" + building_name + "]";
// + ", grade=" + grade + "]";
}
}

69
src/main/java/com/mh/garrison/entity/WaterHistoryBean.java

@ -0,0 +1,69 @@
package com.mh.garrison.entity;
public class WaterHistoryBean {
private String wt_num;
private String house_num;
private String IMEI;
private String IMSI;
private String cur_flow;
private String cur_date;
private String manufacture_id;
private int grade;
public String getWt_num() {
return wt_num;
}
public void setWt_num(String wt_num) {
this.wt_num = wt_num;
}
public String getHouse_num() {
return house_num;
}
public void setHouse_num(String house_num) {
this.house_num = house_num;
}
public String getIMEI() {
return IMEI;
}
public void setIMEI(String iMEI) {
IMEI = iMEI;
}
public String getIMSI() {
return IMSI;
}
public void setIMSI(String iMSI) {
IMSI = iMSI;
}
public String getCur_flow() {
return cur_flow;
}
public void setCur_flow(String cur_flow) {
this.cur_flow = cur_flow;
}
public String getCur_date() {
return cur_date;
}
public void setCur_date(String cur_date) {
this.cur_date = cur_date;
}
public String getManufacture_id() {
return manufacture_id;
}
public void setManufacture_id(String manufacture_id) {
this.manufacture_id = manufacture_id;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
@Override
public String toString() {
return "WaterDayBean [wt_num=" + wt_num + ", house_num=" + house_num + ", IMEI=" + IMEI + ", IMSI=" + IMSI
+ ", cur_flow=" + cur_flow + ", cur_date=" + cur_date + ", manufacture_id=" + manufacture_id
+ ", grade=" + grade + "]";
}
}

121
src/main/java/com/mh/garrison/job/DealMeterLogJob.java

@ -0,0 +1,121 @@
package com.mh.garrison.job;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.mh.garrison.mhutils.FastJson;
/**
*
* @ClassName: DealMeterLog
* @Description:TODO(定时处理电表数据)
* @author: 铭汉科技LJF
* @date: 2020年7月20日 下午1:37:23
*
*/
@Component
public class DealMeterLogJob {
// @Scheduled(cron = "0 0/30 * * * ? *")
@Scheduled(cron = "0/30 * * * * ? ")
public void dealMeterLogJob() {
String filePath = "E:\\MH_NB\\jingbeiqu\\MeterLogDatas\\";
GetTxts(filePath);
}
public static void GetTxts(String filePath) {
FastJson fastJson = new FastJson();
File rootFile = new File(filePath);
if (!rootFile.isDirectory()) {
// System.out.println("文件名----" + rootFile.getAbsolutePath());
// 读取文件内容
try { // 防止文件建立或读取失败,用catch捕捉错误并打印,也可以throw
/* 读入TXT文件 */
String line;
String jsonStr = null;
String pathname = rootFile.getAbsolutePath(); // 绝对路径或相对路径都可以,写入文件时演示相对路径
File filename = new File(pathname); // 要读取以上路径的input.txt文件
if (filename.length()>0) {
InputStreamReader reader = new InputStreamReader(new FileInputStream(filename)); // 建立一个输入流对象reader
BufferedReader br = new BufferedReader(reader); // 建立一个对象,它把文件内容转成计算机能读懂的语言
// 网友推荐更加简洁的写法
System.out.println("文件内容:" + br.lines());
while ((line = br.readLine()) != null) {
// 一次读入一行数据
// System.out.println(line);
// try {
// DBIdentifier.setProjectCode("NB网络电表");
//// DBIdentifier.setProjectCode("NB网络电表");
// // DBIdentifier.setProjectCode("本地NB网络电表");
// } catch (Exception e) {
// // TODO: handle exception
// String causeStr = e.getCause().getMessage();
// System.out.println(">>>>>>>-------------" + causeStr);
// }
// 获取电表数据内容
jsonStr = fastJson.analysisMeterFastJson(line);
if (jsonStr.equals("success")) {
System.out.println("解析成功");
} else {
System.out.println("解析失败");
}
// System.out.println(jsonStr);
// for(int i = 1; i<=jsonStr.size();i++) {
// System.out.println(jsonStr.get(i).toString());
//
// meterUtils.analysisMeter(jsonStr.get(i).toString(), line);
// }
}
reader.close();
br.close();
assert jsonStr != null;
if (jsonStr.equals("success")) {
// 删除filename
if (filename.exists()) {
filename.delete();
System.out.println("删除成功");
}
}
} else {
// 删除filename
if (filename.exists()) {
filename.delete();
System.out.println("删除成功");
}
}
} catch (Exception e) {
String causeStr = e.getCause().getMessage();
System.out.println(">>>>>>>-------------" + causeStr);
}
} else {
// 递归查询文件内容
String[] fileList = rootFile.list();
assert fileList != null;
for (String s : fileList) {
filePath = rootFile.getAbsolutePath() + "\\" + s;
System.out.println("文件路径:" + filePath);
try {
GetTxts(filePath);
} catch (Exception e) {
// TODO: handle exception
// 删除filename
File rootFile1 = new File(filePath);
if (rootFile1.exists()) {
rootFile1.delete();
System.out.println("出现异常,删除成功");
}
e.printStackTrace();
}
}
}
}
}

107
src/main/java/com/mh/garrison/job/DealWaterLogJob.java

@ -0,0 +1,107 @@
package com.mh.garrison.job;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.mh.garrison.mhutils.ByteUtilsWater;
import com.mh.garrison.mhutils.FastJson;
/**
*
* @ClassName: DealWaterLogJob
* @Description:TODO(定时处理接收到的水表报文记录)
* @author: 铭汉科技LJF
* @date: 2020年7月20日 下午1:56:31
*
*/
@Component
public class DealWaterLogJob {
@Scheduled(cron = "0 0/30 * * * ? ")
public void dealMeterLogJob() {
String filePath = "E:\\MH_NB\\jingbeiqu\\WaterLogDatas\\";
GetTxts1(filePath);
}
private static void GetTxts1(String filePath) {
// TODO Auto-generated method stub
FastJson fastJson = new FastJson();
File rootFile = new File(filePath);
String receive_result = null ;
if (! rootFile.isDirectory()) {
System.out.println("文件名----" + rootFile.getAbsolutePath());
// 读取文件内容
try { // 防止文件建立或读取失败,用catch捕捉错误并打印,也可以throw
/* 读入TXT文件 */
String pathname = rootFile.getAbsolutePath(); // 绝对路径或相对路径都可以,写入文件时演示相对路径
File filename = new File(pathname); // 要读取以上路径的input.txt文件
if (filename.length() > 0){
InputStreamReader reader = new InputStreamReader(
new FileInputStream(filename)); // 建立一个输入流对象reader
BufferedReader br = new BufferedReader(reader); // 建立一个对象,它把文件内容转成计算机能读懂的语言
String line;
//网友推荐更加简洁的写法
while ((line = br.readLine()) != null) {
try {
// 一次读入一行数据
// System.out.println(line);
String jsonStr = fastJson.analysisFastJson(line);
// System.out.println(jsonStr);
// 解析onlineCode
ByteUtilsWater byteUtils = new ByteUtilsWater();
receive_result = byteUtils.analysisFastJson1(jsonStr);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
reader.close();
br.close();
// 删除filename
if (receive_result.equals("success")) {
System.out.println("------------------------解析成功------------------");
if (filename.exists()) {
filename.delete();
System.out.println(filename + "删除成功");
}
}else {
System.out.println("------------------------解析失败------------------");
}
} else {
// 删除filename
if (filename.exists()) {
filename.delete();
System.out.println("删除成功");
}
}
} catch (Exception e) {
String causeStr = e.getCause().getMessage();
System.out.println(">>>>>>>-------------" + causeStr);
}
}else {
// 递归查询文件内容
String[] fileList = rootFile.list();
assert fileList != null;
for (String s : fileList) {
filePath = rootFile.getAbsolutePath() + "\\" + s;
try {
GetTxts1(filePath);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
// continue;
}
}
}
}
}

109
src/main/java/com/mh/garrison/job/NewDealMeterLogJob.java

@ -0,0 +1,109 @@
package com.mh.garrison.job;
import com.alibaba.druid.util.StringUtils;
import com.alibaba.fastjson.JSONObject;
import com.mh.garrison.constant.Constants;
import com.mh.garrison.mhutils.FastJson;
import com.mh.garrison.mhutils.StringUtil;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.nio.file.Files;
/**
*
* @ClassName: DealMeterLog
* @Description:TODO(定时处理电表数据)
* @author: 铭汉科技LJF
* @date: 2020年7月20日 下午1:37:23
*
*/
@Component
public class NewDealMeterLogJob {
// 5秒处理一次
@Scheduled(cron = "0/5 * * * * ? ")
public void dealMeterLogJob() {
GetTxts(Constants.NEW_NB_METER_FILE);
}
public static void GetTxts(String filePath) {
FastJson fastJson = new FastJson();
File rootFile = new File(filePath);
if (!rootFile.isDirectory()) {
// System.out.println("文件名----" + rootFile.getAbsolutePath());
// 读取文件内容
try { // 防止文件建立或读取失败,用catch捕捉错误并打印,也可以throw
/* 读入TXT文件 */
String line;
String jsonStr = null;
String pathname = rootFile.getAbsolutePath(); // 绝对路径或相对路径都可以,写入文件时演示相对路径
File filename = new File(pathname); // 要读取以上路径的input.txt文件
if (filename.length()>0) {
InputStreamReader reader = new InputStreamReader(Files.newInputStream(filename.toPath())); // 建立一个输入流对象reader
BufferedReader br = new BufferedReader(reader); // 建立一个对象,它把文件内容转成计算机能读懂的语言
// 网友推荐更加简洁的写法
System.out.println("文件内容:" + br.lines());
while ((line = br.readLine()) != null) {
String payload = JSONObject.parseObject(line).getString("payload");
if (!payload.isEmpty()){
//走AEP平台解析
jsonStr = fastJson.analysisEleFastJsonByAEPProfile(line);
} else {
//OC
jsonStr = fastJson.analysisMeterFastJson(line);
}
}
reader.close();
br.close();
if (!StringUtils.isEmpty(jsonStr)){
if (jsonStr.equals("success")) {
// 删除filename
if (filename.exists()) {
filename.delete();
System.out.println("删除成功");
}
}
}
} else {
// 删除filename
if (filename.exists()) {
filename.delete();
System.out.println("删除成功");
}
}
} catch (Exception e) {
String causeStr = e.getCause().getMessage();
System.out.println(">>>>>>>-------------" + causeStr);
}
} else {
// 递归查询文件内容
String[] fileList = rootFile.list();
assert fileList != null;
for (String s : fileList) {
filePath = rootFile.getAbsolutePath() + "\\" + s;
System.out.println("文件路径:" + filePath);
try {
GetTxts(filePath);
} catch (Exception e) {
// TODO: handle exception
// 删除filename
File rootFile1 = new File(filePath);
if (rootFile1.exists()) {
rootFile1.delete();
System.out.println("出现异常,删除成功");
}
e.printStackTrace();
}
}
}
}
}

236
src/main/java/com/mh/garrison/job/QueryDeviceJob.java

@ -0,0 +1,236 @@
package com.mh.garrison.job;
import java.text.ParseException;
import java.util.HashMap;
import java.util.Map;
import com.mh.garrison.mhutils.*;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
/**
*
* @ClassName: QueryDeviceJob
* @Description:TODO(定时查询状态设备信息)
* @author: 铭汉科技LJF
* @date: 2020年7月20日 上午9:06:07
*
*/
@Component
public class QueryDeviceJob {
@Scheduled(cron = "0 0 0-4 * * ? ")
public void queryDevice() {
System.out.println("每四个小时定时查询设备状态值");
// TODO Auto-generated method stub
// TODO Auto-generated method stub
// Two-Way Authentication
HttpsUtil httpsUtil = new HttpsUtil();
try {
httpsUtil.initSSLConfigForTwoWay();
} catch (Exception e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
// Authentication,get token
String accessToken = null;
try {
accessToken = login(httpsUtil);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// Please make sure that the following parameter values have been modified in
// the Constant file.
String appId = Constant.APPID;
String urlQueryDevices = Constant.QUERY_DEVICES;
// please replace the pageNo and pageSize, when you use the demo.
Integer pageNo = 0;
Integer pageSize = 500;
Map<String, String> paramQueryDevices = new HashMap<String, String>();
paramQueryDevices.put("appId", appId);
paramQueryDevices.put("pageNo", pageNo.toString());
paramQueryDevices.put("pageSize", pageSize.toString());
Map<String, String> header = new HashMap<String, String>();
header.put(Constant.HEADER_APP_KEY, appId);
header.put(Constant.HEADER_APP_AUTH, "Bearer" + " " + accessToken);
StreamClosedHttpResponse bodyQueryDevices = null;
try {
bodyQueryDevices = httpsUtil.doGetWithParasGetStatusLine(urlQueryDevices, paramQueryDevices, header);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// System.out.println("请求地址----" + urlQueryDevices);
// System.out.println("请求参数----" + paramQueryDevices);
// System.out.println("请求头部----" + header);
System.out.println("QueryDevices, response content:");
System.out.println(bodyQueryDevices.getStatusLine());
System.out.println(bodyQueryDevices.getContent());
System.out.println();
String state;
try {
FastJsonUtil fastJsonUtil = new FastJsonUtil();
state = fastJsonUtil.analysisFastJson(bodyQueryDevices.getContent());
if (state.equals("success")) {
System.out.println("查询设备信息成功!!");
} else {
System.out.println("查询设备信息失败!!");
}
// String deviceMessage = jsonNode.get("devices").toString();
// System.out.println(deviceMessage);
// List<DeviceMessage> beanList = objectMapper.readValue(deviceMessage, new
// TypeReference<List<DeviceMessage>>() {});
// System.out.println(beanList);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* Authenticationget token
*/
@SuppressWarnings("unchecked")
public static String login(HttpsUtil httpsUtil) throws Exception {
String appId = Constant.APPID;
String secret = Constant.SECRET;
String urlLogin = Constant.APP_AUTH;
Map<String, String> paramLogin = new HashMap<String, String>();
paramLogin.put("appId", appId);
paramLogin.put("secret", secret);
StreamClosedHttpResponse responseLogin = httpsUtil.doPostFormUrlEncodedGetStatusLine(urlLogin, paramLogin);
System.out.println("app auth success,return accessToken:");
System.out.print(responseLogin.getStatusLine());
System.out.println(responseLogin.getContent());
System.out.println();
Map<String, String> data = new HashMap<String, String>();
data = JsonUtil.jsonString2SimpleObj(responseLogin.getContent(), data.getClass());
return data.get("accessToken");
}
/**
* 查询水表状态值
*/
@Scheduled(cron = "0 0 0-4 * * ? ")
public void queryWaterDevice() {
System.out.println("每四个小时定时查询设备状态值");
// TODO Auto-generated method stub
// TODO Auto-generated method stub
// Two-Way Authentication
HttpsUtil httpsUtil = new HttpsUtil();
try {
httpsUtil.initSSLConfigForTwoWay();
} catch (Exception e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
// Authentication,get token
String accessToken = null;
try {
accessToken = loginWater(httpsUtil);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// Please make sure that the following parameter values have been modified in
// the Constant file.
String appId = ConstantWater.APPID;
String urlQueryDevices = ConstantWater.QUERY_DEVICES;
// please replace the pageNo and pageSize, when you use the demo.
Integer pageNo = 0;
Integer pageSize = 500;
Map<String, String> paramQueryDevices = new HashMap<String, String>();
paramQueryDevices.put("appId", appId);
paramQueryDevices.put("pageNo", pageNo.toString());
paramQueryDevices.put("pageSize", pageSize.toString());
Map<String, String> header = new HashMap<String, String>();
header.put(Constant.HEADER_APP_KEY, appId);
header.put(Constant.HEADER_APP_AUTH, "Bearer" + " " + accessToken);
StreamClosedHttpResponse bodyQueryDevices = null;
try {
bodyQueryDevices = httpsUtil.doGetWithParasGetStatusLine(urlQueryDevices, paramQueryDevices, header);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// System.out.println("请求地址----" + urlQueryDevices);
// System.out.println("请求参数----" + paramQueryDevices);
// System.out.println("请求头部----" + header);
System.out.println("QueryDevices, response content:");
System.out.println(bodyQueryDevices.getStatusLine());
System.out.println(bodyQueryDevices.getContent());
System.out.println();
String state;
try {
FastJsonUtil fastJsonUtil = new FastJsonUtil();
state = fastJsonUtil.analysisFastJson(bodyQueryDevices.getContent());
if (state.equals("success")) {
System.out.println("查询设备信息成功!!");
} else {
System.out.println("查询设备信息失败!!");
}
// String deviceMessage = jsonNode.get("devices").toString();
// System.out.println(deviceMessage);
// List<DeviceMessage> beanList = objectMapper.readValue(deviceMessage, new
// TypeReference<List<DeviceMessage>>() {});
// System.out.println(beanList);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* Authenticationget token
*/
@SuppressWarnings("unchecked")
public static String loginWater(HttpsUtil httpsUtil) throws Exception {
String appId = ConstantWater.APPID;
String secret = ConstantWater.SECRET;
String urlLogin = ConstantWater.APP_AUTH;
Map<String, String> paramLogin = new HashMap<String, String>();
paramLogin.put("appId", appId);
paramLogin.put("secret", secret);
StreamClosedHttpResponse responseLogin = httpsUtil.doPostFormUrlEncodedGetStatusLine(urlLogin, paramLogin);
System.out.println("app auth success,return accessToken:");
System.out.print(responseLogin.getStatusLine());
System.out.println(responseLogin.getContent());
System.out.println();
Map<String, String> data = new HashMap<String, String>();
data = JsonUtil.jsonString2SimpleObj(responseLogin.getContent(), data.getClass());
return data.get("accessToken");
}
}

123
src/main/java/com/mh/garrison/job/SendMSGJob.java

@ -0,0 +1,123 @@
package com.mh.garrison.job;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.List;
import com.mh.garrison.mhutils.MSGClient;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.mh.garrison.entity.MSGEntity;
import com.mh.garrison.service.MSGService;
/**
*
* @ClassName: SendMSGJob
* @Description:TODO(定时发送短信信息)
* @author: 铭汉科技LJF
* @date: 2020年7月20日 上午9:00:39
*
*/
@Component
public class SendMSGJob {
private final MSGService msgService;
public SendMSGJob(MSGService msgService) {
// TODO Auto-generated constructor stub
this.msgService = msgService;
}
// @Scheduled(cron = "0 0 0/1 * * ? ")
public void sendMSG() {
System.out.println("每小时执行一次定时发送短信提醒指令");
try {
boolean result = sendCellphoneMessage();
if (result) {
System.out.println("---------------已发送手机短信---------------");
} else {
System.out.println("---------未发送手机短信或者没有结果集-----------");
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public boolean sendCellphoneMessage() throws InterruptedException {
boolean returnResult = false;
String userName = "jbqznjf";
String password = "dT6pH6rQ1";
List<MSGEntity> msgEntities = msgService.queryMSGList();
for (int i = 0; i < msgEntities.size(); i++) {
// String content = "尊敬的" + msgEntities.get(i).getHouseNum() + "房客户,您好,您目前"+ msgEntities.get(i).getRemark()+"余额为 "
// + msgEntities.get(i).getBalanceMoney() + " 元,为了您的正常使用,请您尽快到指定站点充值,谢谢!" + "【校园电表系统】";
String content = msgEntities.get(i).getSendMsg();
String mobile = msgEntities.get(i).getCellphoneNum();
int send_time = msgEntities.get(i).getSendTime() + 1;
String remark = msgEntities.get(i).getRemark();
String createDate = msgEntities.get(i).getCreateDate();
// String content1 = "你好!【校园电表系统】,电费!【校园电表系统】";
// String mobile = "18011970201,15277338501,18922383731";
MSGClient msgClient = null;
String result = null;
try {
msgClient = new MSGClient(userName, password);
result = msgClient.mt(URLEncoder.encode(content, "UTF-8"), mobile, "", "", "", "");
System.out.println("发送结果--------" + result);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Thread.sleep(200);
String strCode = result.split("\n")[0];
long code = 0;
code = Long.parseLong(strCode);
String Info = null;
if (code > 0) {// 成功提交
String sendStatus = msgService.updateSysSms("已发送",mobile, send_time, createDate);
if (sendStatus.equalsIgnoreCase("success")) {
Info = "发送成功";
System.out.println("返回信息:" + Info + "--" + code + "--" + msgClient.getPwd());
returnResult = true;
} else {
Info = "发送失败";
returnResult = false;
}
} else {
msgService.updateSysSms("未发送",mobile, send_time, createDate);
returnResult = false;
if (code == 0) {
Info = "发送失败";
} else if (code == -1) { // 用户名密码不正确
Info = "用户名密码不正确";
} else if (code == -2) { // 必填选项为空
Info = "必填选项为空";
} else if (code == -3) { // 短信内容0个字节
Info = "短信内容0个字节";
} else if (code == -4) { // 0个有效号码
Info = "0个有效号码";
} else if (code == -5) { // 余额不够
Info = "余额不够";
} else if (code == -10) { // 用户被禁用
Info = "用户被禁用";
} else if (code == -11) { // 短信内容过长
Info = "短信内容过长";
} else if (code == -12) { // 用户无扩展权限
Info = "无扩展权限";
} else if (code == -13) { // IP地址校验错
Info = "IP校验错误";
} else if (code == -14) { // 内容解析异常
Info = "内容解析异常";
} else {
Info = "未知错误";
}
}
assert msgClient != null;
System.out.println("返回信息:" + Info + "--" + code + "--" + msgClient.getPwd());
}
return returnResult;
}
}

216
src/main/java/com/mh/garrison/job/SendOrderJob.java

@ -0,0 +1,216 @@
package com.mh.garrison.job;
import java.io.IOException;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.mh.garrison.entity.AEPEntity;
import com.mh.garrison.mhutils.*;
import com.mh.garrison.service.MeterService;
import org.apache.http.HttpResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.mh.garrison.entity.OrderEntity;
import com.mh.garrison.service.OrderService;
/**
* @ClassName: SendOrderJob
* @Description:TODO(定时发送指令)
* @author: 铭汉科技LJF
* @date: 2020年7月20日 上午9:08:28
*/
@Component
public class SendOrderJob {
private final OrderService orderService;
private final MeterService meterService;
public SendOrderJob(OrderService orderService, MeterService meterService) {
// TODO Auto-generated constructor stub
this.orderService = orderService;
this.meterService = meterService;
}
@Scheduled(cron = "0/30 * * * * ? ")
public void sendOrder() {
System.out.println("每30秒定时发送指令状态值");
try {
if (sendOrderJob()) {
System.out.println("------------已发送报文-------------");
} else {
System.out.println("------------未发送报文-------------");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private boolean sendOrderJob() {
// TODO Auto-generated method stub
/*
* the device must connect to IoT platform before na post asyn command to device
*/
// {
// "_class" : "com.huawei.iom.iocm.domain.nsse.NsseRoute",
// "deviceId" : "8c23b6b4-ea68-48fb-9c2f-90452a81ebb1",
// "appId" : "pAw9x9zinQnQkYSLWbiGI_O6iBUa",
// "nsseId" : "http://185.11.1.43:8096",
// "edgeGwId" : "MeterCig",
// "edgeGwType" : "CoAP",
// "status" : "ONLINE"
// }
// Double test = 9.9;
Boolean send_sms = false;
try {
List<OrderEntity> orderEntities = orderService.queryOrderList();
if (orderEntities.size() != 0) {
for (int i = 0; i < orderEntities.size(); i++) {
// 判断当前电表平台类型
OrderEntity orderEntity = orderEntities.get(i);
// 0:默认OC平台,1:AEP平台
Integer platformType = meterService.selectPlatformType(orderEntity.getHouseNum(), orderEntity.getDeviceNum());
if (platformType == 1) {
System.out.println("------------发送AEP平台-------------");
sendAEPOrder(orderEntity);
Thread.sleep(3000); // 发送命令之后延时3秒钟
send_sms = true;
continue;
}
// Two-Way Authentication
HttpsUtil httpsUtil = new HttpsUtil();
httpsUtil.initSSLConfigForTwoWay();
// Authentication,get token
String accessToken = login(httpsUtil);
// Please make sure that the following parameter values have been modified in
// the Constant file.
String urlPostAsynCmd = Constant.POST_ASYN_CMD;
String appId = Constant.APPID;
// please replace the deviceId, when you use the demo.
// String deviceId = "e86be9aa-d61b-428f-9d3f-f0dcef365308";
String deviceId = null;
try {
deviceId = orderEntities.get(i).getDeviceId();
} catch (Exception e) {
// TODO: handle exception
deviceId = "空值";
}
if (deviceId != null) {
String callbackUrl = Constant.REPORT_CMD_EXEC_RESULT_CALLBACK_URL;
// please replace the following parameter values, when you use the demo.
// And those parameter values must be consistent with the content of profile
// that have been preset to IoT platform.
// The following parameter values of this demo are use the watermeter profile
// that already initialized to IoT platform.
String serviceId = "MHMeterData";
String method = "COMMAND";
String sendOrder = orderEntities.get(i).getSendOrder();
// ObjectNode paras =
// ObjectNode paras = JsonUtil.convertObject2ObjectNode("{\"value\":\"689999999999996804085BF33333333388667A16\"}"); // 拉闸
// ObjectNode paras = JsonUtil.convertObject2ObjectNode("{\"value\":\"689999999999996804085BF33333333399CCF116\"}"); // 合闸
// JsonUtil.convertObject2ObjectNode("{\"value\":\"689999999999996804085BF33333333388667A16\"}");
// // 拉闸
ObjectNode paras = JsonUtil.convertObject2ObjectNode("{\"value\":\"" + sendOrder + "\"}"); // 合闸
Map<String, Object> paramCommand = new HashMap<String, Object>();
paramCommand.put("serviceId", serviceId);
paramCommand.put("method", method);
paramCommand.put("paras", paras);
Map<String, Object> paramPostAsynCmd = new HashMap<String, Object>();
paramPostAsynCmd.put("deviceId", deviceId);
paramPostAsynCmd.put("command", paramCommand);
paramPostAsynCmd.put("callbackUrl", callbackUrl); // 设置回调地址
paramPostAsynCmd.put("expireTime", "0"); // 设置发送时间
String jsonRequest = JsonUtil.jsonObj2Sting(paramPostAsynCmd);
Map<String, String> header = new HashMap<String, String>();
header.put(Constant.HEADER_APP_KEY, appId);
header.put(Constant.HEADER_APP_AUTH, "Bearer" + " " + accessToken);
HttpResponse responsePostAsynCmd = httpsUtil.doPostJson(urlPostAsynCmd, header, jsonRequest);
String responseBody = httpsUtil.getHttpResponseBody(responsePostAsynCmd);
System.out.println("PostAsynCommand, response content:");
System.out.print(responsePostAsynCmd.getStatusLine());
System.out.println(responseBody);
System.out.println();
Thread.sleep(3000); // 发送命令之后延时3秒钟
send_sms = true;
}
}
}
} catch (IOException e) {
// TODO: handle exception
// e.printStackTrace();
System.out.println("----------------" + e.getMessage().toString() + "---------------------");
return send_sms;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Throwable e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return send_sms;
}
private void sendAEPOrder(OrderEntity orderEntity) {
try {
String deviceId = orderEntity.getDeviceId();
Integer groupId = 153097;
Integer productNum = 17171214;
String masterAPIkey = "72a2c789bb3f4f90b6e5bbffbe6e86b7";
AEPEntity aepEntity = new AEPEntity();
aepEntity.setDeviceGroupId(groupId);
aepEntity.setMasterAPIKey(masterAPIkey);
aepEntity.setProductId(productNum);
PostCmdUtils.postAsyncCmdAEPV1ByProfile(deviceId, orderEntity.getSendOrder(), aepEntity);
} catch (Exception e) {
e.printStackTrace();
System.out.println("----------------" + e.getMessage() + "---------------------");
}
}
/**
* Authenticationget token
*/
@SuppressWarnings("unchecked")
public static String login(HttpsUtil httpsUtil) throws Exception {
String appId = Constant.APPID;
String secret = Constant.SECRET;
String urlLogin = Constant.APP_AUTH;
Map<String, String> paramLogin = new HashMap<String, String>();
paramLogin.put("appId", appId);
paramLogin.put("secret", secret);
StreamClosedHttpResponse responseLogin = httpsUtil.doPostFormUrlEncodedGetStatusLine(urlLogin, paramLogin);
System.out.println("app auth success,return accessToken:");
System.out.print(responseLogin.getStatusLine());
System.out.println(responseLogin.getContent());
System.out.println();
Map<String, String> data = new HashMap<String, String>();
data = JsonUtil.jsonString2SimpleObj(responseLogin.getContent(), data.getClass());
return data.get("accessToken");
}
}

35
src/main/java/com/mh/garrison/mapper/DeviceMapper.java

@ -0,0 +1,35 @@
package com.mh.garrison.mapper;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.mapping.StatementType;
/**
*
* @ClassName: DeviceMapper
* @Description:TODO(修改更新发送拉合闸命令和读取数据状态命令)
* @author: 铭汉科技LJF
* @date: 2018年10月15日 下午5:17:31
*
*/
@Mapper
public interface DeviceMapper {
@Select({"exec pro_update_order #{device_num,mode=IN,jdbcType=VARCHAR},#{remark,mode=IN,jdbcType=VARCHAR},"
+ "#{state,mode=OUT,jdbcType=VARCHAR}"})
@Options(statementType=StatementType.CALLABLE)
List<Map<String,Object>> exeProcedure(Map<String,Object> params);
@Select("select top 1 PlateformType from MeterInstall where MeterID = #{meterId} ")
Integer findPlatform(@Param("meterId") String meterID);
@Update("update MeterInstall set PlateformType = 1 where MeterID = #{meterId} ")
void updatePlatform(@Param("meterId") String meterID);
@Select({"exec pro_add_state #{device_id,mode=IN,jdbcType=VARCHAR},#{create_date,mode=IN,jdbcType=VARCHAR},#{lastModifiedTime,mode=IN,jdbcType=VARCHAR},#{device_imei,mode=IN,jdbcType=VARCHAR},"
+ "#{device_state,mode=IN,jdbcType=VARCHAR}"})
@Options(statementType=StatementType.CALLABLE)
List<Map<String,Object>> exeAddStateProcedure(Map<String,Object> params);
}

43
src/main/java/com/mh/garrison/mapper/MSGMapper.java

@ -0,0 +1,43 @@
package com.mh.garrison.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.mh.garrison.entity.MSGEntity;
/**
*
* @ClassName: MSGMapper
* @Description:TODO(查询需要发送短信的客户)
* @author: 铭汉科技LJF
* @date: 2020年7月20日 上午9:20:46
*
*/
@Mapper
public interface MSGMapper {
@Results({
@Result(property = "houseNum", column = "house_num"),
@Result(property = "cellphoneNum", column = "cellphone_num"),
@Result(property = "balanceMoney", column = "balance_money"),
@Result(property = "remark", column = "remark"),
@Result(property = "sendTime", column = "send_time"),
@Result(property = "createDate", column = "create_date"),
@Result(property = "sendMsg", column = "send_msg")
})
@Select("select house_num, cellphone_num, balance_money, remark, send_time, convert(varchar(25),create_date,121) as create_date, send_msg from sys_sms where is_send = '未发送' and send_time < 3 order by create_date desc")
List<MSGEntity> queryMSGList();
// @Update("update sys_sms set is_send = '已发送', send_time = #{sendTime} where cellphone_num = #{cellphone} and convert(varchar(25),create_date,121) = #{createDate}")
// int updateSysSms(@Param("cellphone") String cellphone,@Param("sendTime") int sendTime , @Param("createDate") String createDate);
@Update("update sys_sms set is_send = #{isSend}, send_time = #{sendTime} where cellphone_num = #{cellphone} and convert(varchar(25),create_date,121) = #{createDate}")
int updateSysSms(@Param("isSend") String isSend,@Param("cellphone") String cellphone,@Param("sendTime") int sendTime , @Param("createDate") String createDate);
}

20
src/main/java/com/mh/garrison/mapper/MeterHistoryMapper.java

@ -0,0 +1,20 @@
package com.mh.garrison.mapper;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import com.mh.garrison.entity.MeterHistoryBean;
@Mapper
public interface MeterHistoryMapper {
// 增加数据内容到mt_now表中
@Insert("insert into mt_history(mt_num,mt_electric,mt_state,mt_device_id,mt_time,house_num,building_name,grade)"
+ " values (#{mt_num},#{mt_electric},#{mt_state},#{mt_device_id},#{mt_time},#{house_num},#{building_name},#{grade})")
int insertAll(MeterHistoryBean meterHistoryBean);
@Select("select top 1 count(mt_num) from mt_history where mt_num = #{mt_num} and mt_time = #{mt_time}")
int checkHistory(MeterHistoryBean meterHistoryBean);
}

29
src/main/java/com/mh/garrison/mapper/MeterMapper.java

@ -0,0 +1,29 @@
package com.mh.garrison.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import com.mh.garrison.entity.MeterNowBean;
/**
*
* @ClassName: MeterMapper
* @Description:TODO(对电表数据增删查改)
* @author: 铭汉科技LJF
* @date: 2018年9月4日 下午5:04:37
*
*/
@Mapper
public interface MeterMapper {
//对电表查询全部
@Select("select id,mt_num,mt_electric,mt_state,mt_time,areas_name from mt_now")
List<MeterNowBean> findAllMeterNow();
@Select("select top 1 PlateformType from MeterInstall where HouseNo = #{houseNum} and MeterId = #{deviceNum} ")
Integer selectPlatformType(@Param("houseNum") String houseNum,
@Param("deviceNum") String deviceNum);
}

61
src/main/java/com/mh/garrison/mapper/MeterNowMapper.java

@ -0,0 +1,61 @@
package com.mh.garrison.mapper;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.apache.ibatis.mapping.StatementType;
import com.mh.garrison.entity.MeterNowBean;
@Mapper
public interface MeterNowMapper {
// 查询房间号 2018-09-28 by ljf
// @Select("select house_num from house where id = (select parent_id from house where device_num = #{device_num})")
// 查询房间号 2018-12-18 by ljf
@Select("select top 1 HouseNo from MeterInstall where MeterID = #{device_num}")
String findHouse(@Param("device_num") String device_num);
// 厦门双桥查询电表名称
@Select("select top 1 ISNULL(MeterName,'') from MeterInstall where MeterID = #{device_num}")
String findHouse1(@Param("device_num") String device_num);
@Select("select top 1 isnull(building_name,'') from MeterInstall where MeterID = #{device_num}")
String findBuildingName1(@Param("device_num") String device_num);
// 查询楼层建筑 2018-09-28 by ljf
@Select("select top 1 house_num from house where id = (select parent_id from house where house_num = #{house_num})")
String findBuilding(@Param("house_num") String house_num);
// 由于数据库修改,从而查询楼栋建筑2018-12-18 by ljf
// @Select("select house_num from house where id = "
// + "(select parent_id from house where id = (select parent_id from house where house_num = #{house_num}))")
@Select("select top 1 building_name from MeterInstall where MeterID = #{device_num}")
String findBuildingName(@Param("device_num") String device_num);
// 检查是否有数值
@Select("select top 1 count(mt_num) from mt_now where mt_time = #{mt_time}")
int checkMeterNow(MeterNowBean meterNowBean);
// 检查是否有对应的表号
@Select("select top 1 count(mt_num) from mt_now where mt_num = #{mt_num}")
<T> int checkMeterId(T meterNowBean);
// 增加数据内容到mt_now表中 update by ljf on 2018-11-12
@Insert("insert into mt_now(mt_num,mt_electric,mt_state,mt_device_id,limited_power,mt_time,house_num,building_name,grade)"
+ " values (#{mt_num},#{mt_electric},#{mt_state},#{mt_device_id},#{limited_power},#{mt_time},#{house_num},#{building_name},#{grade})")
<T> int insertAll(T meterNowBean);
// 当电表发生数据变化时,更新数据内容到meter_now表中
@Update("update mt_now set mt_electric=#{mt_electric}, mt_time=#{mt_time}, mt_state=#{mt_state}, limited_power=#{limited_power}"
+ " where mt_num = #{mt_num}")
<T> int updateAll(T meterNowBean);
// 执行存储过程,计算电表以及地区的值
@Select({"exec pro_calc_hoursmeter"})
@Options(statementType=StatementType.CALLABLE)
String exePro_calc_Meter();
}

34
src/main/java/com/mh/garrison/mapper/OrderMapper.java

@ -0,0 +1,34 @@
package com.mh.garrison.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import com.mh.garrison.entity.OrderEntity;
/**
*
* @ClassName: OrderMapper
* @Description:TODO(指令mapper)
* @author: 铭汉科技LJF
* @date: 2020年7月20日 上午10:32:35
*
*/
@Mapper
public interface OrderMapper {
@Results({
@Result(column = "house_num", property = "houseNum"),
@Result(column = "device_num", property = "deviceNum"),
@Result(column = "imei_num", property = "imeiNum"),
@Result(column = "device_id", property = "deviceId"),
@Result(column = "send_order", property = "sendOrder"),
@Result(column = "crate_date", property = "createDate")
})
@Select("select house_num,device_num,imei_num,device_id,send_order,create_date from sys_order where send_state = '未发送' order by create_date")
List<OrderEntity> queryOrderList();
}

87
src/main/java/com/mh/garrison/mapper/WaterDayMapper.java

@ -0,0 +1,87 @@
package com.mh.garrison.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.apache.ibatis.mapping.StatementType;
import org.springframework.dao.DataAccessException;
import com.mh.garrison.entity.WaterDayBean;
import com.mh.garrison.entity.WaterHistoryBean;
@Mapper
public interface WaterDayMapper {
@Select("select id,wt_num,true_flow,cur_date from wt_day where grade = 0 order by cur_date desc")
List<WaterDayBean> findAllWaterDay();
@Select ("select count(id) as tatol_num from wt_day where grade = 0")
int findNotUploadNum();
@Select("select id,wt_num,true_flow,cur_date from wt_day where wt_num = #{wt_num} and grade = 0 order by cur_date desc")
List<WaterDayBean> findByWaterId(@Param("wt_num") String wt_num);
/**
* 按照表号时间查询
* @param wt_num
* @return
*/
@Select("select id,wt_num,true_flow,cur_date from wt_day where wt_num = #{wt_num} and convert(varchar(10), cur_date,121) = #{cur_date} and grade = 0 order by cur_date desc")
List<WaterDayBean> findByDate(@Param("wt_num") String wt_num, @Param("cur_date") String dateString);
/**
* 按照时间查询
* @param wt_num
* @return
*/
@Select("select id,wt_num,true_flow,cur_date from wt_day where convert(varchar(10), cur_date,121) = #{cur_date} and grade = 0 order by cur_date desc")
List<WaterDayBean> findByTime(@Param("cur_date") String dateString);
@Select("select top 1 COUNT(*) as sum1 from t_users_day where users_name = #{users_name} and cur_date = #{cur_date}")
int checkSame(WaterHistoryBean waterDayBean);
@Insert("insert into t_water_day(users_name) values (#{users_name})")
int insert(@Param("users_name") String users_name);
@Insert("insert into t_users_day(users_name, currentFlow, cur_date, year_date, month_date, grade)"
+ " values (#{users_name}, #{currentFlow}, #{cur_date}, #{year_date}, #{month_date}, #{grade})")
int insertAll(WaterHistoryBean waterDayBean) throws DataAccessException;
@Update("update t_users_day set currentFlow=#{currentFlow} where users_name=#{users_name} and cur_date=#{cur_date}")
int update(WaterHistoryBean waterDayBean);
// 更新grade为1
@Update("update wt_day set grade = 1 where wt_num = #{wt_num} and cur_date = #{cur_date}")
boolean updateGrade(WaterDayBean waterDayBean);
@Delete("delete from t_users_day where users_name=#{users_name}")
int delete(String users_name);
// 执行存储过程,计算出每天的用量
/* @Select({"exec proc_calc_flow #{users_name,mode=IN,jdbcType=VARCHAR},"
+ "#{date,mode=IN,jdbcType=VARCHAR}"})
@Options(statementType=StatementType.CALLABLE)
String exeProcedure1(WaterDayBean waterDayBean);
*/
@Select({"exec calculate_cursor #{users_name,mode=IN,jdbcType=VARCHAR},"
+ "#{cur_date,mode=IN,jdbcType=VARCHAR}"})
@Options(statementType=StatementType.CALLABLE)
String exeProcedure(WaterHistoryBean waterDayBean);
// 更新水表属于什么地方或者地区小区
@Select({"exec pro_check_areas #{users_name,mode=IN,jdbcType=VARCHAR}"})
@Options(statementType=StatementType.CALLABLE)
String execPro_Cheack_Areas(@Param("users_name") String users_name);
// 查询是否已计算
@Select("Select calculateFlow from t_users_day where users_name = #{users_name} and cur_date = #{cur_date}")
String checkCalc(WaterHistoryBean waterDayBean);
}

28
src/main/java/com/mh/garrison/mapper/WaterHistoryMapper.java

@ -0,0 +1,28 @@
package com.mh.garrison.mapper;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.mh.garrison.entity.WaterHistoryBean;
@Mapper
public interface WaterHistoryMapper {
// 查询是否有相同数据内容
@Select("select top 1 COUNT(id) as sum1 from wt_history where wt_num = #{wt_num} and CONVERT(varchar(10),cur_date,23) = #{cur_date}")
// @Select("select top 1 COUNT(id) as sum1 from wt_history where wt_num = #{wt_num} and CONVERT(varchar(25),cur_date,121) = #{cur_date}")
int checkSame(WaterHistoryBean waterHistoryBean);
// 插入数据
@Insert("insert into wt_history(wt_num,house_num,IMEI,IMSI,cur_flow,cur_date,manufacture_id,grade)"
+ "values(#{wt_num},#{house_num},#{IMEI},#{IMSI},#{cur_flow},#{cur_date},#{manufacture_id},#{grade})")
// @Options(useGeneratedKeys=true,keyProperty="id")
int insertAll(WaterHistoryBean waterHistoryBean);
// 更新数据
@Update("update wt_history set cur_flow=#{cur_flow} where wt_num=#{wt_num} and cur_date=#{cur_date}")
int update(WaterHistoryBean waterHistoryBean);
}

69
src/main/java/com/mh/garrison/mapper/WaterMapper.java

@ -0,0 +1,69 @@
package com.mh.garrison.mapper;
import com.mh.garrison.entity.WaterBean;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.springframework.dao.DataAccessException;
import java.util.List;
@Mapper
public interface WaterMapper {
@Select("select * from t_water")
List<WaterBean> findAllWater();
@Select("select * from t_water where waterId = #{waterId}")
WaterBean findByWaterId(@Param("waterId") String waterId);
@Select("select * from t_water where waterId = #{waterId}")
int findByWaterId1(@Param("waterId") String waterId);
@Insert("insert into t_water(waterId) values (#{waterId})")
int insert(@Param("waterId") String waterId);
@Insert("insert into t_water(waterId, imsi, imei, currentFlow, currentDate, manufacturerId)"
+ " values (#{waterId}, #{imsi}, #{imei}, #{currentFlow}, #{currentDate}, #{manufacturerId})")
int insertAll(WaterBean waterBean) throws DataAccessException;
@Update("update t_water set currentFlow=#{currentFlow}, currentDate=#{currentDate} where waterId=#{waterId}")
int update(WaterBean waterBean);
@Delete("delete from t_water where waterId=#{waterId}")
int delete(String waterId);
// 查询IMEI号
@Select("select imei_num from house where device_num = #{device_num}")
String findImei(@Param("device_num") String device_num);
// 查询房间号
@Select("select house_num from house where id = (select parent_id from house where device_num = #{device_num})")
String findHouse1(@Param("device_num") String device_num);
// 查询房间号 update on 2018-12-25 by ljf
@Select("select top 1 HouseNo from MeterInstall where MeterID = #{device_num}")
String findHouse(@Param("device_num") String device_num);
// 查询是否有实时的记录
@Select("select top 1 count(id) from wt_now where wt_num = #{wt_num}")
int findResult(@Param("wt_num") String wt_num);
// 插入水表实时数据 update by ljf on 2019-12-24
@Insert("insert into wt_now(wt_num,house_num,IMEI,IMSI,cur_flow,cur_date,manufacture_id,grade)" +
" values(#{wt_num},#{house_num},#{IMEI},#{IMSI},#{cur_flow},#{cur_date},#{manufacture_id},#{grade})")
int insertWtNowAll(WaterBean waterBean);
// @Insert("insert into wt_now(wt_num,house_num,IMEI,IMSI,cur_flow,cur_date,manufacture_id,grade,contra_flow,push_button,store,valve_status,valve_unusual,communication_status,sos_key,voltage,reflux_flow)" +
// " values(#{wt_num},#{house_num},#{IMEI},#{IMSI},#{cur_flow},#{cur_date},#{manufacture_id},#{grade},#{contra_flow},#{push_button},#{store},#{valve_status},#{valve_unusual},#{communication_status},#{sos_key},#{voltage},#{reflux_flow})")
// int insertWtNowAll(WaterBean waterBean);
// 水表实时表存在相同的数据,则进行更新,update by ljf on 2019-12-24
@Update("update wt_now set cur_flow = #{cur_flow}, cur_date = #{cur_date} where wt_num=#{wt_num}")
int updateWtNow(WaterBean waterBean);
// @Update("update wt_now set cur_flow = #{cur_flow}, cur_date = #{cur_date},voltage = #{voltage}, contra_flow = #{contra_flow},push_button = #{push_button},store = #{store},valve_status = #{valve_status},valve_unusual = #{valve_unusual},communication_status = #{communication_status},sos_key = #{sos_key},reflux_flow = #{reflux_flow} where wt_num=#{wt_num}")
// int updateWtNow(WaterBean waterBean);
}

784
src/main/java/com/mh/garrison/mhutils/ByteUtilsWater.java

@ -0,0 +1,784 @@
package com.mh.garrison.mhutils;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.springframework.context.ApplicationContext;
import com.mh.garrison.entity.WaterBean;
import com.mh.garrison.entity.WaterHistoryBean;
import com.mh.garrison.service.WaterHistoryService;
import com.mh.garrison.service.WaterServices;
public class ByteUtilsWater {
// 添加之后能够对mapper调用
private ApplicationContext applicationContext = SpringUtils.getApplicationContext();
private WaterServices waterService = applicationContext.getBean(WaterServices.class);
private WaterHistoryService waterHistoryService = applicationContext.getBean(WaterHistoryService.class);
WaterBean water = new WaterBean();
WaterHistoryBean wtHistoryBean = new WaterHistoryBean();
/**
* 十进制转成十六进制 Integer.toHexString(int i) 十进制转成八进制 Integer.toOctalString(int i)
* 十进制转成二进制 Integer.toBinaryString(int i) 十六进制转成十进制
* Integer.valueOf("FFFF",16).toString() 八进制转成十进制
* Integer.valueOf("876",8).toString() 二进制转十进制*
* Integer.valueOf("0101",2).toString()
*/
// 光电直读水表解析报文
public String analysisFastJson(String receiveData) throws Exception {
// SqlSession session = SQLDataSourceConfig.openSession();
String return_result = "success";
// // 水表ID
// String WaterID = receiveData.substring(14, 24);
// WaterID = changePosition(WaterID);
// // System.out.println("水表ID——————" + WaterID);
// water.setWt_num(WaterID);
//
// // 厂商ID
// String manufactureID = receiveData.substring(24, 28);
// manufactureID = changePosition(manufactureID);
// // System.out.println("厂商ID——————" + manufactureID);
// water.setManufacture_id(manufactureID);;
// 水表ID
String WaterID = receiveData.substring(14, 24);
WaterID = changePosition(WaterID);
// System.out.println("水表ID——————" + WaterID);
// 厂商ID
String manufactureID = receiveData.substring(24, 28);
manufactureID = changePosition(manufactureID);
// System.out.println("厂商ID——————" + manufactureID);
// 增加水表号为12位数 update by ljf on 2019-08-27
String is_status = manufactureID.substring(2, 4);
System.out.println(is_status);
if (is_status.equals("06")) {
WaterID = receiveData.substring(14, 24);
WaterID = changePosition(WaterID);
System.out.println("水表ID——————" + WaterID);
water.setWt_num(WaterID);
manufactureID = receiveData.substring(24, 28);
manufactureID = changePosition(manufactureID);
System.out.println("厂商ID——————" + manufactureID);
water.setManufacture_id(manufactureID);
} else {
WaterID = receiveData.substring(14, 26);
WaterID = changePosition(WaterID);
System.out.println("水表ID——————" + WaterID);
water.setWt_num(WaterID);
manufactureID = receiveData.substring(26, 28);
manufactureID = changePosition(manufactureID);
System.out.println("厂商ID——————" + manufactureID);
water.setManufacture_id(manufactureID);
}
// 时间
String dateString = receiveData.substring(28, 42);
dateString = dateString.substring(0, 4) + "-" + dateString.substring(4, 6) + "-" + dateString.substring(6, 8)
+ " " + dateString.substring(8, 10) + ":" + dateString.substring(10, 12) + ":"
+ dateString.substring(12, 14);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse(dateString);
dateString = sdf.format(date);
// System.out.println("时间————————" + dateString);
water.setCur_date(dateString);
// 按日
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdf1.parse(dateString);
String dateString1 = sdf1.format(date1);
// 电池电压
String Battery = receiveData.substring(44, 48);
Battery = changePosition(Battery);
Battery = hex2Binary(Battery);
Battery = Integer.valueOf(Battery, 2).toString();
double voltage = Double.parseDouble(Battery) / 100;
// 2019-12-06 update by ljf
water.setVoltage(voltage);
System.out.println("电池电压————" + voltage + " V");
// 累计上线成功次数
String onlineSum = receiveData.substring(48, 52);
onlineSum = changePosition(onlineSum);
onlineSum = hex2Binary(onlineSum);
onlineSum = Integer.valueOf(onlineSum, 2).toString();
// System.out.println("累计上线成功次数——" + onlineSum);
// 累计上线失败次数
String failedSum = receiveData.substring(52, 56);
failedSum = changePosition(failedSum);
failedSum = hex2Binary(failedSum);
failedSum = Integer.valueOf(failedSum, 2).toString();
// System.out.println("累计上线失败次数——" + failedSum);
// 状态字
String stateStr = receiveData.substring(56, 64);
// System.out.println("状态字————————" + stateStr);
// update by ljf on 2019-12-24
// 状态字
System.out.println("状态字————————" + stateStr);
System.out.println("状态字1--------------------" + hex2Binary(stateStr.substring(0, 2)));
System.out.println("状态字1.0:逆流标志 "
+ (hex2Binary(stateStr.substring(0, 2)).substring(7, 8).equalsIgnoreCase("0") ? "正常" : "逆流"));
System.out.println("状态字1.1:按键异常标志 "
+ (hex2Binary(stateStr.substring(0, 2)).substring(6, 7).equalsIgnoreCase("0") ? "正常" : "故障"));
System.out.println("状态字1.3:存储故障标志 "
+ (hex2Binary(stateStr.substring(0, 2)).substring(5, 6).equalsIgnoreCase("0") ? "正常" : "故障"));
System.out.println("状态字2--------------------" + hex2Binary(stateStr.substring(2, 4)));
System.out.println("状态字2.7:阀门状态 "
+ (hex2Binary(stateStr.substring(2, 4)).substring(0, 1).equalsIgnoreCase("0") ? "开阀" : "关阀"));
System.out.println("状态字2.6:阀门异常 "
+ (hex2Binary(stateStr.substring(2, 4)).substring(1, 2).equalsIgnoreCase("0") ? "正常" : "异常"));
System.out.println("状态字2.5:流量通讯异常标志 "
+ (hex2Binary(stateStr.substring(2, 4)).substring(2, 3).equalsIgnoreCase("0") ? "正常" : "异常"));
System.out.println("状态字3--------------------" + hex2Binary(stateStr.substring(4, 6)));
System.out.println("状态字3.4:应急按键标志 "
+ (hex2Binary(stateStr.substring(4, 6)).substring(3, 4).equalsIgnoreCase("0") ? "正常" : "已关阀三天"));
System.out.println("状态字4-------" + hex2Binary(stateStr.substring(6, 8)));
water.setContra_flow(Integer.parseInt(hex2Binary(stateStr.substring(0, 2)).substring(7, 8)));
water.setPush_button(Integer.parseInt(hex2Binary(stateStr.substring(0, 2)).substring(6, 7)));
water.setStore(Integer.parseInt(hex2Binary(stateStr.substring(0, 2)).substring(5, 6)));
water.setValve_status(Integer.parseInt(hex2Binary(stateStr.substring(2, 4)).substring(0, 1)));
water.setValve_unusual(Integer.parseInt(hex2Binary(stateStr.substring(2, 4)).substring(1, 2)));
water.setCommunication_status(Integer.parseInt(hex2Binary(stateStr.substring(2, 4)).substring(2, 3)));
water.setSos_key(Integer.parseInt(hex2Binary(stateStr.substring(4, 6)).substring(3, 4)));
// 软件版本
String SofewareStr = receiveData.substring(82, 86);
SofewareStr = changePosition(SofewareStr);
SofewareStr = hex2Binary(SofewareStr);
SofewareStr = Integer.valueOf(SofewareStr, 2).toString(); // 主版本
String SofewareStr1 = receiveData.substring(86, 88);
SofewareStr1 = hex2Binary(SofewareStr1);
SofewareStr1 = Integer.valueOf(SofewareStr1, 2).toString(); // 子版本
// System.out.println("软件主版本——" + SofewareStr + ",软件子版本——" + SofewareStr1);
// IMSI 号
String IMSIStr = receiveData.substring(88, 104);
water.setIMSI(IMSIStr);
// 当前累计流量
String totalFlow = receiveData.substring(104, 114);
totalFlow = changePosition(totalFlow);
totalFlow = hex2Binary(totalFlow);
totalFlow = Integer.valueOf(totalFlow, 2).toString();
Double flow = Double.parseDouble(totalFlow) / 10;
// System.out.println("当前累计流量————" + flow + " L");
water.setCur_flow(String.valueOf(flow / 1000));
// 当前累计逆流量
String reverseFlow = receiveData.substring(114, 124);
reverseFlow = changePosition(reverseFlow);
reverseFlow = hex2Binary(reverseFlow);
reverseFlow = Integer.valueOf(reverseFlow, 2).toString();
Double flow1 = Double.parseDouble(reverseFlow) / 10;
System.out.println("当前累计逆流量————" + flow1 + " L");
water.setReflux_flow(flow1 / 1000);
// imei号
String imei = waterService.findImei(WaterID);
water.setIMEI(imei);
// 房间号
String house_num = waterService.findHouse(WaterID);
water.setHouse_num(house_num);
water.setGrade(0);
int nowSum = waterService.findResult(WaterID);
if (nowSum != 0) {
System.out.println("已存在水表");
int updateResult = waterService.updateWtNow(water);
if (updateResult == 1) {
System.out.println("更新水表成功");
} else {
System.out.println("更新水表失败");
}
} else {
// 插入数据库
int result = waterService.insertWtNowAll(water);
if (result == 1) {
System.out.println("新增水表成功");
} else {
System.out.println("新增水表失败");
}
}
// wtHistoryBean.setWt_num(WaterID);
// wtHistoryBean.setHouse_num(house_num);
// wtHistoryBean.setIMEI(imei);
// wtHistoryBean.setIMSI(IMSIStr);
// wtHistoryBean.setCur_flow(flow/1000);
// wtHistoryBean.setCur_date(dateString1); //2018-07-01
// wtHistoryBean.setManufacture_id(manufactureID);
// wtHistoryBean.setGrade(0);
// wtHistoryBean.setYear_date(dateString1.substring(0, 4));
// waterDayBean.setMonth_date(dateString1.substring(0,7));
// int a1 = waterHistoryMapper.checkSame(wtHistoryBean);
// if (a1 == 0) {
// waterHistoryMapper.insertAll(wtHistoryBean);
//// System.out.println("插入第 " + (i+1) + " 日数据成功");
// }else {
// // 更新当天水表的日结数
// waterHistoryMapper.update(wtHistoryBean);
// }
// 日结数组
String dateReport = receiveData.substring(124, 126);
dateReport = hex2Binary(dateReport);
dateReport = Integer.valueOf(dateReport, 2).toString();
// System.out.println("日结数组数————" + dateReport);
// 日结数据
int days = Integer.parseInt(dateReport);
String dateString2 = dateString1;
SimpleDateFormat sj = new SimpleDateFormat("yyyy-MM-dd");
Date d = sj.parse(dateString2);
Calendar calendar = Calendar.getInstance();
calendar.setTime(d);
// calendar.add(Calendar.DATE, -27);
// update by ljf on 2019-10-16 解决存储数据库出现超出当前报文的时间
calendar.add(Calendar.DATE, -Integer.parseInt(dateReport));
dateString2 = sj.format(calendar.getTime());
long dif;
Date date2 = new Date();
// System.out.println("29天前:" + sj.format(calendar.getTime()));
for (int i = 0; i < days; i++) {
String dayReport = receiveData.substring((128 + i * 10), (128 + (i + 1) * 10));
dayReport = changePosition(dayReport);
if (dayReport.equals("ffffffffff")) {
dif = sdf1.parse(dateString2).getTime() + 86400 * 1000; // 加一天
date2.setTime(dif);
dateString2 = sdf1.format(date2);
continue;
}
dayReport = hex2Binary(dayReport);
dayReport = Integer.valueOf(dayReport, 2).toString();
Double dayflow = Double.parseDouble(dayReport) / 10;
// 加一天时间
try {
dif = sdf1.parse(dateString2).getTime() + 86400 * 1000; // 加一天
date2.setTime(dif);
dateString2 = sdf1.format(date2);
System.out.println("加一天之后: " + i + "、" + dateString2 + "/" + (dayflow / 1000));
System.out.println("第 " + dateString2 + " 日的数据————" + dayflow + " L");
wtHistoryBean.setWt_num(WaterID);
wtHistoryBean.setHouse_num(house_num);
wtHistoryBean.setIMEI(imei);
wtHistoryBean.setIMSI(IMSIStr);
wtHistoryBean.setCur_flow(String.valueOf(dayflow / 1000));
wtHistoryBean.setCur_date(dateString2); // 2018-07-01
wtHistoryBean.setManufacture_id(manufactureID);
wtHistoryBean.setGrade(0);
System.out.println("水表表号-------------" + WaterID);
int a3 = waterHistoryService.insertAll(wtHistoryBean);
// int a3 = waterHistoryMapper.insertAll(wtHistoryBean);
System.out.println("-----------------" + a3 + "--------------------------");
if (a3 == 1) {
// session.commit();
// System.out.println(wtHistoryBean.toString());
// Thread.sleep(5000);
int a2 = waterHistoryService.checkSame(wtHistoryBean);
System.out.println("-----------------" + a2 + "--------------------------");
if (a2 == 1) {
// System.out.println(wtHistoryBean.toString());
System.out.println("插入历史流水表成功");
} else {
return_result = "fail";
}
}
} catch (Exception e) {
// TODO: handle exception
String causeStr = e.getCause().getMessage();
System.out.println(">>>>>>>-------------" + causeStr);
continue;
}
}
// String dateString3 = dateString1;
// for (int i = 0; i < days; i++) {
//// if (i == 28) {
//// break;
//// }
// String dayReport = receiveData.substring((128 + i*10), (128 + (i+1)*10));
// dayReport = changePosition(dayReport);
// dayReport = hex2Binary(dayReport);
// dayReport = Integer.valueOf(dayReport,2).toString();
// Double dayflow = Double.parseDouble(dayReport)/10;
//
// // 前一天的水表读数
//// String lastDayReport = receiveData.substring((128 + (i+1)*10), endIndex);
//
//// System.out.println("第 " + dateString1 + " 日的数据————" + dayflow + " L");
//
// //减一天时间
// try {
// long dif = sdf1.parse(dateString3).getTime()-86400*1000; // 减一天
// Date date2 = new Date();
// date2.setTime(dif);
// dateString3 = sdf1.format(date2);
//// System.out.println("减少一天之后: " + sdf1.format(date2));
// } catch (Exception e) {
// // TODO: handle exception
// e.printStackTrace();
// }
//
// waterDayBean.setWater_id(WaterID);
// waterDayBean.setCurrentFlow(dayflow);
// waterDayBean.setGrade(0);
// waterDayBean.setDate(dateString3);
//
// String a3 = waterDayMapper.checkCalc(waterDayBean);
// if (a3 == null) {
// // 执行存储过程,计算用量
// waterDayMapper.exeProcedure(waterDayBean);
// }
// }
// // 更新当天的计算值
// waterDayBean.setWater_id(WaterID);
// waterDayBean.setCurrentFlow(flow);
// waterDayBean.setGrade(0);
// waterDayBean.setCur_date(dateString1);
// waterDayMapper.exeProcedure(waterDayBean);
//
// // 更新地区
// waterDayMapper.execPro_Cheack_Areas(WaterID);
System.out.println("解析成功");
return return_result;
}
// 无磁水表解析报文
public String analysisFastJson1(String receiveData) throws Exception {
// SqlSession session = SQLDataSourceConfig.openSession();
String return_result = "success";
// 水表ID
String WaterID = receiveData.substring(14, 24);
WaterID = changePosition(WaterID);
// System.out.println("水表ID——————" + WaterID);
// 厂商ID
String manufactureID = receiveData.substring(24, 28);
manufactureID = changePosition(manufactureID);
// System.out.println("厂商ID——————" + manufactureID);
// 增加水表号为12位数 update by ljf on 2019-08-27
String is_status = manufactureID.substring(2, 4);
System.out.println(is_status);
if (is_status.equals("06")) {
WaterID = receiveData.substring(14, 24);
WaterID = changePosition(WaterID);
System.out.println("水表ID——————" + WaterID);
water.setWt_num(WaterID);
manufactureID = receiveData.substring(24, 28);
manufactureID = changePosition(manufactureID);
System.out.println("厂商ID——————" + manufactureID);
water.setManufacture_id(manufactureID);
} else {
WaterID = receiveData.substring(14, 26);
WaterID = changePosition(WaterID);
System.out.println("水表ID——————" + WaterID);
water.setWt_num(WaterID);
manufactureID = receiveData.substring(26, 28);
manufactureID = changePosition(manufactureID);
System.out.println("厂商ID——————" + manufactureID);
water.setManufacture_id(manufactureID);
}
// 时间
String dateString = receiveData.substring(28, 42);
dateString = dateString.substring(0, 4) + "-" + dateString.substring(4, 6) + "-" + dateString.substring(6, 8)
+ " " + dateString.substring(8, 10) + ":" + dateString.substring(10, 12) + ":"
+ dateString.substring(12, 14);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse(dateString);
dateString = sdf.format(date);
water.setCur_date(dateString);
// 按日
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdf1.parse(dateString);
String dateString1 = sdf1.format(date1);
// 加一天是上传当前累计流量时间
// 按小时
// Calendar c = Calendar.getInstance();
// c.setTime(sdf.parse(dateString));
// c.add(Calendar.DAY_OF_MONTH, 1);// 今天+1天
// Date tomorrow = c.getTime();
// String upDate = sdf.format(tomorrow);
// SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH");
// Date date1 = sdf1.parse(upDate);
// String dateString1 = sdf1.format(date1);
// update by ljf on 2020-01-03上线帧指令,判断指令是否会有发生变化
String onlineStatus = receiveData.substring(42,44);
onlineStatus = hex2Binary(onlineStatus);
System.out.println("上线帧指令-------"+onlineStatus);
String onlineType = onlineStatus.substring(7,8);
System.out.println("上线类型---------"+(onlineType.equals("1")?"一天一次":"其他"));
String moduleType = onlineStatus.substring(4,7);
System.out.println("模组类型---------"+moduleType);
String upTem = onlineStatus.substring(3,4);
System.out.println("是否上报PCI和内部温度---------"+(upTem.equals("1")?"上传":"不上传"));
String upImei = onlineStatus.substring(2,3);
System.out.println("是否上报IMEI号---------"+(upImei.equals("1")?"上传":"不上传"));
String upPre = onlineStatus.substring(1,2);
System.out.println("是否上报压力值---------"+(upPre.equals("1")?"上传":"不上传"));
String upOnlineStatus2 = onlineStatus.substring(0,1);
System.out.println("是否存在上线帧指示2---------"+(upOnlineStatus2.equals("1")?"上传":"不上传"));
// 电池电压
String Battery = receiveData.substring(44, 48);
Battery = changePosition(Battery);
Battery = hex2Binary(Battery);
Battery = Integer.valueOf(Battery, 2).toString();
double voltage = Double.parseDouble(Battery) / 100;
// 2019-12-06 update by ljf
water.setVoltage(voltage);
System.out.println("电池电压————" + voltage + " V");
// 累计上线成功次数
String onlineSum = receiveData.substring(48, 52);
onlineSum = changePosition(onlineSum);
onlineSum = hex2Binary(onlineSum);
onlineSum = Integer.valueOf(onlineSum, 2).toString();
// System.out.println("累计上线成功次数——" + onlineSum);
// 累计上线失败次数
String failedSum = receiveData.substring(52, 56);
failedSum = changePosition(failedSum);
failedSum = hex2Binary(failedSum);
failedSum = Integer.valueOf(failedSum, 2).toString();
// System.out.println("累计上线失败次数——" + failedSum);
// 状态字
String stateStr = receiveData.substring(56, 64);
// System.out.println("状态字————————" + stateStr);
// update by ljf on 2019-12-24
// 状态字
System.out.println("状态字————————" + stateStr);
System.out.println("状态字1--------------------" + hex2Binary(stateStr.substring(0, 2)));
System.out.println("状态字1.0:逆流标志 "
+ (hex2Binary(stateStr.substring(0, 2)).substring(7, 8).equalsIgnoreCase("0") ? "正常" : "逆流"));
System.out.println("状态字1.1:按键异常标志 "
+ (hex2Binary(stateStr.substring(0, 2)).substring(6, 7).equalsIgnoreCase("0") ? "正常" : "故障"));
System.out.println("状态字1.3:存储故障标志 "
+ (hex2Binary(stateStr.substring(0, 2)).substring(5, 6).equalsIgnoreCase("0") ? "正常" : "故障"));
System.out.println("状态字2--------------------" + hex2Binary(stateStr.substring(2, 4)));
System.out.println("状态字2.7:阀门状态 "
+ (hex2Binary(stateStr.substring(2, 4)).substring(0, 1).equalsIgnoreCase("0") ? "开阀" : "关阀"));
System.out.println("状态字2.6:阀门异常 "
+ (hex2Binary(stateStr.substring(2, 4)).substring(1, 2).equalsIgnoreCase("0") ? "正常" : "异常"));
System.out.println("状态字2.5:流量通讯异常标志 "
+ (hex2Binary(stateStr.substring(2, 4)).substring(2, 3).equalsIgnoreCase("0") ? "正常" : "异常"));
System.out.println("状态字3--------------------" + hex2Binary(stateStr.substring(4, 6)));
System.out.println("状态字3.4:应急按键标志 "
+ (hex2Binary(stateStr.substring(4, 6)).substring(3, 4).equalsIgnoreCase("0") ? "正常" : "已关阀三天"));
System.out.println("状态字4-------" + hex2Binary(stateStr.substring(6, 8)));
water.setContra_flow(Integer.parseInt(hex2Binary(stateStr.substring(0, 2)).substring(7, 8)));
water.setPush_button(Integer.parseInt(hex2Binary(stateStr.substring(0, 2)).substring(6, 7)));
water.setStore(Integer.parseInt(hex2Binary(stateStr.substring(0, 2)).substring(5, 6)));
water.setValve_status(Integer.parseInt(hex2Binary(stateStr.substring(2, 4)).substring(0, 1)));
water.setValve_unusual(Integer.parseInt(hex2Binary(stateStr.substring(2, 4)).substring(1, 2)));
water.setCommunication_status(Integer.parseInt(hex2Binary(stateStr.substring(2, 4)).substring(2, 3)));
water.setSos_key(Integer.parseInt(hex2Binary(stateStr.substring(4, 6)).substring(3, 4)));
// 软件版本
String SofewareStr = receiveData.substring(82, 86);
SofewareStr = changePosition(SofewareStr);
SofewareStr = hex2Binary(SofewareStr);
SofewareStr = Integer.valueOf(SofewareStr, 2).toString(); // 主版本
String SofewareStr1 = receiveData.substring(86, 88);
SofewareStr1 = hex2Binary(SofewareStr1);
SofewareStr1 = Integer.valueOf(SofewareStr1, 2).toString(); // 子版本
// System.out.println("软件主版本——" + SofewareStr + ",软件子版本——" + SofewareStr1);
// IMSI 号
String IMSIStr = receiveData.substring(88, 104);
water.setIMSI(IMSIStr);
//添加判断是否上传了IMEI号 update by ljf on 2020-01-03
int j = 0;
// 判断是否有IMEI号
if(upImei.equals("1")) {
String IMEI = receiveData.substring(104, 120);
System.out.println("IMEI号——————" + IMEI);
j = 16;
}
// 当前累计流量
String totalFlow = receiveData.substring(104+j, 114+j);
totalFlow = changePosition(totalFlow);
System.out.println(totalFlow);
totalFlow = hex2Binary(totalFlow);
System.out.println(totalFlow);
totalFlow = Integer.valueOf(totalFlow, 2).toString();
Double flow = Double.parseDouble(totalFlow)/10;
System.out.println("当前累计流量————" + flow + " L");
water.setCur_flow(String.valueOf(flow / 1000));
// 当前累计逆流量
String reverseFlow = receiveData.substring(114+j, 124+j);
reverseFlow = changePosition(reverseFlow);
reverseFlow = hex2Binary(reverseFlow);
reverseFlow = Integer.valueOf(reverseFlow, 2).toString();
Double flow1 = Double.parseDouble(reverseFlow) / 10 / 1000;
System.out.println("当前累计逆流量————" + flow1 + " 立方");
water.setReflux_flow(flow1);
String imei = "";
water.setIMEI(imei);
// 房间号
String house_num = waterService.findHouse(WaterID);
water.setHouse_num(house_num);
water.setGrade(0);
int nowSum = waterService.findResult(WaterID);
if (nowSum != 0) {
System.out.println("已存在水表");
int updateResult = waterService.updateWtNow(water);
if (updateResult == 1) {
System.out.println("更新水表成功");
} else {
System.out.println("更新水表失败");
}
} else {
// 插入数据库
int result = waterService.insertWtNowAll(water);
if (result == 1) {
System.out.println("新增水表成功");
} else {
System.out.println("新增水表失败");
}
}
System.out.println(water.toString());
// Thread.sleep(500);
// // update by ljf on 2020-01-03
// wtHistoryBean.setWt_num(WaterID);
// wtHistoryBean.setHouse_num(house_num);
// wtHistoryBean.setIMEI(imei);
// wtHistoryBean.setIMSI(IMSIStr);
// wtHistoryBean.setCur_flow(String.valueOf(flow / 1000));
// wtHistoryBean.setCur_date(dateString1); // 按天
//// wtHistoryBean.setCur_date(dateString1+":00:00.000"); // 2018-07-01 00 按小时
// wtHistoryBean.setManufacture_id(manufactureID);
// wtHistoryBean.setGrade(0);
//
// System.out.println("水表表号-------------" + WaterID);
// System.out.println(wtHistoryBean.toString());
//
// int a2 = waterHistoryService.checkSame(wtHistoryBean);
// if (a2 == 1) {
// System.out.println("历史记录已存在");
// return_result = "success";
// } else {
// int a3 = waterHistoryService.insertAll(wtHistoryBean);
// if (a3 == 1) {
// // System.out.println(wtHistoryBean.toString());
// int a4 = waterHistoryService.checkSame(wtHistoryBean);
// if (a4 == 1) {
// System.out.println("历史记录已存在");
// }
// } else {
// return_result = "fail";
// }
// }
// 日结数组
String dateReport = receiveData.substring(124+j, 126+j);
dateReport = hex2Binary(dateReport);
dateReport = Integer.valueOf(dateReport, 2).toString();
// System.out.println("日结数组数————" + dateReport);
// 日结数据
int days = Integer.parseInt(dateReport);
String dateString2 = dateString1;
SimpleDateFormat sj = new SimpleDateFormat("yyyy-MM-dd");
Date d = sj.parse(dateString2);
Calendar calendar = Calendar.getInstance();
calendar.setTime(d);
// calendar.add(Calendar.DATE, -27);
// update by ljf on 2019-10-16 解决存储数据库出现超出当前报文的时间
calendar.add(Calendar.DATE, -Integer.parseInt(dateReport));
dateString2 = sj.format(calendar.getTime());
long dif;
Date date2 = new Date();
// System.out.println("29天前:" + sj.format(calendar.getTime()));
for (int i = 0; i < days; i++) {
String dayReport = receiveData.substring((128 + j + i * 10), (128 + j + (i + 1) * 10));
dayReport = changePosition(dayReport);
if (dayReport.equals("ffffffffff")) {
dif = sdf1.parse(dateString2).getTime() + 86400 * 1000; // 加一天
date2.setTime(dif);
dateString2 = sdf1.format(date2);
continue;
}
dayReport = hex2Binary(dayReport);
dayReport = Integer.valueOf(dayReport, 2).toString();
Double dayflow = Double.parseDouble(dayReport) / 10;
// 加一天时间
try {
dif = sdf1.parse(dateString2).getTime() + 86400 * 1000; // 加一天
date2.setTime(dif);
dateString2 = sdf1.format(date2);
System.out.println("加一天之后: " + i + "、" + dateString2 + "/" + (dayflow / 1000));
System.out.println("第 " + dateString2 + " 日的数据————" + dayflow + " L");
wtHistoryBean.setWt_num(WaterID);
wtHistoryBean.setHouse_num(house_num);
wtHistoryBean.setIMEI(imei);
wtHistoryBean.setIMSI(IMSIStr);
wtHistoryBean.setCur_flow(String.valueOf(dayflow / 1000));
wtHistoryBean.setCur_date(dateString2); // 2018-07-01
wtHistoryBean.setManufacture_id(manufactureID);
wtHistoryBean.setGrade(0);
System.out.println("水表表号-------------" + WaterID);
// int a3 = waterHistoryService.insertAll(wtHistoryBean);
// // int a3 = waterHistoryMapper.insertAll(wtHistoryBean);
// System.out.println("-----------------" + a3 + "--------------------------");
// if (a3 == 1) {
// // session.commit();
// // System.out.println(wtHistoryBean.toString());
// // Thread.sleep(5000);
// int a2 = waterHistoryService.checkSame(wtHistoryBean);
// System.out.println("-----------------" + a2 + "--------------------------");
// if (a2 == 1) {
// // System.out.println(wtHistoryBean.toString());
// System.out.println("插入历史流水表成功");
// } else {
// return_result = "fail";
// }
// }
int a3 = waterHistoryService.checkSame(wtHistoryBean);
// int a3 = waterHistoryMapper.insertAll(wtHistoryBean);
System.out.println("-----------------" + a3 + "--------------------------");
if (a3 == 1) {
System.out.println("-----------------已存在历史记录--------------------------");
// session.commit();
// System.out.println(wtHistoryBean.toString());
// Thread.sleep(5000);
} else {
int a4 = waterHistoryService.insertAll(wtHistoryBean);
if (a4 == 1) {
int a21 = waterHistoryService.checkSame(wtHistoryBean);
System.out.println("-----------------" + a21 + "--------------------------");
if (a21 == 1) {
// System.out.println(wtHistoryBean.toString());
System.out.println("插入历史流水表成功");
} else {
return_result = "fail";
}
}
}
} catch (Exception e) {
// TODO: handle exception
String causeStr = e.getCause().getMessage();
System.out.println(">>>>>>>-------------" + causeStr);
continue;
}
}
System.out.println("解析成功");
System.out.println("返回值"+return_result);
return return_result;
}
// 转换位置
private static String changePosition(String changeStr) {
StringBuffer s1 = new StringBuffer();
for (int i = changeStr.length(); i >= 2; i = i - 2) {
s1 = s1.append(changeStr.substring(i - 2, i));
}
return s1.toString();
}
// 16进制转换成二进制
private static String hex2Binary(String string) {
// TODO Auto-generated method stub
String s = "";
for (int i = 0; i < string.length(); i++) {
s += char2Binary(string.charAt(i));
}
return s;
}
private static String char2Binary(char charAt) {
// TODO Auto-generated method stub
switch (charAt) {
case '0':
return "0000";
case '1':
return "0001";
case '2':
return "0010";
case '3':
return "0011";
case '4':
return "0100";
case '5':
return "0101";
case '6':
return "0110";
case '7':
return "0111";
case '8':
return "1000";
case '9':
return "1001";
case 'a':
return "1010";
case 'b':
return "1011";
case 'c':
return "1100";
case 'd':
return "1101";
case 'e':
return "1110";
case 'f':
return "1111";
case 'A':
return "1010";
case 'B':
return "1011";
case 'C':
return "1100";
case 'D':
return "1101";
case 'E':
return "1110";
case 'F':
return "1111";
}
return null;
}
}

198
src/main/java/com/mh/garrison/mhutils/Constant.java

@ -0,0 +1,198 @@
/*
* File Name: com.huawei.utils.Constant.java
*
* Copyright Notice:
* Copyright 1998-2008, Huawei Technologies Co., Ltd. ALL Rights Reserved.
*
* Warning: This computer software sourcecode is protected by copyright law
* and international treaties. Unauthorized reproduction or distribution
* of this sourcecode, or any portion of it, may result in severe civil and
* criminal penalties, and will be prosecuted to the maximum extent
* possible under the law.
*/
package com.mh.garrison.mhutils;
public class Constant {
//please replace the IP and Port, when you use the demo.
public static final String BASE_URL = "https://device.api.ct10649.com:8743";
//
// //please replace the appId and secret, when you use the demo.
// public static final String APPID = "bKt6QbQBou8L9fvlILMzNPkMPnoa";
// public static final String SECRET = "MIN_w5uAphyo6S1rOEfsswwNu8Ma";
// public static final String BASE_URL = "https://180.101.147.89:8743";
//please replace the appId and secret, when you use the demo.
// 测试平台测试app应用
// public static final String APPID = "3q0WU53HTdRdAF25CcHH56JItK8a";
// public static final String SECRET = "KAMFe5LhF6qAG7u5IWyowL0Clssa";
// 正式平台WaterMeter应用
// public static final String APPID = "rqqlzFc4N28B4XQ6FModBl5_hiAa";
// public static final String SECRET = "9R7UMMXFkYar0uYJKESgT8S_QhQa";
//
//警备区电表
public static final String APPID = "ohF8udKDcQ0hfO3VFn441L7a5lQa";
public static final String SECRET = "UAApfey8u_JfD2X18nvJ28lSQyQa";
// 警备区水表
// public static final String APPID = "259iInhJm7EDOGit_FJ0tKKKdSga";
// public static final String SECRET = "JZyWnfHICXncrukvRYhuSzujQJwa";
// //正式平台测试APP应用
// public static final String APPID = "bKt6QbQBou8L9fvlILMzNPkMPnoa";
// public static final String SECRET = "J89WSfT7_KQcHJjveJ2WasptE2Ea";
// 正式应用狮山自来水
// public static final String APPID = "zUc2S0RXYjwVAVMKQ5DmI_Ytx5Ya";
// public static final String SECRET = "OJ2UwZw3VGWxEYMIbg1K3SPuO3wa";
//星海大学城APP应用
// public static final String APPID = "PP3BawdAEHWFkYavAINEPEaG7fca";
// public static final String SECRET = "SPsIfz0CPIQ8cGQYIfjwBSF9DZIa";
// MHMETER
// public static final String APPID = "zqMXFzwKaJY75T0H6kG7ibKc4Ika";
// public static final String SECRET = "XQJstspwfTlPwrF7vFQgQrBjdS8a";
/*
*IP and port of callback url.
*please replace the IP and Port of your Application deployment environment address, when you use the demo.
*/
// public static final String CALLBACK_BASE_URL = "http://120.25.220.177:8686";
//警备区电表 端口号10000 水表:10001
public static final String CALLBACK_BASE_URL = "http://134.175.248.88:8091";
// //测试项目地址
// 测试项目地址
// public static final String CALLBACK_BASE_URL = "http://xiaoer.free.idcfengye.com";
//狮山自来水项目地址
// public static final String CALLBACK_BASE_URL = "http://134.175.248.88:8083";
//星海大学城项目地址
// public static final String CALLBACK_BASE_URL = "http://134.175.248.88:10002";
/*
* complete callback url
* please replace uri, when you use the demo.
*/
public static final String DEVICE_ADDED_CALLBACK_URL = CALLBACK_BASE_URL + "/na/iocm/devNotify/v1.1.0/addDevice";
public static final String DEVICE_INFO_CHANGED_CALLBACK_URL = CALLBACK_BASE_URL + "/na/iocm/devNotify/v1.1.0/updateDeviceInfo";
public static final String DEVICE_DATA_CHANGED_CALLBACK_URL = CALLBACK_BASE_URL + "/na/iocm/devNotify/v1.1.0/updateDeviceData";
public static final String DEVICE_DELETED_CALLBACK_URL = CALLBACK_BASE_URL + "/na/iocm/devNotify/v1.1.0/deletedDevice";
public static final String MESSAGE_CONFIRM_CALLBACK_URL = CALLBACK_BASE_URL + "/na/iocm/devNotify/v1.1.0/commandConfirmData";
public static final String SERVICE_INFO_CHANGED_CALLBACK_URL = CALLBACK_BASE_URL + "/na/iocm/devNotify/v1.1.0/updateServiceInfo";
public static final String COMMAND_RSP_CALLBACK_URL = CALLBACK_BASE_URL + "/na/iocm/devNotify/v1.1.0/commandRspData";
public static final String DEVICE_EVENT_CALLBACK_URL = CALLBACK_BASE_URL + "/na/iocm/devNotify/v1.1.0/DeviceEvent";
public static final String RULE_EVENT_CALLBACK_URL = CALLBACK_BASE_URL + "/na/iocm/devNotify/v1.1.0/RulEevent";
public static final String DEVICE_DATAS_CHANGED_CALLBACK_URL = CALLBACK_BASE_URL + "/na/iocm/devNotify/v1.1.0/updateDeviceDatas";
/*
* Specifies the callback URL for the command execution result notification.
* For details about the execution result notification definition.
*
* please replace uri, when you use the demo.
*/
public static final String REPORT_CMD_EXEC_RESULT_CALLBACK_URL = CALLBACK_BASE_URL + "/na/iocm/devNotify/v1.1.0/reportCmdExecResult";
//Paths of certificates.
public static String SELFCERTPATH = "/src/main/resources/cert/outgoing.CertwithKey.pkcs12";
public static String TRUSTCAPATH = "/src/main/resources/cert/ca.jks";
//Password of certificates.
public static String SELFCERTPWD = "IoM@1234";
public static String TRUSTCAPWD = "Huawei@123";
//*************************** The following constants do not need to be modified *********************************//
/*
* request header
* 1. HEADER_APP_KEY
* 2. HEADER_APP_AUTH
*/
public static final String HEADER_APP_KEY = "app_key";
public static final String HEADER_APP_AUTH = "Authorization";
/*
* Application Access Security:
* 1. APP_AUTH
* 2. REFRESH_TOKEN
*/
public static final String APP_AUTH = BASE_URL + "/iocm/app/sec/v1.1.0/login";
public static final String REFRESH_TOKEN = BASE_URL + "/iocm/app/sec/v1.1.0/refreshToken";
/*
* Device Management:
* 1. REGISTER_DEVICE
* 2. MODIFY_DEVICE_INFO
* 3. QUERY_DEVICE_ACTIVATION_STATUS
* 4. DELETE_DEVICE
* 5. DISCOVER_INDIRECT_DEVICE
* 6. REMOVE_INDIRECT_DEVICE
*/
public static final String REGISTER_DEVICE = BASE_URL + "/iocm/app/reg/v1.1.0/devices";
public static final String MODIFY_DEVICE_INFO = BASE_URL + "/iocm/app/dm/v1.1.0/devices";
public static final String QUERY_DEVICE_ACTIVATION_STATUS = BASE_URL + "/iocm/app/reg/v1.1.0/devices";
public static final String DELETE_DEVICE = BASE_URL + "/iocm/app/dm/v1.1.0/devices";
public static final String DISCOVER_INDIRECT_DEVICE = BASE_URL + "/iocm/app/signaltrans/v1.1.0/devices/%s/services/%s/sendCommand";
public static final String REMOVE_INDIRECT_DEVICE = BASE_URL + "/iocm/app/signaltrans/v1.1.0/devices/%s/services/%s/sendCommand";
/*
* Data Collection:
* 1. QUERY_DEVICES
* 2. QUERY_DEVICE_DATA
* 3. QUERY_DEVICE_HISTORY_DATA
* 4. QUERY_DEVICE_CAPABILITIES
* 5. SUBSCRIBE_NOTIFYCATION
*/
public static final String QUERY_DEVICES = BASE_URL + "/iocm/app/dm/v1.3.0/devices";
public static final String QUERY_DEVICE_DATA = BASE_URL + "/iocm/app/dm/v1.3.0/devices";
public static final String QUERY_DEVICE_HISTORY_DATA = BASE_URL + "/iocm/app/data/v1.1.0/deviceDataHistory";
public static final String QUERY_DEVICE_CAPABILITIES = BASE_URL + "/iocm/app/data/v1.1.0/deviceCapabilities";
public static final String SUBSCRIBE_NOTIFYCATION = BASE_URL + "/iocm/app/sub/v1.1.0/subscribe";
public static final String SUBSCRIBE_NOTIFYCATIONS = BASE_URL + "/iocm/app/sub/v1.2.0/subscriptions";
/*
* Signaling Delivery
* 1. POST_ASYN_CMD
* 2. QUERY_DEVICE_CMD
* 3. UPDATE_ASYN_COMMAND
* 4. CREATE_DEVICECMD_CANCEL_TASK
* 5. QUERY_DEVICECMD_CANCEL_TASK
*
*/
public static final String POST_ASYN_CMD = BASE_URL + "/iocm/app/cmd/v1.4.0/deviceCommands";
public static final String QUERY_DEVICE_CMD = BASE_URL + "/iocm/app/cmd/v1.4.0/deviceCommands";
public static final String UPDATE_ASYN_COMMAND = BASE_URL + "/iocm/app/cmd/v1.4.0/deviceCommands/%s";
public static final String CREATE_DEVICECMD_CANCEL_TASK = BASE_URL + "/iocm/app/cmd/v1.4.0/deviceCommandCancelTasks";
public static final String QUERY_DEVICECMD_CANCEL_TASK = BASE_URL + "/iocm/app/cmd/v1.4.0/deviceCommandCancelTasks";
/*
* notify Type
* serviceInfoChanged|deviceInfoChanged|LocationChanged|deviceDataChanged|deviceDatasChanged
* deviceAdded|deviceDeleted|messageConfirm|commandRsp|deviceEvent|ruleEvent
*/
public static final String DEVICE_ADDED = "deviceAdded";
public static final String DEVICE_INFO_CHANGED = "deviceInfoChanged";
public static final String DEVICE_DATA_CHANGED = "deviceDataChanged";
public static final String DEVICE_DELETED = "deviceDeleted";
public static final String MESSAGE_CONFIRM = "messageConfirm";
public static final String SERVICE_INFO_CHANGED = "serviceInfoChanged";
public static final String COMMAND_RSP = "commandRsp";
public static final String DEVICE_EVENT = "deviceEvent";
public static final String RULE_EVENT = "ruleEvent";
public static final String DEVICE_DATAS_CHANGED = "deviceDatasChanged";
}

198
src/main/java/com/mh/garrison/mhutils/ConstantWater.java

@ -0,0 +1,198 @@
/*
* File Name: com.huawei.utils.Constant.java
*
* Copyright Notice:
* Copyright 1998-2008, Huawei Technologies Co., Ltd. ALL Rights Reserved.
*
* Warning: This computer software sourcecode is protected by copyright law
* and international treaties. Unauthorized reproduction or distribution
* of this sourcecode, or any portion of it, may result in severe civil and
* criminal penalties, and will be prosecuted to the maximum extent
* possible under the law.
*/
package com.mh.garrison.mhutils;
public class ConstantWater {
//please replace the IP and Port, when you use the demo.
public static final String BASE_URL = "https://device.api.ct10649.com:8743";
//
// //please replace the appId and secret, when you use the demo.
// public static final String APPID = "bKt6QbQBou8L9fvlILMzNPkMPnoa";
// public static final String SECRET = "MIN_w5uAphyo6S1rOEfsswwNu8Ma";
// public static final String BASE_URL = "https://180.101.147.89:8743";
//please replace the appId and secret, when you use the demo.
// 测试平台测试app应用
// public static final String APPID = "3q0WU53HTdRdAF25CcHH56JItK8a";
// public static final String SECRET = "KAMFe5LhF6qAG7u5IWyowL0Clssa";
// 正式平台WaterMeter应用
// public static final String APPID = "rqqlzFc4N28B4XQ6FModBl5_hiAa";
// public static final String SECRET = "9R7UMMXFkYar0uYJKESgT8S_QhQa";
//
//警备区电表
// public static final String APPID = "ohF8udKDcQ0hfO3VFn441L7a5lQa";
// public static final String SECRET = "UAApfey8u_JfD2X18nvJ28lSQyQa";
// 警备区水表
public static final String APPID = "259iInhJm7EDOGit_FJ0tKKKdSga";
public static final String SECRET = "JZyWnfHICXncrukvRYhuSzujQJwa";
// //正式平台测试APP应用
// public static final String APPID = "bKt6QbQBou8L9fvlILMzNPkMPnoa";
// public static final String SECRET = "J89WSfT7_KQcHJjveJ2WasptE2Ea";
// 正式应用狮山自来水
// public static final String APPID = "zUc2S0RXYjwVAVMKQ5DmI_Ytx5Ya";
// public static final String SECRET = "OJ2UwZw3VGWxEYMIbg1K3SPuO3wa";
//星海大学城APP应用
// public static final String APPID = "PP3BawdAEHWFkYavAINEPEaG7fca";
// public static final String SECRET = "SPsIfz0CPIQ8cGQYIfjwBSF9DZIa";
// MHMETER
// public static final String APPID = "zqMXFzwKaJY75T0H6kG7ibKc4Ika";
// public static final String SECRET = "XQJstspwfTlPwrF7vFQgQrBjdS8a";
/*
*IP and port of callback url.
*please replace the IP and Port of your Application deployment environment address, when you use the demo.
*/
// public static final String CALLBACK_BASE_URL = "http://120.25.220.177:8686";
//警备区电表 端口号10000 水表:10001
public static final String CALLBACK_BASE_URL = "http://134.175.248.88:8091";
// //测试项目地址
// 测试项目地址
// public static final String CALLBACK_BASE_URL = "http://xiaoer.free.idcfengye.com";
//狮山自来水项目地址
// public static final String CALLBACK_BASE_URL = "http://134.175.248.88:8083";
//星海大学城项目地址
// public static final String CALLBACK_BASE_URL = "http://134.175.248.88:10002";
/*
* complete callback url
* please replace uri, when you use the demo.
*/
public static final String DEVICE_ADDED_CALLBACK_URL = CALLBACK_BASE_URL + "/na/iocm/devNotify/v1.1.0/addDevice";
public static final String DEVICE_INFO_CHANGED_CALLBACK_URL = CALLBACK_BASE_URL + "/na/iocm/devNotify/v1.1.0/updateDeviceInfo";
public static final String DEVICE_DATA_CHANGED_CALLBACK_URL = CALLBACK_BASE_URL + "/na/iocm/devNotify/v1.1.0/updateDeviceData";
public static final String DEVICE_DELETED_CALLBACK_URL = CALLBACK_BASE_URL + "/na/iocm/devNotify/v1.1.0/deletedDevice";
public static final String MESSAGE_CONFIRM_CALLBACK_URL = CALLBACK_BASE_URL + "/na/iocm/devNotify/v1.1.0/commandConfirmData";
public static final String SERVICE_INFO_CHANGED_CALLBACK_URL = CALLBACK_BASE_URL + "/na/iocm/devNotify/v1.1.0/updateServiceInfo";
public static final String COMMAND_RSP_CALLBACK_URL = CALLBACK_BASE_URL + "/na/iocm/devNotify/v1.1.0/commandRspData";
public static final String DEVICE_EVENT_CALLBACK_URL = CALLBACK_BASE_URL + "/na/iocm/devNotify/v1.1.0/DeviceEvent";
public static final String RULE_EVENT_CALLBACK_URL = CALLBACK_BASE_URL + "/na/iocm/devNotify/v1.1.0/RulEevent";
public static final String DEVICE_DATAS_CHANGED_CALLBACK_URL = CALLBACK_BASE_URL + "/na/iocm/devNotify/v1.1.0/updateDeviceDatas";
/*
* Specifies the callback URL for the command execution result notification.
* For details about the execution result notification definition.
*
* please replace uri, when you use the demo.
*/
public static final String REPORT_CMD_EXEC_RESULT_CALLBACK_URL = CALLBACK_BASE_URL + "/na/iocm/devNotify/v1.1.0/reportCmdExecResult";
//Paths of certificates.
public static String SELFCERTPATH = "/src/main/resources/cert/outgoing.CertwithKey.pkcs12";
public static String TRUSTCAPATH = "/src/main/resources/cert/ca.jks";
//Password of certificates.
public static String SELFCERTPWD = "IoM@1234";
public static String TRUSTCAPWD = "Huawei@123";
//*************************** The following constants do not need to be modified *********************************//
/*
* request header
* 1. HEADER_APP_KEY
* 2. HEADER_APP_AUTH
*/
public static final String HEADER_APP_KEY = "app_key";
public static final String HEADER_APP_AUTH = "Authorization";
/*
* Application Access Security:
* 1. APP_AUTH
* 2. REFRESH_TOKEN
*/
public static final String APP_AUTH = BASE_URL + "/iocm/app/sec/v1.1.0/login";
public static final String REFRESH_TOKEN = BASE_URL + "/iocm/app/sec/v1.1.0/refreshToken";
/*
* Device Management:
* 1. REGISTER_DEVICE
* 2. MODIFY_DEVICE_INFO
* 3. QUERY_DEVICE_ACTIVATION_STATUS
* 4. DELETE_DEVICE
* 5. DISCOVER_INDIRECT_DEVICE
* 6. REMOVE_INDIRECT_DEVICE
*/
public static final String REGISTER_DEVICE = BASE_URL + "/iocm/app/reg/v1.1.0/devices";
public static final String MODIFY_DEVICE_INFO = BASE_URL + "/iocm/app/dm/v1.1.0/devices";
public static final String QUERY_DEVICE_ACTIVATION_STATUS = BASE_URL + "/iocm/app/reg/v1.1.0/devices";
public static final String DELETE_DEVICE = BASE_URL + "/iocm/app/dm/v1.1.0/devices";
public static final String DISCOVER_INDIRECT_DEVICE = BASE_URL + "/iocm/app/signaltrans/v1.1.0/devices/%s/services/%s/sendCommand";
public static final String REMOVE_INDIRECT_DEVICE = BASE_URL + "/iocm/app/signaltrans/v1.1.0/devices/%s/services/%s/sendCommand";
/*
* Data Collection:
* 1. QUERY_DEVICES
* 2. QUERY_DEVICE_DATA
* 3. QUERY_DEVICE_HISTORY_DATA
* 4. QUERY_DEVICE_CAPABILITIES
* 5. SUBSCRIBE_NOTIFYCATION
*/
public static final String QUERY_DEVICES = BASE_URL + "/iocm/app/dm/v1.3.0/devices";
public static final String QUERY_DEVICE_DATA = BASE_URL + "/iocm/app/dm/v1.3.0/devices";
public static final String QUERY_DEVICE_HISTORY_DATA = BASE_URL + "/iocm/app/data/v1.1.0/deviceDataHistory";
public static final String QUERY_DEVICE_CAPABILITIES = BASE_URL + "/iocm/app/data/v1.1.0/deviceCapabilities";
public static final String SUBSCRIBE_NOTIFYCATION = BASE_URL + "/iocm/app/sub/v1.1.0/subscribe";
public static final String SUBSCRIBE_NOTIFYCATIONS = BASE_URL + "/iocm/app/sub/v1.2.0/subscriptions";
/*
* Signaling Delivery
* 1. POST_ASYN_CMD
* 2. QUERY_DEVICE_CMD
* 3. UPDATE_ASYN_COMMAND
* 4. CREATE_DEVICECMD_CANCEL_TASK
* 5. QUERY_DEVICECMD_CANCEL_TASK
*
*/
public static final String POST_ASYN_CMD = BASE_URL + "/iocm/app/cmd/v1.4.0/deviceCommands";
public static final String QUERY_DEVICE_CMD = BASE_URL + "/iocm/app/cmd/v1.4.0/deviceCommands";
public static final String UPDATE_ASYN_COMMAND = BASE_URL + "/iocm/app/cmd/v1.4.0/deviceCommands/%s";
public static final String CREATE_DEVICECMD_CANCEL_TASK = BASE_URL + "/iocm/app/cmd/v1.4.0/deviceCommandCancelTasks";
public static final String QUERY_DEVICECMD_CANCEL_TASK = BASE_URL + "/iocm/app/cmd/v1.4.0/deviceCommandCancelTasks";
/*
* notify Type
* serviceInfoChanged|deviceInfoChanged|LocationChanged|deviceDataChanged|deviceDatasChanged
* deviceAdded|deviceDeleted|messageConfirm|commandRsp|deviceEvent|ruleEvent
*/
public static final String DEVICE_ADDED = "deviceAdded";
public static final String DEVICE_INFO_CHANGED = "deviceInfoChanged";
public static final String DEVICE_DATA_CHANGED = "deviceDataChanged";
public static final String DEVICE_DELETED = "deviceDeleted";
public static final String MESSAGE_CONFIRM = "messageConfirm";
public static final String SERVICE_INFO_CHANGED = "serviceInfoChanged";
public static final String COMMAND_RSP = "commandRsp";
public static final String DEVICE_EVENT = "deviceEvent";
public static final String RULE_EVENT = "ruleEvent";
public static final String DEVICE_DATAS_CHANGED = "deviceDatasChanged";
}

259
src/main/java/com/mh/garrison/mhutils/FastJson.java

@ -0,0 +1,259 @@
package com.mh.garrison.mhutils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.mh.garrison.constant.Constants;
import com.mh.garrison.entity.*;
public class FastJson {
// 添加之后能够对mapper调用
// private ApplicationContext applicationContext =
// SpringUtils.getApplicationContext();
// private MeterNowMapper meterNowMapper =
// applicationContext.getBean(MeterNowMapper.class);
public String analysisFastJson(String receiveData) {
DeviceMessageBean deviceMessageBean = new DeviceMessageBean();
ServiceBean serviceBean = new ServiceBean();
WaterDataBean dataBean = new WaterDataBean();
JSONObject jsonObject = JSONObject.parseObject(receiveData);
if (receiveData.contains("services")) {
// 解析第一层
deviceMessageBean.setNotiFyType(jsonObject.getString("notifyType"));
deviceMessageBean.setServiceBean(jsonObject.getString("service"));
deviceMessageBean.setDeviceId(jsonObject.getString("deviceId"));
deviceMessageBean.setGatewayId(jsonObject.getString("gatewayId"));
// 解析第二层
JSONArray array = jsonObject.getJSONArray("services");
for (int i = 0; i < array.size(); i++) {
JSONObject serviceJson = array.getJSONObject(i);
serviceBean.setServiceId(serviceJson.getString("serviceId"));
serviceBean.setServiceType(serviceJson.getString("serviceType"));
serviceBean.setDataBean(serviceJson.getString("data"));
serviceBean.setEventTime(serviceJson.getString("eventTime"));
// 解析第三层
JSONObject dataJson = serviceJson.getJSONObject("data");
dataBean.setMeterId(dataJson.getString("meterId"));
dataBean.setOnlineType(dataJson.getString("onlineType"));
dataBean.setOnlineCode(dataJson.getString("onlineCode"));
}
} else {
// 解析第一层
deviceMessageBean.setNotiFyType(jsonObject.getString("notifyType"));
deviceMessageBean.setServiceBean(jsonObject.getString("service"));
deviceMessageBean.setDeviceId(jsonObject.getString("deviceId"));
deviceMessageBean.setGatewayId(jsonObject.getString("gatewayId"));
// 解析第二层
JSONObject serviceJson = jsonObject.getJSONObject("service");
serviceBean.setServiceId(serviceJson.getString("serviceId"));
serviceBean.setServiceType(serviceJson.getString("serviceType"));
serviceBean.setDataBean(serviceJson.getString("data"));
serviceBean.setEventTime(serviceJson.getString("eventTime"));
// 解析第三层
JSONObject dataJson = serviceJson.getJSONObject("data");
dataBean.setMeterId(dataJson.getString("meterId"));
dataBean.setOnlineType(dataJson.getString("onlineType"));
dataBean.setOnlineCode(dataJson.getString("onlineCode"));
}
return dataBean.getOnlineCode();
}
public String analysisMeterFastJson(String receiveData) {
DeviceMessageBean deviceMessageBean = new DeviceMessageBean();
// ServiceBean serviceBean = new ServiceBean();
// DataBean dataBean = new DataBean();
String result = "";
Map<Integer, Object> map = new HashMap<>();
MeterUtils meterUtils = new MeterUtils();
JSONObject jsonObject = JSONObject.parseObject(receiveData);
String deviceId;
// 解析第一层
deviceMessageBean.setNotiFyType(jsonObject.getString("notifyType"));
deviceMessageBean.setServiceBean(jsonObject.getString("services"));
deviceMessageBean.setDeviceId(jsonObject.getString("deviceId"));
deviceMessageBean.setGatewayId(jsonObject.getString("gatewayId"));
deviceId = jsonObject.getString("deviceId"); // 设备ID,发送指令的时候需要
// 解析第二层
JSONArray array = jsonObject.getJSONArray("services");
for (int i = 0; i < array.size(); i++) {
JSONObject temp = array.getJSONObject(i);
String serviceId = temp.getString("serviceId");
// String serviceType = temp.getString("serviceType");
// String data = temp.getString("data");
// String evenTime = temp.getString("eventTime");
if (serviceId.equals("MHMeterData")) {
// 插入电表用量上报时间
String evenTime1 = temp.getString("eventTime");
try {
evenTime1 = TimeUtils.UTCToCST(evenTime1, "yyyy-MM-dd'T'HH:mm:ss'Z'");
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// meterNowBean.setMeter_time(evenTime1);
// if (meterNowMapper.checkMeterNow(meterNowBean) != 0) {
// meterNowMapper.updateAll(meterNowBean);
// } else {
// meterNowMapper.insertAll(meterNowBean);
// }
// 解析第三层
JSONObject dataJson = temp.getJSONObject("data");
String data = dataJson.getString("MHMeterData");
map.put(i, data);
System.out.println("数据————" + data);
// 插入数据进行再次判断 by ljf on 2018-12-08
if (data.length() == 24) {
// 解析发送命令后返回的数据
result = meterUtils.analysisSendOrder(data);
} else if (data.length() == 126) {
// 解析三相电表数据返回的报文
result = meterUtils.analysisThreeMeter(data, evenTime1, deviceId);
} else {
// 解析单相电表具体电表数据
result = meterUtils.analysisMeter(data, evenTime1, deviceId);
}
}
}
// dataBean.setMHMeterData(map);
// JSONObject serviceJson = jsonObject.getJSONObject("services");
// serviceBean.setServiceId(serviceJson.getString("serviceId"));
// serviceBean.setServiceType(serviceJson.getString("serviceType"));
// serviceBean.setDataBean(serviceJson.getString("data"));
// serviceBean.setEventTime(serviceJson.getString("eventTime"));
if (result.equals("success")) {
return "success";
} else {
return "fail";
}
// return dataBean.getMHMeterData();
}
/**
* 解析电表数据永阳AEP平台带profile文件解析
*/
public String analysisEleFastJsonByAEPProfile(String receiveData) {
MeterUtils meterUtils = new MeterUtils();
JSONObject jsonObject = JSONObject.parseObject(receiveData);
//1.解析第一层
String productId = jsonObject.getString("productId");
String imei = jsonObject.getString("IMEI");
String deviceId = jsonObject.getString("deviceId");
String protocol = jsonObject.getString("protocol");
String messageType = jsonObject.getString("messageType");
String payload = jsonObject.getString("payload");
String assocAssetId = jsonObject.getString("assocAssetId");
String tenantId = jsonObject.getString("tenantId");
String imsi = jsonObject.getString("IMSI");
String serviceId = jsonObject.getString("serviceId");
String timestamp = jsonObject.getString("timestamp");
if ("Connectivity".equalsIgnoreCase(serviceId)) {
//设备连接信息,直接结束
return Constants.SUCCESS;
}
//2.解析第二层数据
JSONObject payloadJson = JSONObject.parseObject(payload);
String serviceData = payloadJson.getString("serviceData");
//3.解析第三层数据
JSONObject serviceDataJson = JSONObject.parseObject(serviceData);
String mhMeterData = serviceDataJson.getString("MHMeterData");
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(Long.parseLong(timestamp));
String evenTime = format.format(date);
String result;
if (mhMeterData == null || mhMeterData.length() == 24 || mhMeterData.length() == 26) {
//命令回调
return meterUtils.analysisSendOrder(mhMeterData);
} else if (mhMeterData.isEmpty()) {
//查询的连接状态返回
return "success";
} else {
//解析数据
result = meterUtils.analysisAEPMeter(mhMeterData, evenTime, deviceId, imei);
}
if (result.equalsIgnoreCase("success")) {
return "success";
} else {
return "fail";
}
}
// public static void main(String[] args) {
// // String jsonData =
// // "{\"notifyType\":\"deviceDataChanged\",\"service\":{\"serviceId\":\"WaterMeter\",\"serviceType\":\"WaterMeter\",\"data\":{\"meterId\":\"3606180679020130\",\"onlineType\":\"1100\",\"onlineCode\":\"6800da681100300102790618063620180731143012106b0178026a01d0000000c4ff1201002d00ff7f661b090460111172577161102700000000000000001c001027000000102700000010270000001027000000102700000010270000001027000000102700000010270000001027000000102700000010270000001027000000102700000010270000001027000000102700000010270000001027000000102700000010270000001027000000102700000010270000001027000000102700000010270000001027000000000600021807310000000000000000000000e916\"},\"eventTime\":\"20180801T063016Z\"},\"deviceId\":\"1ea8360f-8d9b-4ef9-b3f5-68b7453a3994\",\"gatewayId\":\"1ea8360f-8d9b-4ef9-b3f5-68b7453a3994\"}";
// // String jsonData =
// // "{\"notifyType\":\"deviceDatasChanged\",\"services\":[{\"serviceId\":\"Connectivity\",\"serviceType\":\"Connectivity\",\"data\":{\"signalStrength\":0,\"linkQuality\":0,\"cellId\":0},\"eventTime\":\"20180825T064033Z\"},{\"serviceId\":\"MHMeterData\",\"serviceType\":\"MHMeterData\",\"data\":{\"MHMeterData\":\"680002050800006881183232866833334455a77b33333333543c36833333333333333216\"},\"eventTime\":\"20180825T064033Z\"}],\"deviceId\":\"06812a58-48ea-4c2f-b228-e9dc86e8e71e\",\"gatewayId\":\"06812a58-48ea-4c2f-b228-e9dc86e8e71e\"}\r\n";
// // FastJson fastJson = new FastJson();
// // String string = fastJson.analysisMeterFastJson(jsonData);
// // System.out.println(string);
//
// String string = "689603019000006881333232b87953333656c855c4553a4b333a4b333a4b33c34434366b33b76933346a33453c463c3b3c473cca7c34336f3333333333fe16";
// String teString = string.substring(110, 114);
// String newData = "";
// for (int i = teString.length() / 2; i > 0; i--) {
// newData = newData + teString.substring(2 * i - 2, 2 * i);
// // System.out.println(newData);
// }
// String nString = "";
// int b = Integer.parseInt("33", 16); // 33值
// for (int i = 0; i < newData.length() / 2; i++) {
// String cutString = newData.substring(2 * i, 2 * i + 2);
// // System.out.println("截取的字符——" + cutString);
// int a1 = Integer.parseInt(cutString, 16);
// int b1 = a1 - b;
// if (b1 < 0) {
// System.out.println("数据格式有误");
// } else {
// b1 = b1 % 256;
// String hexString = Integer.toHexString(b1);
// if (hexString.length() < 2) {
// hexString = "0" + hexString;
// // System.out.println(hexString);
// nString = nString + hexString;
// } else {
// nString = nString + hexString;
// }
// }
// }
// System.out.println("定时上传时间 " + Integer.valueOf(nString,16));
// }
}

206
src/main/java/com/mh/garrison/mhutils/FastJsonUtil.java

@ -0,0 +1,206 @@
package com.mh.garrison.mhutils;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.text.ParseException;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.mh.garrison.entity.DeviceInfo;
import com.mh.garrison.entity.DeviceMessage;
import com.mh.garrison.entity.DevicesBean;
public class FastJsonUtil {
public String analysisFastJson(String receiveData) throws ParseException {
String stateMessage = "fail";
DevicesBean devicesBean = new DevicesBean();
DeviceMessage deviceMessage = new DeviceMessage();
DeviceInfo deviceInfo = new DeviceInfo();
JSONObject jsonObject = JSONObject.parseObject(receiveData);
// 解析第一层
devicesBean.setTotalCount(jsonObject.getLongValue("totalCount"));
devicesBean.setPageNo(jsonObject.getLongValue("pageNo"));
devicesBean.setPageSize(jsonObject.getLongValue("pageSize"));
devicesBean.setDevices(jsonObject.getString("devices"));
// 解析第二层
JSONArray devices = jsonObject.getJSONArray("devices");
// System.out.println("--------------设备使用量------------" + devices.size());
for (int i = 0; i < devices.size(); i++) {
JSONObject jsonObject2 = devices.getJSONObject(i);
String deviceId = jsonObject2.getString("deviceId"); // 设备ID号
deviceMessage.setDeviceId(deviceId);
deviceMessage.setGatewayId(jsonObject2.getString("gatewayId"));
deviceMessage.setNodeType(jsonObject2.getString("nodeType"));
String createTime = jsonObject2.getString("createTime"); // 设备注册时间
createTime = TimeUtils.UTCToCST(createTime, "yyyy-MM-dd'T'HH:mm:ss'Z'");
deviceMessage.setCreateTime(createTime);
String lastModifiedTime = jsonObject2.getString("lastModifiedTime"); // 设备最近连接上来的时间
lastModifiedTime = TimeUtils.UTCToCST(lastModifiedTime, "yyyy-MM-dd'T'HH:mm:ss'Z'");
deviceMessage.setLastModifiedTime(lastModifiedTime);
deviceMessage.setDeviceInfo(jsonObject2.getString("deviceInfo"));
deviceMessage.setServices(jsonObject2.getString("services"));
deviceMessage.setConnectionInfo(jsonObject2.getString("connectionInfo"));
deviceMessage.setDevGroupIds(jsonObject2.getString("devGroupIds"));
System.out.println("--------------------------第二层-------------------------");
System.out.println(deviceMessage.toString());
// 解析第三层
JSONObject jsonObject3 = JSONObject.parseObject(jsonObject2.getString("deviceInfo"));
String IMEI = jsonObject3.getString("nodeId"); // 设备IMEI号
deviceInfo.setNodeId(IMEI);
deviceInfo.setName(jsonObject3.getString("name"));
deviceInfo.setManufactureId(jsonObject3.getString("manufacturerId"));
deviceInfo.setManufacturerName(jsonObject3.getString("manufacturerName"));
deviceInfo.setDeviceType(jsonObject3.getString("deviceType"));
String state = jsonObject3.getString("status"); // 设备状态
deviceInfo.setStatus(state);
System.out.println("--------------------------第三层-------------------------");
System.out.println(deviceInfo.toString());
// String address = "jdbc:sqlserver://134.175.248.88:2008;Databasename=NB_SHZLS";
// String dbuser = "sa";
// String dbpasswd = "mhtech@803";
// String database = "NB_SHZLS";
String address = "jdbc:sqlserver://134.175.248.88:2008;Databasename=yjc_jingbeiqu";
String dbuser = "sa";
String dbpasswd = "mhtech@803";
String database = "yjc_jingbeiqu";
// String address = "jdbc:sqlserver://193.112.131.36";
// String dbuser = "sa";
// String dbpasswd = "mhtech@803";
// String database = "yjc_jingbeiqu";
// String database = "yjc_xinghai_dxc";
try {
// System.out.println("计算值>>>>>>>>>>>>>>>>>>>>>>>>>" + i);
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
Connection con = DriverManager.getConnection(address, dbuser, dbpasswd);
con.setCatalog(database);
CallableStatement proc = con.prepareCall("{call pro_add_state(?,?,?,?,?)}");
proc.setString(1, deviceId);
proc.setString(2, createTime);
proc.setString(3, lastModifiedTime);
proc.setString(4, IMEI);
proc.setString(5, state);
proc.execute();
proc.close();
con.close();
stateMessage = "success";
} catch (Exception e) {
// TODO: handle exception
stateMessage = "fail";
// String causeStr = e.getCause().getMessage();
// System.out.println(">>>>>>>-------------" + causeStr);
}
}
// JSONObject.parseArray(jsonObject.getString("devices"));
// JSONArray deviceMessageJson = jsonObject.getJSONObject("devices");
// serviceBean.setServiceId(deviceMessageJson.getString("serviceId"));
// serviceBean.setServiceType(serviceJson.getString("serviceType"));
// serviceBean.setDataBean(serviceJson.getString("data"));
// serviceBean.setEventTime(serviceJson.getString("eventTime"));
//
// // 解析第三层
// JSONObject dataJson = serviceJson.getJSONObject("data");
// dataBean.setMeterId(dataJson.getString("meterId"));
// dataBean.setOnlineType(dataJson.getString("onlineType"));
// dataBean.setOnlineCode(dataJson.getString("onlineCode"));
return stateMessage;
}
// public static void main(String[] args) throws Exception {
// String jsonData = "{\r\n" +
// " \"totalCount\":1,\r\n" +
// " \"pageNo\":0,\r\n" +
// " \"pageSize\":10,\r\n" +
// " \"devices\":[\r\n" +
// " {\r\n" +
// " \"deviceId\":\"9e22e475-89a7-4b36-9462-ee61b1000c20\",\r\n" +
// " \"gatewayId\":\"9e22e475-89a7-4b36-9462-ee61b1000c20\",\r\n" +
// " \"nodeType\":\"GATEWAY\",\r\n" +
// " \"createTime\":\"20181013T062538Z\",\r\n" +
// " \"lastModifiedTime\":\"20181013T070436Z\",\r\n" +
// " \"deviceInfo\":{\r\n" +
// " \"nodeId\":\"865352033012310\",\r\n" +
// " \"name\":\"865352033012310\",\r\n" +
// " \"description\":null,\r\n" +
// " \"manufacturerId\":\"MH\",\r\n" +
// " \"manufacturerName\":\"MH\",\r\n" +
// " \"mac\":null,\r\n" +
// " \"location\":\"Shenzhen\",\r\n" +
// " \"deviceType\":\"MHMeter\",\r\n" +
// " \"model\":\"DDS3666\",\r\n" +
// " \"swVersion\":null,\r\n" +
// " \"fwVersion\":\"Neul@Hi12RM0-B5@B657R5Lierda1200104,V100R100C10B657SP5,V100R100C10B657SP5@5\",\r\n" +
// " \"hwVersion\":null,\r\n" +
// " \"protocolType\":\"CoAP\",\r\n" +
// " \"bridgeId\":null,\r\n" +
// " \"status\":\"ONLINE\",\r\n" +
// " \"statusDetail\":\"NONE\",\r\n" +
// " \"mute\":\"FALSE\",\r\n" +
// " \"supportedSecurity\":null,\r\n" +
// " \"isSecurity\":null,\r\n" +
// " \"signalStrength\":null,\r\n" +
// " \"sigVersion\":null,\r\n" +
// " \"serialNumber\":null,\r\n" +
// " \"batteryLevel\":null\r\n" +
// " },\r\n" +
// " \"services\":[\r\n" +
// " {\r\n" +
// " \"serviceId\":\"Connectivity\",\r\n" +
// " \"serviceType\":\"Connectivity\",\r\n" +
// " \"data\":{\r\n" +
// " \"signalStrength\":0,\r\n" +
// " \"linkQuality\":0,\r\n" +
// " \"cellId\":0\r\n" +
// " },\r\n" +
// " \"eventTime\":\"20181013T070436Z\",\r\n" +
// " \"serviceInfo\":null\r\n" +
// " },\r\n" +
// " {\r\n" +
// " \"serviceId\":\"MHMeterData\",\r\n" +
// " \"serviceType\":\"MHMeterData\",\r\n" +
// " \"data\":{\r\n" +
// " \"MHMeterData\":\"68000000000000688118323236333333ca5633333333333333433583334b343333336716\"\r\n" +
// " },\r\n" +
// " \"eventTime\":\"20181013T070436Z\",\r\n" +
// " \"serviceInfo\":null\r\n" +
// " }\r\n" +
// " ],\r\n" +
// " \"connectionInfo\":{\r\n" +
// " \"cellId\":\"******\"\r\n" +
// " },\r\n" +
// " \"devGroupIds\":[\r\n" +
// "\r\n" +
// " ]\r\n" +
// " }\r\n" +
// " ]\r\n" +
// "}";
// FastJsonUtil fastJson = new FastJsonUtil();
// String string = fastJson.analysisFastJson(jsonData);
// System.out.println(string);
//
// }
}

29
src/main/java/com/mh/garrison/mhutils/GetBalance.java

@ -0,0 +1,29 @@
package com.mh.garrison.mhutils;
import java.io.UnsupportedEncodingException;
/**
* 查询余额
*
* @author acer
*
*/
public class GetBalance {
public static void main(String[] args) throws UnsupportedEncodingException {
String userName = "jbqznjf";// 用户名
String password = "dT6pH6rQ1";// 密码
MSGClient client = new MSGClient(userName, password);
// 查询余额
String result_balance = client.getBalance();
if (result_balance.startsWith("-")) {
System.out.print("发送失败!返回值为:" + result_balance + "请查看HTTP返回值对照表");
return;
}
System.out.print("您的余额为 : " + result_balance);
}
}

360
src/main/java/com/mh/garrison/mhutils/HttpsUtil.java

@ -0,0 +1,360 @@
package com.mh.garrison.mhutils;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URISyntaxException;
import java.security.KeyStore;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManagerFactory;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
@SuppressWarnings("deprecation")
public class HttpsUtil extends DefaultHttpClient {
public final static String HTTPGET = "GET";
public final static String HTTPPUT = "PUT";
public final static String HTTPPOST = "POST";
public final static String HTTPDELETE = "DELETE";
public final static String HTTPACCEPT = "Accept";
public final static String CONTENT_LENGTH = "Content-Length";
public final static String CHARSET_UTF8 = "UTF-8";
private static HttpClient httpClient;
/**
* Two-Way Authentication In the two-way authentication, the client needs: 1
* Import your own certificate for server verification; 2 Import the CA
* certificate of the server, and use the CA certificate to verify the
* certificate sent by the server; 3 Set the domain name to not verify
* (Non-commercial IoT platform, no use domain name access.)
* */
public void initSSLConfigForTwoWay() throws Exception {
// 1 Import your own certificate
String demo_base_Path = System.getProperty("user.dir");
String selfcertpath = demo_base_Path + Constant.SELFCERTPATH;
String trustcapath = demo_base_Path + Constant.TRUSTCAPATH;
KeyStore selfCert = KeyStore.getInstance("pkcs12");
selfCert.load(new FileInputStream(selfcertpath),
Constant.SELFCERTPWD.toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance("sunx509");
kmf.init(selfCert, Constant.SELFCERTPWD.toCharArray());
// 2 Import the CA certificate of the server,
KeyStore caCert = KeyStore.getInstance("jks");
caCert.load(new FileInputStream(trustcapath), Constant.TRUSTCAPWD.toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance("sunx509");
tmf.init(caCert);
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
// 3 Set the domain name to not verify
// (Non-commercial IoT platform, no use domain name access generally.)
SSLSocketFactory ssf = new SSLSocketFactory(sc,
SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
// If the platform has already applied for a domain name which matches
// the domain name in the certificate information, the certificate
// domain name check can be enabled (open by default)
// SSLSocketFactory ssf = new SSLSocketFactory(sc);
ClientConnectionManager ccm = this.getConnectionManager();
SchemeRegistry sr = ccm.getSchemeRegistry();
sr.register(new Scheme("https", 8743, ssf));
httpClient = new DefaultHttpClient(ccm);
}
/**
* One-Way Authentication In the One-way authentication, the client needs: 1
* Import the CA certificate of the server, and use the CA certificate to
* verify the certificate sent by the server; 2 Set the domain name to not
* verify (Non-commercial IoT platform, no use domain name access.)
* */
/*
* public void initSSLConfigForOneWay() throws Exception {
*
* // 1 Import the CA certificate of the server, KeyStore caCert =
* KeyStore.getInstance("jks"); caCert.load(new
* FileInputStream(TRUSTCAPATH), TRUSTCAPWD.toCharArray());
* TrustManagerFactory tmf = TrustManagerFactory.getInstance("sunx509");
* tmf.init(caCert);
*
* SSLContext sc = SSLContext.getInstance("TLS"); sc.init(null,
* tmf.getTrustManagers(), null);
*
* // 2 Set the domain name to not verify // (Non-commercial IoT platform,
* no use domain name access generally.) SSLSocketFactory ssf = new
* SSLSocketFactory(sc, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
*
* //If the platform has already applied for a domain name which matches the
* domain name in the certificate information, the certificate //domain name
* check can be enabled (open by default) // SSLSocketFactory ssf = new
* SSLSocketFactory(sc);
*
* ClientConnectionManager ccm = this.getConnectionManager(); SchemeRegistry
* sr = ccm.getSchemeRegistry(); sr.register(new Scheme("https", 8743,
* ssf));
*
* httpClient = new DefaultHttpClient(ccm); }
*/
public HttpResponse doPostJson(String url, Map<String, String> headerMap,
String content) {
HttpPost request = new HttpPost(url);
addRequestHeader(request, headerMap);
request.setEntity(new StringEntity(content,
ContentType.APPLICATION_JSON));
return executeHttpRequest(request);
}
// public StreamClosedHttpResponse doPostMultipartFile(String url, Map<String, String> headerMap,
// File file) {
// HttpPost request = new HttpPost(url);
// addRequestHeader(request, headerMap);
//
// FileBody fileBody = new FileBody(file);
// // Content-Type:multipart/form-data; boundary=----WebKitFormBoundarypJTQXMOZ3dLEzJ4b
// HttpEntity reqEntity = (HttpEntity) MultipartEntityBuilder.create().addPart("file", fileBody).build();
// request.setEntity(reqEntity);
//
// return (StreamClosedHttpResponse) executeHttpRequest(request);
// }
public StreamClosedHttpResponse doPostJsonGetStatusLine(
String url, Map<String, String> headerMap, String content) {
HttpPost request = new HttpPost(url);
addRequestHeader(request, headerMap);
request.setEntity(new StringEntity(content,
ContentType.APPLICATION_JSON));
HttpResponse response = executeHttpRequest(request);
if (null == response) {
System.out.println("The response body is null.");
}
return (StreamClosedHttpResponse) response;
}
public StreamClosedHttpResponse doPostJsonGetStatusLine(String url, String content) {
HttpPost request = new HttpPost(url);
request.setEntity(new StringEntity(content,
ContentType.APPLICATION_JSON));
HttpResponse response = executeHttpRequest(request);
if (null == response) {
System.out.println("The response body is null.");
}
return (StreamClosedHttpResponse) response;
}
private List<NameValuePair> paramsConverter(Map<String, String> params) {
List<NameValuePair> nvps = new LinkedList<NameValuePair>();
Set<Map.Entry<String, String>> paramsSet = params.entrySet();
for (Map.Entry<String, String> paramEntry : paramsSet) {
nvps.add(new BasicNameValuePair(paramEntry.getKey(), paramEntry
.getValue()));
}
return nvps;
}
public StreamClosedHttpResponse doPostFormUrlEncodedGetStatusLine(
String url, Map<String, String> formParams) throws Exception {
HttpPost request = new HttpPost(url);
request.setEntity(new UrlEncodedFormEntity(paramsConverter(formParams)));
HttpResponse response = executeHttpRequest(request);
if (null == response) {
System.out.println("The response body is null.");
throw new Exception();
}
return (StreamClosedHttpResponse) response;
}
public HttpResponse doPutJson(String url, Map<String, String> headerMap,
String content) {
HttpPut request = new HttpPut(url);
addRequestHeader(request, headerMap);
request.setEntity(new StringEntity(content,
ContentType.APPLICATION_JSON));
return executeHttpRequest(request);
}
public HttpResponse doPut(String url, Map<String, String> headerMap) {
HttpPut request = new HttpPut(url);
addRequestHeader(request, headerMap);
return executeHttpRequest(request);
}
public StreamClosedHttpResponse doPutJsonGetStatusLine(String url, Map<String, String> headerMap,
String content) {
HttpResponse response = doPutJson(url, headerMap, content);
if (null == response) {
System.out.println("The response body is null.");
}
return (StreamClosedHttpResponse) response;
}
public StreamClosedHttpResponse doPutGetStatusLine(String url, Map<String, String> headerMap) {
HttpResponse response = doPut(url, headerMap);
if (null == response) {
System.out.println("The response body is null.");
}
return (StreamClosedHttpResponse) response;
}
public HttpResponse doGetWithParas(String url,
Map<String, String> queryParams, Map<String, String> headerMap)
throws Exception {
HttpGet request = new HttpGet();
addRequestHeader(request, headerMap);
URIBuilder builder;
try {
builder = new URIBuilder(url);
} catch (URISyntaxException e) {
System.out.printf("URISyntaxException: {}", e);
throw new Exception(e);
}
if (queryParams != null && !queryParams.isEmpty()) {
builder.setParameters(paramsConverter(queryParams));
}
request.setURI(builder.build());
return executeHttpRequest(request);
}
public StreamClosedHttpResponse doGetWithParasGetStatusLine(String url,
Map<String, String> queryParams, Map<String, String> headerMap)
throws Exception {
HttpResponse response = doGetWithParas(url, queryParams, headerMap);
if (null == response) {
System.out.println("The response body is null.");
}
return (StreamClosedHttpResponse) response;
}
public HttpResponse doDelete(String url, Map<String, String> headerMap) {
HttpDelete request = new HttpDelete(url);
addRequestHeader(request, headerMap);
return executeHttpRequest(request);
}
public StreamClosedHttpResponse doDeleteGetStatusLine(String url,
Map<String, String> headerMap) {
HttpResponse response = doDelete(url, headerMap);
if (null == response) {
System.out.println("The response body is null.");
}
return (StreamClosedHttpResponse) response;
}
private static void addRequestHeader(HttpUriRequest request,
Map<String, String> headerMap) {
if (headerMap == null) {
return;
}
for (String headerName : headerMap.keySet()) {
if (CONTENT_LENGTH.equalsIgnoreCase(headerName)) {
continue;
}
String headerValue = headerMap.get(headerName);
request.addHeader(headerName, headerValue);
}
}
private HttpResponse executeHttpRequest(HttpUriRequest request) {
HttpResponse response = null;
try {
response = httpClient.execute(request);
} catch (Exception e) {
System.out.println("executeHttpRequest failed.");
} finally {
try {
response = new StreamClosedHttpResponse(response);
} catch (IOException e) {
System.out.println("IOException: " + e.getMessage());
}
}
return response;
}
public String getHttpResponseBody(HttpResponse response)
throws UnsupportedOperationException, IOException {
if (response == null) {
return null;
}
String body = null;
if (response instanceof StreamClosedHttpResponse) {
body = ((StreamClosedHttpResponse) response).getContent();
} else {
HttpEntity entity = response.getEntity();
if (entity != null && entity.isStreaming()) {
String encoding = entity.getContentEncoding() != null ? entity
.getContentEncoding().getValue() : null;
body = StreamUtil.inputStream2String(entity.getContent(),
encoding);
}
}
return body;
}
}

139
src/main/java/com/mh/garrison/mhutils/JsonUtil.java

@ -0,0 +1,139 @@
/*
* Copyright Notice:
* Copyright 1998-2008, Huawei Technologies Co., Ltd. ALL Rights Reserved.
*
* Warning: This computer software sourcecode is protected by copyright law
* and international treaties. Unauthorized reproduction or distribution
* of this sourcecode, or any portion of it, may result in severe civil and
* criminal penalties, and will be prosecuted to the maximum extent
* possible under the law.
*/
package com.mh.garrison.mhutils;
import java.io.IOException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.node.ObjectNode;
public class JsonUtil {
private static ObjectMapper objectMapper;
static {
objectMapper = new ObjectMapper();
// 设置FAIL_ON_EMPTY_BEANS属性,当序列化空对象不要抛异常
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
// 设置FAIL_ON_UNKNOWN_PROPERTIES属性,当JSON字符串中存在Java对象没有的属性,忽略
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
}
/**
* Convert Object to JsonString
*
* @param jsonObj
* @return
*/
public static String jsonObj2Sting(Object jsonObj) {
String jsonString = null;
try {
jsonString = objectMapper.writeValueAsString(jsonObj);
} catch (IOException e) {
System.out.printf("pasre json Object[{}] to string failed.",jsonString);
}
return jsonString;
}
/**
* Convert JsonString to Simple Object
*
* @param jsonString
* @param cls
* @return
*/
public static <T> T jsonString2SimpleObj(String jsonString, Class<T> cls) {
T jsonObj = null;
try {
jsonObj = objectMapper.readValue(jsonString, cls);
} catch (IOException e) {
System.out.printf("pasre json Object[{}] to string failed.",jsonString);
}
return jsonObj;
}
/**
* Method that will convert object to the ObjectNode.
*
* @param value
* the source data; if null, will return null.
* @return the ObjectNode data after converted.
* @throws JsonException
*/
public static <T> ObjectNode convertObject2ObjectNode(T object)
throws Exception {
if (null == object) {
return null;
}
ObjectNode objectNode = null;
if (object instanceof String) {
objectNode = convertJsonStringToObject((String) object,
ObjectNode.class);
} else {
objectNode = convertValue(object, ObjectNode.class);
}
return objectNode;
}
/**
* Method that will convert the json string to destination by the type(cls).
*
* @param jsonString
* the source json string; if null, will return null.
* @param cls
* the destination data type.
* @return
* @throws JsonException
*/
public static <T> T convertJsonStringToObject(String jsonString,
Class<T> cls) throws Exception {
if (StringUtil.strIsNullOrEmpty(jsonString)) {
return null;
}
try {
T object = objectMapper.readValue(jsonString, cls);
return object;
} catch (Exception e) {
throw new Exception(e);
}
}
/**
* Method that will convert from given value into instance of given value
* type.
*
* @param fromValue
* @param toValueType
* @return
* @throws JsonException
*/
private static <T> T convertValue(Object fromValue, Class<T> toValueType)
throws Exception {
try {
return objectMapper.convertValue(fromValue, toValueType);
} catch (IllegalArgumentException e) {
throw new Exception(e);
}
}
}

58
src/main/java/com/mh/garrison/mhutils/MD5Utils.java

@ -0,0 +1,58 @@
package com.mh.garrison.mhutils;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Utils {
/**
* 27 md5加密产生产生128位bit的mac 28 将128bit Mac转换成16进制代码 29
*
* @param strSrc
* 30
* @param key
* 31
* @return 32
*/
public static String MD5Encode(String strSrc) {
return MD5Encode(strSrc, "");
}
/**
* 27 md5加密产生产生128位bit的mac 28 将128bit Mac转换成16进制代码 29
*
* @param strSrc
* 30
* @param key
* 31
* @return 32
*/
public static String MD5Encode(String strSrc, String key) {
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(strSrc.getBytes("UTF8"));
StringBuilder result = new StringBuilder(32);
byte[] temp;
temp = md5.digest(key.getBytes("UTF8"));
for (int i = 0; i < temp.length; i++) {
result.append(Integer.toHexString((0x000000ff & temp[i]) | 0xffffff00).substring(6));
}
return result.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
public static void main(String[] args) throws Exception {
String aaa = "wtjn168";
String mac128byte = MD5Encode(aaa, "");
System.out.println("md5加密结果32 bit------------->:" + mac128byte);
}
}

260
src/main/java/com/mh/garrison/mhutils/MSGClient.java

@ -0,0 +1,260 @@
package com.mh.garrison.mhutils;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLConnection;
public class MSGClient {
/**
* http post方式提交
*/
private String HttpURL = "http://120.79.165.170:9001/";
private String userName = "jbqznjf";
private String password = "dT6pH6rQ1";
private String pwd = "";
public MSGClient() {
};
/**
* 构造函数
*
* @param username
* @param password
* @throws UnsupportedEncodingException
*/
public MSGClient(String username, String password) throws UnsupportedEncodingException {
this.userName = username;
this.password = password;
this.pwd = MD5Utils.MD5Encode(username + MD5Utils.MD5Encode(password));
}
/**
* 方法名称getBalance 获取余额 余额String
*/
public String getBalance() {
String result = "";
OutputStreamWriter out = null;
BufferedReader in = null;
StringBuilder params = new StringBuilder();
params.append("username=").append(userName).append("&password=").append(this.getPwd());
try {
URL realUrl = new URL(HttpURL + "balanceQuery.do");
URLConnection conn = realUrl.openConnection();
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setDoOutput(true);
conn.setDoInput(true);
out = new OutputStreamWriter(conn.getOutputStream(), "UTF8");
out.write(params.toString());
out.flush();
in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF8"));
String line = "";
while ((line = in.readLine()) != null) {
result += line + "\n";
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 方法名称mt 发送短信
*
* @param content
* 发送内容
* @param mobile
* 发送的手机号码多个手机号为用半角 , 分开
* @param dstime
* 定时时间 为空时表示立即发送格式yyyy-MM-dd HH:mm:ss
* @param msgid
* 客户自定义消息ID
* @param ext
* 用户自定义扩展
* @param msgfmt
* 提交消息编码格式UTF-8/GBK置空时默认是UTF-8
* 若用户自定义消息ID则返回用户的ID否则系统随机生成一个任务ID
* @throws UnsupportedEncodingException
*/
public String mt(String content, String mobile, String dstime, String msgid, String ext, String msgfmt)
throws UnsupportedEncodingException {
String result = "";
OutputStreamWriter out = null;
BufferedReader in = null;
StringBuilder params = new StringBuilder();
params.append("username=").append(userName).append("&password=").append(this.getPwd()).append("&mobile=")
.append(mobile).append("&content=").append(content).append("&ext=").append(ext);
try {
URL realUrl = new URL(HttpURL + "smsSend.do"); // 单发短信
// URL realUrl = new URL(HttpURL + "sendData.do"); // 群发短信
URLConnection conn = realUrl.openConnection();
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setDoOutput(true);
conn.setDoInput(true);
out = new OutputStreamWriter(conn.getOutputStream(), "UTF8");
out.write(params.toString());
out.flush();
in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF8"));
String line = "";
while ((line = in.readLine()) != null) {
result += line + "\n";
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 方法名称mtData 发送个性短信(一个号码对应一条内容) 参数
*
* @param content
* 发送内容同号码个数一致内容单条编码之后用英文逗号,隔开变成串之后再对整个串进行二次编码编码方式为UTF-8
* @param mobile
* 发送的号码多个号码用英文,分隔
* @param dstime
* 定时时间
* @param ext
* 用户自定义扩展
* @param msgid
* 用户自定义消息ID
* @param msgfmt
* 提交消息编码格式
* @return
*/
public String mtData(String content, String mobile, String dstime, String ext, String msgid, String msgfmt) {
String result = "";
OutputStreamWriter out = null;
BufferedReader in = null;
StringBuilder params = new StringBuilder();
params.append("username=").append(userName).append("&password=").append(this.getPwd()).append("&mobile=")
.append(mobile).append("&content=").append(content).append("&dstime=").append(dstime).append("&ext=")
.append(ext).append("&msgid=").append(msgid).append("&msgfmt=").append(msgfmt);
try {
URL realUrl = new URL(HttpURL + "sendData.do");
URLConnection conn = realUrl.openConnection();
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setDoOutput(true);
conn.setDoInput(true);
out = new OutputStreamWriter(conn.getOutputStream(), "UTF8");
out.write(params.toString());
out.flush();
in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF8"));
String line = "";
while ((line = in.readLine()) != null) {
result += line + "\n";
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 方法名称UpdatePassword 修改密码 newPassword(新密码) 状态报告string
*/
public String UpdatePassword(String newPassword) {
String result = "";
OutputStreamWriter out = null;
BufferedReader in = null;
StringBuilder params = new StringBuilder();
params.append("username=").append(userName).append("&password=").append(this.getPwd()).append("&newpassword=")
.append(newPassword);
try {
URL realUrl = new URL(HttpURL + "passwordUpdate.do");
URLConnection conn = realUrl.openConnection();
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setDoOutput(true);
conn.setDoInput(true);
out = new OutputStreamWriter(conn.getOutputStream(), "UTF8");
out.write(params.toString());
out.flush();
in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF8"));
String line = "";
while ((line = in.readLine()) != null) {
result += line + "\n";
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 方法名称: getDigest 数字签名明文MD5加密 参数
*
* @param plaintext
* 明文 返回参数MD5密文
*/
public String getDigest(String plaintext) {
String result = "";
OutputStreamWriter out = null;
BufferedReader in = null;
StringBuilder params = new StringBuilder();
params.append("plaintext=").append(plaintext);
try {
URL realUrl = new URL(HttpURL + "md5Digest.do");
URLConnection conn = realUrl.openConnection();
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setDoOutput(true);
conn.setDoInput(true);
out = new OutputStreamWriter(conn.getOutputStream(), "UTF8");
out.write(params.toString());
out.flush();
in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF8"));
String line = "";
while ((line = in.readLine()) != null) {
result += line + "\n";
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public String getHttpURL() {
return HttpURL;
}
public void setHttpURL(String httpURL) {
HttpURL = httpURL;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}

20
src/main/java/com/mh/garrison/mhutils/Md5Digest.java

@ -0,0 +1,20 @@
package com.mh.garrison.mhutils;
public class Md5Digest {
/**
* 数字签名(明文MD5加密)
*
* @param args
*/
public static void main(String[] args) {
MSGClient client = new MSGClient();
String plaintext = "123456";
String result = client.getDigest(plaintext);
System.out.println(result);
}
}

909
src/main/java/com/mh/garrison/mhutils/MeterUtils.java

@ -0,0 +1,909 @@
package com.mh.garrison.mhutils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.context.ApplicationContext;
import com.mh.garrison.entity.MeterHistoryBean;
import com.mh.garrison.entity.MeterNowBean;
import com.mh.garrison.entity.ThreeMeterNowBean;
import com.mh.garrison.mapper.DeviceMapper;
import com.mh.garrison.mapper.MeterHistoryMapper;
import com.mh.garrison.mapper.MeterNowMapper;
import com.mh.garrison.service.DeviceService;
import com.mh.garrison.service.MeterHistoryService;
import com.mh.garrison.service.MeterNowService;
public class MeterUtils {
// 添加之后能够对mapper调用
public ApplicationContext applicationContext = SpringUtils.getApplicationContext();
public MeterNowService meterNowService = applicationContext.getBean(MeterNowService.class);
public MeterHistoryService meterHistoryService = applicationContext.getBean(MeterHistoryService.class);
public MeterNowMapper meterNowMapper = applicationContext.getBean(MeterNowMapper.class);
public MeterHistoryMapper meterHistoryMapper = applicationContext.getBean(MeterHistoryMapper.class);
// 添加之后能够对mapper调用
public DeviceMapper deviceMapper = applicationContext.getBean(DeviceMapper.class);
public DeviceService deviceService = applicationContext.getBean(DeviceService.class);
/**
* 校验和
*
* @param data
* @return
*/
private static String makeChecksum(String data) {
if (data == null || data.equals("")) {
return "";
}
int total = 0;
int len = data.length();
int num = 0;
while (num < len) {
String s = data.substring(num, num + 2);
// System.out.println(s);
total += Integer.parseInt(s, 16);
num = num + 2;
}
/**
* 用256求余最大是255即16进制的FF
*/
int mod = total % 256;
String hex = Integer.toHexString(mod);
len = hex.length();
// 如果不够校验位的长度,补0,这里用的是两位校验
if (len < 2) {
hex = "0" + hex;
}
return hex;
}
/**
* 转换位置
*
* @param data
* @return
*/
private static String changePosition(String data) {
String newData = "";
for (int i = data.length() / 2; i > 0; i--) {
newData = newData + data.substring(2 * i - 2, 2 * i);
// System.out.println(newData);
}
return newData;
}
/**
* 减33操作
*
* @param data
* @return
*/
private static String minusThree(String data) {
int b = Integer.parseInt("33", 16); // 33值
String newData = ""; // 新返回值
for (int i = 0; i < data.length() / 2; i++) {
String cutString = data.substring(2 * i, 2 * i + 2);
// System.out.println("截取的字符——" + cutString);
int a1 = Integer.parseInt(cutString, 16);
int b1 = a1 - b;
if (b1 < 0) {
System.out.println("数据格式有误");
return "数据格式有误";
} else {
b1 = b1 % 256;
String hexString = Integer.toHexString(b1);
if (hexString.length() < 2) {
hexString = "0" + hexString;
// System.out.println(hexString);
newData = newData + hexString;
} else {
newData = newData + hexString;
}
}
}
return newData;
}
public String analysisSendOrder(String data) {
// 68563412000000688400F016
String state = "fail";
int len = data.length();
// 校验和
String checkSum = MeterUtils.makeChecksum(data.substring(0, len - 4));
System.out.println("计算后校验和 " + checkSum);
// 比较校验和
String check = data.substring(len - 4, len - 2);
System.out.println("计算前校验和 " + check);
if (checkSum.equals(check)) {
System.out.println("校验和对比正常");
// 表号
String meterID = data.substring(2, 14);
meterID = MeterUtils.changePosition(meterID);
System.out.println("表号 " + meterID);
String passBack = data.substring(16, 20);
if (passBack.equals("8400")) {
Map<String, Object> params = new HashMap<>();
params.put("device_num", meterID);
params.put("remark", "命令");
List<Map<String, Object>> list = deviceService.exeProcedure(params);
for (Map<String, Object> map : list) {
System.out.println(map);
}
Object result = params.get("state");
if (result.equals("没有命令待发") || result.equals("已发送")) {
state = "success";
}
} else {
state = "fail";
}
}
return state;
}
public String analysisAEPMeter(String data, String eventTime, String deviceId, String imei) {
MeterNowBean meterNowBean = new MeterNowBean();
MeterHistoryBean meterHistoryBean = new MeterHistoryBean();
int len = data.length();
// 校验和
String checkSum = MeterUtils.makeChecksum(data.substring(0, len - 4));
System.out.println("计算后校验和 " + checkSum);
// 比较校验和
String check = data.substring(len - 4, len - 2);
System.out.println("计算前校验和 " + check);
if (checkSum.equals(check)) {
System.out.println("校验和对比正常");
// 表号
String meterID = data.substring(2, 14);
meterID = MeterUtils.changePosition(meterID);
System.out.println("表号 " + meterID);
// 电量
String meterValue = data.substring(24, 32);
// System.out.println(meterValue);
meterValue = MeterUtils.changePosition(meterValue);
meterValue = MeterUtils.minusThree(meterValue);
meterValue = meterValue.substring(0, 6) + "." + meterValue.substring(6, meterValue.length());
System.out.println("电量 " + meterValue);
// 电压
String voltage = data.substring(32, 36);
// System.out.println(voltage);
voltage = MeterUtils.changePosition(voltage);
voltage = MeterUtils.minusThree(voltage);
voltage = voltage.substring(0, 3) + "." + voltage.substring(3, 4);
System.out.println("电压 " + voltage);
// 电流
String current = data.substring(36, 42);
// System.out.println(current);
current = MeterUtils.changePosition(current);
current = MeterUtils.minusThree(current);
current = current.substring(0, 3) + "." + current.substring(3, current.length());
System.out.println("电流 " + current);
// 功率
String power = data.substring(42, 48);
// System.out.println(power);
power = MeterUtils.changePosition(power);
power = MeterUtils.minusThree(power);
power = power.substring(0, 2) + "." + power.substring(2, power.length());
System.out.println("功率 " + power);
// 功率因数
String powerFactor = data.substring(48, 52);
// System.out.println(powerFactor);
powerFactor = MeterUtils.changePosition(powerFactor);
powerFactor = MeterUtils.minusThree(powerFactor);
powerFactor = powerFactor.substring(0, 1) + "." + powerFactor.substring(1, powerFactor.length());
System.out.println("功率因数" + powerFactor);
// 频率
String frequency = data.substring(52, 56);
// System.out.println(frequency);
frequency = MeterUtils.changePosition(frequency);
frequency = MeterUtils.minusThree(frequency);
frequency = frequency.substring(0, 2) + "." + frequency.substring(2, frequency.length());
System.out.println("频率 " + frequency);
// 状态
String state = data.substring(56, 58);
// System.out.println(state);
state = MeterUtils.changePosition(state);
state = MeterUtils.minusThree(state);
Integer num = Integer.parseInt(state, 16);
if (num == 0) {
state = "合闸";
} else if (num == 1) {
state = "拉闸";
} else if (num == 2) {
state = "合闸,功率超限";
} else if (num == 3) {
state = "拉闸,功率超限";
}
// if (state.equals("00")) {
// state = "合闸";
// } else if (state.equals("01")) {
// state = "拉闸";
// }
System.out.println("状态 " + state);
// 网络信号
String netSignal = data.substring(58, 60);
// System.out.println(netSignal);
netSignal = MeterUtils.changePosition(netSignal);
netSignal = MeterUtils.minusThree(netSignal);
System.out.println("网络信号" + netSignal);
// 定时上传时间
String timeUpload = data.substring(60, 64);
// System.out.println(timeUpload);
timeUpload = MeterUtils.changePosition(timeUpload);
timeUpload = MeterUtils.minusThree(timeUpload);
System.out.println("定时上传时间" + timeUpload);
// 限容功率
String spare = data.substring(64, 68);
// System.out.println(spare);
spare = MeterUtils.changePosition(spare);
spare = MeterUtils.minusThree(spare);
spare = spare.substring(0, 2) + "." + spare.substring(2, spare.length());
System.out.println("限容功率 " + spare);
// 查询基表安装表是否是对应的平台
Integer platform = deviceService.findPlatform(meterID);
if (platform == null || platform == 0 ) {
// 更新变成AEP平台
deviceService.updatePlatform(meterID);
}
// 插入表状态
Map<String, Object> maps = new HashMap<>();
maps.put("device_id", deviceId);
maps.put("create_date", eventTime);
maps.put("lastModifiedTime", eventTime);
maps.put("device_imei", imei);
maps.put("device_state", "ONLINE");
deviceService.exeAddStateProcedure(maps);
// 房间号
String house_num = null;
// 楼栋
String building_name = null;
try {
house_num = meterNowService.findHouse(meterID);
// Thread.sleep(200);
building_name = meterNowService.findBuildingName(meterID);
// building_name = meterNowMapper.findBuilding(house_num);// 查询楼层
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
// house_num = "";
// building_name = "";
}
meterNowBean.setMt_num(meterID);
meterNowBean.setMt_electric(meterValue);
meterNowBean.setMt_state(state);
meterNowBean.setMt_device_id(deviceId);
meterNowBean.setMt_time(eventTime);
meterNowBean.setLimited_power(spare);
meterNowBean.setHouse_num(house_num);
meterNowBean.setBuilding_name(building_name);
meterNowBean.setGrade(0);
try {
if (meterNowService.checkMeterId(meterNowBean) != 0) {
meterNowService.updateAll(meterNowBean);
System.out.println("-----------更新实时表成功-----------");
// meterNowMapper.exePro_calc_Meter(); // 开始计算电表数据
} else {
meterNowService.insertAll(meterNowBean);
System.out.println("-----------插入实时表成功-----------");
// meterNowMapper.exePro_calc_Meter(); // 开始计算电表数据
}
// 插入到历史流水表中
meterHistoryBean.setMt_num(meterID);
meterHistoryBean.setMt_electric(meterValue);
meterHistoryBean.setMt_state(state);
meterHistoryBean.setMt_device_id(deviceId);
meterHistoryBean.setMt_time(eventTime);
meterHistoryBean.setHouse_num(house_num);
meterHistoryBean.setBuilding_name(building_name);
meterHistoryBean.setGrade(0);
// Thread.sleep(300);
int b = meterHistoryService.insertAll(meterHistoryBean);
if (b == 1) {
System.out.println(meterHistoryBean.toString());
// Thread.sleep(500);
} else {
System.out.println("-----------插入历史表失败-----------");
}
int c = meterHistoryService.checkHistory(meterHistoryBean);
if (c != 0) {
//防止是否存在数据库内,继续查询对应的数据,如果存在则返回成功,不存在返回失败
System.out.println("-----------插入历史表成功-----------");
} else {
System.out.println("-----------插入历史表失败-----------");
return "fail";
}
// Thread.sleep(300);
} catch (Exception e) {
// TODO: handle exception
String causeStr = e.getCause().getMessage();
System.out.println(">>>>>>>-------------" + causeStr);
boolean status = causeStr.contains("违反了 UNIQUE KEY 约束");
if (status) {
return "success";
}
return "fail";
}
// 更新发送命令状态表
Map<String, Object> params = new HashMap<>();
params.put("device_num", meterID);
params.put("remark", "读取数据状态");
List<Map<String, Object>> list = deviceService.exeProcedure(params);
for (Map<String, Object> map : list) {
System.out.println(map.get("state").toString());
}
Object result = params.get("state");
String state1 = null;
if (result.equals("没有命令待发") || result.equals("已发送")) {
state1 = "success";
}
return state1;
} else {
System.out.println("校验和对比错误");
return "fail";
}
}
public String analysisMeter(String data, String eventTime, String deviceId) {
MeterNowBean meterNowBean = new MeterNowBean();
MeterHistoryBean meterHistoryBean = new MeterHistoryBean();
int len = data.length();
// 校验和
String checkSum = MeterUtils.makeChecksum(data.substring(0, len - 4));
System.out.println("计算后校验和 " + checkSum);
// 比较校验和
String check = data.substring(len - 4, len - 2);
System.out.println("计算前校验和 " + check);
if (checkSum.equals(check)) {
System.out.println("校验和对比正常");
// 表号
String meterID = data.substring(2, 14);
meterID = MeterUtils.changePosition(meterID);
System.out.println("表号 " + meterID);
// 电量
String meterValue = data.substring(24, 32);
// System.out.println(meterValue);
meterValue = MeterUtils.changePosition(meterValue);
meterValue = MeterUtils.minusThree(meterValue);
meterValue = meterValue.substring(0, 6) + "." + meterValue.substring(6, meterValue.length());
System.out.println("电量 " + meterValue);
// 电压
String voltage = data.substring(32, 36);
// System.out.println(voltage);
voltage = MeterUtils.changePosition(voltage);
voltage = MeterUtils.minusThree(voltage);
voltage = voltage.substring(0, 3) + "." + voltage.substring(3, 4);
System.out.println("电压 " + voltage);
// 电流
String current = data.substring(36, 42);
// System.out.println(current);
current = MeterUtils.changePosition(current);
current = MeterUtils.minusThree(current);
current = current.substring(0, 3) + "." + current.substring(3, current.length());
System.out.println("电流 " + current);
// 功率
String power = data.substring(42, 48);
// System.out.println(power);
power = MeterUtils.changePosition(power);
power = MeterUtils.minusThree(power);
power = power.substring(0, 2) + "." + power.substring(2, power.length());
System.out.println("功率 " + power);
// 功率因数
String powerFactor = data.substring(48, 52);
// System.out.println(powerFactor);
powerFactor = MeterUtils.changePosition(powerFactor);
powerFactor = MeterUtils.minusThree(powerFactor);
powerFactor = powerFactor.substring(0, 1) + "." + powerFactor.substring(1, powerFactor.length());
System.out.println("功率因数" + powerFactor);
// 频率
String frequency = data.substring(52, 56);
// System.out.println(frequency);
frequency = MeterUtils.changePosition(frequency);
frequency = MeterUtils.minusThree(frequency);
frequency = frequency.substring(0, 2) + "." + frequency.substring(2, frequency.length());
System.out.println("频率 " + frequency);
// 状态
String state = data.substring(56, 58);
// System.out.println(state);
state = MeterUtils.changePosition(state);
state = MeterUtils.minusThree(state);
Integer num = Integer.parseInt(state, 16);
if (num == 0) {
state = "合闸";
} else if (num == 1) {
state = "拉闸";
} else if (num == 2) {
state = "合闸,功率超限";
} else if (num == 3) {
state = "拉闸,功率超限";
}
// if (state.equals("00")) {
// state = "合闸";
// } else if (state.equals("01")) {
// state = "拉闸";
// }
System.out.println("状态 " + state);
// 网络信号
String netSignal = data.substring(58, 60);
// System.out.println(netSignal);
netSignal = MeterUtils.changePosition(netSignal);
netSignal = MeterUtils.minusThree(netSignal);
System.out.println("网络信号" + netSignal);
// 定时上传时间
String timeUpload = data.substring(60, 64);
// System.out.println(timeUpload);
timeUpload = MeterUtils.changePosition(timeUpload);
timeUpload = MeterUtils.minusThree(timeUpload);
System.out.println("定时上传时间" + timeUpload);
// 限容功率
String spare = data.substring(64, 68);
// System.out.println(spare);
spare = MeterUtils.changePosition(spare);
spare = MeterUtils.minusThree(spare);
spare = spare.substring(0, 2) + "." + spare.substring(2, spare.length());
System.out.println("限容功率 " + spare);
// 房间号
String house_num = null;
// 楼栋
String building_name = null;
try {
house_num = meterNowService.findHouse(meterID);
// Thread.sleep(200);
building_name = meterNowService.findBuildingName(meterID);
// building_name = meterNowMapper.findBuilding(house_num);// 查询楼层
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
// house_num = "";
// building_name = "";
}
meterNowBean.setMt_num(meterID);
meterNowBean.setMt_electric(meterValue);
meterNowBean.setMt_state(state);
meterNowBean.setMt_device_id(deviceId);
meterNowBean.setMt_time(eventTime);
meterNowBean.setLimited_power(spare);
meterNowBean.setHouse_num(house_num);
meterNowBean.setBuilding_name(building_name);
meterNowBean.setGrade(0);
try {
if (meterNowService.checkMeterId(meterNowBean) != 0) {
meterNowService.updateAll(meterNowBean);
System.out.println("-----------更新实时表成功-----------");
// meterNowMapper.exePro_calc_Meter(); // 开始计算电表数据
} else {
meterNowService.insertAll(meterNowBean);
System.out.println("-----------插入实时表成功-----------");
// meterNowMapper.exePro_calc_Meter(); // 开始计算电表数据
}
// 插入到历史流水表中
meterHistoryBean.setMt_num(meterID);
meterHistoryBean.setMt_electric(meterValue);
meterHistoryBean.setMt_state(state);
meterHistoryBean.setMt_device_id(deviceId);
meterHistoryBean.setMt_time(eventTime);
meterHistoryBean.setHouse_num(house_num);
meterHistoryBean.setBuilding_name(building_name);
meterHistoryBean.setGrade(0);
// Thread.sleep(300);
int b = meterHistoryService.insertAll(meterHistoryBean);
if (b == 1) {
System.out.println(meterHistoryBean.toString());
// Thread.sleep(500);
} else {
System.out.println("-----------插入历史表失败-----------");
}
int c = meterHistoryService.checkHistory(meterHistoryBean);
if (c != 0) {
//防止是否存在数据库内,继续查询对应的数据,如果存在则返回成功,不存在返回失败
System.out.println("-----------插入历史表成功-----------");
} else {
System.out.println("-----------插入历史表失败-----------");
return "fail";
}
// Thread.sleep(300);
} catch (Exception e) {
// TODO: handle exception
String causeStr = e.getCause().getMessage();
System.out.println(">>>>>>>-------------" + causeStr);
boolean status = causeStr.contains("违反了 UNIQUE KEY 约束");
if (status) {
return "success";
}
return "fail";
}
// 更新发送命令状态表
Map<String, Object> params = new HashMap<>();
params.put("device_num", meterID);
params.put("remark", "读取数据状态");
List<Map<String, Object>> list = deviceService.exeProcedure(params);
for (Map<String, Object> map : list) {
System.out.println(map.get("state").toString());
}
Object result = params.get("state");
String state1 = null;
if (result.equals("没有命令待发") || result.equals("已发送")) {
state1 = "success";
}
return state1;
} else {
System.out.println("校验和对比错误");
return "fail";
}
}
public String analysisThreeMeter(String threeMeterStr, String eventTime, String device_id) {
ThreeMeterNowBean threeMeterNowBean = new ThreeMeterNowBean();
MeterHistoryBean meterHistoryBean = new MeterHistoryBean();
int len = threeMeterStr.length();
System.out.println("三相电表数据报文长度----------" + len);
// 计算的检验和
String checkSum = MeterUtils.makeChecksum(threeMeterStr.substring(0, len - 4));
System.out.println("计算后的校验和----" + checkSum);
// 数据本身的校验和
String check = threeMeterStr.substring(len - 4, len - 2);
System.out.println("计算前的校验和----" + check);
System.out.println(checkSum.equalsIgnoreCase(check));
// 比较校验和
if (checkSum.equalsIgnoreCase(check)) {
System.out.println("检验和正常");
// 表号
String meterID = threeMeterStr.substring(2, 14);
meterID = MeterUtils.changePosition(meterID);
System.out.println("表号----------" + meterID);
// 电量
String meterValue = threeMeterStr.substring(24, 32);
meterValue = MeterUtils.changePosition(meterValue);
meterValue = MeterUtils.minusThree(meterValue);
meterValue = meterValue.substring(0, 6) + "." + meterValue.substring(6, meterValue.length());
System.out.println("电量 " + meterValue);
// 电压A
String voltage_a = threeMeterStr.substring(32, 36);
// System.out.println(voltage);
voltage_a = MeterUtils.changePosition(voltage_a);
voltage_a = MeterUtils.minusThree(voltage_a);
voltage_a = voltage_a.substring(0, 3) + "." + voltage_a.substring(3, 4);
System.out.println("电压 A " + voltage_a);
// 电压B
String voltage_b = threeMeterStr.substring(34, 40);
// System.out.println(voltage);
voltage_b = MeterUtils.changePosition(voltage_b);
voltage_b = MeterUtils.minusThree(voltage_b);
voltage_b = voltage_b.substring(0, 3) + "." + voltage_b.substring(3, 4);
System.out.println("电压 B " + voltage_b);
// 电压C
String voltage_c = threeMeterStr.substring(40, 44);
// System.out.println(voltage);
voltage_c = MeterUtils.changePosition(voltage_c);
voltage_c = MeterUtils.minusThree(voltage_c);
voltage_c = voltage_c.substring(0, 3) + "." + voltage_c.substring(3, 4);
System.out.println("电压 C " + voltage_c);
// 电流A
String current_a = threeMeterStr.substring(44, 50);
// System.out.println(current);
current_a = MeterUtils.changePosition(current_a);
current_a = MeterUtils.minusThree(current_a);
current_a = current_a.substring(0, 3) + "." + current_a.substring(3, current_a.length());
System.out.println("电流A " + current_a);
// 电流B
String current_b = threeMeterStr.substring(50, 56);
// System.out.println(current);
current_b = MeterUtils.changePosition(current_b);
current_b = MeterUtils.minusThree(current_b);
current_b = current_b.substring(0, 3) + "." + current_b.substring(3, current_b.length());
System.out.println("电流B " + current_b);
// 电流C
String current_c = threeMeterStr.substring(56, 62);
// System.out.println(current);
current_c = MeterUtils.changePosition(current_c);
current_c = MeterUtils.minusThree(current_c);
current_c = current_c.substring(0, 3) + "." + current_c.substring(3, current_c.length());
System.out.println("电流C " + current_c);
// 功率总
String power_total = threeMeterStr.substring(62, 68);
// System.out.println(power);
power_total = MeterUtils.changePosition(power_total);
power_total = MeterUtils.minusThree(power_total);
power_total = power_total.substring(0, 2) + "." + power_total.substring(2, power_total.length());
System.out.println("功率总 " + power_total);
// 功率a
String power_a = threeMeterStr.substring(68, 74);
// System.out.println(power);
power_a = MeterUtils.changePosition(power_a);
power_a = MeterUtils.minusThree(power_a);
power_a = power_a.substring(0, 2) + "." + power_a.substring(2, power_a.length());
System.out.println("功率A " + power_a);
// 功率B
String power_b = threeMeterStr.substring(74, 80);
// System.out.println(power);
power_b = MeterUtils.changePosition(power_b);
power_b = MeterUtils.minusThree(power_b);
power_b = power_b.substring(0, 2) + "." + power_b.substring(2, power_b.length());
System.out.println("功率B " + power_b);
// 功率C
String power_c = threeMeterStr.substring(80, 86);
// System.out.println(power);
power_c = MeterUtils.changePosition(power_c);
power_c = MeterUtils.minusThree(power_c);
power_c = power_c.substring(0, 2) + "." + power_c.substring(2, power_c.length());
System.out.println("功率C " + power_c);
// 功率因数总
String powerFactor_total = threeMeterStr.substring(86, 90);
// System.out.println(powerFactor);
powerFactor_total = MeterUtils.changePosition(powerFactor_total);
powerFactor_total = MeterUtils.minusThree(powerFactor_total);
powerFactor_total = powerFactor_total.substring(0, 1) + "."
+ powerFactor_total.substring(1, powerFactor_total.length());
System.out.println("功率因数总 " + powerFactor_total);
// 功率因数A
String powerFactor_a = threeMeterStr.substring(90, 94);
// System.out.println(powerFactor);
powerFactor_a = MeterUtils.changePosition(powerFactor_a);
powerFactor_a = MeterUtils.minusThree(powerFactor_a);
powerFactor_a = powerFactor_a.substring(0, 1) + "." + powerFactor_a.substring(1, powerFactor_a.length());
System.out.println("功率因数A " + powerFactor_a);
// 功率因数B
String powerFactor_b = threeMeterStr.substring(94, 98);
// System.out.println(powerFactor);
powerFactor_b = MeterUtils.changePosition(powerFactor_b);
powerFactor_b = MeterUtils.minusThree(powerFactor_b);
powerFactor_b = powerFactor_b.substring(0, 1) + "." + powerFactor_b.substring(1, powerFactor_b.length());
System.out.println("功率因数B " + powerFactor_b);
// 功率因数C
String powerFactor_c = threeMeterStr.substring(98, 102);
// System.out.println(powerFactor);
powerFactor_c = MeterUtils.changePosition(powerFactor_c);
powerFactor_c = MeterUtils.minusThree(powerFactor_c);
powerFactor_c = powerFactor_c.substring(0, 1) + "." + powerFactor_c.substring(1, powerFactor_c.length());
System.out.println("功率因数C " + powerFactor_c);
// 频率
String frequency = threeMeterStr.substring(102, 106);
// System.out.println(frequency);
frequency = MeterUtils.changePosition(frequency);
frequency = MeterUtils.minusThree(frequency);
frequency = frequency.substring(0, 2) + "." + frequency.substring(2, frequency.length());
System.out.println("频率 " + frequency);
// 状态
String state = threeMeterStr.substring(106, 108);
// System.out.println(state);
state = MeterUtils.changePosition(state);
state = MeterUtils.minusThree(state);
Integer num = Integer.parseInt(state, 16);
if (num == 0) {
state = "合闸";
} else if (num == 1) {
state = "拉闸";
} else if (num == 2) {
state = "合闸,功率超限";
} else if (num == 3) {
state = "拉闸,功率超限";
}
System.out.println("状态 " + state);
// 网络信号
String netSignal = threeMeterStr.substring(108, 110);
// System.out.println(netSignal);
netSignal = MeterUtils.changePosition(netSignal);
netSignal = MeterUtils.minusThree(netSignal);
System.out.println("网络信号 " + netSignal);
// 定时上传时间
String timeUpload = threeMeterStr.substring(110, 114);
// System.out.println(timeUpload);
timeUpload = MeterUtils.changePosition(timeUpload);
timeUpload = MeterUtils.minusThree(timeUpload);
System.out.println("定时上传时间 " + timeUpload);
// 限容功率
String limited_power = threeMeterStr.substring(114, 118);
// System.out.println(timeUpload);
limited_power = MeterUtils.changePosition(limited_power);
limited_power = MeterUtils.minusThree(limited_power);
limited_power = limited_power.substring(0, 2) + "." + limited_power.substring(2, limited_power.length());
System.out.println("限容功率 " + limited_power);
// 备用
String spare = threeMeterStr.substring(118, 122);
// System.out.println(spare);
spare = MeterUtils.changePosition(spare);
spare = MeterUtils.minusThree(spare);
System.out.println("备用 " + spare);
try {
// 如果是厦门双桥三相电表
// 房间号
String house_num = meterNowService.findHouse1(meterID);
System.out.println("房间号:"+house_num);
Thread.sleep(200);
// 楼栋
// String building_name = meterNowMapper.findBuilding(house_num); // 楼层
String building_name = meterNowService.findBuildingName1(meterID);
System.out.println("楼栋:"+building_name);
// // 房间号
// String house_num = meterNowService.findHouse(meterID);
//// Thread.sleep(200);
// // 楼栋
//// String building_name = meterNowMapper.findBuilding(house_num); // 楼层
// String building_name = meterNowService.findBuildingName(meterID);
// if (building_name == null) {
// building_name = meterNowService.findBuildingName(meterID);
// }
threeMeterNowBean.setMt_num(meterID);
threeMeterNowBean.setMt_electric(Double.parseDouble(meterValue));
threeMeterNowBean.setMt_state(state);
threeMeterNowBean.setMt_device_id(device_id);
threeMeterNowBean.setMt_time(eventTime);
threeMeterNowBean.setLimited_power(limited_power);
threeMeterNowBean.setHouse_num(house_num);
threeMeterNowBean.setBuilding_name(building_name);
threeMeterNowBean.setGrade(0);
// 插入到历史流水表中
meterHistoryBean.setMt_num(meterID);
meterHistoryBean.setMt_electric(meterValue);
meterHistoryBean.setMt_state(state);
meterHistoryBean.setMt_device_id(device_id);
meterHistoryBean.setMt_time(eventTime);
meterHistoryBean.setHouse_num(house_num);
meterHistoryBean.setBuilding_name(building_name);
meterHistoryBean.setGrade(0);
// Thread.sleep(300);
// 直接插入数据库
int his = meterHistoryService.insertAll(meterHistoryBean);
if (his == 1) {
// System.out.println(meterHistoryBean.toString());
//防止是否存在数据库内,继续查询对应的数据,如果存在则返回成功,不存在返回失败
int c = meterHistoryService.checkHistory(meterHistoryBean);
if (c != 0) {
System.out.println("-----------插入历史表成功-----------");
} else {
System.out.println("-----------插入历史表失败-----------");
return "fail";
}
} else {
System.out.println("-----------插入历史表失败-----------");
}
// Thread.sleep(300);
if (meterNowService.checkMeterId(threeMeterNowBean) != 0) {
meterNowService.updateAll(threeMeterNowBean);
// meterNowMapper.exePro_calc_Meter(); // 开始计算电表数据
} else {
meterNowService.insertAll(threeMeterNowBean);
// meterNowMapper.exePro_calc_Meter(); // 开始计算电表数据
}
// Thread.sleep(300);
} catch (Exception e) {
// TODO: handle exception
String causeStr = e.getCause().getMessage();
System.out.println(causeStr);
boolean status = causeStr.contains("违反了 UNIQUE KEY 约束");
if (status) {
return "success";
}
return "fail";
}
// 更新发送命令状态表
Map<String, Object> params = new HashMap<>();
params.put("device_num", meterID);
params.put("remark", "读取数据状态");
List<Map<String, Object>> list = deviceMapper.exeProcedure(params);
for (Map<String, Object> map : list) {
System.out.println(map.get("state").toString());
}
Object result = params.get("state");
String state1 = null;
if (result.equals("没有命令待发") || result.equals("已发送")) {
state1 = "success";
}
return state1;
} else {
System.out.println("校验和对比错误");
return "fail";
}
}
public static void main(String[] args) {
// 68000205080000688118323237333333b554333333333333334335833433333333334816
String string = "689603019000006881333232b87953333656c855c4553a4b333a4b333a4b33c34434366b33b76933346a33453c463c3b3c473cca7c34336f3333333333fe16";
MeterUtils meterUtils = new MeterUtils();
// String result = meterUtils.analysisSendOrder(string);
String result = meterUtils.analysisThreeMeter(string, "", "");
System.out.println(result);
}
}

23
src/main/java/com/mh/garrison/mhutils/PasswordUpdate.java

@ -0,0 +1,23 @@
package com.mh.garrison.mhutils;
import java.io.UnsupportedEncodingException;
public class PasswordUpdate {
/**
* 修改密码
*
* @param args
* @throws UnsupportedEncodingException
*/
public static void main(String[] args) throws UnsupportedEncodingException {
String userName = "";
String password = "";
String newPassword = "";
MSGClient client = new MSGClient(userName, password);
String result = client.UpdatePassword(newPassword);
System.out.println("返回结果:" + result);
}
}

185
src/main/java/com/mh/garrison/mhutils/PostCmdUtils.java

@ -0,0 +1,185 @@
package com.mh.garrison.mhutils;
import com.alibaba.fastjson.JSONObject;
import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient;
import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest;
import com.mh.garrison.entity.AEPEntity;
/**
* @author 铭汉科技LJL
* @date 2022-07-25 10:58
* @Description
*/
public class PostCmdUtils {
/**
* 永阳电表
* 指令发送至AEP平台执行操作带profile模型
*/
public static void postAsyncCmdAEPV1ByProfile(String deviceId, String sendOrderStr, AEPEntity aepEntity) throws Exception {
AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey("eP618B5xol5").appSecret("EdaE776fG6").build();
{
CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest();
JSONObject jsonObject = new JSONObject();
JSONObject jsonObject1 = new JSONObject();
JSONObject jsonObject2 = new JSONObject();
jsonObject2.put("value", sendOrderStr);
/**可以去电信指定下发一个设备时选择的各项参数,或者查看AEP文档,又或者查看产品模型*/
jsonObject1.put("serviceId", "MHMeterData");
jsonObject1.put("method", "COMMAND");
jsonObject1.put("paras", jsonObject2);
jsonObject.put("command", jsonObject1);
jsonObject.put("deviceId", deviceId);
jsonObject.put("operator", "admin");
jsonObject.put("productId", aepEntity.getProductId());
jsonObject.put("ttl", 7200);
jsonObject.put("deviceGroupId", aepEntity.getDeviceGroupId());
jsonObject.put("level", 1);
request.setBody(jsonObject.toString().getBytes());
System.out.println(jsonObject.toString());
System.out.println(client.CreateCommandLwm2mProfile(request));
}
client.shutdown();
}
/**
* 创建修改表号指令
* 永阳电表专用
* @param meterNum
* @return
*/
private static String createUpdateMeter(String meterNum) {
StringBuilder cmd = new StringBuilder();
cmd.append("68AAAAAAAAAAAA681506");
//转换位置
String afterChange = changePosition(meterNum);
//加33操作
String finalMeterNum = addThree(afterChange);
cmd.append(finalMeterNum);
//校验码
String checksum = makeChecksum(cmd.toString());
cmd.append(checksum);
//结束符
cmd.append("16");
return cmd.toString().toUpperCase();
}
/**
* 转换位置
*/
private static String changePosition(String data) {
String newData = "";
for (int i = data.length() / 2; i > 0; i--) {
newData = newData + data.substring(2 * i - 2, 2 * i);
}
return newData;
}
/**
* 校验码
*/
private static String makeChecksum(String data) {
if (data == null || data.equals("")) {
return "";
}
int total = 0;
int len = data.length();
int num = 0;
while (num < len) {
String s = data.substring(num, num + 2);
total += Integer.parseInt(s, 16);
num = num + 2;
}
/**
* 用256求余最大是255即16进制的FF
*/
int mod = total % 256;
String hex = Integer.toHexString(mod);
len = hex.length();
// 如果不够校验位的长度,补0,这里用的是两位校验
if (len < 2) {
hex = "0" + hex;
}
return hex;
}
/**十六进制补全2位*/
private static String zeroFilling(String meterId) {
meterId = meterId.replace(" ", "");
StringBuilder str = new StringBuilder(meterId);
while (str.length() < 2) {
str.reverse();
str.append("0");
str.reverse();
}
return String.valueOf(str);
}
/**加33操作*/
private static String addThree(String data) {
// 33值
int b = Integer.parseInt("33", 16);
// 新返回值
String newData = "";
for (int i = 0; i < data.length() / 2; i++) {
String cutString = data.substring(2 * i, 2 * i + 2);
int a1 = Integer.parseInt(cutString, 16);
int b1 = a1 + b;
if (b1 < 0) {
System.out.println("数据格式有误");
return "数据格式有误";
} else {
b1 = b1 % 256;
String hexString = Integer.toHexString(b1);
if (hexString.length() < 2) {
hexString = "0" + hexString;
newData = newData + hexString;
} else {
newData = newData + hexString;
}
}
}
return newData;
}
/**生成电压功率设定值*/
private static String createPower(double value){
String str = String.valueOf(Math.abs(value));
String[] split = str.split("\\.");
System.out.println("spilt:"+split);
String a1 = "00" + split[0];
String b1 = a1.substring(a1.length() - 2);
String b2 = (split[1] + "00").substring(0, 2);
System.out.println("b1:"+b1+" b2:"+b2);
System.out.println("b1+33:"+addThree(b1));
System.out.println("b2+33:"+addThree(b2));
String power = (addThree(b2) + addThree(b1)).toUpperCase();
System.out.println(power);
return power;
}
public static void main(String[] args) {
try {
//postAsyncSetPower("deviceId001",new AEPEntity(),3.5);
String cmd = createUpdateMeter("000030702262");
System.out.println("cmd = " + cmd);
} catch (Exception e) {
e.printStackTrace();
}
}
}

41
src/main/java/com/mh/garrison/mhutils/SpringUtils.java

@ -0,0 +1,41 @@
package com.mh.garrison.mhutils;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class SpringUtils implements ApplicationContextAware{
private static ApplicationContext applicationContext = null;
@Override
public void setApplicationContext(ApplicationContext arg0) throws BeansException {
// TODO Auto-generated method stub
if (SpringUtils.applicationContext == null) {
SpringUtils.applicationContext = arg0;
}
}
// 获取applicationContext
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
// 通过Name获取Bean
public static Object getBean(String name) {
return getApplicationContext().getBean(name);
}
// 通过class获取Bean
public static <T> T getBean(Class<T> claszz) {
return getApplicationContext().getBean(claszz);
}
// 通过name,以及claszz返回指定的bean
public static <T> T getBean(String name,Class<T> clazz) {
return getApplicationContext().getBean(name,clazz);
}
}

204
src/main/java/com/mh/garrison/mhutils/StreamClosedHttpResponse.java

@ -0,0 +1,204 @@
/*
* Copyright Notice:
* Copyright 1998-2008, Huawei Technologies Co., Ltd. ALL Rights Reserved.
*
* Warning: This computer software sourcecode is protected by copyright law
* and international treaties. Unauthorized reproduction or distribution
* of this sourcecode, or any portion of it, may result in severe civil and
* criminal penalties, and will be prosecuted to the maximum extent
* possible under the law.
*/
package com.mh.garrison.mhutils;
import java.io.IOException;
import java.util.Locale;
import org.apache.http.Header;
import org.apache.http.HeaderIterator;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.ProtocolVersion;
import org.apache.http.StatusLine;
import org.apache.http.params.HttpParams;
@SuppressWarnings("deprecation")
public class StreamClosedHttpResponse implements HttpResponse
{
private final HttpResponse original;
private final String content;
public StreamClosedHttpResponse(final HttpResponse original)
throws UnsupportedOperationException, IOException
{
this.original = original;
HttpEntity entity = original.getEntity();
if (entity != null && entity.isStreaming())
{
String encoding = entity.getContentEncoding() != null
? entity.getContentEncoding().getValue() : null;
content = StreamUtil.inputStream2String(entity.getContent(),
encoding);
}
else
{
content = null;
}
}
public StatusLine getStatusLine()
{
return original.getStatusLine();
}
public void setStatusLine(final StatusLine statusline)
{
original.setStatusLine(statusline);
}
public void setStatusLine(final ProtocolVersion ver, final int code)
{
original.setStatusLine(ver, code);
}
public void setStatusLine(final ProtocolVersion ver, final int code,
final String reason)
{
original.setStatusLine(ver, code, reason);
}
public void setStatusCode(final int code) throws IllegalStateException
{
original.setStatusCode(code);
}
public void setReasonPhrase(final String reason)
throws IllegalStateException
{
original.setReasonPhrase(reason);
}
public HttpEntity getEntity()
{
return original.getEntity();
}
public void setEntity(final HttpEntity entity)
{
original.setEntity(entity);
}
public Locale getLocale()
{
return original.getLocale();
}
public void setLocale(final Locale loc)
{
original.setLocale(loc);
}
public ProtocolVersion getProtocolVersion()
{
return original.getProtocolVersion();
}
public boolean containsHeader(final String name)
{
return original.containsHeader(name);
}
public Header[] getHeaders(final String name)
{
return original.getHeaders(name);
}
public Header getFirstHeader(final String name)
{
return original.getFirstHeader(name);
}
public Header getLastHeader(final String name)
{
return original.getLastHeader(name);
}
public Header[] getAllHeaders()
{
return original.getAllHeaders();
}
public void addHeader(final Header header)
{
original.addHeader(header);
}
public void addHeader(final String name, final String value)
{
original.addHeader(name, value);
}
public void setHeader(final Header header)
{
original.setHeader(header);
}
public void setHeader(final String name, final String value)
{
original.setHeader(name, value);
}
public void setHeaders(final Header[] headers)
{
original.setHeaders(headers);
}
public void removeHeader(final Header header)
{
original.removeHeader(header);
}
public void removeHeaders(final String name)
{
original.removeHeaders(name);
}
public HeaderIterator headerIterator()
{
return original.headerIterator();
}
public HeaderIterator headerIterator(final String name)
{
return original.headerIterator(name);
}
@Override
public String toString()
{
final StringBuilder sb = new StringBuilder("HttpResponseProxy{");
sb.append(original);
sb.append('}');
return sb.toString();
}
@Deprecated
public HttpParams getParams()
{
return original.getParams();
}
@Deprecated
public void setParams(final HttpParams params)
{
original.setParams(params);
}
public String getContent()
{
return content;
}
}

76
src/main/java/com/mh/garrison/mhutils/StreamUtil.java

@ -0,0 +1,76 @@
/*
* Copyright Notice:
* Copyright 1998-2008, Huawei Technologies Co., Ltd. ALL Rights Reserved.
*
* Warning: This computer software sourcecode is protected by copyright law
* and international treaties. Unauthorized reproduction or distribution
* of this sourcecode, or any portion of it, may result in severe civil and
* criminal penalties, and will be prosecuted to the maximum extent
* possible under the law.
*/
package com.mh.garrison.mhutils;
import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class StreamUtil
{
private static final String DEFAULT_ENCODING = "utf-8";
public static String inputStream2String(InputStream in, String charsetName)
{
if (in == null)
{
return null;
}
InputStreamReader inReader = null;
try
{
if (StringUtil.strIsNullOrEmpty(charsetName))
{
inReader = new InputStreamReader(in, DEFAULT_ENCODING);
}
else
{
inReader = new InputStreamReader(in, charsetName);
}
int readLen = 0;
char[] buffer = new char[1024];
StringBuffer strBuf = new StringBuffer();
while ((readLen = inReader.read(buffer)) != -1)
{
strBuf.append(buffer, 0, readLen);
}
return strBuf.toString();
}
catch (IOException e)
{
System.out.println(e);
}
finally
{
closeStream(inReader);
}
return null;
}
public static void closeStream(Closeable closeable) {
if (closeable != null) {
try {
closeable.close();
} catch (IOException e) {
System.out.println(e);
}
}
}
}

18
src/main/java/com/mh/garrison/mhutils/StringUtil.java

@ -0,0 +1,18 @@
/*
* Copyright Notice:
* Copyright 1998-2008, Huawei Technologies Co., Ltd. ALL Rights Reserved.
*
* Warning: This computer software sourcecode is protected by copyright law
* and international treaties. Unauthorized reproduction or distribution
* of this sourcecode, or any portion of it, may result in severe civil and
* criminal penalties, and will be prosecuted to the maximum extent
* possible under the law.
*/
package com.mh.garrison.mhutils;
public class StringUtil {
public static boolean strIsNullOrEmpty(String s) {
return (null == s || s.trim().length() < 1);
}
}

34
src/main/java/com/mh/garrison/mhutils/TimeUtils.java

@ -0,0 +1,34 @@
package com.mh.garrison.mhutils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class TimeUtils {
static String UTCToCST(String UTCStr, String format) throws ParseException {
Date date = null;
SimpleDateFormat sdf = new SimpleDateFormat(format);
UTCStr = UTCStr.substring(0, 4) + "-" + UTCStr.substring(4,6) + "-" + UTCStr.substring(6,7)
+ UTCStr.substring(7,11) + ":" + UTCStr.substring(11,13) + ":" + UTCStr.substring(13,UTCStr.length());
System.out.println(UTCStr);
date = sdf.parse(UTCStr);
// System.out.println("UTC时间: " + date);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR, calendar.get(Calendar.HOUR) + 8);
//calendar.getTime() 返回的是Date类型,也可以使用calendar.getTimeInMillis()获取时间戳
// System.out.println("北京时间: " + calendar.getTime());
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(calendar.getTime());
// System.out.println(dateString);
return dateString;
}
public static void main(String[] args) throws ParseException {
String date = "20181013T073238Z";
System.out.println(TimeUtils.UTCToCST(date, "yyyy-MM-dd'T'HH:mm:ss'Z'"));
}
}

26
src/main/java/com/mh/garrison/mhutils/UUid.java

@ -0,0 +1,26 @@
package com.mh.garrison.mhutils;
import java.util.UUID;
/**
*
* @ClassName: UUid
* @Description:TODO UUID是1.5中新增的一个类在java.util下用它可以产生一个号称全球唯一的ID
* @author: 铭汉科技LJF
* @date: 2018年8月1日 下午4:08:58
*
*/
public class UUid {
public String uuid() {
UUID uuid = UUID.randomUUID();
return uuid.toString();
}
public static void main(String arg[]) {
UUid uid = new UUid();
System.out.println(uid.uuid());
System.out.println(System.getProperty("user.dir"));
}
}

48
src/main/java/com/mh/garrison/mhutils/WaterFastJson.java

@ -0,0 +1,48 @@
package com.mh.garrison.mhutils;
import com.alibaba.fastjson.JSONObject;
import com.mh.garrison.entity.DataBean;
import com.mh.garrison.entity.DeviceMessageBean;
import com.mh.garrison.entity.ServiceBean;
/**
*
* @ClassName: WaterFastJson
* @Description:TODO(解析水表报文记录)
* @author: 铭汉科技LJF
* @date: 2020年7月20日 下午2:00:51
*
*/
public class WaterFastJson {
public String analysisFastJson(String receiveData) {
DeviceMessageBean deviceMessageBean = new DeviceMessageBean();
ServiceBean serviceBean = new ServiceBean();
DataBean dataBean = new DataBean();
JSONObject jsonObject = JSONObject.parseObject(receiveData);
// 解析第一层
deviceMessageBean.setNotiFyType(jsonObject.getString("notifyType"));
deviceMessageBean.setServiceBean(jsonObject.getString("service"));
deviceMessageBean.setDeviceId(jsonObject.getString("deviceId"));
deviceMessageBean.setGatewayId(jsonObject.getString("gatewayId"));
// 解析第二层
JSONObject serviceJson = jsonObject.getJSONObject("service");
serviceBean.setServiceId(serviceJson.getString("serviceId"));
serviceBean.setServiceType(serviceJson.getString("serviceType"));
serviceBean.setDataBean(serviceJson.getString("data"));
serviceBean.setEventTime(serviceJson.getString("eventTime"));
// 解析第三层
JSONObject dataJson = serviceJson.getJSONObject("data");
dataBean.setMeterId(dataJson.getString("meterId"));
dataBean.setOnlineType(dataJson.getString("onlineType"));
dataBean.setOnlineCode(dataJson.getString("onlineCode"));
return dataBean.getOnlineCode();
}
}

42
src/main/java/com/mh/garrison/service/DeviceService.java

@ -0,0 +1,42 @@
package com.mh.garrison.service;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.mh.garrison.mapper.DeviceMapper;
/**
*
* @ClassName: DeviceService
* @Description:TODO(修改更新发送拉合闸命令服务)
* @author: 铭汉科技LJF
* @date: 2018年10月15日 下午5:21:01
*
*/
@Service
public class DeviceService {
@Autowired
private DeviceMapper deviceMapper;
public List<Map<String,Object>> exeProcedure(Map<String, Object> device_num) {
return deviceMapper.exeProcedure(device_num);
}
public Integer findPlatform(String meterID) {
return deviceMapper.findPlatform(meterID);
}
public void updatePlatform(String meterID) {
deviceMapper.updatePlatform(meterID);
}
public List<Map<String,Object>> exeAddStateProcedure(Map<String, Object> maps) {
return deviceMapper.exeAddStateProcedure(maps);
}
}

20
src/main/java/com/mh/garrison/service/MSGService.java

@ -0,0 +1,20 @@
package com.mh.garrison.service;
import java.util.List;
import com.mh.garrison.entity.MSGEntity;
/**
*
* @ClassName: MSGService
* @Description:TODO(短信服务接口类)
* @author: 铭汉科技LJF
* @date: 2020年7月20日 上午9:34:03
*
*/
public interface MSGService {
List<MSGEntity> queryMSGList();
String updateSysSms(String isSend, String cellphone, int sendTime, String remark);
}

39
src/main/java/com/mh/garrison/service/MeterHistoryService.java

@ -0,0 +1,39 @@
package com.mh.garrison.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.mh.garrison.entity.MeterHistoryBean;
import com.mh.garrison.mapper.MeterHistoryMapper;
/**
*
* @ClassName: MeterHistoryService
* @Description:TODO 对NB电表流水记录的插入
* @author: 铭汉科技LJF
* @date: 2018年9月29日 上午8:33:03
*
*/
@Service
public class MeterHistoryService {
@Autowired
private MeterHistoryMapper meterHistoryMapper;
// 插入数据进入流水表
public int insertAll(MeterHistoryBean meterHistoryBean) throws Exception {
int i;
i = meterHistoryMapper.insertAll(meterHistoryBean);
if (i == 1) {
// throw new IllegalArgumentException("sang已存在,数据不会回滚");
}
return i;
}
public int checkHistory(MeterHistoryBean meterHistoryBean) {
// TODO Auto-generated method stub
return meterHistoryMapper.checkHistory(meterHistoryBean);
}
}

72
src/main/java/com/mh/garrison/service/MeterNowService.java

@ -0,0 +1,72 @@
package com.mh.garrison.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.mh.garrison.entity.MeterNowBean;
import com.mh.garrison.mapper.MeterNowMapper;
@Service
public class MeterNowService {
@Autowired
private MeterNowMapper meterNowMapper;
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,noRollbackFor=Exception.class)
public int checkMeterNow(MeterNowBean meterNowBean) {
return meterNowMapper.checkMeterNow(meterNowBean);
}
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,noRollbackFor=Exception.class)
public int checkMeterID(MeterNowBean meterNowBean) {
return meterNowMapper.checkMeterId(meterNowBean);
}
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,noRollbackFor=Exception.class)
public <T> int insertAll(T meterNowBean) {
return meterNowMapper.insertAll(meterNowBean);
}
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,noRollbackFor=Exception.class)
public <T> int updateAll(T threeMeterNowBean) {
return meterNowMapper.updateAll(threeMeterNowBean);
}
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,noRollbackFor=Exception.class)
public String execPro_calc_meter() {
return meterNowMapper.exePro_calc_Meter();
}
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,noRollbackFor=Exception.class)
public String findHouse(String meterID) {
// TODO Auto-generated method stub
return meterNowMapper.findHouse(meterID);
}
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,noRollbackFor=Exception.class)
public String findHouse1(String meterID) {
// TODO Auto-generated method stub
return meterNowMapper.findHouse1(meterID);
}
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,noRollbackFor=Exception.class)
public String findBuildingName1(String device_num) {
// TODO Auto-generated method stub
return meterNowMapper.findBuildingName1(device_num);
}
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,noRollbackFor=Exception.class)
public String findBuildingName(String device_num) {
// TODO Auto-generated method stub
return meterNowMapper.findBuildingName(device_num);
}
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,noRollbackFor=Exception.class)
public <T> int checkMeterId(T threeMeterNowBean) {
// TODO Auto-generated method stub
return meterNowMapper.checkMeterId(threeMeterNowBean);
}
}

38
src/main/java/com/mh/garrison/service/MeterService.java

@ -0,0 +1,38 @@
package com.mh.garrison.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.mh.garrison.entity.MeterNowBean;
import com.mh.garrison.mapper.MeterMapper;
/**
*
* @ClassName: MeterService
* @Description:TODO(调用MeterMapper查询出数据内容)
* @author: 铭汉科技LJF
* @date: 2018年9月4日 下午5:10:44
*
*/
@Service
public class MeterService {
@Autowired
private MeterMapper meterMapper;
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public List<MeterNowBean> findAllMeterNow(){
return meterMapper.findAllMeterNow();
}
public Integer selectPlatformType(String houseNum, String deviceNum) {
return meterMapper.selectPlatformType(houseNum, deviceNum);
}
}

19
src/main/java/com/mh/garrison/service/OrderService.java

@ -0,0 +1,19 @@
package com.mh.garrison.service;
import java.util.List;
import com.mh.garrison.entity.OrderEntity;
/**
*
* @ClassName: OrderService
* @Description:TODO(指令服务类)
* @author: 铭汉科技LJF
* @date: 2020年7月20日 上午10:46:06
*
*/
public interface OrderService {
List<OrderEntity> queryOrderList();
}

91
src/main/java/com/mh/garrison/service/WaterDayService.java

@ -0,0 +1,91 @@
package com.mh.garrison.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.mh.garrison.entity.WaterDayBean;
import com.mh.garrison.entity.WaterHistoryBean;
import com.mh.garrison.mapper.WaterDayMapper;
/**
* service
* @ClassName: WaterDayService
* @Description:TODO 调用waterDayMapper实现增删查改
* @author: 铭汉科技LJF
* @date: 2018年8月3日 下午3:56:40
*
*/
@Service
public class WaterDayService {
@Autowired
private WaterDayMapper waterDayMapper;
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public List<WaterDayBean> findAllWaterDay(){
return waterDayMapper.findAllWaterDay();
}
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public int findNotUploadNum() {
return waterDayMapper.findNotUploadNum();
}
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public List<WaterDayBean> findById(String water_id) {
return waterDayMapper.findByWaterId(water_id);
}
// 根据时间查询
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public List<WaterDayBean> findByDate(String water_id, String dateString) {
return waterDayMapper.findByDate(water_id, dateString);
}
// 根据时间查询
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public List<WaterDayBean> findByTime(String dateString) {
return waterDayMapper.findByTime(dateString);
}
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public int insert(String water_id) {
return waterDayMapper.insert(water_id);
}
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public int insertAll(WaterHistoryBean waterDayBean) {
return waterDayMapper.insertAll(waterDayBean);
}
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public int update(WaterHistoryBean waterDayBean) {
return waterDayMapper.update(waterDayBean);
}
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public boolean updateGrade(WaterDayBean waterDayBean) {
return waterDayMapper.updateGrade(waterDayBean);
}
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public int delete(String water_id) {
return waterDayMapper.delete(water_id);
}
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public String exeProcedure(WaterHistoryBean waterDayBean) {
return waterDayMapper.exeProcedure(waterDayBean);
}
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public String execProCheack(String waterID) {
return waterDayMapper.execPro_Cheack_Areas(waterID);
}
}

53
src/main/java/com/mh/garrison/service/WaterHistoryService.java

@ -0,0 +1,53 @@
package com.mh.garrison.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.mh.garrison.entity.WaterHistoryBean;
import com.mh.garrison.mapper.WaterHistoryMapper;
/**
*
* @ClassName: WaterHistoryService
* @Description:TODO 对waterHistory表进行数据增删查改
* @author: 铭汉科技LJF
* @date: 2018年9月28日 上午9:58:32
*
*/
@Service
@Primary
public class WaterHistoryService {
@Autowired
private WaterHistoryMapper waterHistoryMapper;
// 检查history表中是否有数据
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public int checkHistorySame(WaterHistoryBean waterHistoryBean) {
return waterHistoryMapper.checkSame(waterHistoryBean);
}
// 插入水表历史数据
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public int insertAll(WaterHistoryBean waterHistoryBean) {
return waterHistoryMapper.insertAll(waterHistoryBean);
}
// 如果存在同样的数据进行数据更新
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public int update(WaterHistoryBean waterHistoryBean) {
return waterHistoryMapper.update(waterHistoryBean);
}
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public int checkSame(WaterHistoryBean wtHistoryBean) {
// TODO Auto-generated method stub
return waterHistoryMapper.checkSame(wtHistoryBean);
}
}

106
src/main/java/com/mh/garrison/service/WaterServices.java

@ -0,0 +1,106 @@
package com.mh.garrison.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.mh.garrison.entity.WaterBean;
import com.mh.garrison.mapper.WaterMapper;
/**
*
* @ClassName: WaterService
* @Description:调用WaterMapper中的方法实现增删查改
* @author: 铭汉科技LJF
* @date: 2018年8月2日 下午3:10:31
*
*/
@Service
@Primary
public class WaterServices {
@Autowired
private WaterMapper waterMapper;
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public List<WaterBean> findAll(){
return waterMapper.findAllWater();
}
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public WaterBean findById(String waterId) {
return waterMapper.findByWaterId(waterId);
}
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public int insert(String waterId) {
return waterMapper.insert(waterId);
}
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public int insertAll(WaterBean waterBean) {
return waterMapper.insertAll(waterBean);
}
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public int update(WaterBean waterBean) {
return waterMapper.update(waterBean);
}
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public int delete(String waterId) {
return waterMapper.delete(waterId);
}
// 查询IMEI号 2018-09-28 by ljf
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public String findImei(String waterId) {
return waterMapper.findImei(waterId);
}
// 查询房间号 2018-09-28 by ljf
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public String findHouse(String waterId) {
return waterMapper.findHouse(waterId);
}
// 查询是否有数据 2018-09-28 by ljf
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public int findNowSum(String waterId) {
return waterMapper.findResult(waterId);
}
// 往水表实时表中插入数据 2018-09-28 by ljf
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public int insertNow(WaterBean waterBean) {
return waterMapper.insertWtNowAll(waterBean);
}
// 实时水表数据存在相同数据,进行更新 2018-09-28 by ljf
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public int updateWtNow(WaterBean waterBean) {
System.out.println(waterBean.toString());
return waterMapper.updateWtNow(waterBean);
}
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public int findResult(String waterID) {
// TODO Auto-generated method stub
return waterMapper.findResult(waterID);
}
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public int insertWtNowAll(WaterBean water) {
// TODO Auto-generated method stub
return waterMapper.insertWtNowAll(water);
}
}

46
src/main/java/com/mh/garrison/service/impl/MSGServiceImpl.java

@ -0,0 +1,46 @@
package com.mh.garrison.service.impl;
import java.util.List;
import org.springframework.stereotype.Service;
import com.mh.garrison.entity.MSGEntity;
import com.mh.garrison.mapper.MSGMapper;
import com.mh.garrison.service.MSGService;
/**
*
* @ClassName: MSGServiceImpl
* @Description:TODO(短信服务接口实现类)
* @author: 铭汉科技LJF
* @date: 2020年7月20日 上午9:35:02
*
*/
@Service
public class MSGServiceImpl implements MSGService {
private final MSGMapper msgMapper;
public MSGServiceImpl(MSGMapper msgMapper) {
// TODO Auto-generated constructor stub
this.msgMapper = msgMapper;
}
@Override
public List<MSGEntity> queryMSGList() {
// TODO Auto-generated method stub
return msgMapper.queryMSGList();
}
@Override
public String updateSysSms(String isSend, String cellphone, int sendTime, String remark) {
// TODO Auto-generated method stub
int a = msgMapper.updateSysSms(isSend,cellphone, sendTime, remark);
if (a != 0) {
return "success";
} else {
return "fail";
}
}
}

35
src/main/java/com/mh/garrison/service/impl/OrderServiceImpl.java

@ -0,0 +1,35 @@
package com.mh.garrison.service.impl;
import java.util.List;
import org.springframework.stereotype.Service;
import com.mh.garrison.entity.OrderEntity;
import com.mh.garrison.mapper.OrderMapper;
import com.mh.garrison.service.OrderService;
/**
*
* @ClassName: OrderServiceImpl
* @Description:TODO(指令服务实现类)
* @author: 铭汉科技LJF
* @date: 2020年7月20日 上午10:47:15
*
*/
@Service
public class OrderServiceImpl implements OrderService {
private final OrderMapper orderMapper;
public OrderServiceImpl(OrderMapper orderMapper) {
// TODO Auto-generated constructor stub
this.orderMapper = orderMapper;
}
@Override
public List<OrderEntity> queryOrderList() {
// TODO Auto-generated method stub
return orderMapper.queryOrderList();
}
}

31
src/main/resources/application.yml

@ -0,0 +1,31 @@
#数据库访问
spring:
datasource:
name: druidDataSource
type: com.alibaba.druid.pool.DruidDataSource
druid:
# 生产配置
# url: jdbc:sqlserver://134.175.248.88:2008;DatabaseName=yjc_jingbeiqu
# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
# username: sa
# password: mhtech@803
# 测试配置
url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=yjc_jingbeiqu
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
username: sa
password: mh@803
filters: stat,wall,config
max-active: 100
initial-size: 1
max-wait: 60000
min-idle: 1
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
validation-query: select 'x'
test-while-idle: true
test-on-borrow: false
test-on-return: false
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
server:
port: 8764

BIN
src/main/resources/cert/ca.jks

Binary file not shown.

BIN
src/main/resources/cert/outgoing.CertwithKey.pkcs12

Binary file not shown.

BIN
src/main/resources/cert_bak.7z

Binary file not shown.

32
src/test/java/com/mh/garrison/GarrisonApplicationTests.java

@ -0,0 +1,32 @@
package com.mh.garrison;
import com.mh.garrison.job.NewDealMeterLogJob;
import com.mh.garrison.job.SendOrderJob;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class GarrisonApplicationTests {
@Test
void contextLoads() {
}
@Autowired
private NewDealMeterLogJob newDealMeterLogJob;
@Autowired
private SendOrderJob sendOrderJob;
@Test
public void testNewDealMeter() {
newDealMeterLogJob.dealMeterLogJob();
}
@Test
public void testSendOrder() {
sendOrderJob.sendOrder();
}
}
Loading…
Cancel
Save