dingxin 6 년 전
부모
커밋
dc58dbf623
58개의 변경된 파일9945개의 추가작업 그리고 3066개의 파일을 삭제
  1. 1
    0
      CODE/smart-community/community-common/src/main/java/com/community/commom/fushi/FuShiRequestAPI.java
  2. 25
    0
      CODE/smart-community/hardware-server/.gitignore
  3. BIN
      CODE/smart-community/hardware-server/.mvn/wrapper/maven-wrapper.jar
  4. 1
    0
      CODE/smart-community/hardware-server/.mvn/wrapper/maven-wrapper.properties
  5. 225
    0
      CODE/smart-community/hardware-server/mvnw
  6. 143
    0
      CODE/smart-community/hardware-server/mvnw.cmd
  7. 245
    0
      CODE/smart-community/hardware-server/pom.xml
  8. 30
    0
      CODE/smart-community/hardware-server/src/main/assembly/assembly.xml
  9. 86
    0
      CODE/smart-community/hardware-server/src/main/assembly/bin/start.sh
  10. 44
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/HardwareApplication.java
  11. 40
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/Swagger2.java
  12. 268
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/base/api/fushi/Base64.java
  13. 186
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/base/api/fushi/FuShiHttpClient.java
  14. 227
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/base/api/fushi/FuShiRequestAPI.java
  15. 39
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/base/api/fushi/FushiConstant.java
  16. 49
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/base/api/fushi/error/FuShiException.java
  17. 133
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/base/api/hk/Digests.java
  18. 219
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/base/api/hk/HKConstant.java
  19. 1217
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/base/api/hk/HKOpenApi.java
  20. 127
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/base/api/hk/HttpClientSSLUtils.java
  21. 107
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/base/api/hk/PicUtils.java
  22. 40
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/base/api/hk/entity/MonitoryPoint.java
  23. 210
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/base/api/hk/test/OpenapiTest.java
  24. 268
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/base/fushi/Base64.java
  25. 164
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/base/fushi/FSApi.java
  26. 44
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/base/properties/FuShiProperties.java
  27. 40
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/config/FuShiConfig.java
  28. 50
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/controller/HardwareController.java
  29. 66
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/exception/ExceptionHandleAdice.java
  30. 23
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/exception/WisdomException.java
  31. 16
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/factory/PlatformVendors.java
  32. 30
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/factory/SimplePlatformVendorsFactory.java
  33. 34
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/factory/impl/HKPlatformVendors.java
  34. 32
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/log/LogAnnotation.java
  35. 43
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/log/LogEnums.java
  36. 103
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/log/LogFactory.java
  37. 46
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/log/LogFileManager.java
  38. 84
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/service/FSHardwareServiceI.java
  39. 289
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/service/HkHardwareServiceI.java
  40. 167
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/service/impl/FSHardwareServiceImpl.java
  41. 284
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/service/impl/HkHardwareServiceImpl.java
  42. 28
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/vendor/constants/dao/IDoorMachineOperation.java
  43. 28
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/vendor/constants/dao/IEntranceGuardOperation.java
  44. 29
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/vendor/constants/dao/IFaceOperation.java
  45. 29
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/vendor/constants/dao/IPersonOperation.java
  46. 35
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/vendor/constants/info/PlatformVendorsInfo.java
  47. 29
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/vendor/impl/hk/HKCombination.java
  48. 33
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/vendor/impl/hk/HKDoorMachineOperationImpl.java
  49. 33
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/vendor/impl/hk/HKEntranceGuardOperationImpl.java
  50. 33
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/vendor/impl/hk/HKFaceOperationImpl.java
  51. 33
    0
      CODE/smart-community/hardware-server/src/main/java/com/community/huiju/vendor/impl/hk/HKPersonOperationImpl.java
  52. 1
    0
      CODE/smart-community/hardware-server/src/main/resources/application.yml
  53. 32
    0
      CODE/smart-community/hardware-server/src/main/resources/bootstrap.yml
  54. 32
    0
      CODE/smart-community/hardware-server/src/main/resources/log4j.properties
  55. 1
    0
      CODE/smart-community/pom.xml
  56. 2062
    1533
      文档/MYSQL/smartCommunity.pdb
  57. 2062
    1533
      文档/MYSQL/smartCommunity.pdm
  58. BIN
      文档/计划/V2.3.0/智慧社区V2.3.2.mpp

+ 1
- 0
CODE/smart-community/community-common/src/main/java/com/community/commom/fushi/FuShiRequestAPI.java 파일 보기

@@ -6,6 +6,7 @@ import com.google.common.collect.Maps;
6 6
 import lombok.AllArgsConstructor;
7 7
 import lombok.Data;
8 8
 import lombok.extern.slf4j.Slf4j;
9
+import org.springframework.stereotype.Component;
9 10
 
10 11
 import java.util.Map;
11 12
 import java.util.TreeMap;

+ 25
- 0
CODE/smart-community/hardware-server/.gitignore 파일 보기

@@ -0,0 +1,25 @@
1
+/target/
2
+!.mvn/wrapper/maven-wrapper.jar
3
+
4
+### STS ###
5
+.apt_generated
6
+.classpath
7
+.factorypath
8
+.project
9
+.settings
10
+.springBeans
11
+.sts4-cache
12
+
13
+### IntelliJ IDEA ###
14
+.idea
15
+*.iws
16
+*.iml
17
+*.ipr
18
+
19
+### NetBeans ###
20
+/nbproject/private/
21
+/build/
22
+/nbbuild/
23
+/dist/
24
+/nbdist/
25
+/.nb-gradle/

BIN
CODE/smart-community/hardware-server/.mvn/wrapper/maven-wrapper.jar 파일 보기


+ 1
- 0
CODE/smart-community/hardware-server/.mvn/wrapper/maven-wrapper.properties 파일 보기

@@ -0,0 +1 @@
1
+distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.4/apache-maven-3.5.4-bin.zip

+ 225
- 0
CODE/smart-community/hardware-server/mvnw 파일 보기

@@ -0,0 +1,225 @@
1
+#!/bin/sh
2
+# ----------------------------------------------------------------------------
3
+# Licensed to the Apache Software Foundation (ASF) under one
4
+# or more contributor license agreements.  See the NOTICE file
5
+# distributed with this work for additional information
6
+# regarding copyright ownership.  The ASF licenses this file
7
+# to you under the Apache License, Version 2.0 (the
8
+# "License"); you may not use this file except in compliance
9
+# with the License.  You may obtain a copy of the License at
10
+#
11
+#    http://www.apache.org/licenses/LICENSE-2.0
12
+#
13
+# Unless required by applicable law or agreed to in writing,
14
+# software distributed under the License is distributed on an
15
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+# KIND, either express or implied.  See the License for the
17
+# specific language governing permissions and limitations
18
+# under the License.
19
+# ----------------------------------------------------------------------------
20
+
21
+# ----------------------------------------------------------------------------
22
+# Maven2 Start Up Batch script
23
+#
24
+# Required ENV vars:
25
+# ------------------
26
+#   JAVA_HOME - location of a JDK home dir
27
+#
28
+# Optional ENV vars
29
+# -----------------
30
+#   M2_HOME - location of maven2's installed home dir
31
+#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
32
+#     e.g. to debug Maven itself, use
33
+#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
34
+#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
35
+# ----------------------------------------------------------------------------
36
+
37
+if [ -z "$MAVEN_SKIP_RC" ] ; then
38
+
39
+  if [ -f /etc/mavenrc ] ; then
40
+    . /etc/mavenrc
41
+  fi
42
+
43
+  if [ -f "$HOME/.mavenrc" ] ; then
44
+    . "$HOME/.mavenrc"
45
+  fi
46
+
47
+fi
48
+
49
+# OS specific support.  $var _must_ be set to either true or false.
50
+cygwin=false;
51
+darwin=false;
52
+mingw=false
53
+case "`uname`" in
54
+  CYGWIN*) cygwin=true ;;
55
+  MINGW*) mingw=true;;
56
+  Darwin*) darwin=true
57
+    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
58
+    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
59
+    if [ -z "$JAVA_HOME" ]; then
60
+      if [ -x "/usr/libexec/java_home" ]; then
61
+        export JAVA_HOME="`/usr/libexec/java_home`"
62
+      else
63
+        export JAVA_HOME="/Library/Java/Home"
64
+      fi
65
+    fi
66
+    ;;
67
+esac
68
+
69
+if [ -z "$JAVA_HOME" ] ; then
70
+  if [ -r /etc/gentoo-release ] ; then
71
+    JAVA_HOME=`java-config --jre-home`
72
+  fi
73
+fi
74
+
75
+if [ -z "$M2_HOME" ] ; then
76
+  ## resolve links - $0 may be a link to maven's home
77
+  PRG="$0"
78
+
79
+  # need this for relative symlinks
80
+  while [ -h "$PRG" ] ; do
81
+    ls=`ls -ld "$PRG"`
82
+    link=`expr "$ls" : '.*-> \(.*\)$'`
83
+    if expr "$link" : '/.*' > /dev/null; then
84
+      PRG="$link"
85
+    else
86
+      PRG="`dirname "$PRG"`/$link"
87
+    fi
88
+  done
89
+
90
+  saveddir=`pwd`
91
+
92
+  M2_HOME=`dirname "$PRG"`/..
93
+
94
+  # make it fully qualified
95
+  M2_HOME=`cd "$M2_HOME" && pwd`
96
+
97
+  cd "$saveddir"
98
+  # echo Using m2 at $M2_HOME
99
+fi
100
+
101
+# For Cygwin, ensure paths are in UNIX format before anything is touched
102
+if $cygwin ; then
103
+  [ -n "$M2_HOME" ] &&
104
+    M2_HOME=`cygpath --unix "$M2_HOME"`
105
+  [ -n "$JAVA_HOME" ] &&
106
+    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
107
+  [ -n "$CLASSPATH" ] &&
108
+    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
109
+fi
110
+
111
+# For Migwn, ensure paths are in UNIX format before anything is touched
112
+if $mingw ; then
113
+  [ -n "$M2_HOME" ] &&
114
+    M2_HOME="`(cd "$M2_HOME"; pwd)`"
115
+  [ -n "$JAVA_HOME" ] &&
116
+    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
117
+  # TODO classpath?
118
+fi
119
+
120
+if [ -z "$JAVA_HOME" ]; then
121
+  javaExecutable="`which javac`"
122
+  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
123
+    # readlink(1) is not available as standard on Solaris 10.
124
+    readLink=`which readlink`
125
+    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
126
+      if $darwin ; then
127
+        javaHome="`dirname \"$javaExecutable\"`"
128
+        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
129
+      else
130
+        javaExecutable="`readlink -f \"$javaExecutable\"`"
131
+      fi
132
+      javaHome="`dirname \"$javaExecutable\"`"
133
+      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
134
+      JAVA_HOME="$javaHome"
135
+      export JAVA_HOME
136
+    fi
137
+  fi
138
+fi
139
+
140
+if [ -z "$JAVACMD" ] ; then
141
+  if [ -n "$JAVA_HOME"  ] ; then
142
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
143
+      # IBM's JDK on AIX uses strange locations for the executables
144
+      JAVACMD="$JAVA_HOME/jre/sh/java"
145
+    else
146
+      JAVACMD="$JAVA_HOME/bin/java"
147
+    fi
148
+  else
149
+    JAVACMD="`which java`"
150
+  fi
151
+fi
152
+
153
+if [ ! -x "$JAVACMD" ] ; then
154
+  echo "Error: JAVA_HOME is not defined correctly." >&2
155
+  echo "  We cannot execute $JAVACMD" >&2
156
+  exit 1
157
+fi
158
+
159
+if [ -z "$JAVA_HOME" ] ; then
160
+  echo "Warning: JAVA_HOME environment variable is not set."
161
+fi
162
+
163
+CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
164
+
165
+# traverses directory structure from process work directory to filesystem root
166
+# first directory with .mvn subdirectory is considered project base directory
167
+find_maven_basedir() {
168
+
169
+  if [ -z "$1" ]
170
+  then
171
+    echo "Path not specified to find_maven_basedir"
172
+    return 1
173
+  fi
174
+
175
+  basedir="$1"
176
+  wdir="$1"
177
+  while [ "$wdir" != '/' ] ; do
178
+    if [ -d "$wdir"/.mvn ] ; then
179
+      basedir=$wdir
180
+      break
181
+    fi
182
+    # workaround for JBEAP-8937 (on Solaris 10/Sparc)
183
+    if [ -d "${wdir}" ]; then
184
+      wdir=`cd "$wdir/.."; pwd`
185
+    fi
186
+    # end of workaround
187
+  done
188
+  echo "${basedir}"
189
+}
190
+
191
+# concatenates all lines of a file
192
+concat_lines() {
193
+  if [ -f "$1" ]; then
194
+    echo "$(tr -s '\n' ' ' < "$1")"
195
+  fi
196
+}
197
+
198
+BASE_DIR=`find_maven_basedir "$(pwd)"`
199
+if [ -z "$BASE_DIR" ]; then
200
+  exit 1;
201
+fi
202
+
203
+export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
204
+echo $MAVEN_PROJECTBASEDIR
205
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
206
+
207
+# For Cygwin, switch paths to Windows format before running java
208
+if $cygwin; then
209
+  [ -n "$M2_HOME" ] &&
210
+    M2_HOME=`cygpath --path --windows "$M2_HOME"`
211
+  [ -n "$JAVA_HOME" ] &&
212
+    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
213
+  [ -n "$CLASSPATH" ] &&
214
+    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
215
+  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
216
+    MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
217
+fi
218
+
219
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
220
+
221
+exec "$JAVACMD" \
222
+  $MAVEN_OPTS \
223
+  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
224
+  "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
225
+  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"

+ 143
- 0
CODE/smart-community/hardware-server/mvnw.cmd 파일 보기

@@ -0,0 +1,143 @@
1
+@REM ----------------------------------------------------------------------------
2
+@REM Licensed to the Apache Software Foundation (ASF) under one
3
+@REM or more contributor license agreements.  See the NOTICE file
4
+@REM distributed with this work for additional information
5
+@REM regarding copyright ownership.  The ASF licenses this file
6
+@REM to you under the Apache License, Version 2.0 (the
7
+@REM "License"); you may not use this file except in compliance
8
+@REM with the License.  You may obtain a copy of the License at
9
+@REM
10
+@REM    http://www.apache.org/licenses/LICENSE-2.0
11
+@REM
12
+@REM Unless required by applicable law or agreed to in writing,
13
+@REM software distributed under the License is distributed on an
14
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+@REM KIND, either express or implied.  See the License for the
16
+@REM specific language governing permissions and limitations
17
+@REM under the License.
18
+@REM ----------------------------------------------------------------------------
19
+
20
+@REM ----------------------------------------------------------------------------
21
+@REM Maven2 Start Up Batch script
22
+@REM
23
+@REM Required ENV vars:
24
+@REM JAVA_HOME - location of a JDK home dir
25
+@REM
26
+@REM Optional ENV vars
27
+@REM M2_HOME - location of maven2's installed home dir
28
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
29
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
30
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
31
+@REM     e.g. to debug Maven itself, use
32
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
33
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
34
+@REM ----------------------------------------------------------------------------
35
+
36
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
37
+@echo off
38
+@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
39
+@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
40
+
41
+@REM set %HOME% to equivalent of $HOME
42
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
43
+
44
+@REM Execute a user defined script before this one
45
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
46
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
47
+if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
48
+if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
49
+:skipRcPre
50
+
51
+@setlocal
52
+
53
+set ERROR_CODE=0
54
+
55
+@REM To isolate internal variables from possible post scripts, we use another setlocal
56
+@setlocal
57
+
58
+@REM ==== START VALIDATION ====
59
+if not "%JAVA_HOME%" == "" goto OkJHome
60
+
61
+echo.
62
+echo Error: JAVA_HOME not found in your environment. >&2
63
+echo Please set the JAVA_HOME variable in your environment to match the >&2
64
+echo location of your Java installation. >&2
65
+echo.
66
+goto error
67
+
68
+:OkJHome
69
+if exist "%JAVA_HOME%\bin\java.exe" goto init
70
+
71
+echo.
72
+echo Error: JAVA_HOME is set to an invalid directory. >&2
73
+echo JAVA_HOME = "%JAVA_HOME%" >&2
74
+echo Please set the JAVA_HOME variable in your environment to match the >&2
75
+echo location of your Java installation. >&2
76
+echo.
77
+goto error
78
+
79
+@REM ==== END VALIDATION ====
80
+
81
+:init
82
+
83
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
84
+@REM Fallback to current working directory if not found.
85
+
86
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
87
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
88
+
89
+set EXEC_DIR=%CD%
90
+set WDIR=%EXEC_DIR%
91
+:findBaseDir
92
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
93
+cd ..
94
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
95
+set WDIR=%CD%
96
+goto findBaseDir
97
+
98
+:baseDirFound
99
+set MAVEN_PROJECTBASEDIR=%WDIR%
100
+cd "%EXEC_DIR%"
101
+goto endDetectBaseDir
102
+
103
+:baseDirNotFound
104
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
105
+cd "%EXEC_DIR%"
106
+
107
+:endDetectBaseDir
108
+
109
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
110
+
111
+@setlocal EnableExtensions EnableDelayedExpansion
112
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
113
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
114
+
115
+:endReadAdditionalConfig
116
+
117
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
118
+
119
+set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
120
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
121
+
122
+%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
123
+if ERRORLEVEL 1 goto error
124
+goto end
125
+
126
+:error
127
+set ERROR_CODE=1
128
+
129
+:end
130
+@endlocal & set ERROR_CODE=%ERROR_CODE%
131
+
132
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
133
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
134
+if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
135
+if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
136
+:skipRcPost
137
+
138
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
139
+if "%MAVEN_BATCH_PAUSE%" == "on" pause
140
+
141
+if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
142
+
143
+exit /B %ERROR_CODE%

+ 245
- 0
CODE/smart-community/hardware-server/pom.xml 파일 보기

@@ -0,0 +1,245 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4
+	<modelVersion>4.0.0</modelVersion>
5
+
6
+	<groupId>com.community</groupId>
7
+	<artifactId>hardware-server</artifactId>
8
+	<version>0.0.1</version>
9
+	<packaging>jar</packaging>
10
+
11
+	<name>hardware-server</name>
12
+	<description>hardware-server</description>
13
+
14
+	<parent>
15
+		<groupId>com.community</groupId>
16
+		<artifactId>smart-community</artifactId>
17
+		<version>0.0.1</version>
18
+	</parent>
19
+
20
+	<properties>
21
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
22
+		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
23
+		<java.version>1.8</java.version>
24
+		<spring-cloud.version>Finchley.SR1</spring-cloud.version>
25
+	</properties>
26
+
27
+	<dependencies>
28
+
29
+		<dependency>
30
+			<groupId>com.google.zxing</groupId>
31
+			<artifactId>javase</artifactId>
32
+			<version>3.0.0</version>
33
+		</dependency>
34
+
35
+		<dependency>
36
+			<groupId>junit</groupId>
37
+			<artifactId>junit</artifactId>
38
+			<version>4.10</version>
39
+		</dependency>
40
+
41
+		<dependency>
42
+			<groupId>com.alibaba</groupId>
43
+			<artifactId>fastjson</artifactId>
44
+			<version>1.1.29</version>
45
+		</dependency>
46
+
47
+		<dependency>
48
+			<groupId>org.springframework.boot</groupId>
49
+			<artifactId>spring-boot-starter-web</artifactId>
50
+		</dependency>
51
+
52
+		<dependency>
53
+			<groupId>org.springframework.cloud</groupId>
54
+			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
55
+		</dependency>
56
+
57
+		<dependency>
58
+			<groupId>org.springframework.cloud</groupId>
59
+			<artifactId>spring-cloud-starter-openfeign</artifactId>
60
+		</dependency>
61
+
62
+		<dependency>
63
+			<groupId>io.springfox</groupId>
64
+			<artifactId>springfox-swagger2</artifactId>
65
+			<version>2.7.0</version>
66
+		</dependency>
67
+
68
+		<dependency>
69
+			<groupId>io.springfox</groupId>
70
+			<artifactId>springfox-swagger-ui</artifactId>
71
+			<version>2.7.0</version>
72
+		</dependency>
73
+
74
+		<dependency>
75
+			<groupId>org.springframework.cloud</groupId>
76
+			<artifactId>spring-cloud-starter-config</artifactId>
77
+		</dependency>
78
+
79
+		<dependency>
80
+			<groupId>org.springframework.boot</groupId>
81
+			<artifactId>spring-boot-starter-actuator</artifactId>
82
+		</dependency>
83
+
84
+		<dependency>
85
+			<groupId>mysql</groupId>
86
+			<artifactId>mysql-connector-java</artifactId>
87
+			<scope>runtime</scope>
88
+		</dependency>
89
+
90
+		<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
91
+		<dependency>
92
+			<groupId>org.projectlombok</groupId>
93
+			<artifactId>lombok</artifactId>
94
+			<version>1.18.2</version>
95
+			<scope>provided</scope>
96
+		</dependency>
97
+
98
+		<dependency>
99
+			<groupId>org.springframework.boot</groupId>
100
+			<artifactId>spring-boot-starter-test</artifactId>
101
+			<scope>test</scope>
102
+		</dependency>
103
+
104
+		<dependency>
105
+			<groupId>com.community</groupId>
106
+			<artifactId>community-common</artifactId>
107
+			<version>0.0.1</version>
108
+			<scope>compile</scope>
109
+		</dependency>
110
+
111
+		<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
112
+		<dependency>
113
+			<groupId>org.projectlombok</groupId>
114
+			<artifactId>lombok</artifactId>
115
+			<version>1.18.2</version>
116
+			<scope>provided</scope>
117
+		</dependency>
118
+
119
+		<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
120
+		<dependency>
121
+			<groupId>com.google.guava</groupId>
122
+			<artifactId>guava</artifactId>
123
+			<version>26.0-jre</version>
124
+		</dependency>
125
+
126
+		<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
127
+		<dependency>
128
+			<groupId>org.apache.commons</groupId>
129
+			<artifactId>commons-lang3</artifactId>
130
+			<version>3.8.1</version>
131
+		</dependency>
132
+
133
+		<!-- https://mvnrepository.com/artifact/commons-lang/commons-lang -->
134
+		<dependency>
135
+			<groupId>commons-lang</groupId>
136
+			<artifactId>commons-lang</artifactId>
137
+			<version>2.6</version>
138
+		</dependency>
139
+
140
+		<!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp -->
141
+		<dependency>
142
+			<groupId>com.squareup.okhttp3</groupId>
143
+			<artifactId>okhttp</artifactId>
144
+			<version>3.11.0</version>
145
+		</dependency>
146
+        <dependency>
147
+            <groupId>org.springframework</groupId>
148
+            <artifactId>spring-test</artifactId>
149
+            <version>5.1.3.RELEASE</version>
150
+            <scope>compile</scope>
151
+        </dependency>
152
+
153
+		<!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
154
+		<dependency>
155
+			<groupId>com.alibaba</groupId>
156
+			<artifactId>easyexcel</artifactId>
157
+			<version>1.1.2-beat1</version>
158
+		</dependency>
159
+        <dependency>
160
+            <groupId>com.alibaba</groupId>
161
+            <artifactId>fastjson</artifactId>
162
+            <version>1.2.56</version>
163
+            <scope>compile</scope>
164
+        </dependency>
165
+
166
+		<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
167
+		<dependency>
168
+			<groupId>com.alibaba</groupId>
169
+			<artifactId>fastjson</artifactId>
170
+			<version>1.2.56</version>
171
+		</dependency>
172
+        <dependency>
173
+            <groupId>com.google.guava</groupId>
174
+            <artifactId>guava</artifactId>
175
+            <version>27.1-jre</version>
176
+            <scope>compile</scope>
177
+        </dependency>
178
+
179
+		<!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
180
+		<dependency>
181
+			<groupId>commons-codec</groupId>
182
+			<artifactId>commons-codec</artifactId>
183
+			<version>1.10</version>
184
+		</dependency>
185
+
186
+		<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-aop -->
187
+		<dependency>
188
+			<groupId>org.springframework.boot</groupId>
189
+			<artifactId>spring-boot-starter-aop</artifactId>
190
+			<version>2.0.4.RELEASE</version>
191
+		</dependency>
192
+
193
+
194
+	</dependencies>
195
+
196
+	<dependencyManagement>
197
+		<dependencies>
198
+			<dependency>
199
+				<groupId>org.springframework.cloud</groupId>
200
+				<artifactId>spring-cloud-dependencies</artifactId>
201
+				<version>${spring-cloud.version}</version>
202
+				<type>pom</type>
203
+				<scope>import</scope>
204
+			</dependency>
205
+		</dependencies>
206
+	</dependencyManagement>
207
+
208
+	<build>
209
+		<plugins>
210
+			<plugin>
211
+				<groupId>org.springframework.boot</groupId>
212
+				<artifactId>spring-boot-maven-plugin</artifactId>
213
+			</plugin>
214
+			<!--服务化打包工具-->
215
+			<plugin>
216
+				<groupId>org.apache.maven.plugins</groupId>
217
+				<artifactId>maven-assembly-plugin</artifactId>
218
+				<configuration>
219
+					<descriptors>
220
+						<descriptor>src/main/assembly/assembly.xml</descriptor>
221
+					</descriptors>
222
+				</configuration>
223
+				<executions>
224
+					<execution>
225
+						<id>make-assembly</id>
226
+						<phase>package</phase>
227
+						<goals>
228
+							<goal>single</goal>
229
+						</goals>
230
+					</execution>
231
+				</executions>
232
+			</plugin>
233
+			<plugin>
234
+				<groupId>org.apache.maven.plugins</groupId>
235
+				<artifactId>maven-surefire-plugin</artifactId>
236
+				<version>2.4.2</version>
237
+				<configuration>
238
+					<skipTests>true</skipTests>
239
+				</configuration>
240
+			</plugin>
241
+		</plugins>
242
+	</build>
243
+
244
+
245
+</project>

