commit bc06e0e301d7a059b275ca6f826bb3e2f4972257 Author: mh Date: Mon Dec 9 10:21:13 2024 +0800 项目初始化 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0ea7e29 --- /dev/null +++ b/.gitignore @@ -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/ diff --git a/.mvn/wrapper/MavenWrapperDownloader.java b/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000..e76d1f3 --- /dev/null +++ b/.mvn/wrapper/MavenWrapperDownloader.java @@ -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(); + } + +} diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000..2cc7d4a Binary files /dev/null and b/.mvn/wrapper/maven-wrapper.jar differ diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..642d572 --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -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 diff --git a/2024年新增脚本.sql b/2024年新增脚本.sql new file mode 100644 index 0000000..a33d3e6 --- /dev/null +++ b/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'; diff --git a/mvnw b/mvnw new file mode 100644 index 0000000..a16b543 --- /dev/null +++ b/mvnw @@ -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 "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 0000000..c8d4337 --- /dev/null +++ b/mvnw.cmd @@ -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% diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..eccde1a --- /dev/null +++ b/pom.xml @@ -0,0 +1,114 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.3.1.RELEASE + + + com.mh + garrison + 1.0.0 + war + garrison + Demo project for Spring Boot + + + 1.8 + + + + + org.springframework.boot + spring-boot-starter-web + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 2.1.3 + + + + + + + + + + com.alibaba + druid + 1.1.22 + + + + + + + + + + + + + + + + com.alibaba + fastjson + 1.2.72 + + + + com.microsoft.sqlserver + mssql-jdbc + runtime + + + org.springframework.boot + spring-boot-starter-tomcat + provided + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + + + org.springframework.boot + spring-boot-configuration-processor + true + + + + + com.ctg.ag + ag-sdk-biz-60039.tar.gz + 20210518.165353-SNAPSHOT + + + + com.ctg.ag + ctg-ag-sdk-core + 2.5.0-SNAPSHOT + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/src/main/java/com/mh/garrison/GarrisonApplication.java b/src/main/java/com/mh/garrison/GarrisonApplication.java new file mode 100644 index 0000000..d43bf10 --- /dev/null +++ b/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); + } + +} diff --git a/src/main/java/com/mh/garrison/ServletInitializer.java b/src/main/java/com/mh/garrison/ServletInitializer.java new file mode 100644 index 0000000..9dfd7a2 --- /dev/null +++ b/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); + } + +} diff --git a/src/main/java/com/mh/garrison/config/DruidConfig.java b/src/main/java/com/mh/garrison/config/DruidConfig.java new file mode 100644 index 0000000..acad252 --- /dev/null +++ b/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 druidServlet() { + ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(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 filterRegistrationBean() { + FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); + filterRegistrationBean.setFilter(new WebStatFilter()); + filterRegistrationBean.addUrlPatterns("/*"); + filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); + return filterRegistrationBean; + } +} diff --git a/src/main/java/com/mh/garrison/config/DruidDataSourceProperties.java b/src/main/java/com/mh/garrison/config/DruidDataSourceProperties.java new file mode 100644 index 0000000..6d97fcb --- /dev/null +++ b/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; + } + +} diff --git a/src/main/java/com/mh/garrison/constant/Constants.java b/src/main/java/com/mh/garrison/constant/Constants.java new file mode 100644 index 0000000..876aff2 --- /dev/null +++ b/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"; +} diff --git a/src/main/java/com/mh/garrison/controller/DeviceController.java b/src/main/java/com/mh/garrison/controller/DeviceController.java new file mode 100644 index 0000000..7823dbd --- /dev/null +++ b/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(); + } + +} diff --git a/src/main/java/com/mh/garrison/controller/HelloController.java b/src/main/java/com/mh/garrison/controller/HelloController.java new file mode 100644 index 0000000..7857b01 --- /dev/null +++ b/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"; + } + +} diff --git a/src/main/java/com/mh/garrison/controller/NewDeviceController.java b/src/main/java/com/mh/garrison/controller/NewDeviceController.java new file mode 100644 index 0000000..d4c279c --- /dev/null +++ b/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(); + } + +} diff --git a/src/main/java/com/mh/garrison/entity/AEPEntity.java b/src/main/java/com/mh/garrison/entity/AEPEntity.java new file mode 100644 index 0000000..2059f1b --- /dev/null +++ b/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 + '\'' + + '}'; + } +} diff --git a/src/main/java/com/mh/garrison/entity/DataBean.java b/src/main/java/com/mh/garrison/entity/DataBean.java new file mode 100644 index 0000000..b513028 --- /dev/null +++ b/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 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 getMHMeterData() { + return MHMeterData; + } + public void setMHMeterData(Map mHMeterData) { + MHMeterData = mHMeterData; + } + @Override + public String toString() { + return "DataBean [MeterId=" + MeterId + ", onlineType=" + onlineType + ", onlineCode=" + onlineCode + + ", MHMeterData=" + MHMeterData + "]"; + } +} diff --git a/src/main/java/com/mh/garrison/entity/DeviceInfo.java b/src/main/java/com/mh/garrison/entity/DeviceInfo.java new file mode 100644 index 0000000..e7dc618 --- /dev/null +++ b/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 + + "]"; + } + +} diff --git a/src/main/java/com/mh/garrison/entity/DeviceMessage.java b/src/main/java/com/mh/garrison/entity/DeviceMessage.java new file mode 100644 index 0000000..c9385c4 --- /dev/null +++ b/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 + + "]"; + } +} diff --git a/src/main/java/com/mh/garrison/entity/DeviceMessageBean.java b/src/main/java/com/mh/garrison/entity/DeviceMessageBean.java new file mode 100644 index 0000000..d0c1ac0 --- /dev/null +++ b/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 + "]"; + } +} diff --git a/src/main/java/com/mh/garrison/entity/DevicesBean.java b/src/main/java/com/mh/garrison/entity/DevicesBean.java new file mode 100644 index 0000000..0eaeca8 --- /dev/null +++ b/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 + "]"; + } + +} diff --git a/src/main/java/com/mh/garrison/entity/MSGEntity.java b/src/main/java/com/mh/garrison/entity/MSGEntity.java new file mode 100644 index 0000000..66a44d2 --- /dev/null +++ b/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 + '\'' + + '}'; + } +} diff --git a/src/main/java/com/mh/garrison/entity/MeterHistoryBean.java b/src/main/java/com/mh/garrison/entity/MeterHistoryBean.java new file mode 100644 index 0000000..523a638 --- /dev/null +++ b/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 + "]"; + } + +} diff --git a/src/main/java/com/mh/garrison/entity/MeterNowBean.java b/src/main/java/com/mh/garrison/entity/MeterNowBean.java new file mode 100644 index 0000000..b21e9a5 --- /dev/null +++ b/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 + + "]"; + } + +} diff --git a/src/main/java/com/mh/garrison/entity/OrderEntity.java b/src/main/java/com/mh/garrison/entity/OrderEntity.java new file mode 100644 index 0000000..b811c40 --- /dev/null +++ b/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 + "]"; + } + +} diff --git a/src/main/java/com/mh/garrison/entity/ServiceBean.java b/src/main/java/com/mh/garrison/entity/ServiceBean.java new file mode 100644 index 0000000..44bbab3 --- /dev/null +++ b/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 + "]"; + } +} diff --git a/src/main/java/com/mh/garrison/entity/ThreeMeterBean.java b/src/main/java/com/mh/garrison/entity/ThreeMeterBean.java new file mode 100644 index 0000000..2b145af --- /dev/null +++ b/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 + "]"; + } + +} diff --git a/src/main/java/com/mh/garrison/entity/ThreeMeterNowBean.java b/src/main/java/com/mh/garrison/entity/ThreeMeterNowBean.java new file mode 100644 index 0000000..0785a04 --- /dev/null +++ b/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 + + "]"; + } + +} diff --git a/src/main/java/com/mh/garrison/entity/WaterBean.java b/src/main/java/com/mh/garrison/entity/WaterBean.java new file mode 100644 index 0000000..5de7765 --- /dev/null +++ b/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 + "]"; + } + +} diff --git a/src/main/java/com/mh/garrison/entity/WaterDataBean.java b/src/main/java/com/mh/garrison/entity/WaterDataBean.java new file mode 100644 index 0000000..9f06be5 --- /dev/null +++ b/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 + "]"; + } + +} diff --git a/src/main/java/com/mh/garrison/entity/WaterDayBean.java b/src/main/java/com/mh/garrison/entity/WaterDayBean.java new file mode 100644 index 0000000..29cef91 --- /dev/null +++ b/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 + "]"; + } + +} diff --git a/src/main/java/com/mh/garrison/entity/WaterHistoryBean.java b/src/main/java/com/mh/garrison/entity/WaterHistoryBean.java new file mode 100644 index 0000000..70754b1 --- /dev/null +++ b/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 + "]"; + } + +} diff --git a/src/main/java/com/mh/garrison/job/DealMeterLogJob.java b/src/main/java/com/mh/garrison/job/DealMeterLogJob.java new file mode 100644 index 0000000..a5bed5d --- /dev/null +++ b/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(); + } + + } + } + } +} diff --git a/src/main/java/com/mh/garrison/job/DealWaterLogJob.java b/src/main/java/com/mh/garrison/job/DealWaterLogJob.java new file mode 100644 index 0000000..3a5636e --- /dev/null +++ b/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; + } + } + } + } +} diff --git a/src/main/java/com/mh/garrison/job/NewDealMeterLogJob.java b/src/main/java/com/mh/garrison/job/NewDealMeterLogJob.java new file mode 100644 index 0000000..bd94d9d --- /dev/null +++ b/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(); + } + + } + } + } +} diff --git a/src/main/java/com/mh/garrison/job/QueryDeviceJob.java b/src/main/java/com/mh/garrison/job/QueryDeviceJob.java new file mode 100644 index 0000000..9d60398 --- /dev/null +++ b/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 paramQueryDevices = new HashMap(); + paramQueryDevices.put("appId", appId); + paramQueryDevices.put("pageNo", pageNo.toString()); + paramQueryDevices.put("pageSize", pageSize.toString()); + + Map header = new HashMap(); + 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 beanList = objectMapper.readValue(deviceMessage, new + // TypeReference>() {}); + // System.out.println(beanList); + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + /** + * Authentication,get 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 paramLogin = new HashMap(); + 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 data = new HashMap(); + 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 paramQueryDevices = new HashMap(); + paramQueryDevices.put("appId", appId); + paramQueryDevices.put("pageNo", pageNo.toString()); + paramQueryDevices.put("pageSize", pageSize.toString()); + + Map header = new HashMap(); + 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 beanList = objectMapper.readValue(deviceMessage, new + // TypeReference>() {}); + // System.out.println(beanList); + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + /** + * Authentication,get 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 paramLogin = new HashMap(); + 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 data = new HashMap(); + data = JsonUtil.jsonString2SimpleObj(responseLogin.getContent(), data.getClass()); + return data.get("accessToken"); + } +} diff --git a/src/main/java/com/mh/garrison/job/SendMSGJob.java b/src/main/java/com/mh/garrison/job/SendMSGJob.java new file mode 100644 index 0000000..e892087 --- /dev/null +++ b/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 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; + } +} diff --git a/src/main/java/com/mh/garrison/job/SendOrderJob.java b/src/main/java/com/mh/garrison/job/SendOrderJob.java new file mode 100644 index 0000000..4b40c2d --- /dev/null +++ b/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 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 paramCommand = new HashMap(); + paramCommand.put("serviceId", serviceId); + paramCommand.put("method", method); + paramCommand.put("paras", paras); + + Map paramPostAsynCmd = new HashMap(); + paramPostAsynCmd.put("deviceId", deviceId); + paramPostAsynCmd.put("command", paramCommand); + paramPostAsynCmd.put("callbackUrl", callbackUrl); // 设置回调地址 + paramPostAsynCmd.put("expireTime", "0"); // 设置发送时间 + + String jsonRequest = JsonUtil.jsonObj2Sting(paramPostAsynCmd); + + Map header = new HashMap(); + 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() + "---------------------"); + } + } + + /** + * Authentication,get 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 paramLogin = new HashMap(); + 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 data = new HashMap(); + data = JsonUtil.jsonString2SimpleObj(responseLogin.getContent(), data.getClass()); + return data.get("accessToken"); + } +} diff --git a/src/main/java/com/mh/garrison/mapper/DeviceMapper.java b/src/main/java/com/mh/garrison/mapper/DeviceMapper.java new file mode 100644 index 0000000..1e3e796 --- /dev/null +++ b/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> exeProcedure(Map 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> exeAddStateProcedure(Map params); +} diff --git a/src/main/java/com/mh/garrison/mapper/MSGMapper.java b/src/main/java/com/mh/garrison/mapper/MSGMapper.java new file mode 100644 index 0000000..249df15 --- /dev/null +++ b/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 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); + +} diff --git a/src/main/java/com/mh/garrison/mapper/MeterHistoryMapper.java b/src/main/java/com/mh/garrison/mapper/MeterHistoryMapper.java new file mode 100644 index 0000000..04d71dc --- /dev/null +++ b/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); + +} diff --git a/src/main/java/com/mh/garrison/mapper/MeterMapper.java b/src/main/java/com/mh/garrison/mapper/MeterMapper.java new file mode 100644 index 0000000..a90bcb2 --- /dev/null +++ b/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 findAllMeterNow(); + + @Select("select top 1 PlateformType from MeterInstall where HouseNo = #{houseNum} and MeterId = #{deviceNum} ") + Integer selectPlatformType(@Param("houseNum") String houseNum, + @Param("deviceNum") String deviceNum); +} diff --git a/src/main/java/com/mh/garrison/mapper/MeterNowMapper.java b/src/main/java/com/mh/garrison/mapper/MeterNowMapper.java new file mode 100644 index 0000000..c9b8bf0 --- /dev/null +++ b/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}") + 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})") + 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}") + int updateAll(T meterNowBean); + + // 执行存储过程,计算电表以及地区的值 + @Select({"exec pro_calc_hoursmeter"}) + @Options(statementType=StatementType.CALLABLE) + String exePro_calc_Meter(); + +} diff --git a/src/main/java/com/mh/garrison/mapper/OrderMapper.java b/src/main/java/com/mh/garrison/mapper/OrderMapper.java new file mode 100644 index 0000000..309d07c --- /dev/null +++ b/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 queryOrderList(); + +} diff --git a/src/main/java/com/mh/garrison/mapper/WaterDayMapper.java b/src/main/java/com/mh/garrison/mapper/WaterDayMapper.java new file mode 100644 index 0000000..896383c --- /dev/null +++ b/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 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 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 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 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); + +} diff --git a/src/main/java/com/mh/garrison/mapper/WaterHistoryMapper.java b/src/main/java/com/mh/garrison/mapper/WaterHistoryMapper.java new file mode 100644 index 0000000..20642c0 --- /dev/null +++ b/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); + +} diff --git a/src/main/java/com/mh/garrison/mapper/WaterMapper.java b/src/main/java/com/mh/garrison/mapper/WaterMapper.java new file mode 100644 index 0000000..0b1e90d --- /dev/null +++ b/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 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); + +} diff --git a/src/main/java/com/mh/garrison/mhutils/ByteUtilsWater.java b/src/main/java/com/mh/garrison/mhutils/ByteUtilsWater.java new file mode 100644 index 0000000..ed44c31 --- /dev/null +++ b/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; + } + +} diff --git a/src/main/java/com/mh/garrison/mhutils/Constant.java b/src/main/java/com/mh/garrison/mhutils/Constant.java new file mode 100644 index 0000000..3ddb950 --- /dev/null +++ b/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"; + +} diff --git a/src/main/java/com/mh/garrison/mhutils/ConstantWater.java b/src/main/java/com/mh/garrison/mhutils/ConstantWater.java new file mode 100644 index 0000000..664046c --- /dev/null +++ b/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"; + +} diff --git a/src/main/java/com/mh/garrison/mhutils/FastJson.java b/src/main/java/com/mh/garrison/mhutils/FastJson.java new file mode 100644 index 0000000..c0dd2f5 --- /dev/null +++ b/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 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)); +// } + +} diff --git a/src/main/java/com/mh/garrison/mhutils/FastJsonUtil.java b/src/main/java/com/mh/garrison/mhutils/FastJsonUtil.java new file mode 100644 index 0000000..9112982 --- /dev/null +++ b/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); +// +// } + +} diff --git a/src/main/java/com/mh/garrison/mhutils/GetBalance.java b/src/main/java/com/mh/garrison/mhutils/GetBalance.java new file mode 100644 index 0000000..6158ae5 --- /dev/null +++ b/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); + } +} \ No newline at end of file diff --git a/src/main/java/com/mh/garrison/mhutils/HttpsUtil.java b/src/main/java/com/mh/garrison/mhutils/HttpsUtil.java new file mode 100644 index 0000000..e53f0c1 --- /dev/null +++ b/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 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 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 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 paramsConverter(Map params) { + List nvps = new LinkedList(); + Set> paramsSet = params.entrySet(); + for (Map.Entry paramEntry : paramsSet) { + nvps.add(new BasicNameValuePair(paramEntry.getKey(), paramEntry + .getValue())); + } + + return nvps; + } + + + public StreamClosedHttpResponse doPostFormUrlEncodedGetStatusLine( + String url, Map 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 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 headerMap) { + HttpPut request = new HttpPut(url); + addRequestHeader(request, headerMap); + + return executeHttpRequest(request); + } + + public StreamClosedHttpResponse doPutJsonGetStatusLine(String url, Map 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 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 queryParams, Map 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 queryParams, Map 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 headerMap) { + HttpDelete request = new HttpDelete(url); + addRequestHeader(request, headerMap); + + return executeHttpRequest(request); + } + + public StreamClosedHttpResponse doDeleteGetStatusLine(String url, + Map 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 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; + } +} diff --git a/src/main/java/com/mh/garrison/mhutils/JsonUtil.java b/src/main/java/com/mh/garrison/mhutils/JsonUtil.java new file mode 100644 index 0000000..98eed5d --- /dev/null +++ b/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 jsonString2SimpleObj(String jsonString, Class 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 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 convertJsonStringToObject(String jsonString, + Class 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 convertValue(Object fromValue, Class toValueType) + throws Exception { + try { + return objectMapper.convertValue(fromValue, toValueType); + } catch (IllegalArgumentException e) { + throw new Exception(e); + } + } +} diff --git a/src/main/java/com/mh/garrison/mhutils/MD5Utils.java b/src/main/java/com/mh/garrison/mhutils/MD5Utils.java new file mode 100644 index 0000000..b5ec754 --- /dev/null +++ b/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); + } + +} diff --git a/src/main/java/com/mh/garrison/mhutils/MSGClient.java b/src/main/java/com/mh/garrison/mhutils/MSGClient.java new file mode 100644 index 0000000..4d10fee --- /dev/null +++ b/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; + } +} diff --git a/src/main/java/com/mh/garrison/mhutils/Md5Digest.java b/src/main/java/com/mh/garrison/mhutils/Md5Digest.java new file mode 100644 index 0000000..b0d4b58 --- /dev/null +++ b/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); + } + +} diff --git a/src/main/java/com/mh/garrison/mhutils/MeterUtils.java b/src/main/java/com/mh/garrison/mhutils/MeterUtils.java new file mode 100644 index 0000000..9e64282 --- /dev/null +++ b/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 params = new HashMap<>(); + params.put("device_num", meterID); + params.put("remark", "命令"); + List> list = deviceService.exeProcedure(params); + for (Map 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 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 params = new HashMap<>(); + params.put("device_num", meterID); + params.put("remark", "读取数据状态"); + List> list = deviceService.exeProcedure(params); + for (Map 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 params = new HashMap<>(); + params.put("device_num", meterID); + params.put("remark", "读取数据状态"); + List> list = deviceService.exeProcedure(params); + for (Map 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 params = new HashMap<>(); + params.put("device_num", meterID); + params.put("remark", "读取数据状态"); + List> list = deviceMapper.exeProcedure(params); + for (Map 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); + + } + +} diff --git a/src/main/java/com/mh/garrison/mhutils/PasswordUpdate.java b/src/main/java/com/mh/garrison/mhutils/PasswordUpdate.java new file mode 100644 index 0000000..9323993 --- /dev/null +++ b/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); + } + +} diff --git a/src/main/java/com/mh/garrison/mhutils/PostCmdUtils.java b/src/main/java/com/mh/garrison/mhutils/PostCmdUtils.java new file mode 100644 index 0000000..dc69a1b --- /dev/null +++ b/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(); + } + } + +} diff --git a/src/main/java/com/mh/garrison/mhutils/SpringUtils.java b/src/main/java/com/mh/garrison/mhutils/SpringUtils.java new file mode 100644 index 0000000..b1d76de --- /dev/null +++ b/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 getBean(Class claszz) { + return getApplicationContext().getBean(claszz); + } + + // 通过name,以及claszz返回指定的bean + public static T getBean(String name,Class clazz) { + return getApplicationContext().getBean(name,clazz); + } + +} diff --git a/src/main/java/com/mh/garrison/mhutils/StreamClosedHttpResponse.java b/src/main/java/com/mh/garrison/mhutils/StreamClosedHttpResponse.java new file mode 100644 index 0000000..5ff51f9 --- /dev/null +++ b/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; + } +} + diff --git a/src/main/java/com/mh/garrison/mhutils/StreamUtil.java b/src/main/java/com/mh/garrison/mhutils/StreamUtil.java new file mode 100644 index 0000000..6358371 --- /dev/null +++ b/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); + } + } + } +} diff --git a/src/main/java/com/mh/garrison/mhutils/StringUtil.java b/src/main/java/com/mh/garrison/mhutils/StringUtil.java new file mode 100644 index 0000000..012d00c --- /dev/null +++ b/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); + } +} diff --git a/src/main/java/com/mh/garrison/mhutils/TimeUtils.java b/src/main/java/com/mh/garrison/mhutils/TimeUtils.java new file mode 100644 index 0000000..59b9fb0 --- /dev/null +++ b/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'")); + } + +} diff --git a/src/main/java/com/mh/garrison/mhutils/UUid.java b/src/main/java/com/mh/garrison/mhutils/UUid.java new file mode 100644 index 0000000..3f5e02b --- /dev/null +++ b/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")); + } + +} diff --git a/src/main/java/com/mh/garrison/mhutils/WaterFastJson.java b/src/main/java/com/mh/garrison/mhutils/WaterFastJson.java new file mode 100644 index 0000000..3ac5c77 --- /dev/null +++ b/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(); + } + +} diff --git a/src/main/java/com/mh/garrison/service/DeviceService.java b/src/main/java/com/mh/garrison/service/DeviceService.java new file mode 100644 index 0000000..4c621fe --- /dev/null +++ b/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> exeProcedure(Map 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> exeAddStateProcedure(Map maps) { + return deviceMapper.exeAddStateProcedure(maps); + } + +} diff --git a/src/main/java/com/mh/garrison/service/MSGService.java b/src/main/java/com/mh/garrison/service/MSGService.java new file mode 100644 index 0000000..43af3bd --- /dev/null +++ b/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 queryMSGList(); + + String updateSysSms(String isSend, String cellphone, int sendTime, String remark); +} diff --git a/src/main/java/com/mh/garrison/service/MeterHistoryService.java b/src/main/java/com/mh/garrison/service/MeterHistoryService.java new file mode 100644 index 0000000..cbc9c3b --- /dev/null +++ b/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); + } + +} diff --git a/src/main/java/com/mh/garrison/service/MeterNowService.java b/src/main/java/com/mh/garrison/service/MeterNowService.java new file mode 100644 index 0000000..1cfd047 --- /dev/null +++ b/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 int insertAll(T meterNowBean) { + return meterNowMapper.insertAll(meterNowBean); + } + + @Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,noRollbackFor=Exception.class) + public 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 int checkMeterId(T threeMeterNowBean) { + // TODO Auto-generated method stub + return meterNowMapper.checkMeterId(threeMeterNowBean); + } + +} diff --git a/src/main/java/com/mh/garrison/service/MeterService.java b/src/main/java/com/mh/garrison/service/MeterService.java new file mode 100644 index 0000000..06a575a --- /dev/null +++ b/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 findAllMeterNow(){ + return meterMapper.findAllMeterNow(); + } + + + public Integer selectPlatformType(String houseNum, String deviceNum) { + return meterMapper.selectPlatformType(houseNum, deviceNum); + } +} diff --git a/src/main/java/com/mh/garrison/service/OrderService.java b/src/main/java/com/mh/garrison/service/OrderService.java new file mode 100644 index 0000000..70fa8ba --- /dev/null +++ b/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 queryOrderList(); + +} diff --git a/src/main/java/com/mh/garrison/service/WaterDayService.java b/src/main/java/com/mh/garrison/service/WaterDayService.java new file mode 100644 index 0000000..06af9d3 --- /dev/null +++ b/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 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 findById(String water_id) { + return waterDayMapper.findByWaterId(water_id); + } + + // 根据时间查询 + @Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class) + public List 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 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); + } + +} diff --git a/src/main/java/com/mh/garrison/service/WaterHistoryService.java b/src/main/java/com/mh/garrison/service/WaterHistoryService.java new file mode 100644 index 0000000..c4e9389 --- /dev/null +++ b/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); + } + +} diff --git a/src/main/java/com/mh/garrison/service/WaterServices.java b/src/main/java/com/mh/garrison/service/WaterServices.java new file mode 100644 index 0000000..74c5850 --- /dev/null +++ b/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 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); + } + + + +} diff --git a/src/main/java/com/mh/garrison/service/impl/MSGServiceImpl.java b/src/main/java/com/mh/garrison/service/impl/MSGServiceImpl.java new file mode 100644 index 0000000..94d5a44 --- /dev/null +++ b/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 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"; + } + } + +} diff --git a/src/main/java/com/mh/garrison/service/impl/OrderServiceImpl.java b/src/main/java/com/mh/garrison/service/impl/OrderServiceImpl.java new file mode 100644 index 0000000..b183e1c --- /dev/null +++ b/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 queryOrderList() { + // TODO Auto-generated method stub + return orderMapper.queryOrderList(); + } + +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..f7cbe89 --- /dev/null +++ b/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 diff --git a/src/main/resources/cert/ca.jks b/src/main/resources/cert/ca.jks new file mode 100644 index 0000000..e67d247 Binary files /dev/null and b/src/main/resources/cert/ca.jks differ diff --git a/src/main/resources/cert/outgoing.CertwithKey.pkcs12 b/src/main/resources/cert/outgoing.CertwithKey.pkcs12 new file mode 100644 index 0000000..fc25fac Binary files /dev/null and b/src/main/resources/cert/outgoing.CertwithKey.pkcs12 differ diff --git a/src/main/resources/cert_bak.7z b/src/main/resources/cert_bak.7z new file mode 100644 index 0000000..cbd413d Binary files /dev/null and b/src/main/resources/cert_bak.7z differ diff --git a/src/test/java/com/mh/garrison/GarrisonApplicationTests.java b/src/test/java/com/mh/garrison/GarrisonApplicationTests.java new file mode 100644 index 0000000..0b6324b --- /dev/null +++ b/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(); + } + +}