+ 30
- 0
CODE/smart-community/hardware-server/src/main/assembly/assembly.xml 파일 보기

@@ -0,0 +1,30 @@
1
+<assembly>
2
+    <id>assembly</id>
3
+    <formats>
4
+        <format>tar.gz</format>
5
+    </formats>
6
+    <includeBaseDirectory>true</includeBaseDirectory>
7
+    <fileSets>
8
+        <fileSet>
9
+            <directory>src/main/assembly/bin</directory>
10
+            <outputDirectory>bin</outputDirectory>
11
+            <fileMode>0755</fileMode>
12
+        </fileSet>
13
+        <fileSet>
14
+            <directory>target/classes</directory>
15
+            <outputDirectory>conf</outputDirectory>
16
+            <includes>
17
+                <include>META-INF/**</include>
18
+                <include>*.yml</include>
19
+                <include>conf/**</include>
20
+            </includes>
21
+            <fileMode>0755</fileMode>
22
+        </fileSet>
23
+    </fileSets>
24
+    <dependencySets>
25
+        <dependencySet>
26
+            <useProjectArtifact>true</useProjectArtifact>
27
+            <outputDirectory>lib</outputDirectory>
28
+        </dependencySet>
29
+    </dependencySets>
30
+</assembly>

+ 86
- 0
CODE/smart-community/hardware-server/src/main/assembly/bin/start.sh 파일 보기

@@ -0,0 +1,86 @@
1
+#!/bin/bash
2
+
3
+SERVER_NAME='hardware-server'
4
+# jar名称
5
+JAR_NAME='hardware-server-0.0.1.jar'
6
+cd `dirname $0`
7
+BIN_DIR=`pwd`
8
+cd ..
9
+DEPLOY_DIR=`pwd`
10
+CONF_DIR=$DEPLOY_DIR/conf
11
+# 获取应用的端口号
12
+SERVER_PORT=`sed -nr '/port: [0-9]+/ s/.*port: +([0-9]+).*/\1/p' conf/bootstrap.yml`
13
+
14
+PIDS=`ps -f | grep java | grep "$CONF_DIR" |awk '{print $2}'`
15
+if [ "$1" = "status" ]; then
16
+    if [ -n "$PIDS" ]; then
17
+        echo "The $SERVER_NAME is running...!"
18
+        echo "PID: $PIDS"
19
+        exit 0
20
+    else
21
+        echo "The $SERVER_NAME is stopped"
22
+        exit 0
23
+    fi
24
+fi
25
+
26
+if [ -n "$PIDS" ]; then
27
+    echo "ERROR: The $SERVER_NAME already started!"
28
+    echo "PID: $PIDS"
29
+    exit 1
30
+fi
31
+
32
+if [ -n "$SERVER_PORT" ]; then
33
+    SERVER_PORT_COUNT=`netstat -tln | grep $SERVER_PORT | wc -l`
34
+    if [ $SERVER_PORT_COUNT -gt 0 ]; then
35
+        echo "ERROR: The $SERVER_NAME port $SERVER_PORT already used!"
36
+        exit 1
37
+    fi
38
+fi
39
+
40
+LOGS_DIR=$DEPLOY_DIR/logs
41
+if [ ! -d $LOGS_DIR ]; then
42
+    mkdir $LOGS_DIR
43
+fi
44
+STDOUT_FILE=$LOGS_DIR/stdout.log
45
+
46
+JAVA_OPTS=" -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true "
47
+JAVA_DEBUG_OPTS=""
48
+if [ "$1" = "debug" ]; then
49
+    JAVA_DEBUG_OPTS=" -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n "
50
+fi
51
+
52
+JAVA_JMX_OPTS=""
53
+if [ "$1" = "jmx" ]; then
54
+    JAVA_JMX_OPTS=" -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false "
55
+fi
56
+
57
+JAVA_MEM_OPTS=""
58
+BITS=`java -version 2>&1 | grep -i 64-bit`
59
+if [ -n "$BITS" ]; then
60
+    JAVA_MEM_OPTS=" -server -Xmx512m -Xms512m -Xmn256m -XX:PermSize=128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 "
61
+else
62
+    JAVA_MEM_OPTS=" -server -Xms512m -Xmx512m -XX:PermSize=128m -XX:SurvivorRatio=2 -XX:+UseParallelGC "
63
+fi
64
+
65
+CONFIG_FILES=" -Dspring.config.location=$CONF_DIR/ "
66
+echo -e "Starting the $SERVER_NAME ..."
67
+nohup java $JAVA_OPTS $JAVA_MEM_OPTS $JAVA_DEBUG_OPTS $JAVA_JMX_OPTS $CONFIG_FILES -jar $DEPLOY_DIR/lib/$JAR_NAME > $STDOUT_FILE 2>&1 &
68
+
69
+COUNT=0
70
+while [ $COUNT -lt 1 ]; do
71
+    echo -e ".\c"
72
+    sleep 1
73
+    if [ -n "$SERVER_PORT" ]; then
74
+        COUNT=`netstat -an | grep $SERVER_PORT | wc -l`
75
+    else
76
+        COUNT=`ps -f | grep java | grep "$DEPLOY_DIR" | awk '{print $2}' | wc -l`
77
+    fi
78
+    if [ $COUNT -gt 0 ]; then
79
+        break
80
+    fi
81
+done
82
+
83
+echo "OK!"
84
+PIDS=`ps -f | grep java | grep "$DEPLOY_DIR" | awk '{print $2}'`
85
+echo "PID: $PIDS"
86
+echo "STDOUT: $STDOUT_FILE"

+ 44
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/HardwareApplication.java 파일 보기

@@ -0,0 +1,44 @@
1
+package com.community.huiju;
2
+
3
+import com.alibaba.fastjson.serializer.SerializerFeature;
4
+import com.alibaba.fastjson.support.config.FastJsonConfig;
5
+import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
6
+
7
+import org.springframework.boot.SpringApplication;
8
+import org.springframework.boot.autoconfigure.SpringBootApplication;
9
+import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
10
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
11
+import org.springframework.cloud.openfeign.EnableFeignClients;
12
+import org.springframework.context.annotation.Bean;
13
+
14
+
15
+@EnableDiscoveryClient
16
+@SpringBootApplication
17
+@EnableFeignClients
18
+public class HardwareApplication {
19
+
20
+	public static void main(String[] args) {
21
+		SpringApplication.run(HardwareApplication.class, args);
22
+	}
23
+
24
+	@Bean
25
+	public HttpMessageConverters fastJsonConfigure(){
26
+		FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
27
+		FastJsonConfig fastJsonConfig = new FastJsonConfig();
28
+		fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat,SerializerFeature.DisableCircularReferenceDetect,SerializerFeature.WriteMapNullValue);
29
+		//日期格式化
30
+		//fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
31
+		converter.setFastJsonConfig(fastJsonConfig);
32
+		return new HttpMessageConverters(converter);
33
+	}
34
+
35
+	/**
36
+	 * 文件上传临时路径
37
+	 */
38
+	//@Bean
39
+	//public MultipartConfigElement multipartConfigElement() {
40
+	//	MultipartConfigFactory factory = new MultipartConfigFactory();
41
+	//	factory.setLocation("/tmp/smart-community");
42
+	//	return factory.createMultipartConfig();
43
+	//}
44
+}

+ 40
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/Swagger2.java 파일 보기

@@ -0,0 +1,40 @@
1
+package com.community.huiju;
2
+
3
+import org.springframework.context.annotation.Bean;
4
+import org.springframework.context.annotation.Configuration;
5
+import springfox.documentation.builders.ApiInfoBuilder;
6
+import springfox.documentation.builders.PathSelectors;
7
+import springfox.documentation.builders.RequestHandlerSelectors;
8
+import springfox.documentation.service.ApiInfo;
9
+import springfox.documentation.service.Contact;
10
+import springfox.documentation.spi.DocumentationType;
11
+import springfox.documentation.spring.web.plugins.Docket;
12
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
13
+
14
+/**
15
+ * @author FXF
16
+ * @date 2018-09-27
17
+ */
18
+@Configuration
19
+@EnableSwagger2
20
+public class Swagger2 {
21
+    @Bean
22
+    public Docket docket(){
23
+        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()
24
+                .apis(RequestHandlerSelectors.basePackage("com.community.huiju.controller"))
25
+                .paths(PathSelectors.any()).build();
26
+    }
27
+    //构建api文档的详细信息函数
28
+    private ApiInfo apiInfo(){
29
+        return new ApiInfoBuilder()
30
+                //页面标题
31
+                .title("物业端 的 RESTful API")
32
+                //创建人
33
+                .contact(new Contact("fuxingfan","","fuxingfan@dingtalk.com"))
34
+                //版本号
35
+                .version("1.0")
36
+                //描述
37
+                .description("API 描述")
38
+                .build();
39
+    }
40
+}

+ 268
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/base/api/fushi/Base64.java 파일 보기

@@ -0,0 +1,268 @@
1
+package com.community.huiju.base.api.fushi;
2
+
3
+public final class Base64 {
4
+
5
+	private static final int BASELENGTH = 128;
6
+	private static final int LOOKUPLENGTH = 64;
7
+	private static final int TWENTYFOURBITGROUP = 24;
8
+	private static final int EIGHTBIT = 8;
9
+	private static final int SIXTEENBIT = 16;
10
+	private static final int FOURBYTE = 4;
11
+	private static final int SIGN = -128;
12
+	private static char PAD = '=';
13
+	private static byte[] base64Alphabet = new byte[BASELENGTH];
14
+	private static char[] lookUpBase64Alphabet = new char[LOOKUPLENGTH];
15
+
16
+	static {
17
+		for (int i = 0; i < BASELENGTH; ++i) {
18
+			base64Alphabet[i] = -1;
19
+		}
20
+		for (int i = 'Z'; i >= 'A'; i--) {
21
+			base64Alphabet[i] = (byte) (i - 'A');
22
+		}
23
+		for (int i = 'z'; i >= 'a'; i--) {
24
+			base64Alphabet[i] = (byte) (i - 'a' + 26);
25
+		}
26
+
27
+		for (int i = '9'; i >= '0'; i--) {
28
+			base64Alphabet[i] = (byte) (i - '0' + 52);
29
+		}
30
+
31
+		base64Alphabet['+'] = 62;
32
+		base64Alphabet['/'] = 63;
33
+
34
+		for (int i = 0; i <= 25; i++) {
35
+			lookUpBase64Alphabet[i] = (char) ('A' + i);
36
+		}
37
+
38
+		for (int i = 26, j = 0; i <= 51; i++, j++) {
39
+			lookUpBase64Alphabet[i] = (char) ('a' + j);
40
+		}
41
+
42
+		for (int i = 52, j = 0; i <= 61; i++, j++) {
43
+			lookUpBase64Alphabet[i] = (char) ('0' + j);
44
+		}
45
+		lookUpBase64Alphabet[62] = (char) '+';
46
+		lookUpBase64Alphabet[63] = (char) '/';
47
+
48
+	}
49
+
50
+	private static boolean isWhiteSpace(char octect) {
51
+		return (octect == 0x20 || octect == 0xd || octect == 0xa || octect == 0x9);
52
+	}
53
+
54
+	private static boolean isPad(char octect) {
55
+		return (octect == PAD);
56
+	}
57
+
58
+	private static boolean isData(char octect) {
59
+		return (octect < BASELENGTH && base64Alphabet[octect] != -1);
60
+	}
61
+
62
+	/**
63
+	 * Encodes hex octects into Base64
64
+	 * 
65
+	 * @param binaryData
66
+	 *            Array containing binaryData
67
+	 * @return Encoded Base64 array
68
+	 */
69
+	public static String encode(byte[] binaryData) {
70
+
71
+		if (binaryData == null) {
72
+			return null;
73
+		}
74
+
75
+		int lengthDataBits = binaryData.length * EIGHTBIT;
76
+		if (lengthDataBits == 0) {
77
+			return "";
78
+		}
79
+
80
+		int fewerThan24bits = lengthDataBits % TWENTYFOURBITGROUP;
81
+		int numberTriplets = lengthDataBits / TWENTYFOURBITGROUP;
82
+		int numberQuartet = fewerThan24bits != 0 ? numberTriplets + 1
83
+				: numberTriplets;
84
+		char encodedData[] = null;
85
+
86
+		encodedData = new char[numberQuartet * 4];
87
+
88
+		byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0;
89
+
90
+		int encodedIndex = 0;
91
+		int dataIndex = 0;
92
+
93
+		for (int i = 0; i < numberTriplets; i++) {
94
+			b1 = binaryData[dataIndex++];
95
+			b2 = binaryData[dataIndex++];
96
+			b3 = binaryData[dataIndex++];
97
+
98
+			l = (byte) (b2 & 0x0f);
99
+			k = (byte) (b1 & 0x03);
100
+
101
+			byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2)
102
+					: (byte) ((b1) >> 2 ^ 0xc0);
103
+			byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4)
104
+					: (byte) ((b2) >> 4 ^ 0xf0);
105
+			byte val3 = ((b3 & SIGN) == 0) ? (byte) (b3 >> 6)
106
+					: (byte) ((b3) >> 6 ^ 0xfc);
107
+
108
+			encodedData[encodedIndex++] = lookUpBase64Alphabet[val1];
109
+			encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)];
110
+			encodedData[encodedIndex++] = lookUpBase64Alphabet[(l << 2) | val3];
111
+			encodedData[encodedIndex++] = lookUpBase64Alphabet[b3 & 0x3f];
112
+		}
113
+
114
+		// form integral number of 6-bit groups
115
+		if (fewerThan24bits == EIGHTBIT) {
116
+			b1 = binaryData[dataIndex];
117
+			k = (byte) (b1 & 0x03);
118
+			
119
+			byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2)
120
+					: (byte) ((b1) >> 2 ^ 0xc0);
121
+			encodedData[encodedIndex++] = lookUpBase64Alphabet[val1];
122
+			encodedData[encodedIndex++] = lookUpBase64Alphabet[k << 4];
123
+			encodedData[encodedIndex++] = PAD;
124
+			encodedData[encodedIndex++] = PAD;
125
+		} else if (fewerThan24bits == SIXTEENBIT) {
126
+			b1 = binaryData[dataIndex];
127
+			b2 = binaryData[dataIndex + 1];
128
+			l = (byte) (b2 & 0x0f);
129
+			k = (byte) (b1 & 0x03);
130
+
131
+			byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2)
132
+					: (byte) ((b1) >> 2 ^ 0xc0);
133
+			byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4)
134
+					: (byte) ((b2) >> 4 ^ 0xf0);
135
+
136
+			encodedData[encodedIndex++] = lookUpBase64Alphabet[val1];
137
+			encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)];
138
+			encodedData[encodedIndex++] = lookUpBase64Alphabet[l << 2];
139
+			encodedData[encodedIndex++] = PAD;
140
+		}
141
+
142
+		return new String(encodedData);
143
+	}
144
+
145
+	/**
146
+	 * Decodes Base64 data into octects
147
+	 * 
148
+	 * @param encoded
149
+	 *            string containing Base64 data
150
+	 * @return Array containind decoded data.
151
+	 */
152
+	public static byte[] decode(String encoded) {
153
+
154
+		if (encoded == null) {
155
+			return null;
156
+		}
157
+
158
+		char[] base64Data = encoded.toCharArray();
159
+		// remove white spaces
160
+		int len = removeWhiteSpace(base64Data);
161
+
162
+		if (len % FOURBYTE != 0) {
163
+			return null;// should be divisible by four
164
+		}
165
+
166
+		int numberQuadruple = (len / FOURBYTE);
167
+
168
+		if (numberQuadruple == 0) {
169
+			return new byte[0];
170
+		}
171
+
172
+		byte decodedData[] = null;
173
+		byte b1 = 0, b2 = 0, b3 = 0, b4 = 0;
174
+		char d1 = 0, d2 = 0, d3 = 0, d4 = 0;
175
+
176
+		int i = 0;
177
+		int encodedIndex = 0;
178
+		int dataIndex = 0;
179
+		decodedData = new byte[(numberQuadruple) * 3];
180
+
181
+		for (; i < numberQuadruple - 1; i++) {
182
+
183
+			if (!isData((d1 = base64Data[dataIndex++]))
184
+					|| !isData((d2 = base64Data[dataIndex++]))
185
+					|| !isData((d3 = base64Data[dataIndex++]))
186
+					|| !isData((d4 = base64Data[dataIndex++]))) {
187
+				return null;
188
+			}// if found "no data" just return null
189
+
190
+			b1 = base64Alphabet[d1];
191
+			b2 = base64Alphabet[d2];
192
+			b3 = base64Alphabet[d3];
193
+			b4 = base64Alphabet[d4];
194
+
195
+			decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4);
196
+			decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));
197
+			decodedData[encodedIndex++] = (byte) (b3 << 6 | b4);
198
+		}
199
+
200
+		if (!isData((d1 = base64Data[dataIndex++]))
201
+				|| !isData((d2 = base64Data[dataIndex++]))) {
202
+			return null;// if found "no data" just return null
203
+		}
204
+
205
+		b1 = base64Alphabet[d1];
206
+		b2 = base64Alphabet[d2];
207
+
208
+		d3 = base64Data[dataIndex++];
209
+		d4 = base64Data[dataIndex++];
210
+		if (!isData((d3)) || !isData((d4))) {// Check if they are PAD characters
211
+			if (isPad(d3) && isPad(d4)) {
212
+				if ((b2 & 0xf) != 0)// last 4 bits should be zero
213
+				{
214
+					return null;
215
+				}
216
+				byte[] tmp = new byte[i * 3 + 1];
217
+				System.arraycopy(decodedData, 0, tmp, 0, i * 3);
218
+				tmp[encodedIndex] = (byte) (b1 << 2 | b2 >> 4);
219
+				return tmp;
220
+			} else if (!isPad(d3) && isPad(d4)) {
221
+				b3 = base64Alphabet[d3];
222
+				if ((b3 & 0x3) != 0)// last 2 bits should be zero
223
+				{
224
+					return null;
225
+				}
226
+				byte[] tmp = new byte[i * 3 + 2];
227
+				System.arraycopy(decodedData, 0, tmp, 0, i * 3);
228
+				tmp[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4);
229
+				tmp[encodedIndex] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));
230
+				return tmp;
231
+			} else {
232
+				return null;
233
+			}
234
+		} else { // No PAD e.g 3cQl
235
+			b3 = base64Alphabet[d3];
236
+			b4 = base64Alphabet[d4];
237
+			decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4);
238
+			decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));
239
+			decodedData[encodedIndex++] = (byte) (b3 << 6 | b4);
240
+
241
+		}
242
+
243
+		return decodedData;
244
+	}
245
+
246
+	/**
247
+	 * remove WhiteSpace from MIME containing encoded Base64 data.
248
+	 * 
249
+	 * @param data
250
+	 *            the byte array of base64 data (with WS)
251
+	 * @return the new length
252
+	 */
253
+	private static int removeWhiteSpace(char[] data) {
254
+		if (data == null) {
255
+			return 0;
256
+		}
257
+
258
+		// count characters that's not whitespace
259
+		int newSize = 0;
260
+		int len = data.length;
261
+		for (int i = 0; i < len; i++) {
262
+			if (!isWhiteSpace(data[i])) {
263
+				data[newSize++] = data[i];
264
+			}
265
+		}
266
+		return newSize;
267
+	}
268
+}

+ 186
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/base/api/fushi/FuShiHttpClient.java 파일 보기

@@ -0,0 +1,186 @@
1
+package com.community.huiju.base.api.fushi;
2
+
3
+import lombok.Data;
4
+
5
+import java.io.BufferedReader;
6
+import java.io.IOException;
7
+import java.io.InputStreamReader;
8
+import java.io.OutputStream;
9
+import java.net.HttpURLConnection;
10
+import java.net.URL;
11
+import java.security.KeyFactory;
12
+import java.security.PrivateKey;
13
+import java.security.spec.PKCS8EncodedKeySpec;
14
+import java.util.Map;
15
+import java.util.SortedMap;
16
+
17
+/**
18
+ * 富士HTTP请求
19
+ * @author weiximei
20
+ */
21
+@Data
22
+public class FuShiHttpClient {
23
+//	private static String url = "http://mops-test.fujica.com.cn:8021/Api/Park/GetParkInfoByCarNo";
24
+	private String url;
25
+	private String appid;
26
+	private String appSecret;
27
+	private String privateKey;
28
+//	private String sign = "";
29
+//	private String time;
30
+
31
+    public FuShiHttpClient(String url, String appid, String appSecret, String privateKey) {
32
+        this.url = url;
33
+        this.appid = appid;
34
+        this.appSecret = appSecret;
35
+        this.privateKey = privateKey;
36
+    }
37
+
38
+    public static void main(String[] args) {
39
+//		time = getTimestamp();
40
+//		String jsonString = "{'ParkingCode':'19000100250504','CarNo':'苏A8M6B2'}";
41
+//
42
+//		TreeMap<String, String> map = new TreeMap();
43
+//		map.put("param", jsonString);
44
+//		map.put("secret", appSecret);
45
+//		map.put("timestamp", time);
46
+//		sign = signWithoutMD5(map);
47
+//		sign = sign(sign, privateKey);
48
+//
49
+//		doJsonPost(url, jsonString);
50
+	}
51
+
52
+	/**
53
+	 * POST 请求
54
+	 * @param urlPath
55
+	 * @param Json
56
+	 * @return
57
+	 */
58
+	public String doJsonPost(String urlPath, String Json, String sign, String time) {
59
+		urlPath = url + urlPath;
60
+		String result = "";
61
+		BufferedReader reader = null;
62
+		try {
63
+			URL url = new URL(urlPath);
64
+			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
65
+			conn.setRequestMethod("POST");
66
+			conn.setDoOutput(true);
67
+			conn.setDoInput(true);
68
+			conn.setUseCaches(false);
69
+			conn.setRequestProperty("Connection", "Keep-Alive");
70
+			conn.setRequestProperty("Charset", "UTF-8");
71
+			conn.setRequestProperty("appid", appid);
72
+			conn.setRequestProperty("appSecret", appSecret);
73
+			conn.setRequestProperty("sign", sign);
74
+			conn.setRequestProperty("timestamp", time);
75
+			// 设置文件类型:
76
+			conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
77
+			// 设置接收类型否则返回415错误
78
+			conn.setRequestProperty("accept", "*/*");// 此处为暴力方法设置接受所有类型,以此来防范返回415;
79
+			conn.setRequestProperty("accept", "application/json");
80
+			// 往服务器里面发送数据
81
+			if (Json != null && !("").equals(Json)) {
82
+				byte[] writebytes = Json.getBytes();
83
+				// 设置文件长度
84
+				conn.setRequestProperty("Content-Length", String.valueOf(writebytes.length));
85
+				OutputStream outwritestream = (OutputStream) conn.getOutputStream();
86
+				outwritestream.write(Json.getBytes());
87
+				outwritestream.flush();
88
+				outwritestream.close();
89
+
90
+			}
91
+			if (conn.getResponseCode() == 200) {
92
+				reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
93
+				result = reader.readLine();
94
+				// System.out.println(result);
95
+			}
96
+		} catch (Exception e) {
97
+			e.printStackTrace();
98
+		} finally {
99
+			if (reader != null) {
100
+				try {
101
+					reader.close();
102
+				} catch (IOException e) {
103
+					e.printStackTrace();
104
+				}
105
+			}
106
+		}
107
+		return result;
108
+	}
109
+
110
+    /**
111
+     * 时间戳, 取前十位
112
+     * @return
113
+     */
114
+	public String getTimestamp() {
115
+		String time = "";
116
+		long timestamp = System.currentTimeMillis();
117
+		time = String.valueOf(timestamp);
118
+		time = time.substring(0, 10);
119
+		return time;
120
+	}
121
+
122
+    /**
123
+     * MD5
124
+     * @param params
125
+     * @return
126
+     */
127
+	public String signWithoutMD5(SortedMap<String, String> params) {
128
+		String restul = "";
129
+		if (params == null) {
130
+			return restul;
131
+		}
132
+
133
+		StringBuilder sb = new StringBuilder();
134
+		for (Map.Entry<String, String> me : params.entrySet()) {
135
+
136
+			sb.append(me.getKey());
137
+			sb.append('=');
138
+			sb.append(me.getValue());
139
+			sb.append('&');
140
+
141
+		}
142
+		int lastIndexOf = sb.lastIndexOf("&");
143
+		if (lastIndexOf != -1) {
144
+			sb.deleteCharAt(lastIndexOf);
145
+		}
146
+		restul = new String(sb);
147
+
148
+		return restul;
149
+	}
150
+
151
+	private final String ALGORITHM = "RSA";
152
+	private final String SIGN_ALGORITHMS = "SHA1WithRSA";
153
+
154
+	private final String DEFAULT_CHARSET = "UTF-8";
155
+
156
+    /**
157
+     * 开始签名
158
+     * @param content
159
+     * @param privateKey
160
+     * @return
161
+     */
162
+	public String sign(String content, String privateKey) {
163
+		try {
164
+			PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(Base64.decode(privateKey));
165
+			KeyFactory keyf = KeyFactory.getInstance(ALGORITHM);
166
+
167
+			PrivateKey priKey = keyf.generatePrivate(priPKCS8);
168
+
169
+			java.security.Signature signature = java.security.Signature.getInstance(SIGN_ALGORITHMS);
170
+
171
+			signature.initSign(priKey);
172
+			signature.update(content.getBytes(DEFAULT_CHARSET));
173
+
174
+			byte[] signed = signature.sign();
175
+
176
+			return Base64.encode(signed);
177
+		} catch (Exception e) {
178
+			e.printStackTrace();
179
+		}
180
+
181
+		return null;
182
+	}
183
+
184
+
185
+
186
+}

+ 227
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/base/api/fushi/FuShiRequestAPI.java 파일 보기

@@ -0,0 +1,227 @@
1
+package com.community.huiju.base.api.fushi;
2
+
3
+import com.alibaba.fastjson.JSONObject;
4
+import com.community.huiju.base.api.fushi.error.FuShiException;
5
+import com.google.common.collect.Maps;
6
+import lombok.AllArgsConstructor;
7
+import lombok.Data;
8
+import lombok.extern.slf4j.Slf4j;
9
+
10
+import java.util.Map;
11
+import java.util.TreeMap;
12
+
13
+/**
14
+ * 富士请求 API
15
+ * @author weiximei
16
+ */
17
+@Data
18
+@Slf4j
19
+public class FuShiRequestAPI {
20
+
21
+    private FuShiHttpClient client;
22
+
23
+    public FuShiRequestAPI(FuShiHttpClient client) {
24
+        this.client = client;
25
+    }
26
+
27
+    public FuShiRequestAPI() {
28
+    }
29
+
30
+    // =======================   请求 API   =====================================
31
+
32
+    @Data
33
+    @AllArgsConstructor
34
+    public class SignBuild {
35
+        private String sign;
36
+        private String timestamp;
37
+    }
38
+
39
+    /**
40
+     * 请求签名
41
+     * @param jsonString
42
+     * @return
43
+     */
44
+    private SignBuild requestSign(String jsonString) {
45
+        String sign = "";
46
+        String timestamp = client.getTimestamp();
47
+        TreeMap<String, String> map = new TreeMap();
48
+		map.put("param", jsonString);
49
+		map.put("secret", client.getAppSecret());
50
+		map.put("timestamp", timestamp);
51
+		sign = client.signWithoutMD5(map);
52
+		sign = client.sign(sign, client.getPrivateKey());
53
+
54
+		return new SignBuild(sign, timestamp);
55
+    }
56
+
57
+    /**
58
+     * 校验code
59
+     * @param jsonString
60
+     */
61
+    private void showException(String jsonString) {
62
+        JSONObject jsonObject = JSONObject.parseObject(jsonString);
63
+        Integer messageCode = jsonObject.getInteger("MessageCode");
64
+        if (messageCode != 200) {
65
+            throw new FuShiException(messageCode, jsonObject.getString("MessageContent"));
66
+        }
67
+    }
68
+
69
+    /**
70
+     * 获取停车信息(通过车牌号)
71
+     * @return
72
+     */
73
+    public String getParkInfoByCarNo(String ParkingCode, String CarNo) {
74
+        Map<String, Object> map = Maps.newHashMap();
75
+        map.put("ParkingCode", ParkingCode);
76
+        map.put("CarNo", CarNo);
77
+        String json = JSONObject.toJSONString(map);
78
+        log.info("获取停车信息(通过车牌号)请求参数:{}", json);
79
+        SignBuild signBuild = requestSign(json);
80
+        String result = client.doJsonPost(FushiConstant.PARK_GETPARKINFOBYCARNO, json, signBuild.getSign(), signBuild.getTimestamp());
81
+        log.info("获取停车信息(通过车牌号)返回数据:{}", result);
82
+        showException(result);
83
+        return result;
84
+    }
85
+
86
+
87
+    /**
88
+     * 第三方月卡上发续费
89
+     * @param RenewDayType 续费日期类型: 3:年; 2:月; 1:日;
90
+     * @param RenewDay 续费日期数目
91
+     * @param DealNo 交易编码
92
+     * @param PayStyle 交易方式(汉字描述),例如:微信、支付宝、银联
93
+     * @param CarNo 车牌号
94
+     * @param CardNo 停车卡号
95
+     * @param ParkingCode 停车场编码
96
+     * @param RechargeAmt 充值续费金额
97
+     * @param ThirdTransactionDate 第三方交易日期
98
+     * @return
99
+     */
100
+    public String apiThirdPartyMonthCardPay(String RenewDayType, String RenewDay, String DealNo, String PayStyle, String CarNo, String ParkingCode, String CardNo, String RechargeAmt, String ThirdTransactionDate) {
101
+        Map<String, Object> map = Maps.newHashMap();
102
+        map.put("RenewDayType", RenewDayType);
103
+        map.put("RenewDay", RenewDay);
104
+        map.put("DealNo", DealNo);
105
+        map.put("PayStyle", PayStyle);
106
+        map.put("CarNo", CarNo);
107
+        map.put("ParkingCode", ParkingCode);
108
+        map.put("CardNo", CardNo);
109
+        map.put("RechargeAmt", RechargeAmt);
110
+        map.put("ThirdTransactionDate", ThirdTransactionDate);
111
+
112
+        String json = JSONObject.toJSONString(map);
113
+        log.info("第三方月卡上发续费请求参数:{}", json);
114
+        SignBuild signBuild = requestSign(json);
115
+        String result = client.doJsonPost(FushiConstant.CALCULATIONCOST_APITHIRDPARTYMONTHCARDPAY, json, signBuild.getSign(), signBuild.getTimestamp());
116
+        log.info("第三方月卡上发续费返回数据:{}", result);
117
+        showException(result);
118
+        return result;
119
+    }
120
+
121
+    /**
122
+     * 第三方临时卡上发缴费
123
+     * @param Amount 应缴金额(单位元)
124
+     * @param ActualAmount 实缴金额(单位元)
125
+     * @param DeductionAmount 抵扣金额(单位元)
126
+     * @param Reason 抵扣原因
127
+     * @param DealNo 交易编号
128
+     * @param PayStyle 交易方式(汉字描述),例如:微信、支付宝、银联
129
+     * @param CarNo 车牌号
130
+     * @param ParkingCode 停车场编码
131
+     * @param CardNo 停车卡号
132
+     * @param PayCostMachineOrderId 线下自助缴费机订单号,若不是自助缴费机缴费则该字段为空
133
+     * @param CouponList 使用的优惠券列表(JSON字符串)
134
+     *               MerchantName: 商户名称
135
+     *               CouponType: 优惠券优惠类型1全免2减免金额3减免时长4减免百分比
136
+     *               CouponValue: 对应优惠券类型的值 金额/时间/折扣
137
+     *               CouponCode: 优惠券编码
138
+     *               FavorableType: 优惠券类型1 纸质券 2 电子券 3 活动券
139
+     *               UseStatus:标识优惠券是线上或线下使用的状态 1只在线上使用 2只在线下使用 3线上线下都可以使用
140
+     *               IsAuto: 是否自动使用优惠券1是2否
141
+     *               EndTime: 截至时间
142
+     *               CouponDescribe: 优惠券描述
143
+     *               CouponName: 优惠券名称
144
+     *
145
+     *
146
+     *
147
+     * @return
148
+     */
149
+    public String apiThirdPartyTemporaryCardPay(String Amount, String ActualAmount, String DeductionAmount, String Reason, String DealNo, String PayStyle, String CarNo, String ParkingCode, String CardNo, String PayCostMachineOrderId, String CouponList) {
150
+        Map<String, Object> map = Maps.newHashMap();
151
+        map.put("Amount", Amount);
152
+        map.put("ActualAmount", ActualAmount);
153
+        map.put("DeductionAmount", DeductionAmount);
154
+        map.put("Reason", Reason);
155
+        map.put("DealNo", DealNo);
156
+        map.put("PayStyle", PayStyle);
157
+        map.put("CarNo", CarNo);
158
+        map.put("ParkingCode", ParkingCode);
159
+        map.put("CardNo", CardNo);
160
+        map.put("PayCostMachineOrderId", PayCostMachineOrderId);
161
+        map.put("CouponList", null == CouponList ? null : JSONObject.parseObject(CouponList).getInnerMap());
162
+
163
+        String json = JSONObject.toJSONString(map);
164
+        log.info("第三方临时卡上发缴费请求参数:{}", json);
165
+        SignBuild signBuild = requestSign(json);
166
+        String result = client.doJsonPost(FushiConstant.CALCULATIONCOST_APITHIRDPARTYTEMPORARYCARDPAY, json, signBuild.getSign(), signBuild.getTimestamp());
167
+        log.info("第三方临时卡上发缴费返回数据:{}", result);
168
+        showException(result);
169
+        return result;
170
+
171
+    }
172
+
173
+
174
+    /**
175
+     * 获取线下算费结果
176
+     * @return
177
+     */
178
+    public String apiGetOfflineFee(String ParkingCode, String CarNoOrCardNo) {
179
+        Map<String, Object> map = Maps.newHashMap();
180
+        map.put("ParkingCode", ParkingCode);
181
+        map.put("CarNoOrCardNo", CarNoOrCardNo);
182
+        String json = JSONObject.toJSONString(map);
183
+        log.info("获取线下算费结果 请求参数:{}", json);
184
+        SignBuild signBuild = requestSign(json);
185
+        String result = client.doJsonPost(FushiConstant.CALCULATIONCOST_APIGETOFFLINEFEE, json, signBuild.getSign(), signBuild.getTimestamp());
186
+        log.info("获取线下算费结果 返回数据:{}", result);
187
+        showException(result);
188
+        return result;
189
+    }
190
+
191
+
192
+    /**
193
+     * 获取月租车信息(通过车牌号)
194
+     * @return
195
+     */
196
+    public String parkGetMonthCardInfoByCarNo(String ParkingCode, String CarNo) {
197
+        Map<String, Object> map = Maps.newHashMap();
198
+        map.put("ParkingCode", ParkingCode);
199
+        map.put("CarNo", CarNo);
200
+        String json = JSONObject.toJSONString(map);
201
+        log.info("获取月租车信息(通过车牌号) 请求参数:{}", json);
202
+        SignBuild signBuild = requestSign(json);
203
+        String result = client.doJsonPost(FushiConstant.PARK_GETMONTHCARDINFOBYCARNO, json, signBuild.getSign(), signBuild.getTimestamp());
204
+        log.info("获取月租车信息(通过车牌号) 返回数据:{}", result);
205
+        showException(result);
206
+        return result;
207
+    }
208
+
209
+    /**
210
+     * 获取临时车信息(通过车牌号)
211
+     * @return
212
+     */
213
+    public String parkGetTempCarPaymentInfoByCarNo(String ParkingCode, String CarNo) {
214
+        Map<String, Object> map = Maps.newHashMap();
215
+        map.put("ParkingCode", ParkingCode);
216
+        map.put("CarNo", CarNo);
217
+        String json = JSONObject.toJSONString(map);
218
+        log.info("获取临时车信息(通过车牌号) 请求参数:{}", json);
219
+        SignBuild signBuild = requestSign(json);
220
+        String result = client.doJsonPost(FushiConstant.PARK_GETTEMPCARPAYMENTINFOBYCARNO, json, signBuild.getSign(), signBuild.getTimestamp());
221
+        log.info("获取临时车信息(通过车牌号) 返回数据:{}", result);
222
+        showException(result);
223
+        return result;
224
+    }
225
+
226
+
227
+}

+ 39
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/base/api/fushi/FushiConstant.java 파일 보기

@@ -0,0 +1,39 @@
1
+package com.community.huiju.base.api.fushi;
2
+
3
+/**
4
+ * 富士 API 链接定义
5
+ * @author weiximei
6
+ */
7
+public class FushiConstant {
8
+
9
+    /**
10
+     * 获取停车信息(通过车牌号)
11
+     */
12
+    public static final String PARK_GETPARKINFOBYCARNO = "/Park/GetParkInfoByCarNo";
13
+
14
+    /**
15
+     * 第三方月卡上发续费
16
+     */
17
+    public static final String CALCULATIONCOST_APITHIRDPARTYMONTHCARDPAY = "/CalculationCost/ApiThirdPartyMonthCardPay";
18
+
19
+    /**
20
+     * 第三方临时车上发缴费
21
+     */
22
+    public static final String CALCULATIONCOST_APITHIRDPARTYTEMPORARYCARDPAY = "/CalculationCost/ApiThirdPartyTemporaryCardPay";
23
+
24
+    /**
25
+     * 获取线下算费结果
26
+     */
27
+    public static final String CALCULATIONCOST_APIGETOFFLINEFEE = "/CalculationCost/ApiGetOfflineFee";
28
+
29
+    /**
30
+     * 获取月租车信息(通过车牌号)
31
+     */
32
+    public static final String PARK_GETMONTHCARDINFOBYCARNO = "/Park/GetMonthCardInfoByCarNo";
33
+
34
+    /**
35
+     * 获取临时车信息(通过车牌号)
36
+     */
37
+    public static final String PARK_GETTEMPCARPAYMENTINFOBYCARNO = "/Park/GetTempCarPaymentInfoByCarNo";
38
+
39
+}

+ 49
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/base/api/fushi/error/FuShiException.java 파일 보기

@@ -0,0 +1,49 @@
1
+package com.community.huiju.base.api.fushi.error;
2
+
3
+/**
4
+ * 富士 业务专用异常
5
+ * @author weiximei
6
+ */
7
+public class FuShiException extends RuntimeException {
8
+
9
+    private Integer code;
10
+
11
+    private String msg;
12
+
13
+    public FuShiException(Integer code, String msg, Throwable t) {
14
+        super(msg, t);
15
+        this.code = code;
16
+        this.msg = msg;
17
+    }
18
+
19
+    public FuShiException(String msg) {
20
+        super(msg);
21
+        this.msg = msg;
22
+    }
23
+
24
+    public FuShiException(Integer code, String msg) {
25
+        super(msg);
26
+        this.code = code;
27
+        this.msg = msg;
28
+    }
29
+
30
+    public FuShiException(Integer code, String msg, Object ...args) {
31
+        this(String.format(msg, args));
32
+    }
33
+
34
+    public Integer getCode() {
35
+        return code;
36
+    }
37
+
38
+    public void setCode(Integer code) {
39
+        this.code = code;
40
+    }
41
+
42
+    public String getMsg() {
43
+        return msg;
44
+    }
45
+
46
+    public void setMsg(String msg) {
47
+        this.msg = msg;
48
+    }
49
+}

+ 133
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/base/api/hk/Digests.java 파일 보기

@@ -0,0 +1,133 @@
1
+package com.community.huiju.base.api.hk;
2
+
3
+import org.apache.commons.lang3.Validate;
4
+
5
+import java.io.IOException;
6
+import java.io.InputStream;
7
+import java.io.UnsupportedEncodingException;
8
+import java.security.GeneralSecurityException;
9
+import java.security.MessageDigest;
10
+import java.security.SecureRandom;
11
+
12
+public class Digests {
13
+	private static final String SHA1 = "SHA-1";
14
+	private static final String MD5 = "MD5";
15
+	private static SecureRandom random = new SecureRandom();
16
+	
17
+	public Digests() {
18
+	}
19
+	
20
+	public static byte[] md5(byte[] input) {
21
+		return digest(input, "MD5", (byte[])null, 1);
22
+	}
23
+	
24
+	public static byte[] md5(byte[] input, int iterations) {
25
+		return digest(input, "MD5", (byte[])null, iterations);
26
+	}
27
+	
28
+	public static byte[] sha1(byte[] input) {
29
+		return digest(input, "SHA-1", (byte[])null, 1);
30
+	}
31
+	
32
+	public static byte[] sha1(byte[] input, byte[] salt) {
33
+		return digest(input, "SHA-1", salt, 1);
34
+	}
35
+	
36
+	public static byte[] sha1(byte[] input, byte[] salt, int iterations) {
37
+		return digest(input, "SHA-1", salt, iterations);
38
+	}
39
+	
40
+	private static byte[] digest(byte[] input, String algorithm, byte[] salt, int iterations) {
41
+		try {
42
+			MessageDigest digest = MessageDigest.getInstance(algorithm);
43
+			if (salt != null) {
44
+				digest.update(salt);
45
+			}
46
+			
47
+			byte[] result = digest.digest(input);
48
+			
49
+			for(int i = 1; i < iterations; ++i) {
50
+				digest.reset();
51
+				result = digest.digest(result);
52
+			}
53
+			
54
+			return result;
55
+		} catch (GeneralSecurityException var7) {
56
+			throw new RuntimeException(var7);
57
+		}
58
+	}
59
+	
60
+	public static byte[] generateSalt(int numBytes) {
61
+		Validate.isTrue(numBytes > 0, "numBytes argument must be a positive integer (1 or larger)", (long)numBytes);
62
+		byte[] bytes = new byte[numBytes];
63
+		random.nextBytes(bytes);
64
+		return bytes;
65
+	}
66
+	
67
+	public static byte[] md5(InputStream input) throws IOException {
68
+		return digest(input, "MD5");
69
+	}
70
+	
71
+	public static byte[] sha1(InputStream input) throws IOException {
72
+		return digest(input, "SHA-1");
73
+	}
74
+	
75
+	private static byte[] digest(InputStream input, String algorithm) throws IOException {
76
+		try {
77
+			MessageDigest messageDigest = MessageDigest.getInstance(algorithm);
78
+			int bufferLength = 8192;
79
+			byte[] buffer = new byte[bufferLength];
80
+			
81
+			for(int read = input.read(buffer, 0, bufferLength); read > -1; read = input.read(buffer, 0, bufferLength)) {
82
+				messageDigest.update(buffer, 0, read);
83
+			}
84
+			
85
+			return messageDigest.digest();
86
+		} catch (GeneralSecurityException var6) {
87
+			throw new RuntimeException(var6);
88
+		}
89
+	}
90
+	
91
+	public static final String md5(String s) {
92
+		char[] hexDigits = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
93
+		
94
+		try {
95
+			MessageDigest mdTemp = MessageDigest.getInstance("MD5");
96
+			
97
+			try {
98
+				mdTemp.update(s.getBytes("UTF-8"));
99
+			} catch (UnsupportedEncodingException var9) {
100
+				mdTemp.update(s.getBytes());
101
+			}
102
+			
103
+			byte[] md = mdTemp.digest();
104
+			int j = md.length;
105
+			char[] str = new char[j * 2];
106
+			int k = 0;
107
+			
108
+			for(int i = 0; i < j; ++i) {
109
+				byte byte0 = md[i];
110
+				str[k++] = hexDigits[byte0 >>> 4 & 15];
111
+				str[k++] = hexDigits[byte0 & 15];
112
+			}
113
+			
114
+			return (new String(str)).toUpperCase();
115
+		} catch (Exception var10) {
116
+			return null;
117
+		}
118
+	}
119
+	
120
+	public static final String buildToken(String url, String paramJson, String secret) {
121
+		String tempUrl = null;
122
+		if (url.contains("https://")) {
123
+			tempUrl = url.substring("https://".length());
124
+		} else {
125
+			tempUrl = url.substring("http://".length());
126
+		}
127
+		
128
+		int index = tempUrl.indexOf("/");
129
+		String URI = tempUrl.substring(index);
130
+		String[] ss = URI.split("\\?");
131
+		return ss.length > 1 ? md5(ss[0] + ss[1] + secret) : md5(ss[0] + paramJson + secret);
132
+	}
133
+}

+ 219
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/base/api/hk/HKConstant.java 파일 보기

@@ -0,0 +1,219 @@
1
+package com.community.huiju.base.api.hk;
2
+
3
+public class HKConstant {
4
+
5
+    /**
6
+     * APPKEY需要到部署的平台服务器上生成。
7
+     * <p>
8
+     * 调用Openpai的操作码,需要去平台上生成,详见《海康威视iVMS-8700平台SDKV2.*.* HTTP-OpenAPI使用说明书.chm》中[获取AppKey和Secret]章节说明
9
+     * </p>
10
+     * <p>
11
+     * 《海康威视iVMS-8700平台SDKV2.*.* HTTP-OpenAPI使用说明书.chm》 该文档请找技术支持或者交付的同事提供
12
+     * </p>
13
+     */
14
+    public static final String APPKEY = "b4434b13";
15
+
16
+    /**
17
+     * SECRET需要到部署的平台服务器上生成。
18
+     * <p>
19
+     * 调用Openpai的操作码,需要去平台上生成,详见《海康威视iVMS-8700平台SDKV2.*.* HTTP-OpenAPI使用说明书.chm》中[获取AppKey和Secret]章节说明
20
+     * </p>
21
+     * <p>
22
+     * 《海康威视iVMS-8700平台SDKV2.*.* HTTP-OpenAPI使用说明书.chm》 该文档请找技术支持或者交付的同事提供
23
+     * </p>
24
+     */
25
+    public static final String SECRET = "64a1f32d53784ce2a34bd81822db1b91";
26
+
27
+
28
+    /**
29
+     * http请求地址
30
+     * <p>openapi的地址,默认情况下openapi的IP端口与基础应用的IP端口是一致的</p>
31
+     * <p>请将地址配置正确.</p>
32
+     * <p>默认情况下是127.0.0.1:80 ,如果地址不通请根据实际情况修改IP端口</p>
33
+     */
34
+   // public static final String OPENAPI_IP_PORT_HTTP = "http://192.168.0.122";
35
+    //  public static final String OPENAPI_IP_PORT_HTTPS = "http://192.168.0.122";
36
+    //public static final String OPENAPI_IP_PORT_HTTP = "http://huiju.ngrok.xiaomiqiu.cn";
37
+    public static final String OPENAPI_IP_PORT_HTTP = "http://222.190.241.190:888";
38
+    // public static final String OPENAPI_IP_PORT_HTTP = "192.168.10.200";
39
+
40
+    /**
41
+     * <p>操作用户UUID,即用户UUID,首次使用操作用户UUID可以通过接口 [获取默认用户UUID]来获取</p>
42
+     * <p>也可以通过接口[分页获取用户]来获取</p>
43
+     */
44
+
45
+    /**
46
+     * 获取默认用户UUID的接口地址,此地址可以从《海康威视iVMS-8700平台SDKV2.*.* HTTP-OpenAPI使用说明书.chm》中具体的接口说明上获取
47
+     */
48
+    public static final String ITF_ADDRESS_GET_DEFAULT_USER_UUID = "/openapi/service/base/user/getDefaultUserUuid";
49
+
50
+    /**
51
+     * 分页获取监控点信息的接口地址,此地址可以从《海康威视iVMS-8700平台SDKV2.*.* HTTP-OpenAPI使用说明书.chm》中具体的接口说明上获取
52
+     */
53
+    public static final String ITF_ADDRESS_GET_CAMERAS = "/openapi/service/vss/res/getCameras";
54
+
55
+    /**
56
+     * 操作用户的UUID
57
+     */
58
+    public static final String OP_USER_UUID = "5b2eb534696b11e89c2e438f92627767";
59
+
60
+    /**--主要是推送图片到海康
61
+     * 通过此接口将人员名单添加到指定的人员分组当中,此接口适合一次添加一个人员,如果需要批量添加可以使用平台上自带的图片压缩包的方式批量添加。
62
+     */
63
+    public  static  final  String OP_IMG="/openapi/service/fas/personInfo/addPersonInfoIntoGroup";
64
+
65
+    public static final String ITF_MONITORY_POINT = "/openapi/service/vss/res/getCamerasEx";
66
+    
67
+    /**
68
+     * 根据区域UUID集获取门禁点
69
+     */
70
+    public static final String DOORS_BY_REGION_UUIDS = "/openapi/service/acs/res/getDoorsByRegionUuids";
71
+    
72
+    /**
73
+     * 根据人员ID集添加权限
74
+     */
75
+    public static final String ADD_AUTHORITIES_BY_PERSONIDS = "/openapi/service/acs/auth/addAuthoritiesByPersonIds";
76
+    
77
+    /**
78
+     * 根据设备UUID集异动下载门禁权限
79
+     */
80
+    public static final String DOWNLOAD_AUTHORITY_BY_DEVICEUUIDS = "/openapi/service/acs/auth/downloadAuthorityByDeviceUuids";
81
+
82
+    /**
83
+     * 指定人员的门禁权限下载
84
+     */
85
+    public static final String DOWNLOAD_AUTHORITY_BY_PERSONIDS = "/openapi/service/acs/auth/downloadAuthorityByPersonIds";
86
+
87
+    /**
88
+     * 分页获取计划模板
89
+     */
90
+    public static final String GETPLANS = "/openapi/service/acs/plan/getPlans";
91
+
92
+    /**
93
+     * 指定人员人脸/指纹权限下载
94
+     */
95
+    public static final String DOWNLOAD_FACE_AND_FINGERINFOS = "/openapi/service/acs/auth/downloadFaceAndFingerInfos";
96
+
97
+    /**--推送图片时需要获取人员分组下的,人员分组ID
98
+     * --personGroupId--
99
+     */
100
+    public static final  String OP_PERSON_ID="/openapi/service/fas/personGroup/getPersonGroup";
101
+
102
+    /**
103
+     * 分页获取部门
104
+     */
105
+    public static final String ITF_DEPT= "/openapi/service/base/dept/getDeptInfos";
106
+
107
+    /**
108
+     * 根据部门名称分页获取部门
109
+     */
110
+    public static final String ITF_LIKE_DEPT_NAME = "/openapi/service/base/dept/getDeptInfosByName";
111
+
112
+    /**
113
+     * 添加 人员
114
+     */
115
+    public static final String ITF_ADD_USER = "/openapi/service/base/person/addPersonInfo";
116
+
117
+
118
+    /**
119
+     * 修改人员
120
+     */
121
+    public static final String ITF_UPDATE_USER ="/openapi/service/base/person/modifyPersonInfo";
122
+    /**
123
+     * 查询人员设备
124
+     */
125
+    public static final String ITF_SELECT_USER ="/openapi/service/acs/auth/getAuthoritiesByPersonIds";
126
+
127
+    /**
128
+     * 人员异动
129
+     */
130
+    public static final String ITF_SELECT_USER_SDH = "/openapi/service/acs/auth/downloadAuthorityByDeviceUuids";
131
+
132
+    /**
133
+     * 指定人员的门禁权限下载 == 人员异动(人员移动无法控制,风险太大)
134
+     */
135
+    public static final String ITF_SELECT_APPOIN = "/openapi/service/acs/auth/downloadAuthorityByPersonIds";
136
+    /**
137
+     * 删除人员设备
138
+     */
139
+    public static final String ITF_DELETE_USER ="/openapi/service/acs/auth/delPerAuthsByPerIdsAndDoorUuids";
140
+
141
+
142
+    /**
143
+     * 批量开卡
144
+     */
145
+    public static final String batchOpenCards = "/openapi/service/base/person/batchOpenCards";
146
+
147
+    /**
148
+     * 根据人员ID集获取人员
149
+     */
150
+    public static final String ITF_GET_USER_ID = "/openapi/service/base/person/getPersonInfosByIds";
151
+    
152
+    /**
153
+     * 未预约登记(临时登记)
154
+     */
155
+    public static final String TEMPORARY_REGISTER = "/openapi/service/rvs/register/temporaryRegister";
156
+
157
+    // ------------------ 可视对讲 ----------------------
158
+
159
+    /**
160
+     * 可视对讲 根据中心UUID集分页获取门口机【V2.8.2】
161
+     */
162
+    public static final String GETDOORDEVICESBYUNITUUIDS = "/openapi/service/vis/res/getDoorDevicesByUnitUuids";
163
+
164
+    /**
165
+     * 可视对讲 异步反控开门【V2.8.2】
166
+     */
167
+    public static final String SYNCCONTROL = "/openapi/service/vis/control/syncControl";
168
+
169
+    /**
170
+     * 可视对讲  根据人员 ID 集添加权限并下发
171
+     */
172
+    public static final String ADDOUTDOORAUTH = "/openapi/service/vis/addOutDoorAuth";
173
+
174
+    /**
175
+     * 可视对讲 根据人员 ID 集删除权限并下发
176
+     */
177
+    public static final String DELOUTDOORAUTH = "/openapi/service/vis/delOutDoorAuth";
178
+
179
+    /**
180
+     * 可视对讲 指定人员人脸权限下载
181
+     */
182
+    public static final String DOWNLOADFACE = "/openapi/service/vis/downloadFace";
183
+
184
+    /**
185
+     * 可视对讲 指定人员指纹权限下载
186
+     */
187
+    public static final String DOWNLOADFINGER =  "/openapi/service/vis/downloadFinger";
188
+
189
+    /**
190
+     * 分页获取用户【V2.7】
191
+     */
192
+    public static final String GETUSERS = "/openapi/service/base/user/getUsers";
193
+
194
+    /**
195
+     * 分页获取人员【V2.8.3】
196
+     */
197
+    public static final String GETPERSONINFOSEX = "/openapi/service/base/person/getPersonInfosEx";
198
+
199
+    /**
200
+     * 分页获取门禁点【V2.8.2】
201
+     */
202
+    public static final String GET_DOORS = "/openapi/service/acs/res/getDoors";
203
+
204
+
205
+    /**
206
+     * 添加卡片
207
+     */
208
+    public static final String ADD_CARDS = "/openapi/service/base/card/addCards";
209
+
210
+    /**
211
+     * 卡片开卡
212
+     */
213
+    public static final String OPEN_CARD = "/openapi/service/base/card/openCard";
214
+
215
+    /**
216
+     * 可是对讲,分页获取
217
+     */
218
+    public static final String GETDOORDEVICES = "/openapi/service/vis/res/getDoorDevices";
219
+}

+ 1217
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/base/api/hk/HKOpenApi.java
파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
파일 보기


+ 127
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/base/api/hk/HttpClientSSLUtils.java 파일 보기

@@ -0,0 +1,127 @@
1
+package com.community.huiju.base.api.hk;
2
+
3
+import org.apache.commons.io.IOUtils;
4
+import org.apache.http.HttpResponse;
5
+import org.apache.http.client.HttpClient;
6
+import org.apache.http.client.config.RequestConfig;
7
+import org.apache.http.client.config.RequestConfig.Builder;
8
+import org.apache.http.client.methods.HttpGet;
9
+import org.apache.http.client.methods.HttpPost;
10
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
11
+import org.apache.http.conn.ssl.TrustStrategy;
12
+import org.apache.http.entity.ContentType;
13
+import org.apache.http.entity.StringEntity;
14
+import org.apache.http.impl.client.CloseableHttpClient;
15
+import org.apache.http.impl.client.HttpClients;
16
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
17
+import org.apache.http.ssl.SSLContextBuilder;
18
+
19
+import javax.net.ssl.HostnameVerifier;
20
+import javax.net.ssl.SSLContext;
21
+import javax.net.ssl.SSLSession;
22
+import java.security.GeneralSecurityException;
23
+import java.security.KeyStore;
24
+import java.security.cert.CertificateException;
25
+import java.security.cert.X509Certificate;
26
+
27
+public class HttpClientSSLUtils {
28
+	private static HttpClient httpClient = null;
29
+	protected static final Integer DEFAULT_CONNECTION_TIME_OUT = 100000;
30
+	protected static final Integer DEFAULT_SOCKET_TIME_OUT = 200000;
31
+	protected static final String DEFAULT_CHAR_SET = "UTF-8";
32
+	
33
+	public HttpClientSSLUtils() {
34
+	}
35
+	
36
+	public static String doPost(String url, String jsonText) throws Exception {
37
+		HttpClient client = null;
38
+		HttpPost post = new HttpPost(url);
39
+		
40
+		String var6;
41
+		try {
42
+			if (jsonText != null && !jsonText.isEmpty()) {
43
+				StringEntity entity = new StringEntity(jsonText, ContentType.APPLICATION_JSON);
44
+				post.setEntity(entity);
45
+			}
46
+			
47
+			Builder customReqConf = RequestConfig.custom();
48
+			customReqConf.setConnectTimeout(DEFAULT_CONNECTION_TIME_OUT);
49
+			customReqConf.setSocketTimeout(DEFAULT_CONNECTION_TIME_OUT);
50
+			post.setConfig(customReqConf.build());
51
+			HttpResponse res = null;
52
+			if (url.startsWith("https")) {
53
+				client = createSSLInsecureClient();
54
+				res = ((HttpClient)client).execute(post);
55
+			} else {
56
+				client = httpClient;
57
+				res = ((HttpClient)client).execute(post);
58
+			}
59
+			
60
+			var6 = IOUtils.toString(res.getEntity().getContent(), "UTF-8");
61
+		} finally {
62
+			post.releaseConnection();
63
+			if (url.startsWith("https") && client != null && client instanceof CloseableHttpClient) {
64
+				((CloseableHttpClient)client).close();
65
+			}
66
+			
67
+		}
68
+		
69
+		return var6;
70
+	}
71
+	
72
+	public static String doGet(String url) throws Exception {
73
+		HttpClient client = null;
74
+		HttpGet get = new HttpGet(url);
75
+		String result = "";
76
+		
77
+		try {
78
+			Builder customReqConf = RequestConfig.custom();
79
+			customReqConf.setConnectTimeout(DEFAULT_CONNECTION_TIME_OUT);
80
+			customReqConf.setSocketTimeout(DEFAULT_CONNECTION_TIME_OUT);
81
+			get.setConfig(customReqConf.build());
82
+			HttpResponse res = null;
83
+			if (url.startsWith("https")) {
84
+				client = createSSLInsecureClient();
85
+				res = ((HttpClient)client).execute(get);
86
+			} else {
87
+				client = client;
88
+				res = ((HttpClient)client).execute(get);
89
+			}
90
+			
91
+			result = IOUtils.toString(res.getEntity().getContent(), "UTF-8");
92
+		} finally {
93
+			get.releaseConnection();
94
+			if (url.startsWith("https") && client != null && client instanceof CloseableHttpClient) {
95
+				((CloseableHttpClient)client).close();
96
+			}
97
+			
98
+		}
99
+		
100
+		return result;
101
+	}
102
+	
103
+	private static CloseableHttpClient createSSLInsecureClient() throws GeneralSecurityException {
104
+		try {
105
+			SSLContext sslContext = (new SSLContextBuilder()).loadTrustMaterial((KeyStore)null, new TrustStrategy() {
106
+				public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
107
+					return true;
108
+				}
109
+			}).build();
110
+			SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, new HostnameVerifier() {
111
+				public boolean verify(String hostname, SSLSession session) {
112
+					return true;
113
+				}
114
+			});
115
+			return HttpClients.custom().setSSLSocketFactory(sslsf).build();
116
+		} catch (GeneralSecurityException var2) {
117
+			throw var2;
118
+		}
119
+	}
120
+	
121
+	static {
122
+		PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
123
+		cm.setMaxTotal(128);
124
+		cm.setDefaultMaxPerRoute(128);
125
+		httpClient = HttpClients.custom().setConnectionManager(cm).build();
126
+	}
127
+}

+ 107
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/base/api/hk/PicUtils.java 파일 보기

@@ -0,0 +1,107 @@
1
+package com.community.huiju.base.api.hk;
2
+
3
+import net.coobird.thumbnailator.Thumbnails;
4
+import org.slf4j.Logger;
5
+import org.slf4j.LoggerFactory;
6
+
7
+import java.io.ByteArrayInputStream;
8
+import java.io.ByteArrayOutputStream;
9
+
10
+/**
11
+ * 图片压缩Utils
12
+ *
13
+ * @author worstEzreal
14
+ * @version V1.1.0
15
+ * @date 2018/3/12
16
+ */
17
+public class PicUtils {
18
+
19
+    private static Logger logger = LoggerFactory.getLogger(PicUtils.class);
20
+
21
+    /**
22
+     * 根据指定大小压缩图片
23
+     *
24
+     * @param imageBytes  源图片字节数组
25
+     * @param desFileSize 指定图片大小,单位kb
26
+     * @param imageId     影像编号
27
+     * @return 压缩质量后的图片字节数组
28
+     */
29
+    public static byte[] compressPicForScale(byte[] imageBytes, long desFileSize, String imageId) {
30
+        if (imageBytes == null || imageBytes.length <= 0 || imageBytes.length < desFileSize * 1024) {
31
+            return imageBytes;
32
+        }
33
+        long srcSize = imageBytes.length;
34
+        double accuracy = getAccuracy(srcSize / 1024);
35
+        try {
36
+            while (imageBytes.length > desFileSize * 1024) {
37
+                ByteArrayInputStream inputStream = new ByteArrayInputStream(imageBytes);
38
+                ByteArrayOutputStream outputStream = new ByteArrayOutputStream(imageBytes.length);
39
+                Thumbnails.of(inputStream)
40
+                        .scale(accuracy)
41
+                        .outputQuality(accuracy)
42
+                        .toOutputStream(outputStream);
43
+                imageBytes = outputStream.toByteArray();
44
+            }
45
+            logger.info("【图片压缩】imageId={} | 图片原大小={}kb | 压缩后大小={}kb",
46
+                    imageId, srcSize / 1024, imageBytes.length / 1024);
47
+        } catch (Exception e) {
48
+            logger.error("【图片压缩】msg=图片压缩失败!", e);
49
+        }
50
+        return imageBytes;
51
+    }
52
+
53
+    /**
54
+     * 自动调节精度(经验数值)
55
+     *
56
+     * @param size 源图片大小
57
+     * @return 图片压缩质量比
58
+     */
59
+    private static double getAccuracy(long size) {
60
+        double accuracy;
61
+        if (size < 900) {
62
+            accuracy = 0.85;
63
+        } else if (size < 2047) {
64
+            accuracy = 0.6;
65
+        } else if (size < 3275) {
66
+            accuracy = 0.44;
67
+        } else {
68
+            accuracy = 0.4;
69
+        }
70
+        return accuracy;
71
+    }
72
+    
73
+    /**
74
+     * 图片进行Base64位编码
75
+     * @param fileBytes
76
+     * @return
77
+     */
78
+      public static String getImgStr(byte [] fileBytes) {
79
+        return new String(org.apache.commons.codec.binary.Base64.encodeBase64(fileBytes));
80
+    }
81
+
82
+    /**
83
+     * 图片进行Base64位编码
84
+     * @param imgFile
85
+     * @return
86
+     */
87
+   /* public static String getImgStr(MultipartFile imgFile){
88
+        byte[] data = null;
89
+        try
90
+        {
91
+            data = imgFile.getBytes();
92
+        }
93
+        catch (IOException e)
94
+        {
95
+            e.printStackTrace();
96
+        }
97
+        return new String(org.apache.commons.codec.binary.Base64.encodeBase64(data));
98
+    }*/
99
+}
100
+
101
+
102
+
103
+
104
+
105
+
106
+
107
+

+ 40
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/base/api/hk/entity/MonitoryPoint.java 파일 보기

@@ -0,0 +1,40 @@
1
+package com.community.huiju.base.api.hk.entity;
2
+
3
+import lombok.AllArgsConstructor;
4
+import lombok.Data;
5
+import lombok.NoArgsConstructor;
6
+
7
+/**
8
+ * 响应 监控中心 实体类
9
+ * @author weiximei
10
+ */
11
+@AllArgsConstructor
12
+@NoArgsConstructor
13
+@Data
14
+public class MonitoryPoint {
15
+
16
+    private Integer errorCode;
17
+
18
+    private String errorMessage;
19
+
20
+    private String data;
21
+
22
+
23
+    private class MonitoryPointData {
24
+        Integer total;
25
+        Integer pageNo;
26
+        Integer pageSize;
27
+        String list;
28
+
29
+
30
+    }
31
+
32
+    private class MonitoryPointList {
33
+
34
+        String cameraUuid;
35
+        String cameraName;
36
+
37
+    }
38
+
39
+
40
+}

+ 210
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/base/api/hk/test/OpenapiTest.java 파일 보기

@@ -0,0 +1,210 @@
1
+package com.community.huiju.base.api.hk.test;
2
+
3
+import com.alibaba.fastjson.JSON;
4
+import com.community.huiju.base.api.hk.Digests;
5
+import com.community.huiju.base.api.hk.HttpClientSSLUtils;
6
+
7
+import java.time.LocalDate;
8
+import java.util.HashMap;
9
+import java.util.Map;
10
+
11
+
12
+/**
13
+ * openapi 测试DEMO
14
+ * 客户开发的时候可以参考此代码编写自己的应用
15
+ * 也可以使用demo中的jar包,不过jar包使用务必使用全套,
16
+ * 万不可只取其中一部分,避免依赖破坏
17
+ * @author shengyiling
18
+ *
19
+ */
20
+class OpenapiTest {
21
+	
22
+	/**
23
+	 * APPKEY需要到部署的平台服务器上生成。
24
+	 * <p>
25
+	 * 调用Openpai的操作码,需要去平台上生成,详见《海康威视iVMS-8700平台SDKV2.*.* HTTP-OpenAPI使用说明书.chm》中[获取AppKey和Secret]章节说明
26
+	 * </p>
27
+	 * <p>
28
+	 * 《海康威视iVMS-8700平台SDKV2.*.* HTTP-OpenAPI使用说明书.chm》 该文档请找技术支持或者交付的同事提供
29
+	 * </p>
30
+	 */
31
+	private static final String APPKEY = "b4434b13";
32
+	
33
+	/**
34
+	 * SECRET需要到部署的平台服务器上生成。
35
+	 * <p>
36
+	 * 调用Openpai的操作码,需要去平台上生成,详见《海康威视iVMS-8700平台SDKV2.*.* HTTP-OpenAPI使用说明书.chm》中[获取AppKey和Secret]章节说明
37
+	 * </p>
38
+	 * <p>
39
+	 * 《海康威视iVMS-8700平台SDKV2.*.* HTTP-OpenAPI使用说明书.chm》 该文档请找技术支持或者交付的同事提供
40
+	 * </p>
41
+	 */
42
+	private static final String SECRET = "64a1f32d53784ce2a34bd81822db1b91";
43
+	
44
+	
45
+	/**
46
+	 * http请求地址
47
+	 * <p>openapi的地址,默认情况下openapi的IP端口与基础应用的IP端口是一致的</p>
48
+	 * <p>请将地址配置正确.</p>
49
+	 * <p>默认情况下是127.0.0.1:80 ,如果地址不通请根据实际情况修改IP端口</p>
50
+ 	 */
51
+	private static final String OPENAPI_IP_PORT_HTTP = "http://192.168.0.122";
52
+	
53
+	/**
54
+	 * https请求地址
55
+	 * <p>openapi的地址,默认情况下openapi的IP端口与基础应用的IP端口是一致的</p>
56
+	 * <p>请将地址配置正确.</p>
57
+	 * <p>默认情况下是127.0.0.1:443 ,如果地址不通请根据实际情况修改IP端口</p>
58
+ 	 */
59
+	private static final String OPENAPI_IP_PORT_HTTPS = "https://127.0.0.1:443";
60
+	
61
+	/**
62
+	 * 获取默认用户UUID的接口地址,此地址可以从《海康威视iVMS-8700平台SDKV2.*.* HTTP-OpenAPI使用说明书.chm》中具体的接口说明上获取
63
+	 */
64
+	private static final String ITF_ADDRESS_GET_DEFAULT_USER_UUID = "/openapi/service/base/user/getDefaultUserUuid";
65
+	
66
+	/**
67
+	 * 分页获取监控点信息的接口地址,此地址可以从《海康威视iVMS-8700平台SDKV2.*.* HTTP-OpenAPI使用说明书.chm》中具体的接口说明上获取
68
+	 */
69
+	private static final String ITF_ADDRESS_GET_CAMERAS = "/openapi/service/vss/res/getCameras";
70
+	
71
+	/**
72
+	 * <p>操作用户UUID,即用户UUID,首次使用操作用户UUID可以通过接口 [获取默认用户UUID]来获取</p>
73
+	 * <p>也可以通过接口[分页获取用户]来获取</p>
74
+	 */
75
+//	private static final String OP_USER_UUID = "0be83d40695011e7981e0f190ed6d2e7";
76
+	private static final String OP_USER_UUID = "5b2eb534696b11e89c2e438f92627767";
77
+	
78
+	/**
79
+	 * 测试方法
80
+	 * @param args
81
+	 * @throws Exception
82
+	 */
83
+	public static void main(String[] args) throws Exception {
84
+
85
+		/***http方式调用***/
86
+		//System.out.println(testGetDefaultUserUUID());
87
+		//System.out.println(testGetCameras());
88
+//		
89
+//		/***https方式调用***/
90
+//		System.out.println(testGetDefaultUserUUID_Https());
91
+//		System.out.println(testGetCameras_Https());
92
+
93
+		LocalDate today = LocalDate.now();
94
+		int year = today.getYear();
95
+		// 加上20, 表示加上20年,默认
96
+
97
+		int month = today.getMonthValue();
98
+		int day = today.getDayOfMonth();
99
+
100
+	}
101
+	
102
+	/**
103
+	 * HTTP方式
104
+	 * 获取默认用户UUID 测试
105
+	 * @return
106
+	 * @throws Exception
107
+	 */
108
+	private static String testGetDefaultUserUUID() throws Exception{
109
+		String url = OPENAPI_IP_PORT_HTTP + ITF_ADDRESS_GET_DEFAULT_USER_UUID;
110
+		Map<String, Object> map = new HashMap<String, Object>();
111
+		map.put("appkey", APPKEY);//设置APPKEY
112
+		map.put("time", System.currentTimeMillis());//设置时间参数
113
+		String params =  JSON.toJSONString(map);
114
+		System.out.println(" ====== testGetDefaultUserUUID 请求参数:【" + params + "】");
115
+		String data = HttpClientSSLUtils.doPost(url + "?token=" + Digests.buildToken(url + "?" + params, params, SECRET), params);
116
+		System.out.println(" ====== testGetDefaultUserUUID 请求返回结果:【{" + data + "}】");
117
+		
118
+		return data;
119
+	}
120
+	
121
+	/** 
122
+	 * HTTP方式
123
+	 * 分页获取监控点信息 测试
124
+	 * @return
125
+	 * @throws Exception
126
+	 */
127
+	private static String testGetCameras() throws Exception{
128
+		 String url = OPENAPI_IP_PORT_HTTP + ITF_ADDRESS_GET_CAMERAS;
129
+        Map<String, Object> map = new HashMap<String, Object>();
130
+        map.put("appkey", APPKEY);//设置APPKEY
131
+        map.put("time", System.currentTimeMillis());//设置时间参数
132
+        map.put("pageNo", 1);//设置分页参数
133
+        map.put("pageSize", 5);//设置分页参数
134
+        map.put("opUserUuid", OP_USER_UUID);//设置操作用户UUID
135
+        String params = JSON.toJSONString(map);
136
+        System.out.println(" ====== getCameras请求参数:【" + params + "】");
137
+        String data = HttpClientSSLUtils.doPost(url + "?token=" + Digests.buildToken(url + "?" + params, null, SECRET), params);
138
+        System.out.println(" ====== getCameras请求返回结果:【{" + data + "}】");
139
+        
140
+        return data;
141
+	}
142
+	
143
+	/**
144
+	 * HTTPS方式
145
+	 * 获取默认用户UUID 测试
146
+	 * @return
147
+	 * @throws Exception
148
+	 */
149
+	private static String testGetDefaultUserUUID_Https() throws Exception{
150
+		String url = OPENAPI_IP_PORT_HTTPS + ITF_ADDRESS_GET_DEFAULT_USER_UUID;
151
+		Map<String, Object> map = new HashMap<String, Object>();
152
+		map.put("appkey", APPKEY);//设置APPKEY
153
+		map.put("time", System.currentTimeMillis());//设置时间参数
154
+		String params =  JSON.toJSONString(map);
155
+		System.out.println("============" + params + "============");
156
+		String data = HttpClientSSLUtils.doPost(url + "?token=" + Digests.buildToken(url + "?" + params, null, SECRET), params);
157
+		System.out.println("============" + data + "============");
158
+		
159
+		return data;
160
+	}
161
+	
162
+	/**
163
+	 * HTTPS方式
164
+	 * 分页获取监控点信息 测试
165
+	 * @return
166
+	 * @throws Exception
167
+	 */
168
+	private static String testGetCameras_Https() throws Exception{
169
+		 String url = OPENAPI_IP_PORT_HTTPS + ITF_ADDRESS_GET_CAMERAS;
170
+        Map<String, Object> map = new HashMap<String, Object>();
171
+        map.put("appkey", APPKEY);//设置APPKEY
172
+        map.put("time", System.currentTimeMillis());//设置时间参数
173
+        map.put("pageNo", 1);//设置分页参数
174
+        map.put("pageSize", 5);//设置分页参数
175
+        map.put("opUserUuid", OP_USER_UUID);//设置操作用户UUID
176
+        String params = JSON.toJSONString(map);
177
+        System.out.println(" ====== getCameras请求参数:【" + params + "】");
178
+        String data = HttpClientSSLUtils.doPost(url + "?token=" + Digests.buildToken(url + "?" + params, null, SECRET), params);
179
+        System.out.println(" ====== getCameras请求返回结果:【{" + data + "}】");
180
+        
181
+        return data;
182
+	}
183
+
184
+
185
+
186
+	/**
187
+	 * HTTPS方式
188
+	 * 分页获取监控点信息 测试
189
+	 * @return
190
+	 * @throws Exception
191
+	 */
192
+	private static String testGetDoorEventsHistory() throws Exception{
193
+		String url = OPENAPI_IP_PORT_HTTPS + "/openapi/service/acs/event/getDoorEventsHistory";
194
+		Map<String, Object> map = new HashMap<String, Object>();
195
+		map.put("appkey", APPKEY);//设置APPKEY
196
+		map.put("time", System.currentTimeMillis());//设置时间参数
197
+		map.put("pageNo", 1);//设置分页参数
198
+		map.put("pageSize", 5);//设置分页参数
199
+		map.put("opUserUuid", OP_USER_UUID);//设置操作用户UUID
200
+		String params = JSON.toJSONString(map);
201
+		System.out.println(" ====== getCameras请求参数:【" + params + "】");
202
+		String data = HttpClientSSLUtils.doPost(url + "?token=" + Digests.buildToken(url + "?" + params, null, SECRET), params);
203
+		System.out.println(" ====== getCameras请求返回结果:【{" + data + "}】");
204
+
205
+		return data;
206
+	}
207
+
208
+
209
+
210
+}

+ 268
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/base/fushi/Base64.java 파일 보기

@@ -0,0 +1,268 @@
1
+package com.community.huiju.base.fushi;
2
+
3
+public final class Base64 {
4
+
5
+	private static final int BASELENGTH = 128;
6
+	private static final int LOOKUPLENGTH = 64;
7
+	private static final int TWENTYFOURBITGROUP = 24;
8
+	private static final int EIGHTBIT = 8;
9
+	private static final int SIXTEENBIT = 16;
10
+	private static final int FOURBYTE = 4;
11
+	private static final int SIGN = -128;
12
+	private static char PAD = '=';
13
+	private static byte[] base64Alphabet = new byte[BASELENGTH];
14
+	private static char[] lookUpBase64Alphabet = new char[LOOKUPLENGTH];
15
+
16
+	static {
17
+		for (int i = 0; i < BASELENGTH; ++i) {
18
+			base64Alphabet[i] = -1;
19
+		}
20
+		for (int i = 'Z'; i >= 'A'; i--) {
21
+			base64Alphabet[i] = (byte) (i - 'A');
22
+		}
23
+		for (int i = 'z'; i >= 'a'; i--) {
24
+			base64Alphabet[i] = (byte) (i - 'a' + 26);
25
+		}
26
+
27
+		for (int i = '9'; i >= '0'; i--) {
28
+			base64Alphabet[i] = (byte) (i - '0' + 52);
29
+		}
30
+
31
+		base64Alphabet['+'] = 62;
32
+		base64Alphabet['/'] = 63;
33
+
34
+		for (int i = 0; i <= 25; i++) {
35
+			lookUpBase64Alphabet[i] = (char) ('A' + i);
36
+		}
37
+
38
+		for (int i = 26, j = 0; i <= 51; i++, j++) {
39
+			lookUpBase64Alphabet[i] = (char) ('a' + j);
40
+		}
41
+
42
+		for (int i = 52, j = 0; i <= 61; i++, j++) {
43
+			lookUpBase64Alphabet[i] = (char) ('0' + j);
44
+		}
45
+		lookUpBase64Alphabet[62] = (char) '+';
46
+		lookUpBase64Alphabet[63] = (char) '/';
47
+
48
+	}
49
+
50
+	private static boolean isWhiteSpace(char octect) {
51
+		return (octect == 0x20 || octect == 0xd || octect == 0xa || octect == 0x9);
52
+	}
53
+
54
+	private static boolean isPad(char octect) {
55
+		return (octect == PAD);
56
+	}
57
+
58
+	private static boolean isData(char octect) {
59
+		return (octect < BASELENGTH && base64Alphabet[octect] != -1);
60
+	}
61
+
62
+	/**
63
+	 * Encodes hex octects into Base64
64
+	 * 
65
+	 * @param binaryData
66
+	 *            Array containing binaryData
67
+	 * @return Encoded Base64 array
68
+	 */
69
+	public static String encode(byte[] binaryData) {
70
+
71
+		if (binaryData == null) {
72
+			return null;
73
+		}
74
+
75
+		int lengthDataBits = binaryData.length * EIGHTBIT;
76
+		if (lengthDataBits == 0) {
77
+			return "";
78
+		}
79
+
80
+		int fewerThan24bits = lengthDataBits % TWENTYFOURBITGROUP;
81
+		int numberTriplets = lengthDataBits / TWENTYFOURBITGROUP;
82
+		int numberQuartet = fewerThan24bits != 0 ? numberTriplets + 1
83
+				: numberTriplets;
84
+		char encodedData[] = null;
85
+
86
+		encodedData = new char[numberQuartet * 4];
87
+
88
+		byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0;
89
+
90
+		int encodedIndex = 0;
91
+		int dataIndex = 0;
92
+
93
+		for (int i = 0; i < numberTriplets; i++) {
94
+			b1 = binaryData[dataIndex++];
95
+			b2 = binaryData[dataIndex++];
96
+			b3 = binaryData[dataIndex++];
97
+
98
+			l = (byte) (b2 & 0x0f);
99
+			k = (byte) (b1 & 0x03);
100
+
101
+			byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2)
102
+					: (byte) ((b1) >> 2 ^ 0xc0);
103
+			byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4)
104
+					: (byte) ((b2) >> 4 ^ 0xf0);
105
+			byte val3 = ((b3 & SIGN) == 0) ? (byte) (b3 >> 6)
106
+					: (byte) ((b3) >> 6 ^ 0xfc);
107
+
108
+			encodedData[encodedIndex++] = lookUpBase64Alphabet[val1];
109
+			encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)];
110
+			encodedData[encodedIndex++] = lookUpBase64Alphabet[(l << 2) | val3];
111
+			encodedData[encodedIndex++] = lookUpBase64Alphabet[b3 & 0x3f];
112
+		}
113
+
114
+		// form integral number of 6-bit groups
115
+		if (fewerThan24bits == EIGHTBIT) {
116
+			b1 = binaryData[dataIndex];
117
+			k = (byte) (b1 & 0x03);
118
+			
119
+			byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2)
120
+					: (byte) ((b1) >> 2 ^ 0xc0);
121
+			encodedData[encodedIndex++] = lookUpBase64Alphabet[val1];
122
+			encodedData[encodedIndex++] = lookUpBase64Alphabet[k << 4];
123
+			encodedData[encodedIndex++] = PAD;
124
+			encodedData[encodedIndex++] = PAD;
125
+		} else if (fewerThan24bits == SIXTEENBIT) {
126
+			b1 = binaryData[dataIndex];
127
+			b2 = binaryData[dataIndex + 1];
128
+			l = (byte) (b2 & 0x0f);
129
+			k = (byte) (b1 & 0x03);
130
+
131
+			byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2)
132
+					: (byte) ((b1) >> 2 ^ 0xc0);
133
+			byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4)
134
+					: (byte) ((b2) >> 4 ^ 0xf0);
135
+
136
+			encodedData[encodedIndex++] = lookUpBase64Alphabet[val1];
137
+			encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)];
138
+			encodedData[encodedIndex++] = lookUpBase64Alphabet[l << 2];
139
+			encodedData[encodedIndex++] = PAD;
140
+		}
141
+
142
+		return new String(encodedData);
143
+	}
144
+
145
+	/**
146
+	 * Decodes Base64 data into octects
147
+	 * 
148
+	 * @param encoded
149
+	 *            string containing Base64 data
150
+	 * @return Array containind decoded data.
151
+	 */
152
+	public static byte[] decode(String encoded) {
153
+
154
+		if (encoded == null) {
155
+			return null;
156
+		}
157
+
158
+		char[] base64Data = encoded.toCharArray();
159
+		// remove white spaces
160
+		int len = removeWhiteSpace(base64Data);
161
+
162
+		if (len % FOURBYTE != 0) {
163
+			return null;// should be divisible by four
164
+		}
165
+
166
+		int numberQuadruple = (len / FOURBYTE);
167
+
168
+		if (numberQuadruple == 0) {
169
+			return new byte[0];
170
+		}
171
+
172
+		byte decodedData[] = null;
173
+		byte b1 = 0, b2 = 0, b3 = 0, b4 = 0;
174
+		char d1 = 0, d2 = 0, d3 = 0, d4 = 0;
175
+
176
+		int i = 0;
177
+		int encodedIndex = 0;
178
+		int dataIndex = 0;
179
+		decodedData = new byte[(numberQuadruple) * 3];
180
+
181
+		for (; i < numberQuadruple - 1; i++) {
182
+
183
+			if (!isData((d1 = base64Data[dataIndex++]))
184
+					|| !isData((d2 = base64Data[dataIndex++]))
185
+					|| !isData((d3 = base64Data[dataIndex++]))
186
+					|| !isData((d4 = base64Data[dataIndex++]))) {
187
+				return null;
188
+			}// if found "no data" just return null
189
+
190
+			b1 = base64Alphabet[d1];
191
+			b2 = base64Alphabet[d2];
192
+			b3 = base64Alphabet[d3];
193
+			b4 = base64Alphabet[d4];
194
+
195
+			decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4);
196
+			decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));
197
+			decodedData[encodedIndex++] = (byte) (b3 << 6 | b4);
198
+		}
199
+
200
+		if (!isData((d1 = base64Data[dataIndex++]))
201
+				|| !isData((d2 = base64Data[dataIndex++]))) {
202
+			return null;// if found "no data" just return null
203
+		}
204
+
205
+		b1 = base64Alphabet[d1];
206
+		b2 = base64Alphabet[d2];
207
+
208
+		d3 = base64Data[dataIndex++];
209
+		d4 = base64Data[dataIndex++];
210
+		if (!isData((d3)) || !isData((d4))) {// Check if they are PAD characters
211
+			if (isPad(d3) && isPad(d4)) {
212
+				if ((b2 & 0xf) != 0)// last 4 bits should be zero
213
+				{
214
+					return null;
215
+				}
216
+				byte[] tmp = new byte[i * 3 + 1];
217
+				System.arraycopy(decodedData, 0, tmp, 0, i * 3);
218
+				tmp[encodedIndex] = (byte) (b1 << 2 | b2 >> 4);
219
+				return tmp;
220
+			} else if (!isPad(d3) && isPad(d4)) {
221
+				b3 = base64Alphabet[d3];
222
+				if ((b3 & 0x3) != 0)// last 2 bits should be zero
223
+				{
224
+					return null;
225
+				}
226
+				byte[] tmp = new byte[i * 3 + 2];
227
+				System.arraycopy(decodedData, 0, tmp, 0, i * 3);
228
+				tmp[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4);
229
+				tmp[encodedIndex] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));
230
+				return tmp;
231
+			} else {
232
+				return null;
233
+			}
234
+		} else { // No PAD e.g 3cQl
235
+			b3 = base64Alphabet[d3];
236
+			b4 = base64Alphabet[d4];
237
+			decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4);
238
+			decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));
239
+			decodedData[encodedIndex++] = (byte) (b3 << 6 | b4);
240
+
241
+		}
242
+
243
+		return decodedData;
244
+	}
245
+
246
+	/**
247
+	 * remove WhiteSpace from MIME containing encoded Base64 data.
248
+	 * 
249
+	 * @param data
250
+	 *            the byte array of base64 data (with WS)
251
+	 * @return the new length
252
+	 */
253
+	private static int removeWhiteSpace(char[] data) {
254
+		if (data == null) {
255
+			return 0;
256
+		}
257
+
258
+		// count characters that's not whitespace
259
+		int newSize = 0;
260
+		int len = data.length;
261
+		for (int i = 0; i < len; i++) {
262
+			if (!isWhiteSpace(data[i])) {
263
+				data[newSize++] = data[i];
264
+			}
265
+		}
266
+		return newSize;
267
+	}
268
+}

+ 164
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/base/fushi/FSApi.java 파일 보기

@@ -0,0 +1,164 @@
1
+package com.community.huiju.base.fushi;
2
+
3
+import java.io.BufferedReader;
4
+import java.io.IOException;
5
+import java.io.InputStreamReader;
6
+import java.io.OutputStream;
7
+import java.net.HttpURLConnection;
8
+import java.net.URL;
9
+import java.security.KeyFactory;
10
+import java.security.PrivateKey;
11
+import java.security.spec.PKCS8EncodedKeySpec;
12
+import java.util.Map;
13
+import java.util.SortedMap;
14
+import java.util.TreeMap;
15
+
16
+public class FSApi {
17
+
18
+    //	private static String url = "http://mops-test.fujica.com.cn:8021/Api/Park/GetParkInfoByCarNo";
19
+    private static String url = "http://api.mops.fujica.com.cn/v2/Api/Park/GetParkInfoByCarNo";
20
+    private static String appid = "fujica_89aa0f62d7ec77fc";
21
+    private static String appSecret = "cef36935e0954f40afc519a43a0c857c";
22
+    private static String privateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALATu5WNNx+XcrAS\n" +
23
+            "NJieGRsY7VryQjcs+pABXGh4BOCqAW3FgAAc21aIG0uxvYHdQUw1I7J80RiQJ506\n" +
24
+            "aIktGTmZKJTjez7JNF7GO4ieGmLMI3ds8iXyJrfUMp/1U3Cq6vja8vuRIKYVQCxZ\n" +
25
+            "e8un98Nr03F7oMlKpBydJQKVdlAHAgMBAAECgYBPcqfqhAyCWbCrF5vZ3URQwL+g\n" +
26
+            "kL0l7kqknaiXjsgMo0j/weTOqDaj5cgDMJDkvvPOsg+IYt9qKOlm/Urb0piVb9v9\n" +
27
+            "iAnp6gIppcyHrPUesgYRSbqR/HhdGtnzn/4f45YpkXA6URMfc04xBrIUCw5Dmnqo\n" +
28
+            "nJZJkjd6jjXiL65rYQJBAN8eg99yFH45D2cdlPBTN0LVWXgqy3N22byYh0j6kgo2\n" +
29
+            "5WOPMcuIZPM/XdSoTfhYeHixvEwrmCAkCmSkf524prECQQDKBnzZRj3eCij1z2SZ\n" +
30
+            "JCRZhRQUhFmK0AYYTXw9R0DfEaZNrEAe8PEypS94lYROvNV3TnSnK2FHKeH8YhHX\n" +
31
+            "EoA3AkBRHzMrRrsUuYJUJ3lDd74b2p5RBp46OPgpjfuCGTiH5jW44RNlwQ2TM3LW\n" +
32
+            "IutWZDRJDbY8q40AApqUxQpxOfXBAkA8bB5RGZoNW7qOcj3jM5UPlSbBUCg7xSXd\n" +
33
+            "hOdAqJv1W6ECoB75YhSxkggVp5pPtlid+0AWc3n/v74QLwCo86aXAkEAlxY3hoxQ\n" +
34
+            "jJiCjD2PbL0GLkMKNBqJgLcDWqeoHcal+iY2Fpr3U/iCJZNoBuovC2Qvc5J1y61P\n" +
35
+            "ojrvFNyFMEkWTQ==";
36
+    private static String sign = "";
37
+    private static String time;
38
+
39
+    public static void main(String[] args) {
40
+        time = getTimestamp();
41
+        String jsonString = "{'ParkingCode':'19000100250504','CarNo':'苏A8M6B2'}";
42
+
43
+        TreeMap<String, String> map = new TreeMap();
44
+        map.put("param", jsonString);
45
+        map.put("secret", appSecret);
46
+        map.put("timestamp", time);
47
+        sign = signWithoutMD5(map);
48
+        sign = sign(sign, privateKey);
49
+
50
+        doJsonPost(url, jsonString);
51
+    }
52
+
53
+    public static String doJsonPost(String urlPath, String Json) {
54
+        String result = "";
55
+        BufferedReader reader = null;
56
+        try {
57
+            URL url = new URL(urlPath);
58
+            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
59
+            conn.setRequestMethod("POST");
60
+            conn.setDoOutput(true);
61
+            conn.setDoInput(true);
62
+            conn.setUseCaches(false);
63
+            conn.setRequestProperty("Connection", "Keep-Alive");
64
+            conn.setRequestProperty("Charset", "UTF-8");
65
+            conn.setRequestProperty("appid", appid);
66
+            conn.setRequestProperty("appSecret", appSecret);
67
+            conn.setRequestProperty("sign", sign);
68
+            conn.setRequestProperty("timestamp", time);
69
+            // 设置文件类型:
70
+            conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
71
+            // 设置接收类型否则返回415错误
72
+            conn.setRequestProperty("accept", "*/*");// 此处为暴力方法设置接受所有类型,以此来防范返回415;
73
+            conn.setRequestProperty("accept", "application/json");
74
+            // 往服务器里面发送数据
75
+            if (Json != null && !("").equals(Json)) {
76
+                byte[] writebytes = Json.getBytes();
77
+                // 设置文件长度
78
+                conn.setRequestProperty("Content-Length", String.valueOf(writebytes.length));
79
+                OutputStream outwritestream = (OutputStream) conn.getOutputStream();
80
+                outwritestream.write(Json.getBytes());
81
+                outwritestream.flush();
82
+                outwritestream.close();
83
+
84
+            }
85
+            if (conn.getResponseCode() == 200) {
86
+                reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
87
+                result = reader.readLine();
88
+                System.out.println(result);
89
+            }
90
+        } catch (Exception e) {
91
+            e.printStackTrace();
92
+        } finally {
93
+            if (reader != null) {
94
+                try {
95
+                    reader.close();
96
+                } catch (IOException e) {
97
+                    e.printStackTrace();
98
+                }
99
+            }
100
+        }
101
+        return result;
102
+    }
103
+
104
+    public static String getTimestamp() {
105
+        String time = "";
106
+        long timestamp = System.currentTimeMillis();
107
+        time = String.valueOf(timestamp);
108
+        time = time.substring(0, 10);
109
+        return time;
110
+    }
111
+
112
+    public static String signWithoutMD5(SortedMap<String, String> params) {
113
+        String restul = "";
114
+        if (params == null) {
115
+            return restul;
116
+        }
117
+
118
+        StringBuilder sb = new StringBuilder();
119
+        for (Map.Entry<String, String> me : params.entrySet()) {
120
+
121
+            sb.append(me.getKey());
122
+            sb.append('=');
123
+            sb.append(me.getValue());
124
+            sb.append('&');
125
+
126
+        }
127
+        int lastIndexOf = sb.lastIndexOf("&");
128
+        if (lastIndexOf != -1) {
129
+            sb.deleteCharAt(lastIndexOf);
130
+        }
131
+        restul = new String(sb);
132
+
133
+        return restul;
134
+    }
135
+
136
+    private static final String ALGORITHM = "RSA";
137
+    private static final String SIGN_ALGORITHMS = "SHA1WithRSA";
138
+
139
+    private static final String DEFAULT_CHARSET = "UTF-8";
140
+
141
+    public static String sign(String content, String privateKey) {
142
+        try {
143
+            PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(Base64.decode(privateKey));
144
+            KeyFactory keyf = KeyFactory.getInstance(ALGORITHM);
145
+
146
+            PrivateKey priKey = keyf.generatePrivate(priPKCS8);
147
+
148
+            java.security.Signature signature = java.security.Signature.getInstance(SIGN_ALGORITHMS);
149
+
150
+            signature.initSign(priKey);
151
+            signature.update(content.getBytes(DEFAULT_CHARSET));
152
+
153
+            byte[] signed = signature.sign();
154
+
155
+            return Base64.encode(signed);
156
+        } catch (Exception e) {
157
+            e.printStackTrace();
158
+        }
159
+
160
+        return null;
161
+    }
162
+
163
+
164
+}

+ 44
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/base/properties/FuShiProperties.java 파일 보기

@@ -0,0 +1,44 @@
1
+package com.community.huiju.base.properties;
2
+
3
+import lombok.AllArgsConstructor;
4
+import lombok.Data;
5
+import lombok.NoArgsConstructor;
6
+import org.springframework.boot.context.properties.ConfigurationProperties;
7
+import org.springframework.stereotype.Component;
8
+
9
+/**
10
+ * 富士配置类
11
+ * @author weiximei
12
+ */
13
+@AllArgsConstructor
14
+@NoArgsConstructor
15
+@Data
16
+@Component
17
+@ConfigurationProperties(prefix = "fu-shi")
18
+public class FuShiProperties {
19
+
20
+    /**
21
+     * 富士云 请求地址
22
+     */
23
+    private String url;
24
+
25
+    /**
26
+     * 富士云 appid
27
+     */
28
+    private String appid;
29
+
30
+    /**
31
+     * 富士云 appSecret
32
+     */
33
+    private String appSecret;
34
+
35
+    /**
36
+     * 富士云 私钥 privateKey
37
+     */
38
+    private String privateKey;
39
+
40
+    /**
41
+     * 停车场编码
42
+     */
43
+    private String parkingCode;
44
+}

+ 40
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/config/FuShiConfig.java 파일 보기

@@ -0,0 +1,40 @@
1
+package com.community.huiju.config;
2
+
3
+import com.community.commom.fushi.FuShiHttpClient;
4
+import com.community.commom.fushi.FuShiRequestAPI;
5
+import com.community.huiju.base.properties.FuShiProperties;
6
+import org.springframework.beans.factory.annotation.Autowired;
7
+import org.springframework.context.annotation.Bean;
8
+import org.springframework.context.annotation.Configuration;
9
+
10
+/**
11
+ * 富士配置类
12
+ * @author weiximei
13
+ */
14
+@Configuration
15
+public class FuShiConfig {
16
+
17
+    @Autowired
18
+    private FuShiProperties fuShiProperties;
19
+
20
+
21
+    /**
22
+     * 初始化富士HTTP客户端
23
+     * @return FuShiHttpClient
24
+     */
25
+    @Bean
26
+    public FuShiHttpClient fuShiHttpClient() {
27
+        return new FuShiHttpClient(fuShiProperties.getUrl(), fuShiProperties.getAppid(), fuShiProperties.getAppSecret(), fuShiProperties.getPrivateKey());
28
+    }
29
+
30
+    /**
31
+     * 初始化富士请求 API
32
+     * @param fuShiHttpClient
33
+     * @return
34
+     */
35
+    @Bean
36
+    public FuShiRequestAPI fuShiRequestAPI(FuShiHttpClient fuShiHttpClient) {
37
+        return new FuShiRequestAPI(fuShiHttpClient);
38
+    }
39
+
40
+}

+ 50
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/controller/HardwareController.java 파일 보기

@@ -0,0 +1,50 @@
1
+package com.community.huiju.controller;
2
+
3
+import com.community.huiju.service.FSHardwareServiceI;
4
+import com.community.huiju.service.HkHardwareServiceI;
5
+import io.swagger.annotations.Api;
6
+import org.springframework.beans.factory.annotation.Autowired;
7
+import org.springframework.cloud.context.config.annotation.RefreshScope;
8
+import org.springframework.web.bind.annotation.RequestMapping;
9
+import org.springframework.web.bind.annotation.RestController;
10
+
11
+import javax.xml.bind.util.JAXBSource;
12
+
13
+/**
14
+ * @author FXF
15
+ * @date 2019-07-03
16
+ */
17
+@RestController
18
+@RequestMapping("/")
19
+@RefreshScope
20
+@Api(value = "硬件服务 API", description = "硬件服务 API")
21
+public class HardwareController {
22
+	
23
+	@Autowired
24
+	private FSHardwareServiceI fsHardwareService;
25
+	
26
+	@Autowired
27
+	private HkHardwareServiceI hkHardwareService;
28
+	
29
+	
30
+	public String addFace(String jsonString){
31
+		//解析json
32
+		//厂家信息
33
+		if ("HK".equals(jsonString)){
34
+			//硬件信息
35
+			if ("KSDJ".equals(jsonString)){
36
+				//下发人脸权限
37
+			}else if ("MJ".equals(jsonString)){
38
+				//下发人脸权限
39
+			}
40
+		}else if ("FS".equals(jsonString)){
41
+			//硬件信息
42
+			if ("KSDJ".equals(jsonString)){
43
+				//下发人脸权限
44
+			}else if ("MJ".equals(jsonString)){
45
+				//下发人脸权限
46
+			}
47
+		}
48
+		return "";
49
+	}
50
+}

+ 66
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/exception/ExceptionHandleAdice.java 파일 보기

@@ -0,0 +1,66 @@
1
+package com.community.huiju.exception;
2
+
3
+import com.community.commom.constant.Constant;
4
+import com.community.commom.fushi.error.FuShiException;
5
+import com.community.commom.mode.ResponseBean;
6
+import lombok.extern.slf4j.Slf4j;
7
+import org.springframework.validation.ObjectError;
8
+import org.springframework.web.bind.MethodArgumentNotValidException;
9
+import org.springframework.web.bind.annotation.ControllerAdvice;
10
+import org.springframework.web.bind.annotation.ExceptionHandler;
11
+import org.springframework.web.bind.annotation.ResponseBody;
12
+
13
+import java.util.List;
14
+
15
+/**
16
+ * 统一异常出口
17
+ * @author weiximei
18
+ */
19
+@ControllerAdvice
20
+@ResponseBody
21
+@Slf4j
22
+public class ExceptionHandleAdice {
23
+
24
+
25
+    @ExceptionHandler(Exception.class)
26
+    public ResponseBean handleException(Exception e){
27
+        log.error(e.getMessage(),e);
28
+        ResponseBean response = new ResponseBean();
29
+        response.addError(Constant.REQUEST_ERROR,"设备还未联网,系统维护中");
30
+        return response;
31
+    }
32
+
33
+
34
+    @ExceptionHandler(WisdomException.class)
35
+    public ResponseBean handleException(WisdomException e) {
36
+        log.error(e.getMessage(),e);
37
+        ResponseBean response = new ResponseBean();
38
+        response.addError(e.getMessage());
39
+        return response;
40
+    }
41
+
42
+
43
+    @ExceptionHandler(MethodArgumentNotValidException.class)
44
+    public ResponseBean handlelllewgalParamException(MethodArgumentNotValidException e){
45
+        ResponseBean response = new ResponseBean();
46
+
47
+        List<ObjectError> errors  =e.getBindingResult().getAllErrors();
48
+        String message = "参数不合法";
49
+        if (errors.size() >0) {
50
+            message = errors.get(0).getDefaultMessage();
51
+        }
52
+
53
+        response.addError(message);
54
+
55
+        return response;
56
+    }
57
+
58
+    @ExceptionHandler(FuShiException.class)
59
+    public ResponseBean handleException(FuShiException e) {
60
+        log.error(e.getMessage(),e);
61
+        ResponseBean response = new ResponseBean();
62
+        response.addError(e.getMessage());
63
+        return response;
64
+    }
65
+
66
+}

+ 23
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/exception/WisdomException.java 파일 보기

@@ -0,0 +1,23 @@
1
+package com.community.huiju.exception;
2
+
3
+
4
+/**
5
+ * @author weiximei
6
+ */
7
+public class WisdomException extends RuntimeException {
8
+
9
+
10
+    public WisdomException(String msg, Throwable t) {
11
+        super(msg, t);
12
+    }
13
+
14
+    public WisdomException(String msg) {
15
+        super(msg);
16
+    }
17
+
18
+    public WisdomException(String msg, Object ...args) {
19
+        this(String.format(msg, args));
20
+    }
21
+
22
+
23
+}

+ 16
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/factory/PlatformVendors.java 파일 보기

@@ -0,0 +1,16 @@
1
+package com.community.huiju.factory;
2
+
3
+import com.community.huiju.vendor.constants.info.PlatformVendorsInfo;
4
+
5
+/**
6
+ * 平台厂商
7
+ */
8
+public abstract class PlatformVendors {
9
+
10
+    /**
11
+     * 创建平台厂商信息
12
+     * @return
13
+     */
14
+    public abstract Object createPlatformVendor(PlatformVendorsInfo platformVendorsInfo);
15
+
16
+}

+ 30
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/factory/SimplePlatformVendorsFactory.java 파일 보기

@@ -0,0 +1,30 @@
1
+package com.community.huiju.factory;
2
+
3
+import com.community.huiju.factory.impl.HKPlatformVendors;
4
+
5
+/**
6
+ * 平台厂商_工厂
7
+ */
8
+public class SimplePlatformVendorsFactory {
9
+
10
+    public static final String TYPE_HK = "hk";
11
+
12
+    public static final String TYPE_FS = "fs";
13
+
14
+    /**
15
+     * 获取 厂商
16
+     * @param type
17
+     * @return
18
+     */
19
+    public  static PlatformVendors getPlatformVendor(String type) {
20
+        switch (type) {
21
+            case "hk":
22
+                return new HKPlatformVendors();
23
+            case "fs":
24
+                return null;
25
+             default:
26
+                return null;
27
+        }
28
+    }
29
+
30
+}

+ 34
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/factory/impl/HKPlatformVendors.java 파일 보기

@@ -0,0 +1,34 @@
1
+package com.community.huiju.factory.impl;
2
+
3
+import com.community.huiju.factory.PlatformVendors;
4
+import com.community.huiju.vendor.constants.dao.IDoorMachineOperation;
5
+import com.community.huiju.vendor.constants.dao.IEntranceGuardOperation;
6
+import com.community.huiju.vendor.constants.dao.IFaceOperation;
7
+import com.community.huiju.vendor.constants.dao.IPersonOperation;
8
+import com.community.huiju.vendor.constants.info.PlatformVendorsInfo;
9
+import com.community.huiju.vendor.impl.hk.*;
10
+import lombok.Data;
11
+import org.springframework.beans.factory.annotation.Autowired;
12
+import org.springframework.beans.factory.annotation.Qualifier;
13
+import org.springframework.stereotype.Component;
14
+
15
+@Data
16
+public class HKPlatformVendors extends PlatformVendors {
17
+
18
+    private IPersonOperation iPersonOperation;
19
+
20
+    private IFaceOperation iFaceOperation;
21
+
22
+    private IEntranceGuardOperation iEntranceGuardOperation;
23
+
24
+    private IDoorMachineOperation iDoorMachineOperation;
25
+
26
+    @Override
27
+    public Object createPlatformVendor(PlatformVendorsInfo platformVendorsInfo) {
28
+        iPersonOperation = new HKPersonOperationImpl(platformVendorsInfo);
29
+        iFaceOperation = new HKFaceOperationImpl(platformVendorsInfo);
30
+        iEntranceGuardOperation = new HKEntranceGuardOperationImpl(platformVendorsInfo);
31
+        iDoorMachineOperation = new HKDoorMachineOperationImpl(platformVendorsInfo);
32
+        return new HKCombination(iPersonOperation, iFaceOperation, iEntranceGuardOperation, iDoorMachineOperation);
33
+    }
34
+}

+ 32
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/log/LogAnnotation.java 파일 보기

@@ -0,0 +1,32 @@
1
+package com.community.huiju.log;
2
+
3
+import java.lang.annotation.*;
4
+
5
+/**
6
+ * 日志注解
7
+ * @author weiximei
8
+ */
9
+@Retention(RetentionPolicy.RUNTIME) // 在运行时使用
10
+@Target({ ElementType.METHOD }) // 在方法上使用
11
+@Documented
12
+public @interface LogAnnotation {
13
+
14
+    /**
15
+     * 日志类型
16
+     * @return
17
+     */
18
+    LogEnums value() default LogEnums.NOT;
19
+
20
+    /**
21
+     * 是否记录
22
+     * @return
23
+     */
24
+    boolean record() default true;
25
+
26
+    /**
27
+     * 别名, 作为注释用
28
+     * @return
29
+     */
30
+    String alias() default "";
31
+
32
+}

+ 43
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/log/LogEnums.java 파일 보기

@@ -0,0 +1,43 @@
1
+package com.community.huiju.log;
2
+
3
+/**
4
+ * 日志类型
5
+ *
6
+ * @author weiximei
7
+ */
8
+public enum LogEnums {
9
+
10
+    NOT(8000, "无类型"),
11
+
12
+    DA_SU(8001, "大苏")
13
+
14
+    ;
15
+
16
+    private Integer code;
17
+
18
+    private String value;
19
+
20
+
21
+    LogEnums(Integer code, String value) {
22
+        this.code = code;
23
+        this.value = value;
24
+    }
25
+
26
+    public Integer getCode() {
27
+        return code;
28
+    }
29
+
30
+    public void setCode(Integer code) {
31
+        this.code = code;
32
+    }
33
+
34
+    public String getValue() {
35
+        return value;
36
+    }
37
+
38
+    public void setValue(String value) {
39
+        this.value = value;
40
+    }
41
+
42
+
43
+}

+ 103
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/log/LogFactory.java 파일 보기

@@ -0,0 +1,103 @@
1
+package com.community.huiju.log;
2
+
3
+import java.io.File;
4
+import java.io.FileNotFoundException;
5
+import java.io.IOException;
6
+import java.io.RandomAccessFile;
7
+import java.nio.ByteBuffer;
8
+import java.nio.channels.FileChannel;
9
+import java.nio.channels.FileLock;
10
+import java.time.LocalDate;
11
+import java.time.LocalDateTime;
12
+import java.time.format.DateTimeFormatter;
13
+import java.util.TimerTask;
14
+
15
+/**
16
+ * 日志工厂
17
+ * @author weiximei
18
+ */
19
+public class LogFactory {
20
+
21
+    public static File getFile() {
22
+        LocalDate localDate = LocalDate.now();
23
+        String pathMkdir = "";
24
+
25
+        String os = System.getProperty("os.name");
26
+        if(os.toLowerCase().startsWith("win")){
27
+            pathMkdir = "E:" + File.separator + "log" + File.separator + "property-log" + File.separator + localDate.getYear() + "-" + localDate.getMonthValue() + "-" + localDate.getDayOfMonth();
28
+        } else {
29
+            pathMkdir = "/home/fxf/smart-community" + File.separator + "log" + File.separator + "property-log" + File.separator + localDate.getYear() + "-" + localDate.getMonthValue() + "-" + localDate.getDayOfMonth();
30
+        }
31
+
32
+        File file = new File(pathMkdir);
33
+        if (!file.exists()) {
34
+            file.mkdirs();
35
+        }
36
+        file = new File(pathMkdir + File.separator + "app-log.log");
37
+
38
+        return file;
39
+    }
40
+
41
+    /**
42
+     * 记录请求参数和返回值
43
+     * @param parameters
44
+     * @param returnValue
45
+     * @return
46
+     */
47
+    public static TimerTask parametersAndReturn(String parameters, String returnValue){
48
+        return new TimerTask() {
49
+            @Override
50
+            public void run() {
51
+
52
+                RandomAccessFile accessFile = null;
53
+                FileChannel fileChannel = null;
54
+                FileLock fileLock = null;
55
+                try {
56
+                    // 获取这个文件的读和写的权限
57
+                    accessFile = new RandomAccessFile(getFile(), "rw");
58
+                    // 文件通道
59
+                    fileChannel = accessFile.getChannel();
60
+                    fileLock = null;
61
+                    while (true) {
62
+                        try {
63
+                            // 获取锁,如果失败,继续尝试
64
+                            fileLock = fileChannel.tryLock();
65
+                            break;
66
+                        } catch (Exception e) {
67
+                            Thread.sleep(100);
68
+                        }
69
+                    }
70
+
71
+                    // 获取当前这个文件的大小
72
+                    long length = accessFile.length();
73
+                    // 设置写入的指针, 设置到这个文件的末尾
74
+                    accessFile.seek(length);
75
+                    // 开始写入文件
76
+                    LocalDateTime localDateTime = LocalDateTime.now();
77
+                    DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
78
+                    String str = dateTimeFormatter.format(localDateTime) + " === " + Thread.currentThread().getName() + "  : " + parameters + "\n";
79
+                    fileChannel.write(ByteBuffer.wrap(str.getBytes()));
80
+                    str = dateTimeFormatter.format(localDateTime) + " === " + Thread.currentThread().getName() + "  : " + returnValue + "\n";
81
+                    fileChannel.write(ByteBuffer.wrap(str.getBytes()));
82
+
83
+                } catch (Exception e) {
84
+                    e.printStackTrace();
85
+                } finally {
86
+                    if (fileLock != null && fileChannel != null && accessFile != null) {
87
+                        // 释放锁
88
+                        try {
89
+                            fileLock.release();
90
+                            fileChannel.close();
91
+                            accessFile.close();
92
+                        } catch (Exception e) {
93
+                            e.printStackTrace();
94
+                        }
95
+                    }
96
+                }
97
+
98
+
99
+            }
100
+        };
101
+    }
102
+
103
+}

+ 46
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/log/LogFileManager.java 파일 보기

@@ -0,0 +1,46 @@
1
+package com.community.huiju.log;
2
+
3
+import java.util.TimerTask;
4
+import java.util.concurrent.ScheduledThreadPoolExecutor;
5
+
6
+/**
7
+ * 日志文件记录
8
+ * @author weiximei
9
+ */
10
+public class LogFileManager {
11
+
12
+    // 记录日志的线程池
13
+    private ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(10);
14
+
15
+    private LogFileManager() {}
16
+
17
+    public static LogFileManager getInstance() {
18
+        return LogSingleton.INSTANCE.getInstance();
19
+    }
20
+
21
+    /**
22
+     * 记录日志
23
+     * @param timerTask 任务
24
+     */
25
+    public void executeLog(TimerTask timerTask){
26
+        // 日志记录
27
+        scheduledThreadPoolExecutor.execute(timerTask);
28
+    }
29
+
30
+    /**
31
+     * 枚举
32
+     */
33
+    private static enum LogSingleton {
34
+        INSTANCE;
35
+
36
+        private LogFileManager logFileManager;
37
+        private LogSingleton() {
38
+            logFileManager = new LogFileManager();
39
+        }
40
+
41
+        public LogFileManager getInstance() {
42
+            return logFileManager;
43
+        }
44
+
45
+    }
46
+}

+ 84
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/service/FSHardwareServiceI.java 파일 보기

@@ -0,0 +1,84 @@
1
+package com.community.huiju.service;
2
+
3
+import com.community.commom.mode.ResponseBean;
4
+
5
+/**
6
+ * 富士硬件接口
7
+ */
8
+public interface FSHardwareServiceI {
9
+
10
+
11
+    /**
12
+     * 获取停车信息(通过车牌号)
13
+     *
14
+     * @param carNo
15
+     * @param parkingCode 车管所编号
16
+     * @return
17
+     */
18
+    ResponseBean getParkInfoByCarNo(String carNo, String parkingCode);
19
+
20
+    /**
21
+     * 第三方月卡上发续费
22
+     * @param Phone 车主手机号
23
+     * @param RenewDayType 续费日期类型: 3:年; 2:月; 1:日;
24
+     * @param RenewDay 续费日期数目
25
+     * @param PayStyle 交易方式(中文描述),例如:微信、 支付宝、 银联
26
+     * @param CarNo 车牌号
27
+     * @param CardNo 停车卡号
28
+     * @param RechargeAmt 充值续费金额
29
+     * @param ParkingCode 车管所编号
30
+     * @return
31
+     */
32
+    ResponseBean apiThirdPartyMonthCardPay(String Phone, String RenewDayType, String RenewDay, String PayStyle, String CarNo, String CardNo, String RechargeAmt, String ParkingCode);
33
+
34
+
35
+    /**
36
+     * 第三方临时卡上发缴费
37
+     * @param Amount 应缴金额(单位元)
38
+     * @param ActualAmount 实缴金额(单位元)
39
+     * @param DeductionAmount 抵扣金额(单位元)
40
+     * @param Reason 抵扣原因
41
+     * @param PayStyle 交易方式(汉字描述),例如:微信、支付宝、银联
42
+     * @param CarNo 车牌号
43
+     * @param CardNo 停车卡号
44
+     * @param CouponList 使用的优惠券列表(JSON字符串)
45
+     *               MerchantName: 商户名称
46
+     *               CouponType: 优惠券优惠类型1全免2减免金额3减免时长4减免百分比
47
+     *               CouponValue: 对应优惠券类型的值 金额/时间/折扣
48
+     *               CouponCode: 优惠券编码
49
+     *               FavorableType: 优惠券类型1 纸质券 2 电子券 3 活动券
50
+     *               UseStatus:标识优惠券是线上或线下使用的状态 1只在线上使用 2只在线下使用 3线上线下都可以使用
51
+     *               IsAuto: 是否自动使用优惠券1是2否
52
+     *               EndTime: 截至时间
53
+     *               CouponDescribe: 优惠券描述
54
+     *               CouponName: 优惠券名称
55
+     * @param ParkingCode 车管所编号
56
+     * @return
57
+     */
58
+    ResponseBean apiThirdPartyTemporaryCardPay(String Amount, String ActualAmount, String DeductionAmount, String Reason, String PayStyle, String CarNo, String CardNo, String CouponList, String ParkingCode);
59
+
60
+    /**
61
+     * 获取线下算费结果
62
+     * @param CarNoOrCardNo 车牌号码或卡号
63
+     * @param ParkingCode 车管所编号
64
+     * @return
65
+     */
66
+    ResponseBean apiGetOfflineFee(String CarNoOrCardNo, String ParkingCode);
67
+
68
+    /**
69
+     * 获取月租车信息(通过车牌号)
70
+     * @param CarNo
71
+     * @param ParkingCode 车管所编号
72
+     * @return
73
+     */
74
+    ResponseBean parkGetMonthCardInfoByCarNo(String CarNo, String ParkingCode);
75
+
76
+    /**
77
+     * 获取临时车信息(通过车牌号)
78
+     * @param CarNo
79
+     * @param ParkingCode 车管所编号
80
+     * @return
81
+     */
82
+    ResponseBean parkGetTempCarPaymentInfoByCarNo(String CarNo, String ParkingCode);
83
+
84
+}

+ 289
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/service/HkHardwareServiceI.java 파일 보기

@@ -0,0 +1,289 @@
1
+package com.community.huiju.service;
2
+
3
+import com.community.commom.mode.ResponseBean;
4
+import org.springframework.web.multipart.MultipartFile;
5
+
6
+import java.util.Map;
7
+
8
+/**
9
+ * 海康硬件接口
10
+ */
11
+public interface HkHardwareServiceI {
12
+
13
+    /**
14
+     * 下发门口机权限
15
+     *
16
+     *  {
17
+     *      "authName":"权限组",
18
+     *      "personIds":[人员海康ID...],
19
+     *      "secret":"服务器secret",
20
+     *      "appkey":"服务器appkey",
21
+     *      "openapi_ip_port_http":"服务器地址",
22
+     *      "opUserUuid":"服务器操作人员UUID",
23
+     *      "longNums":"门口机(可视对讲)编号"
24
+     *  }
25
+     *
26
+     * @param jsonString
27
+     * @return
28
+     */
29
+    ResponseBean downloadDoorPermissions(String jsonString);
30
+
31
+    /**
32
+     * 下发门口机人脸
33
+     *
34
+     *  {
35
+     *      "secret":"服务器secret",
36
+     *      "appkey":"服务器appkey",
37
+     *      "openapi_ip_port_http":"服务器地址",
38
+     *      "opUserUuid":"服务器操作人员UUID",
39
+     *      "opType": 1, // 表示下发
40
+     *      "personIds":"人员海康ID",
41
+     *      "longNums":"门口机(可视对讲)编号"
42
+     *  }
43
+     *
44
+     * @param jsonString
45
+     * @return
46
+     */
47
+    ResponseBean downloadDoorFace(String jsonString);
48
+
49
+    /**
50
+     *
51
+     * 异步反控开门 (远程开门(可视对讲,门口机))
52
+     *
53
+     *  {
54
+     *      "longNums":"门口机编号",
55
+     *      "openapi_ip_port_http":"服务器地址",
56
+     *      "secret":"服务器secret",
57
+     *      "appkey":"服务器appkey",
58
+     *      "opUserUuid":"服务器操作人员UUID"
59
+     *  }
60
+     *
61
+     * @param jsonString
62
+     * @return
63
+     */
64
+    ResponseBean syncControl(String jsonString);
65
+
66
+    /**
67
+     * 删除门口机权限
68
+     * @return
69
+     */
70
+    ResponseBean deleteDoorPermissions(String jsonString);
71
+
72
+    /**
73
+     * 下发门禁权限
74
+     *
75
+     *  {
76
+     *      "personIds":"人员海康ID",
77
+     *      "doorUuids":"门禁点UUID",
78
+     *      "secret":"服务器secret",
79
+     *      "appkey":"服务器appkey",
80
+     *      "openapi_ip_port_http":"服务器操地址",
81
+     *      "opUserUuid":"服务器操作人员UUID"
82
+     *
83
+     *
84
+     *  }
85
+     *
86
+     * @param jsonString
87
+     * @return
88
+     */
89
+    ResponseBean downloadEntranceGuardPermissions(String jsonString);
90
+
91
+    /**
92
+     * 下发门禁人脸
93
+     *
94
+     *  {
95
+     *      "secret":"服务器secret",
96
+     *      "appkey":"服务器appkey",
97
+     *      "openapi_ip_port_http":"服务器操地址",
98
+     *      "opUserUuid":"服务器操作人员UUID",
99
+     *      "personIds":"人员海康ID",
100
+     *      "deviceUuids":"门禁设备UUID",
101
+     *      "type":"1"
102
+     *  }
103
+     *
104
+     * @param jsonString
105
+     * @return
106
+     */
107
+    ResponseBean downloadEntranceGuardFace(String jsonString);
108
+
109
+    /**
110
+     * 删除门禁权限
111
+     * @return
112
+     */
113
+    ResponseBean deleteEntranceGuardPermissions(String jsonString);
114
+
115
+
116
+    /**
117
+     * 添加人脸
118
+     *
119
+     *  {
120
+     *      "doorPermissions":{ // 下发门口机权限(可视对讲)
121
+     *          "authName":"权限组",
122
+     *          "personIds":[人员海康ID...],
123
+     *          "secret":"服务器secret",
124
+     *          "appkey":"服务器appkey",
125
+     *          "openapi_ip_port_http":"服务器地址",
126
+     *          "opUserUuid":"服务器操作人员UUID",
127
+     *          "longNums":"门口机(可视对讲)编号"
128
+     *      },
129
+     *      "doorFace": { // 下发门口机人脸权限
130
+     *          "secret":"服务器secret",
131
+     *          "appkey":"服务器appkey",
132
+     *          "openapi_ip_port_http":"服务器地址",
133
+     *          "opUserUuid":"服务器操作人员UUID",
134
+     *          "opType": 1, // 表示下发
135
+     *          "personIds":"人员海康ID",
136
+     *          "longNums":"门口机(可视对讲)编号"
137
+     *      },
138
+     *      "entranceGuardPermissions":{ // 下发门禁权限
139
+     *          "personIds":"人员海康ID",
140
+     *          "doorUuids":"门禁点UUID",
141
+     *          "secret":"服务器secret",
142
+     *          "appkey":"服务器appkey",
143
+     *          "openapi_ip_port_http":"服务器操地址",
144
+     *          "opUserUuid":"服务器操作人员UUID"
145
+     *      },
146
+     *      "entranceGuardFace":{ // 下发门禁人脸权限
147
+     *          "secret":"服务器secret",
148
+     *          "appkey":"服务器appkey",
149
+     *          "openapi_ip_port_http":"服务器操地址",
150
+     *          "opUserUuid":"服务器操作人员UUID",
151
+     *          "personIds":"人员海康ID",
152
+     *          "deviceUuids":"门禁设备UUID",
153
+     *          "type":"1"
154
+     *      },
155
+     *      "person":{
156
+     *          "secret":"服务器secret",
157
+     *          "appkey":"服务器appkey",
158
+     *          "openapi_ip_port_http":"服务器操地址",
159
+     *          "opUserUuid":"服务器操作人员UUID",
160
+     *          "personId":"人员海康ID",
161
+     *          "personNo":"人员海康编号",
162
+     *          "personName":"人员名称",
163
+     *          //"facePhoto":"人脸图片",
164
+     *          "cardNo":"卡号"
165
+     *      }
166
+     *  }
167
+     *
168
+     *
169
+     * @param jsonString
170
+     * @return
171
+     */
172
+    ResponseBean addFace(MultipartFile faceImg, String jsonString);
173
+
174
+    /**
175
+     * 修改人脸
176
+     *
177
+     *
178
+     *  {
179
+     *      "doorPermissions":{ // 下发门口机权限(可视对讲)
180
+     *          "authName":"权限组",
181
+     *          "personIds":[人员海康ID...],
182
+     *          "secret":"服务器secret",
183
+     *          "appkey":"服务器appkey",
184
+     *          "openapi_ip_port_http":"服务器地址",
185
+     *          "opUserUuid":"服务器操作人员UUID",
186
+     *          "longNums":"门口机(可视对讲)编号"
187
+     *      },
188
+     *      "doorFace": { // 下发门口机人脸权限
189
+     *          "secret":"服务器secret",
190
+     *          "appkey":"服务器appkey",
191
+     *          "openapi_ip_port_http":"服务器地址",
192
+     *          "opUserUuid":"服务器操作人员UUID",
193
+     *          "opType": 1, // 表示下发
194
+     *          "personIds":"人员海康ID",
195
+     *          "longNums":"门口机(可视对讲)编号"
196
+     *      },
197
+     *      "entranceGuardPermissions":{ // 下发门禁权限
198
+     *          "personIds":"人员海康ID",
199
+     *          "doorUuids":"门禁点UUID",
200
+     *          "secret":"服务器secret",
201
+     *          "appkey":"服务器appkey",
202
+     *          "openapi_ip_port_http":"服务器操地址",
203
+     *          "opUserUuid":"服务器操作人员UUID"
204
+     *      },
205
+     *      "entranceGuardFace":{ // 下发门禁人脸权限
206
+     *          "secret":"服务器secret",
207
+     *          "appkey":"服务器appkey",
208
+     *          "openapi_ip_port_http":"服务器操地址",
209
+     *          "opUserUuid":"服务器操作人员UUID",
210
+     *          "personIds":"人员海康ID",
211
+     *          "deviceUuids":"门禁设备UUID",
212
+     *          "type":"1"
213
+     *      },
214
+     *      "person":{
215
+     *          "secret":"服务器secret",
216
+     *          "appkey":"服务器appkey",
217
+     *          "openapi_ip_port_http":"服务器操地址",
218
+     *          "opUserUuid":"服务器操作人员UUID",
219
+     *          "personId":"人员海康ID",
220
+     *          "personNo":"人员海康编号",
221
+     *          "personName":"人员名称",
222
+     *          //"facePhoto":"人脸图片",
223
+     *          "cardNo":"卡号"
224
+     *      }
225
+     *  }
226
+     *
227
+     *
228
+     * @param jsonString
229
+     * @return
230
+     */
231
+    ResponseBean updateFace(MultipartFile faceImg,String jsonString);
232
+
233
+    /**
234
+     * 删除人脸
235
+     * @param jsonString
236
+     * @return
237
+     */
238
+    ResponseBean deleteFace(String jsonString);
239
+
240
+    /**
241
+     * 添加人员
242
+     *
243
+     *  { // 人员信息
244
+     *          "openapi_ip_port_http":"服务器地址",
245
+     *          "appkey":"服务器appkey",
246
+     *          "secret":"服务器secret",
247
+     *          "opUserUuid":"操作人员UUID",
248
+     *          "personNo":"人员编号",
249
+     *          "personName":"人员姓名",
250
+     *          "remark":"手机号",
251
+     *          "deptUuid","部门uuid"
252
+     *
253
+     *  }
254
+     *
255
+     * @param jsonString
256
+     * @return
257
+     */
258
+    ResponseBean addPerson(String jsonString);
259
+
260
+    /**
261
+     * 修改人员
262
+     *
263
+     *  { // 人员信息
264
+     *          "openapi_ip_port_http":"服务器地址",
265
+     *          "appkey":"服务器appkey",
266
+     *          "secret":"服务器secret",
267
+     *          "opUserUuid":"操作人员UUID",
268
+     *          "personNo":"人员编号",
269
+     *          "personName":"人员姓名",
270
+     *          "remark":"手机号",
271
+     *          "deptUuid","部门uuid",
272
+     *          "personId":"人员海康ID"
273
+     *
274
+     *  }
275
+     *
276
+     * @param jsonString
277
+     * @return
278
+     */
279
+    ResponseBean updatePerson(String jsonString);
280
+
281
+    /**
282
+     * 删除人员
283
+     * @param jsonString
284
+     * @return
285
+     */
286
+    ResponseBean deletePerson(String jsonString);
287
+
288
+
289
+}

+ 167
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/service/impl/FSHardwareServiceImpl.java 파일 보기

@@ -0,0 +1,167 @@
1
+package com.community.huiju.service.impl;
2
+
3
+import com.alibaba.fastjson.JSONObject;
4
+import com.community.commom.fushi.FuShiRequestAPI;
5
+import com.community.commom.mode.ResponseBean;
6
+import com.community.commom.uuid.IdGen;
7
+import com.community.huiju.base.api.fushi.FuShiHttpClient;
8
+import com.community.huiju.base.properties.FuShiProperties;
9
+import com.community.huiju.log.LogAnnotation;
10
+import com.community.huiju.log.LogEnums;
11
+import com.community.huiju.service.FSHardwareServiceI;
12
+import com.google.common.collect.Maps;
13
+import org.springframework.beans.factory.annotation.Autowired;
14
+import org.springframework.stereotype.Service;
15
+
16
+import java.time.LocalDateTime;
17
+import java.time.format.DateTimeFormatter;
18
+import java.util.Map;
19
+
20
+/**
21
+ * 富士硬件接口
22
+ * @author FXF
23
+ * @date 2019-07-03
24
+ */
25
+@Service
26
+public class FSHardwareServiceImpl implements FSHardwareServiceI {
27
+
28
+    @Autowired
29
+    private FuShiRequestAPI fuShiRequestAPI;
30
+
31
+    @Autowired
32
+    private FuShiProperties fuShiProperties;
33
+
34
+    private IdGen idGen = IdGen.get();
35
+
36
+    /**
37
+     * 获取 富士 json 值
38
+     * @param jsonString
39
+     * @return
40
+     */
41
+    private Map<String,Object> getFuShiInfo(String jsonString) {
42
+        JSONObject jsonObject = JSONObject.parseObject(jsonString);
43
+        Map<String, Object> map = Maps.newHashMap();
44
+        Map<String, Object> jsonParam = jsonObject.getJSONObject("JsonParam").getInnerMap();
45
+        // 移除优惠券
46
+        jsonParam.remove("CouponList");
47
+        map.put("JsonParam", jsonParam);
48
+        map.put("Redirect", jsonObject.getString("Redirect"));
49
+        map.put("DataType", jsonObject.getInteger("DataType"));
50
+        return map;
51
+    }
52
+
53
+    @LogAnnotation(value = LogEnums.DA_SU, alias = "获取停车信息(通过车牌号)")
54
+    @Override
55
+    public ResponseBean getParkInfoByCarNo(String carNo, String parkingCode) {
56
+        ResponseBean responseBean = new ResponseBean();
57
+        String parkInfo = fuShiRequestAPI.getParkInfoByCarNo(parkingCode, carNo);
58
+        Map<String, Object> fuShiInfo = getFuShiInfo(parkInfo);
59
+        responseBean.addSuccess(fuShiInfo);
60
+        return responseBean;
61
+    }
62
+
63
+    @LogAnnotation(value = LogEnums.DA_SU, alias = "第三方月卡上发续费")
64
+    @Override
65
+    public ResponseBean apiThirdPartyMonthCardPay(String Phone, String RenewDayType, String RenewDay, String PayStyle, String CarNo, String CardNo,String RechargeAmt, String ParkingCode) {
66
+        ResponseBean responseBean = new ResponseBean();
67
+        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
68
+        // 交易编码
69
+        String dealNo = idGen.nextId() + "";
70
+        // 第三方交易日期
71
+        String dateTime = dateTimeFormatter.format(LocalDateTime.now());
72
+        // 富士云请求
73
+        String partyMonthCardPay = fuShiRequestAPI.apiThirdPartyMonthCardPay(RenewDayType, RenewDay, dealNo, PayStyle, CarNo, ParkingCode, CardNo, RechargeAmt, dateTime);
74
+        String tradeNo = JSONObject.parseObject(partyMonthCardPay).getString("TradeNo");
75
+        Map<String, Object> map = Maps.newHashMap();
76
+        map.put("TradeNo", tradeNo);
77
+        responseBean.addSuccess(map);
78
+        return responseBean;
79
+    }
80
+
81
+    /**
82
+     * 第三方临时卡上发缴费
83
+     * @param Amount 应缴金额(单位元)
84
+     * @param ActualAmount 实缴金额(单位元)
85
+     * @param DeductionAmount 抵扣金额(单位元)
86
+     * @param Reason 抵扣原因
87
+     * @param PayStyle 交易方式(汉字描述),例如:微信、支付宝、银联
88
+     * @param CarNo 车牌号
89
+     * @param CardNo 停车卡号
90
+     * @param CouponList 使用的优惠券列表(JSON字符串)
91
+     *               MerchantName: 商户名称
92
+     *               CouponType: 优惠券优惠类型1全免2减免金额3减免时长4减免百分比
93
+     *               CouponValue: 对应优惠券类型的值 金额/时间/折扣
94
+     *               CouponCode: 优惠券编码
95
+     *               FavorableType: 优惠券类型1 纸质券 2 电子券 3 活动券
96
+     *               UseStatus:标识优惠券是线上或线下使用的状态 1只在线上使用 2只在线下使用 3线上线下都可以使用
97
+     *               IsAuto: 是否自动使用优惠券1是2否
98
+     *               EndTime: 截至时间
99
+     *               CouponDescribe: 优惠券描述
100
+     *               CouponName: 优惠券名称
101
+     *
102
+     * @return
103
+     */
104
+    @LogAnnotation(value = LogEnums.DA_SU, alias = "第三方临时卡上发缴费")
105
+    @Override
106
+    public ResponseBean apiThirdPartyTemporaryCardPay(String Amount, String ActualAmount, String DeductionAmount, String Reason, String PayStyle, String CarNo, String CardNo, String CouponList, String ParkingCode) {
107
+        ResponseBean responseBean = new ResponseBean();
108
+        // 交易编号
109
+        String dealNo = idGen.nextId() + "";
110
+        String apiThirdPartyTemporaryCardPay = fuShiRequestAPI.apiThirdPartyTemporaryCardPay(Amount, ActualAmount, DeductionAmount, Reason, dealNo, PayStyle, CarNo, ParkingCode, CardNo, "", CouponList);
111
+        String tradeNo = JSONObject.parseObject(apiThirdPartyTemporaryCardPay).getString("TradeNo");
112
+        Map<String, Object> map = Maps.newHashMap();
113
+        map.put("TradeNo", tradeNo);
114
+        responseBean.addSuccess(map);
115
+        return responseBean;
116
+    }
117
+
118
+    @LogAnnotation(value = LogEnums.DA_SU, alias = "获取线下算费结果")
119
+    @Override
120
+    public ResponseBean apiGetOfflineFee(String CarNoOrCardNo, String ParkingCode) {
121
+        ResponseBean responseBean = new ResponseBean();
122
+        String apiGetOfflineFee = fuShiRequestAPI.apiGetOfflineFee(ParkingCode, CarNoOrCardNo);
123
+        String result = JSONObject.parseObject(apiGetOfflineFee).getString("Result");
124
+        Map<String, Object> map = Maps.newHashMap();
125
+        map.put("Result", result);
126
+        responseBean.addSuccess(map);
127
+        return responseBean;
128
+    }
129
+
130
+    /**
131
+     * 获取月租车信息(通过车牌号)
132
+     * @param CarNo
133
+     * @return
134
+     */
135
+    @LogAnnotation(value = LogEnums.DA_SU, alias = "获取月租车信息(通过车牌号)")
136
+    @Override
137
+    public ResponseBean parkGetMonthCardInfoByCarNo(String CarNo, String ParkingCode) {
138
+        ResponseBean responseBean = new ResponseBean();
139
+        String parkGetMonthCardInfoByCarNo = fuShiRequestAPI.parkGetMonthCardInfoByCarNo(ParkingCode, CarNo);
140
+        JSONObject jsonObject = JSONObject.parseObject(parkGetMonthCardInfoByCarNo);
141
+        Map<String, Object> map = Maps.newHashMap();
142
+        Map<String, Object> result = jsonObject.getJSONObject("Result").getInnerMap();
143
+        result.remove("CouponList");
144
+        map.put("Result", result);
145
+        responseBean.addSuccess(map);
146
+        return responseBean;
147
+    }
148
+
149
+    /**
150
+     * 获取临时车信息(通过车牌号)
151
+     * @param CarNo
152
+     * @return
153
+     */
154
+    @LogAnnotation(value = LogEnums.DA_SU, alias = "获取临时车信息(通过车牌号)")
155
+    @Override
156
+    public ResponseBean parkGetTempCarPaymentInfoByCarNo(String CarNo, String ParkingCode) {
157
+        ResponseBean responseBean = new ResponseBean();
158
+        String parkGetMonthCardInfoByCarNo = fuShiRequestAPI.parkGetTempCarPaymentInfoByCarNo(ParkingCode, CarNo);
159
+        JSONObject jsonObject = JSONObject.parseObject(parkGetMonthCardInfoByCarNo);
160
+        Map<String, Object> map = Maps.newHashMap();
161
+        Map<String, Object> result = jsonObject.getJSONObject("Result").getInnerMap();
162
+        result.remove("CouponList");
163
+        map.put("Result", result);
164
+        responseBean.addSuccess(map);
165
+        return responseBean;
166
+    }
167
+}

+ 284
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/service/impl/HkHardwareServiceImpl.java 파일 보기

@@ -0,0 +1,284 @@
1
+package com.community.huiju.service.impl;
2
+
3
+import com.alibaba.fastjson.JSONObject;
4
+import com.community.commom.mode.ResponseBean;
5
+import com.community.huiju.base.api.hk.HKOpenApi;
6
+import com.community.huiju.factory.PlatformVendors;
7
+import com.community.huiju.factory.SimplePlatformVendorsFactory;
8
+import com.community.huiju.service.HkHardwareServiceI;
9
+import com.community.huiju.vendor.constants.dao.IPersonOperation;
10
+import com.community.huiju.vendor.constants.info.PlatformVendorsInfo;
11
+import com.community.huiju.vendor.impl.hk.HKCombination;
12
+import com.google.common.collect.Maps;
13
+import lombok.extern.slf4j.Slf4j;
14
+import org.springframework.stereotype.Service;
15
+import org.springframework.web.multipart.MultipartFile;
16
+
17
+import java.text.ParseException;
18
+import java.text.SimpleDateFormat;
19
+import java.time.LocalDate;
20
+import java.util.HashMap;
21
+import java.util.List;
22
+import java.util.Map;
23
+
24
+/**
25
+ * 海康硬件接口
26
+ * @author FXF
27
+ * @date 2019-07-03
28
+ */
29
+@Service
30
+@Slf4j
31
+public class HkHardwareServiceImpl implements HkHardwareServiceI {
32
+
33
+    @Override
34
+    public ResponseBean downloadDoorPermissions(String jsonString) {
35
+        Map<String, Object> innerMap = JSONObject.parseObject(jsonString).getInnerMap();
36
+        String result = HKOpenApi.addOutDoorAuth(innerMap);
37
+        ResponseBean responseBean = new ResponseBean();
38
+        responseBean.addSuccess(JSONObject.parseObject(result).getInnerMap());
39
+        return responseBean;
40
+    }
41
+
42
+    @Override
43
+    public ResponseBean downloadDoorFace(String jsonString) {
44
+        Map<String, Object> innerMap = JSONObject.parseObject(jsonString).getInnerMap();
45
+
46
+        String secret = (String) innerMap.get("secret");
47
+        String appkey = (String) innerMap.get("appkey");
48
+        String openapi_ip_port_http = (String) innerMap.get("openapi_ip_port_http");
49
+        String opUserUuid = (String) innerMap.get("opUserUuid");
50
+        Integer opType = (Integer) innerMap.get("opType"); // 1 表示下发
51
+        List<Integer> personIds = (List<Integer>) innerMap.get("personIds");
52
+        List<String> longNums = (List<String>) innerMap.get("longNums");
53
+
54
+        String result = HKOpenApi.visualIntercom(opUserUuid, opType, personIds, longNums, appkey, secret,openapi_ip_port_http);
55
+        ResponseBean responseBean = new ResponseBean();
56
+        responseBean.addSuccess(JSONObject.parseObject(result).getInnerMap());
57
+        return responseBean;
58
+    }
59
+
60
+    @Override
61
+    public ResponseBean syncControl(String jsonString) {
62
+        JSONObject jsonObject = JSONObject.parseObject(jsonString);
63
+        Map<String, Object> innerMap = jsonObject.getInnerMap();
64
+
65
+        ResponseBean responseBean = new ResponseBean();
66
+        String result = HKOpenApi.syncControl(innerMap);
67
+        responseBean.addSuccess(JSONObject.parseObject(result).getInnerMap());
68
+        return responseBean;
69
+    }
70
+
71
+    @Override
72
+    public ResponseBean deleteDoorPermissions(String jsonString) {
73
+        return null;
74
+    }
75
+
76
+    @Override
77
+    public ResponseBean downloadEntranceGuardPermissions(String jsonString) {
78
+        Map<String,Object> map = JSONObject.parseObject(jsonString, HashMap.class);
79
+        // 添加门禁权限
80
+        String result = HKOpenApi.addAuthoritiesByPersonIds(map);
81
+
82
+        // 下发门禁权限,还需要这两个参数
83
+        map.put("operateType",1);
84
+        map.put("includeFinger",1);
85
+
86
+        result = HKOpenApi.downloadAuthorityByPersonIds(map);
87
+        ResponseBean responseBean = new ResponseBean();
88
+        responseBean.addSuccess(JSONObject.parseObject(result).getInnerMap());
89
+        return responseBean;
90
+    }
91
+
92
+    @Override
93
+    public ResponseBean downloadEntranceGuardFace(String jsonString) {
94
+        Map<String, Object> innerMap = JSONObject.parseObject(jsonString).getInnerMap();
95
+        String result = HKOpenApi.downloadFaceAndFingerInfos(innerMap);
96
+        ResponseBean responseBean = new ResponseBean();
97
+        responseBean.addSuccess(JSONObject.parseObject(result).getInnerMap());
98
+        return responseBean;
99
+    }
100
+
101
+    @Override
102
+    public ResponseBean deleteEntranceGuardPermissions(String jsonString) {
103
+        return null;
104
+    }
105
+
106
+    @Override
107
+    public ResponseBean addFace(MultipartFile faceImg, String jsonString) {
108
+        String result = updateFaceImage(faceImg, jsonString);
109
+        ResponseBean responseBean = new ResponseBean();
110
+        responseBean.addSuccess(JSONObject.parseObject(result).getInnerMap());
111
+        return responseBean;
112
+    }
113
+
114
+    private String updateFaceImage(MultipartFile faceImg, String jsonString) {
115
+        JSONObject jsonObject = JSONObject.parseObject(jsonString);
116
+        Map<String, Object> innerMap = jsonObject.getJSONObject("person").getInnerMap();
117
+
118
+        String secret = (String) innerMap.get("secret");
119
+        String appkey = (String) innerMap.get("appkey");
120
+        String openapi_ip_port_http = (String) innerMap.get("openapi_ip_port_http");
121
+        String opUserUuid = (String) innerMap.get("opUserUuid");
122
+        Integer personId = (Integer) innerMap.get("personId");
123
+        Long personNo = (Long) innerMap.get("personNo");
124
+        String personName = (String) innerMap.get("personName");
125
+        String cardNo = (String) innerMap.get("cardNo");
126
+
127
+        // 修改人脸
128
+        String result = HKOpenApi.HKpersonGroupId(faceImg, personId, personNo, personName, cardNo, appkey, secret, openapi_ip_port_http, opUserUuid);
129
+
130
+        // 下发门禁卡权限
131
+        JSONObject entranceGuardPermissions = jsonObject.getJSONObject("entranceGuardPermissions");
132
+        if (null != entranceGuardPermissions) {
133
+            downloadEntranceGuardPermissions(entranceGuardPermissions.toJSONString());
134
+        }
135
+
136
+        // 下发门禁人脸权限
137
+        JSONObject entranceGuardFace = jsonObject.getJSONObject("entranceGuardFace");
138
+        if (null != entranceGuardFace) {
139
+            downloadEntranceGuardFace(entranceGuardFace.toJSONString());
140
+        }
141
+
142
+        // 下发门口机(可视对讲)卡权限
143
+        JSONObject doorPermissions = jsonObject.getJSONObject("doorPermissions");
144
+        if (null != doorPermissions) {
145
+            downloadDoorPermissions(doorPermissions.toJSONString());
146
+        }
147
+
148
+        // 下发门口机(可视对讲)人脸权限
149
+        JSONObject doorFace = jsonObject.getJSONObject("doorFace");
150
+        if (null != doorFace) {
151
+            downloadDoorFace(doorFace.toJSONString());
152
+        }
153
+
154
+        return result;
155
+    }
156
+
157
+    @Override
158
+    public ResponseBean updateFace(MultipartFile faceImg, String jsonString) {
159
+        String result = updateFaceImage(faceImg, jsonString);
160
+        ResponseBean responseBean = new ResponseBean();
161
+        responseBean.addSuccess(JSONObject.parseObject(result).getInnerMap());
162
+        return responseBean;
163
+    }
164
+
165
+    @Override
166
+    public ResponseBean deleteFace(String jsonString) {
167
+        return null;
168
+    }
169
+
170
+    @Override
171
+    public ResponseBean addPerson(String jsonString) {
172
+        ResponseBean responseBean = new ResponseBean();
173
+
174
+        JSONObject jsonObject = JSONObject.parseObject(jsonString);
175
+        Map<String, Object> personMap = jsonObject.getInnerMap();
176
+        String personResult = HKOpenApi.addUser(personMap);
177
+        Map<String, Object> resultPersonMap = JSONObject.parseObject(personResult, HashMap.class);
178
+        Map<String, Object> resultPersonDataMap = (Map<String, Object>) resultPersonMap.get("data");
179
+
180
+        String openapi_ip_port_http = (String) personMap.get("openapi_ip_port_http");
181
+        String appkey = (String) personMap.get("appkey");
182
+        String secret = (String) personMap.get("secret");
183
+        String opUserUuid = (String) personMap.get("opUserUuid");
184
+
185
+        Long card = System.currentTimeMillis();
186
+
187
+        // 添加卡片
188
+        addCards(appkey, secret, openapi_ip_port_http, opUserUuid, card, card);
189
+
190
+        // 人员开卡
191
+        openCard(appkey, secret, openapi_ip_port_http, opUserUuid,(Integer) resultPersonDataMap.get("personId") ,card,0);
192
+
193
+        Map<String, Object> map = new HashMap<>();
194
+        map.put("person", resultPersonDataMap);
195
+        map.put("card", card);
196
+
197
+        responseBean.addSuccess(map);
198
+        return responseBean;
199
+    }
200
+
201
+    @Override
202
+    public ResponseBean updatePerson(String jsonString) {
203
+        JSONObject jsonObject = JSONObject.parseObject(jsonString);
204
+        Map<String, Object> personMap = jsonObject.getInnerMap();
205
+        String result = HKOpenApi.updateUser(personMap);
206
+        ResponseBean responseBean = new ResponseBean();
207
+        responseBean.addSuccess(JSONObject.parseObject(result, HashMap.class));
208
+        return responseBean;
209
+    }
210
+
211
+    @Override
212
+    public ResponseBean deletePerson(String jsonString) {
213
+        return null;
214
+    }
215
+
216
+    /**
217
+     * 添加卡片
218
+     * @return
219
+     */
220
+    public String addCards(String appkey, String secret, String openapiIpPortHttp , String opUserUuid, Long startCardNo, Long endCardNo) {
221
+
222
+        ResponseBean response = new ResponseBean();
223
+
224
+        // 开卡 卡号
225
+        long cardNo = System.currentTimeMillis();
226
+
227
+        // 添加卡片
228
+        Map<String,Object> addCardsMap = new HashMap<>();
229
+        addCardsMap.put("secret", secret);
230
+        addCardsMap.put("appkey", appkey);
231
+        addCardsMap.put("openapi_ip_port_http", openapiIpPortHttp);
232
+        addCardsMap.put("startCardNo", cardNo);
233
+        addCardsMap.put("endCardNo", cardNo);
234
+        addCardsMap.put("opUserUuid", opUserUuid);
235
+        String addCardsJSON = com.community.commom.hk.HKOpenApi.addCards(addCardsMap);
236
+        return addCardsJSON;
237
+    }
238
+
239
+
240
+    /**
241
+     * 卡片开卡
242
+     *
243
+     * @param personId 人员海康id
244
+     * @param cardNo 卡号
245
+     * @param expirationTime    有效期为多少? 单位为 年
246
+     * @return
247
+     */
248
+    private String openCard(String appkey, String secret, String openapiIpPortHttp , String opUserUuid, Integer personId, Long cardNo, Integer expirationTime) {
249
+        ResponseBean response = new ResponseBean();
250
+
251
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
252
+        LocalDate today = LocalDate.now();
253
+        int year = today.getYear();
254
+        // 加上20, 表示加上20年,默认
255
+        if (null == expirationTime || expirationTime <= 0) {
256
+            year += 20;
257
+        } else {
258
+            year += expirationTime;
259
+        }
260
+        int month = today.getMonthValue();
261
+        int day = today.getDayOfMonth();
262
+
263
+        Long time = null;
264
+        try {
265
+            time = formatter.parse(year + "-" + month + "-" + day).getTime();
266
+        } catch (ParseException e) {
267
+            e.printStackTrace();
268
+        }
269
+
270
+        // 开卡
271
+        Map<String, Object> parOpenCard = Maps.newHashMap();
272
+        parOpenCard.put("personId", personId);
273
+        parOpenCard.put("cardNo", cardNo);
274
+        parOpenCard.put("startTime", System.currentTimeMillis());
275
+        parOpenCard.put("endTime", time);
276
+        parOpenCard.put("secret", secret);
277
+        parOpenCard.put("appkey", appkey);
278
+        parOpenCard.put("openapi_ip_port_http", openapiIpPortHttp);
279
+        parOpenCard.put("opUserUuid", opUserUuid);
280
+        String result = HKOpenApi.openCard(parOpenCard);
281
+        return result;
282
+    }
283
+
284
+}

+ 28
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/vendor/constants/dao/IDoorMachineOperation.java 파일 보기

@@ -0,0 +1,28 @@
1
+package com.community.huiju.vendor.constants.dao;
2
+
3
+/**
4
+ * 平台厂商_门口机(可视对讲)操作
5
+ */
6
+public interface IDoorMachineOperation {
7
+
8
+    /**
9
+     * 下发门口机权限
10
+     * @param jsonString
11
+     * @return
12
+     */
13
+    String downloadPermissions(String jsonString);
14
+
15
+    /**
16
+     * 下发门口机人脸
17
+     * @param jsonString
18
+     * @return
19
+     */
20
+    String downloadFace(String jsonString);
21
+
22
+    /**
23
+     * 删除门口机权限
24
+     * @return
25
+     */
26
+    String deletePermissions(String jsonString);
27
+
28
+}

+ 28
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/vendor/constants/dao/IEntranceGuardOperation.java 파일 보기

@@ -0,0 +1,28 @@
1
+package com.community.huiju.vendor.constants.dao;
2
+
3
+/**
4
+ * 平台厂商_门禁操作
5
+ */
6
+public interface IEntranceGuardOperation {
7
+
8
+    /**
9
+     * 下发门禁权限
10
+     * @param jsonString
11
+     * @return
12
+     */
13
+    String downloadPermissions(String jsonString);
14
+
15
+    /**
16
+     * 下发门禁人脸
17
+     * @param jsonString
18
+     * @return
19
+     */
20
+    String downloadFace(String jsonString);
21
+
22
+    /**
23
+     * 删除门禁权限
24
+     * @return
25
+     */
26
+    String deletePermissions(String jsonString);
27
+
28
+}

+ 29
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/vendor/constants/dao/IFaceOperation.java 파일 보기

@@ -0,0 +1,29 @@
1
+package com.community.huiju.vendor.constants.dao;
2
+
3
+/**
4
+ * 平台厂商_人脸操作
5
+ */
6
+public interface IFaceOperation {
7
+
8
+    /**
9
+     * 添加人脸
10
+     * @param jsonString
11
+     * @return
12
+     */
13
+    String addFace(String jsonString);
14
+
15
+    /**
16
+     * 修改人脸
17
+     * @param jsonString
18
+     * @return
19
+     */
20
+    String updateFace(String jsonString);
21
+
22
+    /**
23
+     * 删除人脸
24
+     * @param jsonString
25
+     * @return
26
+     */
27
+    String deleteFace(String jsonString);
28
+
29
+}

+ 29
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/vendor/constants/dao/IPersonOperation.java 파일 보기

@@ -0,0 +1,29 @@
1
+package com.community.huiju.vendor.constants.dao;
2
+
3
+/**
4
+ * 平台厂商_人员操作
5
+ */
6
+public interface IPersonOperation {
7
+
8
+    /**
9
+     * 添加人员
10
+     * @param jsonString
11
+     * @return
12
+     */
13
+    String addPerson(String jsonString);
14
+
15
+    /**
16
+     * 修改人员
17
+     * @param jsonString
18
+     * @return
19
+     */
20
+    String updatePerson(String jsonString);
21
+
22
+    /**
23
+     * 删除人员
24
+     * @param jsonString
25
+     * @return
26
+     */
27
+    String deletePerson(String jsonString);
28
+
29
+}

+ 35
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/vendor/constants/info/PlatformVendorsInfo.java 파일 보기

@@ -0,0 +1,35 @@
1
+package com.community.huiju.vendor.constants.info;
2
+
3
+import lombok.AllArgsConstructor;
4
+import lombok.Data;
5
+import lombok.NoArgsConstructor;
6
+
7
+/**
8
+ * 海康厂商
9
+ */
10
+@Data
11
+@AllArgsConstructor
12
+@NoArgsConstructor
13
+public class PlatformVendorsInfo {
14
+
15
+    /**
16
+     * key
17
+     */
18
+    private String appKey;
19
+
20
+    /**
21
+     * secret
22
+     */
23
+    private String secret;
24
+
25
+    /**
26
+     * 厂商操作人员
27
+     */
28
+    private String opUserUuid;
29
+
30
+    /**
31
+     * 厂商服务地址
32
+     */
33
+    private String serverUrl;
34
+
35
+}

+ 29
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/vendor/impl/hk/HKCombination.java 파일 보기

@@ -0,0 +1,29 @@
1
+package com.community.huiju.vendor.impl.hk;
2
+
3
+import com.community.huiju.vendor.constants.dao.IDoorMachineOperation;
4
+import com.community.huiju.vendor.constants.dao.IEntranceGuardOperation;
5
+import com.community.huiju.vendor.constants.dao.IFaceOperation;
6
+import com.community.huiju.vendor.constants.dao.IPersonOperation;
7
+import lombok.Data;
8
+
9
+/**
10
+ * 海康厂商_组合
11
+ */
12
+@Data
13
+public class HKCombination {
14
+
15
+    private IPersonOperation iPersonOperation;
16
+
17
+    private IFaceOperation iFaceOperation;
18
+
19
+    private IEntranceGuardOperation iEntranceGuardOperation;
20
+
21
+    private IDoorMachineOperation iDoorMachineOperation;
22
+
23
+    public HKCombination(IPersonOperation iPersonOperation, IFaceOperation iFaceOperation, IEntranceGuardOperation iEntranceGuardOperation, IDoorMachineOperation iDoorMachineOperation) {
24
+        this.iPersonOperation = iPersonOperation;
25
+        this.iFaceOperation = iFaceOperation;
26
+        this.iEntranceGuardOperation = iEntranceGuardOperation;
27
+        this.iDoorMachineOperation = iDoorMachineOperation;
28
+    }
29
+}

+ 33
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/vendor/impl/hk/HKDoorMachineOperationImpl.java 파일 보기

@@ -0,0 +1,33 @@
1
+package com.community.huiju.vendor.impl.hk;
2
+
3
+import com.community.huiju.vendor.constants.dao.IDoorMachineOperation;
4
+import com.community.huiju.vendor.constants.info.PlatformVendorsInfo;
5
+import org.springframework.stereotype.Component;
6
+import org.springframework.stereotype.Service;
7
+
8
+/**
9
+ * 海康厂商_门口机(可是对讲)操作
10
+ */
11
+public class HKDoorMachineOperationImpl implements IDoorMachineOperation {
12
+
13
+    private PlatformVendorsInfo platformVendorsInfo;
14
+
15
+    public HKDoorMachineOperationImpl(PlatformVendorsInfo platformVendorsInfo) {
16
+        this.platformVendorsInfo = platformVendorsInfo;
17
+    }
18
+
19
+    @Override
20
+    public String downloadPermissions(String jsonString) {
21
+        return null;
22
+    }
23
+
24
+    @Override
25
+    public String downloadFace(String jsonString) {
26
+        return null;
27
+    }
28
+
29
+    @Override
30
+    public String deletePermissions(String jsonString) {
31
+        return null;
32
+    }
33
+}

+ 33
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/vendor/impl/hk/HKEntranceGuardOperationImpl.java 파일 보기

@@ -0,0 +1,33 @@
1
+package com.community.huiju.vendor.impl.hk;
2
+
3
+import com.community.huiju.vendor.constants.dao.IEntranceGuardOperation;
4
+import com.community.huiju.vendor.constants.info.PlatformVendorsInfo;
5
+import org.springframework.stereotype.Component;
6
+import org.springframework.stereotype.Service;
7
+
8
+/**
9
+ * 海康厂商_门禁操作
10
+ */
11
+public class HKEntranceGuardOperationImpl implements IEntranceGuardOperation {
12
+
13
+    private PlatformVendorsInfo platformVendorsInfo;
14
+
15
+    public HKEntranceGuardOperationImpl(PlatformVendorsInfo platformVendorsInfo) {
16
+        this.platformVendorsInfo = platformVendorsInfo;
17
+    }
18
+
19
+    @Override
20
+    public String downloadPermissions(String jsonString) {
21
+        return null;
22
+    }
23
+
24
+    @Override
25
+    public String downloadFace(String jsonString) {
26
+        return null;
27
+    }
28
+
29
+    @Override
30
+    public String deletePermissions(String jsonString) {
31
+        return null;
32
+    }
33
+}

+ 33
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/vendor/impl/hk/HKFaceOperationImpl.java 파일 보기

@@ -0,0 +1,33 @@
1
+package com.community.huiju.vendor.impl.hk;
2
+
3
+import com.community.huiju.vendor.constants.dao.IFaceOperation;
4
+import com.community.huiju.vendor.constants.info.PlatformVendorsInfo;
5
+import org.springframework.stereotype.Component;
6
+import org.springframework.stereotype.Service;
7
+
8
+/**
9
+ * 海康厂商_人脸操作
10
+ */
11
+public class HKFaceOperationImpl implements IFaceOperation {
12
+
13
+    private PlatformVendorsInfo platformVendorsInfo;
14
+
15
+    public HKFaceOperationImpl(PlatformVendorsInfo platformVendorsInfo) {
16
+        this.platformVendorsInfo = platformVendorsInfo;
17
+    }
18
+
19
+    @Override
20
+    public String addFace(String jsonString) {
21
+        return null;
22
+    }
23
+
24
+    @Override
25
+    public String updateFace(String jsonString) {
26
+        return null;
27
+    }
28
+
29
+    @Override
30
+    public String deleteFace(String jsonString) {
31
+        return null;
32
+    }
33
+}

+ 33
- 0
CODE/smart-community/hardware-server/src/main/java/com/community/huiju/vendor/impl/hk/HKPersonOperationImpl.java 파일 보기

@@ -0,0 +1,33 @@
1
+package com.community.huiju.vendor.impl.hk;
2
+
3
+import com.community.huiju.vendor.constants.dao.IPersonOperation;
4
+import com.community.huiju.vendor.constants.info.PlatformVendorsInfo;
5
+import org.springframework.stereotype.Component;
6
+import org.springframework.stereotype.Service;
7
+
8
+/**
9
+ * 海康厂商_人员操作
10
+ */
11
+public class HKPersonOperationImpl implements IPersonOperation {
12
+
13
+    private PlatformVendorsInfo platformVendorsInfo;
14
+
15
+    public HKPersonOperationImpl(PlatformVendorsInfo platformVendorsInfo) {
16
+        this.platformVendorsInfo = platformVendorsInfo;
17
+    }
18
+
19
+    @Override
20
+    public String addPerson(String jsonString) {
21
+        return null;
22
+    }
23
+
24
+    @Override
25
+    public String updatePerson(String jsonString) {
26
+        return null;
27
+    }
28
+
29
+    @Override
30
+    public String deletePerson(String jsonString) {
31
+        return null;
32
+    }
33
+}

+ 1
- 0
CODE/smart-community/hardware-server/src/main/resources/application.yml 파일 보기

@@ -0,0 +1 @@
1
+

+ 32
- 0
CODE/smart-community/hardware-server/src/main/resources/bootstrap.yml 파일 보기

@@ -0,0 +1,32 @@
1
+server:
2
+  port: 8088
3
+spring:
4
+  application:
5
+    name: hardware-server
6
+  cloud:
7
+    config:
8
+      name: application
9
+      label: master
10
+      #      uri: http://localhost:7001/
11
+      discovery:
12
+        enabled: true
13
+        serviceId: config-server
14
+  aop:
15
+    auto: true
16
+    proxy-target-class: true
17
+eureka:
18
+  client:
19
+    service-url:
20
+      defaultZone: http://localhost:8080/eureka/
21
+hystrix:
22
+  command:
23
+    default:
24
+      execution:
25
+        isolation:
26
+          thread:
27
+            timeoutInMilliseconds: 180000
28
+
29
+ribbon:
30
+  ReadTimeout: 38000
31
+  ConnectTimeout: 38000
32
+  eureka.enabled: true

+ 32
- 0
CODE/smart-community/hardware-server/src/main/resources/log4j.properties 파일 보기

@@ -0,0 +1,32 @@
1
+log4j.rootLogger=info,A1,R
2
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
3
+log4j.appender.A1.Target=System.out
4
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
5
+log4j.appender.A1.layout.ConversionPattern=%-5p%x [%t] %d - %c %m%n  
6
+
7
+log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
8
+log4j.appender.R.File=../logs/resold_admin_.log
9
+log4j.appender.R.layout=org.apache.log4j.PatternLayout
10
+log4j.appender.R.Append = true
11
+log4j.appender.R.ImmediateFlush = true
12
+log4j.appender.R.DatePattern = '.' yyyy - MM - dd '.txt'
13
+log4j.appender.R.layout.ConversionPattern=%-5p%x [%t] %d -%c %m%n
14
+
15
+#log4j.logger.com.ibatis=DEBUG
16
+log4j.logger.org.springframework.transaction.support.TransactionSynchronizationManager = INFO
17
+log4j.logger.java.sql.Connection=DEBUG
18
+log4j.logger.java.sql.Statement=DEBUG
19
+log4j.logger.java.sql.PreparedStatement=DEBUG
20
+
21
+###############Log4j 4 SQL Output start################# #DEBUG
22
+log4j.logger.com.**.dao=INFO
23
+log4j.logger.com.springframework=DEBUG
24
+log4j.logger.com.ibatis=DEBUG  
25
+log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG  
26
+log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG  
27
+log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
28
+log4j.logger.java.sql.ResultSet=DEBUG
29
+log4j.logger.org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl=DEBUG
30
+log4j.logger.java.sql=DEBUG,CONSOLE 
31
+###############Log4j 4 SQL Output end###################
32
+##### ²âÊÔÌá½»

+ 1
- 0
CODE/smart-community/pom.xml 파일 보기

@@ -18,6 +18,7 @@
18 18
 		<module>operate-api</module>
19 19
 		<module>mq-message</module>
20 20
         <module>community-common</module>
21
+		<module>hardware-server</module>
21 22
     </modules>
22 23
 
23 24
 	<name>smart-community</name>

+ 2062
- 1533
文档/MYSQL/smartCommunity.pdb
파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
파일 보기


+ 2062
- 1533
文档/MYSQL/smartCommunity.pdm
파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
파일 보기


BIN
文档/计划/V2.3.0/智慧社区V2.3.2.mpp 파일 보기