Yansen 2 gadus atpakaļ
revīzija
8f33c04bbe
45 mainītis faili ar 2278 papildinājumiem un 0 dzēšanām
  1. 37
    0
      .gitignore
  2. Binārs
      .mvn/wrapper/maven-wrapper.jar
  3. 2
    0
      .mvn/wrapper/maven-wrapper.properties
  4. 5
    0
      deploy/bootstrap
  5. 35
    0
      deploy/s.yml
  6. 316
    0
      mvnw
  7. 188
    0
      mvnw.cmd
  8. 105
    0
      pom.xml
  9. 15
    0
      src/main/java/com/njyunzhi/avatar/AvatarApplication.java
  10. 28
    0
      src/main/java/com/njyunzhi/avatar/common/BaseController.java
  11. 100
    0
      src/main/java/com/njyunzhi/avatar/common/HttpUtils.java
  12. 85
    0
      src/main/java/com/njyunzhi/avatar/common/ResponseBean.java
  13. 131
    0
      src/main/java/com/njyunzhi/avatar/common/StringUtils.java
  14. 40
    0
      src/main/java/com/njyunzhi/avatar/common/WxUtils.java
  15. 14
    0
      src/main/java/com/njyunzhi/avatar/config/FilterConfig.java
  16. 14
    0
      src/main/java/com/njyunzhi/avatar/config/MybatisPlusConfig.java
  17. 48
    0
      src/main/java/com/njyunzhi/avatar/config/SaTokenConfigure.java
  18. 24
    0
      src/main/java/com/njyunzhi/avatar/config/SwagggerConfig.java
  19. 24
    0
      src/main/java/com/njyunzhi/avatar/config/WeixinConfig.java
  20. 19
    0
      src/main/java/com/njyunzhi/avatar/exception/GlobalExceptionHandler.java
  21. 16
    0
      src/main/java/com/njyunzhi/avatar/person/ServiceImpl
  22. 67
    0
      src/main/java/com/njyunzhi/avatar/person/controller/StRankController.java
  23. 107
    0
      src/main/java/com/njyunzhi/avatar/person/controller/TaPersonController.java
  24. 139
    0
      src/main/java/com/njyunzhi/avatar/person/controller/WxMaController.java
  25. 39
    0
      src/main/java/com/njyunzhi/avatar/person/entity/StRank.java
  26. 60
    0
      src/main/java/com/njyunzhi/avatar/person/entity/TaPerson.java
  27. 60
    0
      src/main/java/com/njyunzhi/avatar/person/entity/TdCity.java
  28. 25
    0
      src/main/java/com/njyunzhi/avatar/person/mapper/StRankMapper.java
  29. 16
    0
      src/main/java/com/njyunzhi/avatar/person/mapper/TaPersonMapper.java
  30. 16
    0
      src/main/java/com/njyunzhi/avatar/person/mapper/TdCityMapper.java
  31. 23
    0
      src/main/java/com/njyunzhi/avatar/person/service/StRankService.java
  32. 13
    0
      src/main/java/com/njyunzhi/avatar/person/service/TaPersonService.java
  33. 13
    0
      src/main/java/com/njyunzhi/avatar/person/service/TdCityService.java
  34. 76
    0
      src/main/java/com/njyunzhi/avatar/person/service/impl/StRankServiceImpl.java
  35. 16
    0
      src/main/java/com/njyunzhi/avatar/person/service/impl/TaPersonServiceImpl.java
  36. 16
    0
      src/main/java/com/njyunzhi/avatar/person/service/impl/TdCityServiceImpl.java
  37. 17
    0
      src/main/java/com/njyunzhi/avatar/person/vo/MaLogin.java
  38. 13
    0
      src/main/java/com/njyunzhi/avatar/person/vo/RankItem.java
  39. 36
    0
      src/main/java/com/njyunzhi/avatar/service/IBaseService.java
  40. 130
    0
      src/main/java/com/njyunzhi/avatar/service/impl/BaseServiceImpl.java
  41. 65
    0
      src/main/resources/application.yml
  42. 60
    0
      src/main/resources/mapper/StRankMapper.xml
  43. 6
    0
      src/main/resources/mapper/TaPersonMapper.xml
  44. 6
    0
      src/main/resources/mapper/TdCityMapper.xml
  45. 13
    0
      src/test/java/com/njyunzhi/avatar/AvatarApplicationTests.java

+ 37
- 0
.gitignore Parādīt failu

@@ -0,0 +1,37 @@
1
+HELP.md
2
+target/
3
+!.mvn/wrapper/maven-wrapper.jar
4
+!**/src/main/**/target/
5
+!**/src/test/**/target/
6
+
7
+### STS ###
8
+.apt_generated
9
+.classpath
10
+.factorypath
11
+.project
12
+.settings
13
+.springBeans
14
+.sts4-cache
15
+
16
+### IntelliJ IDEA ###
17
+.idea
18
+*.iws
19
+*.iml
20
+*.ipr
21
+
22
+### NetBeans ###
23
+/nbproject/private/
24
+/nbbuild/
25
+/dist/
26
+/nbdist/
27
+/.nb-gradle/
28
+build/
29
+!**/src/main/**/build/
30
+!**/src/test/**/build/
31
+
32
+### VS Code ###
33
+.vscode/
34
+
35
+deploy/*.jar
36
+deploy/*.zip
37
+deploy/.s/

Binārs
.mvn/wrapper/maven-wrapper.jar Parādīt failu


+ 2
- 0
.mvn/wrapper/maven-wrapper.properties Parādīt failu

@@ -0,0 +1,2 @@
1
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip
2
+wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar

+ 5
- 0
deploy/bootstrap Parādīt failu

@@ -0,0 +1,5 @@
1
+#!/bin/bash
2
+#
3
+#
4
+
5
+java -jar ./avatar-0.0.1.jar

+ 35
- 0
deploy/s.yml Parādīt failu

@@ -0,0 +1,35 @@
1
+edition: 1.0.0          #  命令行YAML规范版本,遵循语义化版本(Semantic Versioning)规范。
2
+name: change-avatar-app        #  项目名称。
3
+access: default         #  密钥别名。
4
+
5
+services:
6
+  stategrid: #  服务名称。
7
+    component: devsapp/fc
8
+    props: #  组件的属性值。
9
+      region: cn-shanghai
10
+      service:
11
+        name: yunzhi-service
12
+        description: '云致产品'
13
+        internetAccess: true
14
+      function:
15
+        name: change-avatar-service
16
+        description: '换头像'
17
+        ossBucket: yz-serverless
18
+        ossKey: yunzhi/avatar-0.0.1.zip
19
+        handler: 'com.njyunzhi.avatar.AvatarApplication::main'
20
+        memorySize: 1024
21
+        timeout: 30
22
+        runtime: custom
23
+        caPort: 9003
24
+        initializationTimeout: 30
25
+        instanceConcurrency: 10
26
+      triggers:
27
+        - name: httpTraining
28
+          type: http
29
+          config:
30
+            authType: anonymous
31
+            methods:
32
+              - GET
33
+              - POST
34
+              - PUT
35
+              - DELETE

+ 316
- 0
mvnw Parādīt failu

@@ -0,0 +1,316 @@
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
+#    https://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
+# Maven 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 /usr/local/etc/mavenrc ] ; then
40
+    . /usr/local/etc/mavenrc
41
+  fi
42
+
43
+  if [ -f /etc/mavenrc ] ; then
44
+    . /etc/mavenrc
45
+  fi
46
+
47
+  if [ -f "$HOME/.mavenrc" ] ; then
48
+    . "$HOME/.mavenrc"
49
+  fi
50
+
51
+fi
52
+
53
+# OS specific support.  $var _must_ be set to either true or false.
54
+cygwin=false;
55
+darwin=false;
56
+mingw=false
57
+case "`uname`" in
58
+  CYGWIN*) cygwin=true ;;
59
+  MINGW*) mingw=true;;
60
+  Darwin*) darwin=true
61
+    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
62
+    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
63
+    if [ -z "$JAVA_HOME" ]; then
64
+      if [ -x "/usr/libexec/java_home" ]; then
65
+        export JAVA_HOME="`/usr/libexec/java_home`"
66
+      else
67
+        export JAVA_HOME="/Library/Java/Home"
68
+      fi
69
+    fi
70
+    ;;
71
+esac
72
+
73
+if [ -z "$JAVA_HOME" ] ; then
74
+  if [ -r /etc/gentoo-release ] ; then
75
+    JAVA_HOME=`java-config --jre-home`
76
+  fi
77
+fi
78
+
79
+if [ -z "$M2_HOME" ] ; then
80
+  ## resolve links - $0 may be a link to maven's home
81
+  PRG="$0"
82
+
83
+  # need this for relative symlinks
84
+  while [ -h "$PRG" ] ; do
85
+    ls=`ls -ld "$PRG"`
86
+    link=`expr "$ls" : '.*-> \(.*\)$'`
87
+    if expr "$link" : '/.*' > /dev/null; then
88
+      PRG="$link"
89
+    else
90
+      PRG="`dirname "$PRG"`/$link"
91
+    fi
92
+  done
93
+
94
+  saveddir=`pwd`
95
+
96
+  M2_HOME=`dirname "$PRG"`/..
97
+
98
+  # make it fully qualified
99
+  M2_HOME=`cd "$M2_HOME" && pwd`
100
+
101
+  cd "$saveddir"
102
+  # echo Using m2 at $M2_HOME
103
+fi
104
+
105
+# For Cygwin, ensure paths are in UNIX format before anything is touched
106
+if $cygwin ; then
107
+  [ -n "$M2_HOME" ] &&
108
+    M2_HOME=`cygpath --unix "$M2_HOME"`
109
+  [ -n "$JAVA_HOME" ] &&
110
+    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
111
+  [ -n "$CLASSPATH" ] &&
112
+    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
113
+fi
114
+
115
+# For Mingw, ensure paths are in UNIX format before anything is touched
116
+if $mingw ; then
117
+  [ -n "$M2_HOME" ] &&
118
+    M2_HOME="`(cd "$M2_HOME"; pwd)`"
119
+  [ -n "$JAVA_HOME" ] &&
120
+    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
121
+fi
122
+
123
+if [ -z "$JAVA_HOME" ]; then
124
+  javaExecutable="`which javac`"
125
+  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
126
+    # readlink(1) is not available as standard on Solaris 10.
127
+    readLink=`which readlink`
128
+    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
129
+      if $darwin ; then
130
+        javaHome="`dirname \"$javaExecutable\"`"
131
+        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
132
+      else
133
+        javaExecutable="`readlink -f \"$javaExecutable\"`"
134
+      fi
135
+      javaHome="`dirname \"$javaExecutable\"`"
136
+      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
137
+      JAVA_HOME="$javaHome"
138
+      export JAVA_HOME
139
+    fi
140
+  fi
141
+fi
142
+
143
+if [ -z "$JAVACMD" ] ; then
144
+  if [ -n "$JAVA_HOME"  ] ; then
145
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
146
+      # IBM's JDK on AIX uses strange locations for the executables
147
+      JAVACMD="$JAVA_HOME/jre/sh/java"
148
+    else
149
+      JAVACMD="$JAVA_HOME/bin/java"
150
+    fi
151
+  else
152
+    JAVACMD="`\\unset -f command; \\command -v java`"
153
+  fi
154
+fi
155
+
156
+if [ ! -x "$JAVACMD" ] ; then
157
+  echo "Error: JAVA_HOME is not defined correctly." >&2
158
+  echo "  We cannot execute $JAVACMD" >&2
159
+  exit 1
160
+fi
161
+
162
+if [ -z "$JAVA_HOME" ] ; then
163
+  echo "Warning: JAVA_HOME environment variable is not set."
164
+fi
165
+
166
+CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
167
+
168
+# traverses directory structure from process work directory to filesystem root
169
+# first directory with .mvn subdirectory is considered project base directory
170
+find_maven_basedir() {
171
+
172
+  if [ -z "$1" ]
173
+  then
174
+    echo "Path not specified to find_maven_basedir"
175
+    return 1
176
+  fi
177
+
178
+  basedir="$1"
179
+  wdir="$1"
180
+  while [ "$wdir" != '/' ] ; do
181
+    if [ -d "$wdir"/.mvn ] ; then
182
+      basedir=$wdir
183
+      break
184
+    fi
185
+    # workaround for JBEAP-8937 (on Solaris 10/Sparc)
186
+    if [ -d "${wdir}" ]; then
187
+      wdir=`cd "$wdir/.."; pwd`
188
+    fi
189
+    # end of workaround
190
+  done
191
+  echo "${basedir}"
192
+}
193
+
194
+# concatenates all lines of a file
195
+concat_lines() {
196
+  if [ -f "$1" ]; then
197
+    echo "$(tr -s '\n' ' ' < "$1")"
198
+  fi
199
+}
200
+
201
+BASE_DIR=`find_maven_basedir "$(pwd)"`
202
+if [ -z "$BASE_DIR" ]; then
203
+  exit 1;
204
+fi
205
+
206
+##########################################################################################
207
+# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
208
+# This allows using the maven wrapper in projects that prohibit checking in binary data.
209
+##########################################################################################
210
+if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
211
+    if [ "$MVNW_VERBOSE" = true ]; then
212
+      echo "Found .mvn/wrapper/maven-wrapper.jar"
213
+    fi
214
+else
215
+    if [ "$MVNW_VERBOSE" = true ]; then
216
+      echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
217
+    fi
218
+    if [ -n "$MVNW_REPOURL" ]; then
219
+      jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
220
+    else
221
+      jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
222
+    fi
223
+    while IFS="=" read key value; do
224
+      case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
225
+      esac
226
+    done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
227
+    if [ "$MVNW_VERBOSE" = true ]; then
228
+      echo "Downloading from: $jarUrl"
229
+    fi
230
+    wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
231
+    if $cygwin; then
232
+      wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
233
+    fi
234
+
235
+    if command -v wget > /dev/null; then
236
+        if [ "$MVNW_VERBOSE" = true ]; then
237
+          echo "Found wget ... using wget"
238
+        fi
239
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
240
+            wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
241
+        else
242
+            wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
243
+        fi
244
+    elif command -v curl > /dev/null; then
245
+        if [ "$MVNW_VERBOSE" = true ]; then
246
+          echo "Found curl ... using curl"
247
+        fi
248
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
249
+            curl -o "$wrapperJarPath" "$jarUrl" -f
250
+        else
251
+            curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
252
+        fi
253
+
254
+    else
255
+        if [ "$MVNW_VERBOSE" = true ]; then
256
+          echo "Falling back to using Java to download"
257
+        fi
258
+        javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
259
+        # For Cygwin, switch paths to Windows format before running javac
260
+        if $cygwin; then
261
+          javaClass=`cygpath --path --windows "$javaClass"`
262
+        fi
263
+        if [ -e "$javaClass" ]; then
264
+            if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
265
+                if [ "$MVNW_VERBOSE" = true ]; then
266
+                  echo " - Compiling MavenWrapperDownloader.java ..."
267
+                fi
268
+                # Compiling the Java class
269
+                ("$JAVA_HOME/bin/javac" "$javaClass")
270
+            fi
271
+            if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
272
+                # Running the downloader
273
+                if [ "$MVNW_VERBOSE" = true ]; then
274
+                  echo " - Running MavenWrapperDownloader.java ..."
275
+                fi
276
+                ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
277
+            fi
278
+        fi
279
+    fi
280
+fi
281
+##########################################################################################
282
+# End of extension
283
+##########################################################################################
284
+
285
+export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
286
+if [ "$MVNW_VERBOSE" = true ]; then
287
+  echo $MAVEN_PROJECTBASEDIR
288
+fi
289
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
290
+
291
+# For Cygwin, switch paths to Windows format before running java
292
+if $cygwin; then
293
+  [ -n "$M2_HOME" ] &&
294
+    M2_HOME=`cygpath --path --windows "$M2_HOME"`
295
+  [ -n "$JAVA_HOME" ] &&
296
+    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
297
+  [ -n "$CLASSPATH" ] &&
298
+    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
299
+  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
300
+    MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
301
+fi
302
+
303
+# Provide a "standardized" way to retrieve the CLI args that will
304
+# work with both Windows and non-Windows executions.
305
+MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
306
+export MAVEN_CMD_LINE_ARGS
307
+
308
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
309
+
310
+exec "$JAVACMD" \
311
+  $MAVEN_OPTS \
312
+  $MAVEN_DEBUG_OPTS \
313
+  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
314
+  "-Dmaven.home=${M2_HOME}" \
315
+  "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
316
+  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"

+ 188
- 0
mvnw.cmd Parādīt failu

@@ -0,0 +1,188 @@
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    https://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 Maven 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 keystroke 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 set title of command window
39
+title %0
40
+@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
41
+@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
42
+
43
+@REM set %HOME% to equivalent of $HOME
44
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
45
+
46
+@REM Execute a user defined script before this one
47
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
48
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
49
+if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
50
+if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %*
51
+:skipRcPre
52
+
53
+@setlocal
54
+
55
+set ERROR_CODE=0
56
+
57
+@REM To isolate internal variables from possible post scripts, we use another setlocal
58
+@setlocal
59
+
60
+@REM ==== START VALIDATION ====
61
+if not "%JAVA_HOME%" == "" goto OkJHome
62
+
63
+echo.
64
+echo Error: JAVA_HOME not found in your environment. >&2
65
+echo Please set the JAVA_HOME variable in your environment to match the >&2
66
+echo location of your Java installation. >&2
67
+echo.
68
+goto error
69
+
70
+:OkJHome
71
+if exist "%JAVA_HOME%\bin\java.exe" goto init
72
+
73
+echo.
74
+echo Error: JAVA_HOME is set to an invalid directory. >&2
75
+echo JAVA_HOME = "%JAVA_HOME%" >&2
76
+echo Please set the JAVA_HOME variable in your environment to match the >&2
77
+echo location of your Java installation. >&2
78
+echo.
79
+goto error
80
+
81
+@REM ==== END VALIDATION ====
82
+
83
+:init
84
+
85
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
86
+@REM Fallback to current working directory if not found.
87
+
88
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
89
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
90
+
91
+set EXEC_DIR=%CD%
92
+set WDIR=%EXEC_DIR%
93
+:findBaseDir
94
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
95
+cd ..
96
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
97
+set WDIR=%CD%
98
+goto findBaseDir
99
+
100
+:baseDirFound
101
+set MAVEN_PROJECTBASEDIR=%WDIR%
102
+cd "%EXEC_DIR%"
103
+goto endDetectBaseDir
104
+
105
+:baseDirNotFound
106
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
107
+cd "%EXEC_DIR%"
108
+
109
+:endDetectBaseDir
110
+
111
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
112
+
113
+@setlocal EnableExtensions EnableDelayedExpansion
114
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
115
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
116
+
117
+:endReadAdditionalConfig
118
+
119
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
120
+set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
121
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
122
+
123
+set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
124
+
125
+FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
126
+    IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
127
+)
128
+
129
+@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
130
+@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
131
+if exist %WRAPPER_JAR% (
132
+    if "%MVNW_VERBOSE%" == "true" (
133
+        echo Found %WRAPPER_JAR%
134
+    )
135
+) else (
136
+    if not "%MVNW_REPOURL%" == "" (
137
+        SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
138
+    )
139
+    if "%MVNW_VERBOSE%" == "true" (
140
+        echo Couldn't find %WRAPPER_JAR%, downloading it ...
141
+        echo Downloading from: %DOWNLOAD_URL%
142
+    )
143
+
144
+    powershell -Command "&{"^
145
+		"$webclient = new-object System.Net.WebClient;"^
146
+		"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
147
+		"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
148
+		"}"^
149
+		"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
150
+		"}"
151
+    if "%MVNW_VERBOSE%" == "true" (
152
+        echo Finished downloading %WRAPPER_JAR%
153
+    )
154
+)
155
+@REM End of extension
156
+
157
+@REM Provide a "standardized" way to retrieve the CLI args that will
158
+@REM work with both Windows and non-Windows executions.
159
+set MAVEN_CMD_LINE_ARGS=%*
160
+
161
+%MAVEN_JAVA_EXE% ^
162
+  %JVM_CONFIG_MAVEN_PROPS% ^
163
+  %MAVEN_OPTS% ^
164
+  %MAVEN_DEBUG_OPTS% ^
165
+  -classpath %WRAPPER_JAR% ^
166
+  "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^
167
+  %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
168
+if ERRORLEVEL 1 goto error
169
+goto end
170
+
171
+:error
172
+set ERROR_CODE=1
173
+
174
+:end
175
+@endlocal & set ERROR_CODE=%ERROR_CODE%
176
+
177
+if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost
178
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
179
+if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat"
180
+if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd"
181
+:skipRcPost
182
+
183
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
184
+if "%MAVEN_BATCH_PAUSE%"=="on" pause
185
+
186
+if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE%
187
+
188
+cmd /C exit /B %ERROR_CODE%

+ 105
- 0
pom.xml Parādīt failu

@@ -0,0 +1,105 @@
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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4
+	<modelVersion>4.0.0</modelVersion>
5
+	<parent>
6
+		<groupId>org.springframework.boot</groupId>
7
+		<artifactId>spring-boot-starter-parent</artifactId>
8
+		<version>2.7.4</version>
9
+		<relativePath/> <!-- lookup parent from repository -->
10
+	</parent>
11
+	<groupId>com.njyunzhi</groupId>
12
+	<artifactId>avatar</artifactId>
13
+	<version>0.0.1-SNAPSHOT</version>
14
+	<name>avatar</name>
15
+	<description>Change avatar</description>
16
+	<properties>
17
+		<java.version>1.8</java.version>
18
+	</properties>
19
+	<dependencies>
20
+		<dependency>
21
+			<groupId>org.springframework.boot</groupId>
22
+			<artifactId>spring-boot-starter-web</artifactId>
23
+		</dependency>
24
+
25
+		<dependency>
26
+			<groupId>mysql</groupId>
27
+			<artifactId>mysql-connector-java</artifactId>
28
+			<scope>runtime</scope>
29
+		</dependency>
30
+		<dependency>
31
+			<groupId>org.projectlombok</groupId>
32
+			<artifactId>lombok</artifactId>
33
+			<optional>true</optional>
34
+		</dependency>
35
+		<dependency>
36
+			<groupId>org.springframework.boot</groupId>
37
+			<artifactId>spring-boot-starter-test</artifactId>
38
+			<scope>test</scope>
39
+		</dependency>
40
+
41
+		<!--mybatis-plus start-->
42
+		<dependency>
43
+			<groupId>com.baomidou</groupId>
44
+			<artifactId>mybatis-plus-boot-starter</artifactId>
45
+			<version>3.1.1</version>
46
+		</dependency>
47
+		<!--mybatis-plus end-->
48
+
49
+		<!--fastjson start-->
50
+		<dependency>
51
+			<groupId>com.alibaba</groupId>
52
+			<artifactId>fastjson</artifactId>
53
+			<version>1.2.56</version>
54
+		</dependency>
55
+		<!--fastjson end-->
56
+
57
+		<!--weixin-miniapp start-->
58
+		<dependency>
59
+			<groupId>com.github.binarywang</groupId>
60
+			<artifactId>weixin-java-miniapp</artifactId>
61
+			<version>4.3.0</version>
62
+		</dependency>
63
+		<!--weixin-miniapp start-->
64
+
65
+		<!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
66
+		<dependency>
67
+			<groupId>cn.dev33</groupId>
68
+			<artifactId>sa-token-spring-boot-starter</artifactId>
69
+			<version>1.29.0</version>
70
+		</dependency>
71
+
72
+		<!-- Sa-Token 整合 jwt -->
73
+		<dependency>
74
+			<groupId>cn.dev33</groupId>
75
+			<artifactId>sa-token-jwt</artifactId>
76
+			<version>1.29.0</version>
77
+		</dependency>
78
+
79
+		<!--swagger start-->
80
+		<dependency>
81
+			<groupId>io.springfox</groupId>
82
+			<artifactId>springfox-boot-starter</artifactId>
83
+			<version>3.0.0</version>
84
+		</dependency>
85
+		<!--swagger end-->
86
+	</dependencies>
87
+
88
+	<build>
89
+		<plugins>
90
+			<plugin>
91
+				<groupId>org.springframework.boot</groupId>
92
+				<artifactId>spring-boot-maven-plugin</artifactId>
93
+				<configuration>
94
+					<excludes>
95
+						<exclude>
96
+							<groupId>org.projectlombok</groupId>
97
+							<artifactId>lombok</artifactId>
98
+						</exclude>
99
+					</excludes>
100
+				</configuration>
101
+			</plugin>
102
+		</plugins>
103
+	</build>
104
+
105
+</project>

+ 15
- 0
src/main/java/com/njyunzhi/avatar/AvatarApplication.java Parādīt failu

@@ -0,0 +1,15 @@
1
+package com.njyunzhi.avatar;
2
+
3
+import org.springframework.boot.SpringApplication;
4
+import org.springframework.boot.autoconfigure.SpringBootApplication;
5
+import org.springframework.scheduling.annotation.EnableAsync;
6
+
7
+@EnableAsync
8
+@SpringBootApplication
9
+public class AvatarApplication {
10
+
11
+	public static void main(String[] args) {
12
+		SpringApplication.run(AvatarApplication.class, args);
13
+	}
14
+
15
+}

+ 28
- 0
src/main/java/com/njyunzhi/avatar/common/BaseController.java Parādīt failu

@@ -0,0 +1,28 @@
1
+package com.njyunzhi.avatar.common;
2
+
3
+import cn.dev33.satoken.stp.StpUtil;
4
+import com.njyunzhi.avatar.person.entity.TaPerson;
5
+import com.njyunzhi.avatar.person.service.TaPersonService;
6
+import org.springframework.beans.factory.annotation.Autowired;
7
+import org.springframework.stereotype.Component;
8
+
9
+@Component
10
+public class BaseController {
11
+
12
+    @Autowired
13
+    public TaPersonService iTaPersonService;
14
+
15
+    public TaPerson currentPerson() throws Exception {
16
+        String loginId = StpUtil.getLoginIdAsString();
17
+        if (StringUtils.isEmpty(loginId)) {
18
+            throw new Exception("请先登录");
19
+        }
20
+
21
+        TaPerson user = iTaPersonService.getById(loginId);
22
+        if (user == null) {
23
+            throw new Exception("人员不存在");
24
+        }
25
+
26
+        return user;
27
+    }
28
+}

+ 100
- 0
src/main/java/com/njyunzhi/avatar/common/HttpUtils.java Parādīt failu

@@ -0,0 +1,100 @@
1
+package com.njyunzhi.avatar.common;
2
+
3
+import org.springframework.http.*;
4
+import org.springframework.stereotype.Component;
5
+import org.springframework.web.client.RestTemplate;
6
+
7
+import java.io.UnsupportedEncodingException;
8
+import java.net.URLDecoder;
9
+import java.util.*;
10
+
11
+@Component
12
+public class HttpUtils {
13
+
14
+    public byte[] download(String url) {
15
+        RestTemplate restTemplate = new RestTemplate();
16
+        HttpHeaders headers = new HttpHeaders();
17
+        HttpEntity<String> entity = new HttpEntity<String>(headers);
18
+        Map<String, Object> urlAndParams = parseURL(url);
19
+        String formatURL = (String) urlAndParams.get("url");
20
+        Map<String, String> params = (Map<String, String>) urlAndParams.get("params");
21
+
22
+        ResponseEntity<byte[]> resp = restTemplate.exchange(formatURL, HttpMethod.GET, entity, byte[].class, params);
23
+        return resp.getBody();
24
+    }
25
+
26
+    public String get(String url) throws Exception {
27
+        RestTemplate restTemplate = new RestTemplate();
28
+        HttpHeaders headers = new HttpHeaders();
29
+        headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
30
+        HttpEntity<String> entity = new HttpEntity<String>(headers);
31
+
32
+        Map<String, Object> urlAndParams = parseURL(url);
33
+        String formatURL = (String) urlAndParams.get("url");
34
+        Map<String, String> params = (Map<String, String>) urlAndParams.get("params");
35
+
36
+        ResponseEntity<String> resp = restTemplate.exchange(formatURL, HttpMethod.GET, entity, String.class, params);
37
+        return resp.getBody();
38
+    }
39
+
40
+    public String post(String url, Map<String, String> header, String body) throws Exception {
41
+        RestTemplate restTemplate = new RestTemplate();
42
+        HttpHeaders headers = new HttpHeaders();
43
+        MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
44
+        headers.setContentType(type);
45
+        headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
46
+        headers.setAll(header);
47
+        HttpEntity<String> entity = new HttpEntity<String>(body, headers);
48
+
49
+        Map<String, Object> urlAndParams = parseURL(url);
50
+        String formatURL = (String) urlAndParams.get("url");
51
+        Map<String, String> params = (Map<String, String>) urlAndParams.get("params");
52
+
53
+        ResponseEntity<String> resp = restTemplate.exchange(formatURL, HttpMethod.POST, entity, String.class, params);
54
+        return resp.getBody();
55
+    }
56
+
57
+    // RestTemplate 不能正常的处理 querystring, 必须按照约定的方式处理
58
+    private Map<String, Object> parseURL(String url) {
59
+        Map<String, Object> res = new HashMap<>();
60
+
61
+        String[] parts = url.split("\\?");
62
+        String baseURL = parts[0];
63
+
64
+        if (parts.length < 2) {
65
+            res.put("url", baseURL);
66
+            res.put("params", new HashMap<>());
67
+            return res;
68
+        }
69
+
70
+
71
+        String[] fields = parts[1].split("&");
72
+        Map<String, String> params = new HashMap<>();
73
+        List<String> searchList = new ArrayList<>();
74
+        for (String field : fields) {
75
+            String[] pairs = field.split("=");
76
+            if (2 != pairs.length) {
77
+                continue;
78
+            }
79
+
80
+            try {
81
+                String key = URLDecoder.decode(pairs[0].trim(), "UTF-8");
82
+                String val = URLDecoder.decode(pairs[1].trim(), "UTF-8");
83
+
84
+                // 转化为 "foo={foo}" 这种字符串
85
+                searchList.add(String.format("%s={%s}", key, key));
86
+                // 把 foo 对应的值存储起来
87
+                params.put(key, val);
88
+            } catch (UnsupportedEncodingException e) {
89
+                e.printStackTrace();
90
+            }
91
+        }
92
+
93
+        // url 格式类似 http://foo.org/bar?name={name}
94
+        String formatURL = baseURL + "?" + String.join("&", searchList);
95
+        res.put("url", formatURL);
96
+        res.put("params", params);
97
+
98
+        return res;
99
+    }
100
+}

+ 85
- 0
src/main/java/com/njyunzhi/avatar/common/ResponseBean.java Parādīt failu

@@ -0,0 +1,85 @@
1
+package com.njyunzhi.avatar.common;
2
+
3
+import java.io.Serializable;
4
+
5
+/**
6
+ * 接口统一状态返回BEAN.
7
+ */
8
+public class ResponseBean<T> implements Serializable {
9
+
10
+    private static final long serialVersionUID = 3593827217136880822L;
11
+
12
+    public static final int CODE_SUCCESS = 1000;
13
+    public static final int ERROR_AUTH_FAIL = 1001;
14
+    public static final int ERROR_UNAUTHORIZED = 1002;
15
+    public static final int ERROR_MISSING_PARAMS = 1003;
16
+    public static final int ERROR_ILLEGAL_PARAMS = 1004;
17
+    public static final int ERROR_UNAVAILABLE = 1005;
18
+
19
+    private int code;
20
+    private String message;
21
+    private T data;
22
+
23
+    public ResponseBean() {
24
+        code = ResponseBean.CODE_SUCCESS;
25
+    }
26
+
27
+    public static <T> ResponseBean success(T data, String ...msgs) {
28
+        ResponseBean responseBean = new ResponseBean();
29
+        responseBean.code = ResponseBean.CODE_SUCCESS;
30
+        responseBean.data = data;
31
+
32
+        if (null != msgs && msgs.length > 0) {
33
+            responseBean.message = msgs[0];
34
+        }
35
+
36
+        return responseBean;
37
+    }
38
+
39
+
40
+    public static <T> ResponseBean error(String msg) {
41
+        ResponseBean responseBean = new ResponseBean();
42
+        responseBean.code = ERROR_ILLEGAL_PARAMS;
43
+        responseBean.message = msg;
44
+
45
+        return responseBean;
46
+    }
47
+
48
+    public static <T> ResponseBean error(String msg, int code, T ...datas) {
49
+        ResponseBean responseBean = new ResponseBean();
50
+        responseBean.code = code;
51
+        responseBean.message = msg;
52
+
53
+        if (null != datas && datas.length > 0) {
54
+            responseBean.data = datas[0];
55
+        }
56
+
57
+        return responseBean;
58
+    }
59
+
60
+    public int getCode() {
61
+        return code;
62
+    }
63
+    public void setCode(int code) {
64
+        this.code = code;
65
+    }
66
+
67
+    public String getMessage() {
68
+        return message;
69
+    }
70
+    public void setMessage(String message) {
71
+        this.message = message;
72
+    }
73
+
74
+    public T getData() {
75
+        return data;
76
+    }
77
+    public void setData(T data) {
78
+        this.data = data;
79
+    }
80
+    
81
+    @Override
82
+    public String toString() {
83
+        return  "{ code: "+code+", message: "+message+", data: <T> }";
84
+    }
85
+}

+ 131
- 0
src/main/java/com/njyunzhi/avatar/common/StringUtils.java Parādīt failu

@@ -0,0 +1,131 @@
1
+package com.njyunzhi.avatar.common;
2
+
3
+import java.io.UnsupportedEncodingException;
4
+import java.net.URLEncoder;
5
+import java.util.Random;
6
+import java.util.UUID;
7
+import java.util.regex.Matcher;
8
+import java.util.regex.Pattern;
9
+
10
+public class StringUtils {
11
+    private static Pattern humpPattern = Pattern.compile("[A-Z]");
12
+
13
+    public static boolean isEmpty(String str) {
14
+        return null == str || "".equals(str.trim()) || "null".equals(str) || "undefined".equals(str);
15
+    }
16
+
17
+    public static String trim(String src, String...st) {
18
+        if (null == src) return src;
19
+        if (null == st || st.length == 0) return src.trim();
20
+
21
+        String start = st[0];
22
+        if (!src.startsWith(start)) {
23
+            return src;
24
+        }
25
+
26
+        return src.substring(start.length());
27
+    }
28
+
29
+    public static String trimEnd(String src, String str) {
30
+        if (null == src || null == str) {
31
+            return src;
32
+        }
33
+
34
+        if (src.endsWith(str)) {
35
+            return src.substring(0, src.length() - str.length());
36
+        }
37
+
38
+        return src;
39
+    }
40
+
41
+    public static String ifNull(String src, String defaultVal) {
42
+        return isEmpty(src) ? defaultVal : src;
43
+    }
44
+
45
+    public static String like(String src) {
46
+        if (null == src) return null;
47
+        if ("".equals(src)) return src;
48
+        return "%" + src + "%";
49
+    }
50
+
51
+    public static String random(int length) {
52
+        String str="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
53
+        Random random = new Random();
54
+        StringBuffer sb = new StringBuffer();
55
+        for(int i=0;i<length;i++){
56
+            int number=random.nextInt(62);
57
+            sb.append(str.charAt(number));
58
+        }
59
+        return sb.toString();
60
+    }
61
+
62
+    public static String uuid() {
63
+        return UUID.randomUUID().toString().replaceAll("-", "");
64
+    }
65
+
66
+    public static String urlEncode(String str) {
67
+        try {
68
+            return URLEncoder.encode(str, "UTF-8");
69
+        } catch (UnsupportedEncodingException e) {
70
+            e.printStackTrace();
71
+            return str;
72
+        }
73
+    }
74
+
75
+    public static String humpToLine(String str) {
76
+        if (null == str || "".equals(str)) return "";
77
+
78
+        Matcher matcher = humpPattern.matcher(str);
79
+        StringBuffer sb = new StringBuffer();
80
+        while (matcher.find()) {
81
+            matcher.appendReplacement(sb, "_" + matcher.group(0).toLowerCase());
82
+        }
83
+        matcher.appendTail(sb);
84
+        return sb.toString();
85
+    }
86
+
87
+    public static String strToUnicode(String str) {
88
+        char[] chars = str.toCharArray();
89
+        String returnStr = "";
90
+        for (int i = 0; i < chars.length; i++) {
91
+            returnStr += "\\u" + Integer.toString(chars[i], 16);
92
+        }
93
+        return returnStr;
94
+    }
95
+
96
+    public static String repeat(String src, int len) {
97
+        if (null == src) {
98
+            return null;
99
+        }
100
+
101
+        if (len <= 0) {
102
+            return src;
103
+        }
104
+
105
+        String res = "";
106
+        for (int i = 0; i < len; i ++) {
107
+            res += src;
108
+        }
109
+
110
+        return res;
111
+    }
112
+
113
+    public static String lpad(String src, String padStr, int len) {
114
+        if (null == src) {
115
+            return null;
116
+        }
117
+
118
+        if (len <= 0 || src.length() >= len) {
119
+            return src;
120
+        }
121
+
122
+        if (null == padStr) {
123
+            padStr = "";
124
+        }
125
+
126
+        int padLen = len - src.length();
127
+        String prefix = repeat(padStr, padLen);
128
+        prefix = prefix.substring(0, padLen);
129
+        return prefix + src;
130
+    }
131
+}

+ 40
- 0
src/main/java/com/njyunzhi/avatar/common/WxUtils.java Parādīt failu

@@ -0,0 +1,40 @@
1
+package com.njyunzhi.avatar.common;
2
+
3
+import cn.binarywang.wx.miniapp.api.WxMaService;
4
+import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
5
+import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
6
+import com.njyunzhi.avatar.config.WeixinConfig;
7
+import org.springframework.beans.factory.annotation.Autowired;
8
+import org.springframework.stereotype.Component;
9
+
10
+@Component
11
+public class WxUtils {
12
+    //
13
+    private final WeixinConfig config;
14
+    //
15
+    private static WxMaService maService;
16
+
17
+    @Autowired
18
+    public WxUtils(WeixinConfig config) {
19
+        this.config = config;
20
+        this.maService = initMaService(config);
21
+    }
22
+
23
+    public WxMaService getMaService() {
24
+        return maService;
25
+    }
26
+
27
+    private WxMaService initMaService(WeixinConfig config) {
28
+        WxMaDefaultConfigImpl conf = new WxMaDefaultConfigImpl();
29
+        WeixinConfig.Miniapp miniapp = config.getMiniapp();
30
+        conf.setAppid(miniapp.getAppid());
31
+        conf.setSecret(miniapp.getSecret());
32
+        conf.setToken(miniapp.getToken());
33
+        conf.setAesKey(miniapp.getAesKey());
34
+        conf.setMsgDataFormat("JSON");
35
+
36
+        WxMaService service = new WxMaServiceImpl();
37
+        service.setWxMaConfig(conf);
38
+        return service;
39
+    }
40
+}

+ 14
- 0
src/main/java/com/njyunzhi/avatar/config/FilterConfig.java Parādīt failu

@@ -0,0 +1,14 @@
1
+package com.njyunzhi.avatar.config;
2
+
3
+import lombok.Data;
4
+import org.springframework.boot.context.properties.ConfigurationProperties;
5
+import org.springframework.stereotype.Component;
6
+
7
+import java.util.List;
8
+
9
+@Data
10
+@Component
11
+@ConfigurationProperties(prefix = "yz.filter")
12
+public class FilterConfig {
13
+    List<String> annList;
14
+}

+ 14
- 0
src/main/java/com/njyunzhi/avatar/config/MybatisPlusConfig.java Parādīt failu

@@ -0,0 +1,14 @@
1
+package com.njyunzhi.avatar.config;
2
+
3
+import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
4
+import org.springframework.context.annotation.Bean;
5
+import org.springframework.context.annotation.Configuration;
6
+
7
+@Configuration
8
+public class MybatisPlusConfig {
9
+
10
+    @Bean
11
+    public PaginationInterceptor paginationInterceptor() {
12
+        return new PaginationInterceptor();
13
+    }
14
+}

+ 48
- 0
src/main/java/com/njyunzhi/avatar/config/SaTokenConfigure.java Parādīt failu

@@ -0,0 +1,48 @@
1
+package com.njyunzhi.avatar.config;
2
+
3
+import cn.dev33.satoken.context.SaHolder;
4
+import cn.dev33.satoken.filter.SaServletFilter;
5
+import cn.dev33.satoken.jwt.StpLogicJwtForStateless;
6
+import cn.dev33.satoken.router.SaHttpMethod;
7
+import cn.dev33.satoken.router.SaRouter;
8
+import cn.dev33.satoken.stp.StpLogic;
9
+import cn.dev33.satoken.stp.StpUtil;
10
+import com.alibaba.fastjson.JSONObject;
11
+import com.njyunzhi.avatar.common.ResponseBean;
12
+import org.springframework.beans.factory.annotation.Autowired;
13
+import org.springframework.context.annotation.Bean;
14
+import org.springframework.context.annotation.Configuration;
15
+
16
+@Configuration
17
+public class SaTokenConfigure {
18
+
19
+    @Autowired
20
+    FilterConfig filterConfig;
21
+
22
+    @Bean
23
+    public SaServletFilter getSaServletFilter() {
24
+        SaServletFilter saServletFilter = new SaServletFilter();
25
+        saServletFilter.addInclude("/**");
26
+        saServletFilter.addExclude(filterConfig.getAnnList().toArray(new String[0]));
27
+        saServletFilter.setAuth(auth -> {
28
+            // OPTIONS 请求不校验, 主要是为了解决跨域问题
29
+            SaRouter.notMatch(SaHttpMethod.OPTIONS).check(r -> StpUtil.checkLogin());
30
+        });
31
+
32
+        saServletFilter.setError(err -> {
33
+            SaHolder.getResponse().setHeader("Content-Type", "application/json;charset=UTF-8");
34
+            SaHolder.getResponse().setStatus(200);
35
+            String jsonStr = JSONObject.toJSONString(ResponseBean.error(err.getMessage()));
36
+            return jsonStr;
37
+        });
38
+
39
+        return saServletFilter;
40
+    }
41
+
42
+
43
+    // Sa-Token 整合 jwt (Style模式)
44
+    @Bean
45
+    public StpLogic getStpLogicJwt() {
46
+        return new StpLogicJwtForStateless();
47
+    }
48
+}

+ 24
- 0
src/main/java/com/njyunzhi/avatar/config/SwagggerConfig.java Parādīt failu

@@ -0,0 +1,24 @@
1
+package com.njyunzhi.avatar.config;
2
+
3
+import io.swagger.annotations.Api;
4
+import org.springframework.context.annotation.Bean;
5
+import org.springframework.context.annotation.Configuration;
6
+import springfox.documentation.builders.PathSelectors;
7
+import springfox.documentation.builders.RequestHandlerSelectors;
8
+import springfox.documentation.spi.DocumentationType;
9
+import springfox.documentation.spring.web.plugins.Docket;
10
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
11
+
12
+@Configuration
13
+@EnableSwagger2
14
+public class SwagggerConfig {
15
+    @Bean
16
+    public Docket docket() {
17
+        return new Docket(DocumentationType.SWAGGER_2)
18
+                .select()
19
+                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
20
+                .paths(PathSelectors.any())
21
+                .build();
22
+
23
+    }
24
+}

+ 24
- 0
src/main/java/com/njyunzhi/avatar/config/WeixinConfig.java Parādīt failu

@@ -0,0 +1,24 @@
1
+package com.njyunzhi.avatar.config;
2
+
3
+import lombok.Data;
4
+import org.springframework.boot.context.properties.ConfigurationProperties;
5
+import org.springframework.boot.context.properties.NestedConfigurationProperty;
6
+import org.springframework.stereotype.Component;
7
+
8
+@Data
9
+@Component
10
+@ConfigurationProperties(prefix = "wx")
11
+public class WeixinConfig {
12
+
13
+    @NestedConfigurationProperty
14
+    private Miniapp miniapp = new Miniapp();
15
+
16
+    @Data
17
+    public static class Miniapp {
18
+        private String appid;
19
+        private String secret;
20
+        private String token;
21
+        private String aesKey;
22
+        private String msgDataFormat;
23
+    }
24
+}

+ 19
- 0
src/main/java/com/njyunzhi/avatar/exception/GlobalExceptionHandler.java Parādīt failu

@@ -0,0 +1,19 @@
1
+package com.njyunzhi.avatar.exception;
2
+
3
+import com.njyunzhi.avatar.common.ResponseBean;
4
+import lombok.extern.slf4j.Slf4j;
5
+import org.springframework.web.bind.annotation.ExceptionHandler;
6
+import org.springframework.web.bind.annotation.ResponseBody;
7
+import org.springframework.web.bind.annotation.RestControllerAdvice;
8
+
9
+@Slf4j
10
+@RestControllerAdvice
11
+public class GlobalExceptionHandler {
12
+
13
+    @ResponseBody
14
+    @ExceptionHandler(Exception.class)
15
+    public ResponseBean handleException(Exception e){
16
+        log.error(e.getMessage(),e);
17
+        return ResponseBean.error(e.getMessage(), ResponseBean.ERROR_UNAVAILABLE);
18
+    }
19
+}

+ 16
- 0
src/main/java/com/njyunzhi/avatar/person/ServiceImpl Parādīt failu

@@ -0,0 +1,16 @@
1
+package com.njyunzhi.avatar.person.service.impl;
2
+
3
+import org.springframework.beans.factory.annotation.Autowired;
4
+import org.springframework.stereotype.Service;
5
+import com.njyunzhi.avatar.person.entity.TdCity;
6
+import com.njyunzhi.avatar.person.mapper.TdCityMapper;
7
+import com.njyunzhi.avatar.person.service.TdCityService;
8
+ /**
9
+ * 城市表;(td_city)表服务实现类
10
+ * @author : http://www.chiner.pro
11
+ * @date : 2022-9-27
12
+ */
13
+@Service
14
+public class TdCityServiceImpl extends BaseServiceImpl<TdCityMapper, TdCity> implements TdCityService {
15
+    
16
+}

+ 67
- 0
src/main/java/com/njyunzhi/avatar/person/controller/StRankController.java Parādīt failu

@@ -0,0 +1,67 @@
1
+package com.njyunzhi.avatar.person.controller;
2
+
3
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4
+import com.baomidou.mybatisplus.core.metadata.IPage;
5
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6
+import com.njyunzhi.avatar.common.BaseController;
7
+import com.njyunzhi.avatar.common.ResponseBean;
8
+import com.njyunzhi.avatar.person.entity.TaPerson;
9
+import com.njyunzhi.avatar.person.vo.RankItem;
10
+import io.swagger.annotations.Api;
11
+import io.swagger.annotations.ApiOperation;
12
+import io.swagger.annotations.ApiParam;
13
+import org.springframework.beans.factory.annotation.Autowired;
14
+import org.springframework.web.bind.annotation.*;
15
+import com.njyunzhi.avatar.person.entity.StRank;
16
+import com.njyunzhi.avatar.person.service.StRankService;
17
+
18
+/**
19
+ * 统计排行;(st_rank)表控制层
20
+ *
21
+ * @author : http://njyunzhi.com
22
+ * @date : 2022-9-27
23
+ */
24
+@Api(tags = "统计排行对象功能接口")
25
+@RestController
26
+@RequestMapping("/wx")
27
+public class StRankController extends BaseController {
28
+
29
+    @Autowired
30
+    private StRankService stRankService;
31
+
32
+    /**
33
+     * 分页查询
34
+     *
35
+     * @param pageNum  当前页码
36
+     * @param pageSize 每页条数
37
+     * @return 查询结果
38
+     */
39
+    @ApiOperation("分页查询")
40
+    @GetMapping("/stRank")
41
+    public ResponseBean list(@ApiParam("页码") @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
42
+                             @ApiParam("单页数据量") @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
43
+                             @ApiParam("排行类型") @RequestParam(value = "type") String type) throws Exception {
44
+
45
+        IPage<RankItem> pg = new Page<>(pageNum, pageSize);
46
+        IPage<RankItem> result = stRankService.getPageBy(pg, type);
47
+
48
+        return ResponseBean.success(result);
49
+    }
50
+
51
+
52
+    /**
53
+     * 更新数据传递人员
54
+     *
55
+     * @return 实例对象
56
+     */
57
+    @ApiOperation("获取排行")
58
+    @GetMapping("/stRank/{type}/{code}")
59
+    public ResponseBean getRank(@ApiParam("排行类型") @PathVariable String type,
60
+                                @ApiParam("排行编码") @PathVariable String code) throws Exception {
61
+//         TaPerson taPerson = currentPerson();
62
+
63
+        long rank = stRankService.getRankBy(type, code);
64
+        return ResponseBean.success(rank);
65
+    }
66
+
67
+}

+ 107
- 0
src/main/java/com/njyunzhi/avatar/person/controller/TaPersonController.java Parādīt failu

@@ -0,0 +1,107 @@
1
+package com.njyunzhi.avatar.person.controller;
2
+
3
+import com.alibaba.fastjson.JSON;
4
+import com.alibaba.fastjson.JSONArray;
5
+import com.alibaba.fastjson.JSONObject;
6
+import com.baomidou.mybatisplus.core.metadata.IPage;
7
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
8
+import com.njyunzhi.avatar.common.BaseController;
9
+import com.njyunzhi.avatar.common.HttpUtils;
10
+import com.njyunzhi.avatar.common.ResponseBean;
11
+import com.njyunzhi.avatar.common.StringUtils;
12
+import com.njyunzhi.avatar.person.service.StRankService;
13
+import io.swagger.annotations.Api;
14
+import io.swagger.annotations.ApiOperation;
15
+import io.swagger.annotations.ApiParam;
16
+import org.springframework.beans.factory.annotation.Autowired;
17
+import org.springframework.beans.factory.annotation.Value;
18
+import org.springframework.web.bind.annotation.*;
19
+import com.njyunzhi.avatar.person.entity.TaPerson;
20
+import com.njyunzhi.avatar.person.service.TaPersonService;
21
+
22
+import java.util.Locale;
23
+
24
+/**
25
+ * 人员表;(ta_person)表控制层
26
+ * @author : http://njyunzhi.com
27
+ * @date : 2022-9-27
28
+ */
29
+@Api(tags = "人员表对象功能接口")
30
+@RestController
31
+@RequestMapping("/wx")
32
+public class TaPersonController extends BaseController {
33
+    
34
+    @Autowired
35
+    private TaPersonService taPersonService;
36
+
37
+    @Autowired
38
+    StRankService stRankService;
39
+
40
+    @Value("${yz.amap.key}")
41
+    String amapKey;
42
+
43
+    @Value("${yz.amap.webapi}")
44
+    String amapApi;
45
+
46
+    @Autowired
47
+    HttpUtils httpUtils;
48
+
49
+    /** 
50
+     * 分页查询
51
+     *
52
+     * @param pageNum 当前页码
53
+     * @param pageSize 每页条数
54
+     * @return 查询结果
55
+     */
56
+    @ApiOperation("分页查询")
57
+    @GetMapping("/taPerson")
58
+    public ResponseBean list(@ApiParam("页码") @RequestParam(value ="pageNum",defaultValue = "1") Integer pageNum,
59
+                            @ApiParam("单页数据量") @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize) throws Exception {
60
+        
61
+        IPage<TaPerson> pg = new Page<>(pageNum, pageSize);
62
+        // QueryWrapper<TaPerson> queryWrapper = new QueryWrapper<>();
63
+        // queryWrapper.orderByDesc("create_date");
64
+        IPage<TaPerson> result = taPersonService.page(pg);
65
+        
66
+        return ResponseBean.success(result);
67
+    }
68
+
69
+    /** 
70
+     * 更新数据
71
+     *
72
+     * @param taPerson 实例对象
73
+     * @return 实例对象
74
+     */
75
+    @ApiOperation("更新数据")
76
+    @PutMapping("/taPerson")
77
+    public ResponseBean edit(@ApiParam("对象实体") @RequestBody TaPerson taPerson) throws Exception {
78
+
79
+        TaPerson origin = currentPerson();
80
+
81
+        try {
82
+            String location = taPerson.getLocation();
83
+            if (!StringUtils.isEmpty(location) && (!location.equals(origin.getLocation()) || StringUtils.isEmpty(origin.getAreaCode()))) {
84
+                location = StringUtils.urlEncode(location);
85
+                String url = amapApi + "/v3/geocode/regeo?key=" + amapKey + "&location=" + location;
86
+                String resp = httpUtils.get(url);
87
+                JSONObject jsonObject = JSON.parseObject(resp);
88
+                String infoCode = jsonObject.getString("infocode");
89
+                if ("10000".equals(infoCode)) {
90
+                    JSONObject regeoCodes = jsonObject.getJSONObject("regeocode");
91
+                    JSONObject address = regeoCodes.getJSONObject("addressComponent");
92
+                    taPerson.setAreaCode(address.getString("adcode"));
93
+
94
+                    stRankService.createRank("area", taPerson.getAreaCode());
95
+                    stRankService.updateByArea(taPerson.getAreaCode());
96
+                }
97
+            }
98
+        } catch (Exception e) {
99
+            e.printStackTrace();
100
+        }
101
+
102
+        taPerson.setPersonId(origin.getPersonId());
103
+        taPersonService.updateById(taPerson);
104
+        return ResponseBean.success(taPerson);
105
+    }
106
+
107
+}

+ 139
- 0
src/main/java/com/njyunzhi/avatar/person/controller/WxMaController.java Parādīt failu

@@ -0,0 +1,139 @@
1
+package com.njyunzhi.avatar.person.controller;
2
+
3
+import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
4
+import cn.dev33.satoken.stp.StpUtil;
5
+import com.njyunzhi.avatar.common.BaseController;
6
+import com.njyunzhi.avatar.common.ResponseBean;
7
+import com.njyunzhi.avatar.common.StringUtils;
8
+import com.njyunzhi.avatar.common.WxUtils;
9
+import com.njyunzhi.avatar.person.entity.TaPerson;
10
+import com.njyunzhi.avatar.person.service.StRankService;
11
+import com.njyunzhi.avatar.person.service.TaPersonService;
12
+import com.njyunzhi.avatar.person.vo.MaLogin;
13
+import io.swagger.annotations.Api;
14
+import io.swagger.annotations.ApiOperation;
15
+import io.swagger.annotations.ApiParam;
16
+import org.springframework.beans.factory.annotation.Autowired;
17
+import org.springframework.web.bind.annotation.*;
18
+
19
+import java.time.LocalDateTime;
20
+import java.util.HashMap;
21
+import java.util.Map;
22
+
23
+@Api(tags = "小程序登入/登出")
24
+@RestController
25
+@RequestMapping("/wx")
26
+public class WxMaController extends BaseController {
27
+
28
+    @Autowired
29
+    TaPersonService iTaPersonService;
30
+
31
+    @Autowired
32
+    StRankService stRankService;
33
+
34
+    @Autowired
35
+    WxUtils wxUtils;
36
+
37
+    /**
38
+     *
39
+     * 小程序
40
+     * @param loginParam
41
+     * @return
42
+     * @throws Exception
43
+     */
44
+    @PostMapping("/login")
45
+    @ApiOperation(value="小程序登录", notes = "小程序登录", httpMethod = "POST", response = ResponseBean.class)
46
+    public ResponseBean login(@ApiParam("登录参数") @RequestBody MaLogin loginParam) throws Exception {
47
+
48
+        String code = loginParam.getCode();
49
+        WxMaJscode2SessionResult sessionInfo = wxUtils.getMaService().getUserService().getSessionInfo(code);
50
+        String openid = sessionInfo.getOpenid();
51
+        String sessionKey = sessionInfo.getSessionKey();
52
+
53
+        TaPerson taPerson = iTaPersonService.getExistBy("openid", openid, false, true);
54
+        if (null == taPerson) {
55
+            taPerson = new TaPerson();
56
+            taPerson.setOpenid(openid);
57
+            taPerson.setRecommender(loginParam.getRecommender());
58
+            taPerson.setCreateDate(LocalDateTime.now());
59
+            iTaPersonService.save(taPerson);
60
+            //
61
+            stRankService.createRank("person", taPerson.getPersonId().toString());
62
+        }
63
+
64
+        if (null != loginParam.getRecommender()) {
65
+            stRankService.updateByPerson(taPerson.getRecommender());
66
+        }
67
+
68
+        StpUtil.login(taPerson.getPersonId(), "miniapp");
69
+        Map<String, Object> res = new HashMap<>();
70
+        res.put("person", taPerson);
71
+        res.put("token", StpUtil.getTokenValue());
72
+        res.put("sessionKey", sessionKey);
73
+
74
+        return ResponseBean.success(res);
75
+    }
76
+
77
+//    @PutMapping("/auth-user")
78
+//    @ApiOperation(value="授权头像", notes = "授权头像", httpMethod = "PUT", response = TaPerson.class)
79
+//    public ResponseBean updateUserInfo(@ApiParam("客户端ID") @PathVariable String clientId,
80
+//                                       @ApiParam("授权头像的参数") @RequestBody WxMaAuthParam params) throws Exception {
81
+//        WxMaService service = wxUtils.getMaService();
82
+//        checkAuthParams(service, params);
83
+//
84
+//        // 解密用户信息
85
+//        WxMaUserInfo userInfo = service.getUserService().getUserInfo(params.getSessionKey(), params.getEncryptedData(), params.getIv());
86
+//
87
+//        TaPerson taPerson = currentPerson();
88
+//        if (null == taPerson) {
89
+//            throw new Exception("校验当前人员失败, 请重试");
90
+//        }
91
+//
92
+//        taPerson.setAvatar(userInfo.getAvatarUrl());
93
+//        taPerson.setNickName(userInfo.getNickName());
94
+//        taPerson.setSex(Integer.parseInt(userInfo.getGender()));
95
+//
96
+//        iTaPersonService.updateById(taPerson);
97
+//
98
+//        return ResponseBean.success(taPerson);
99
+//    }
100
+//
101
+//    @ApiOperation(value="授权手机", notes = "授权手机", httpMethod = "PUT", response = TaPerson.class)
102
+//    @PutMapping("/auth-phone")
103
+//    public ResponseBean updateUserPhone(@ApiParam("客户端ID") @PathVariable String clientId,
104
+//                                        @ApiParam("授权手机的参数") @RequestBody WxMaAuthParam params) throws Exception {
105
+//
106
+//        WxMaService service = wxUtils.getMaService();
107
+//
108
+//        // 解密
109
+//        WxMaPhoneNumberInfo phoneNoInfo = service.getUserService().getPhoneNoInfo(params.getSessionKey(), params.getEncryptedData(), params.getIv());
110
+//
111
+//        TaPerson taPerson = currentPerson();
112
+//        if (null == taPerson) {
113
+//            throw new Exception("校验当前人员失败, 请重试");
114
+//        }
115
+//
116
+//        taPerson.setPhone(phoneNoInfo.getPhoneNumber());
117
+//        iTaPersonService.updateById(taPerson);
118
+//
119
+//        return ResponseBean.success(taPerson);
120
+//    }
121
+//
122
+//
123
+//    private void checkAuthParams(WxMaService service, WxMaAuthParam params) throws Exception {
124
+//        String signature = params.getSignature();
125
+//        String rawData = params.getRawData();
126
+//        String encryptedData = params.getEncryptedData();
127
+//        String iv = params.getIv();
128
+//        String sessionKey = params.getSessionKey();
129
+//
130
+//        if (StringUtils.isEmpty(signature) || StringUtils.isEmpty(rawData) || StringUtils.isEmpty(encryptedData) || StringUtils.isEmpty(iv) || StringUtils.isEmpty(sessionKey)) {
131
+//            throw new Exception("缺失授权参数");
132
+//        }
133
+//
134
+//        boolean isValid = service.getUserService().checkUserInfo(sessionKey, rawData, signature);
135
+//        if (!isValid) {
136
+//            throw new Exception("校验授权参数失败, 请重试");
137
+//        }
138
+//    }
139
+}

+ 39
- 0
src/main/java/com/njyunzhi/avatar/person/entity/StRank.java Parādīt failu

@@ -0,0 +1,39 @@
1
+package com.njyunzhi.avatar.person.entity;
2
+
3
+import io.swagger.annotations.ApiModel;
4
+import io.swagger.annotations.ApiModelProperty;
5
+import com.baomidou.mybatisplus.annotation.IdType;
6
+import com.baomidou.mybatisplus.annotation.TableName;
7
+import com.baomidou.mybatisplus.annotation.TableId;
8
+import java.io.Serializable;
9
+import java.util.Date;
10
+import lombok.Data;
11
+import lombok.EqualsAndHashCode;
12
+import lombok.experimental.Accessors;
13
+
14
+/**
15
+ * 统计排行;
16
+ * @author : http://www.chiner.pro
17
+ * @date : 2022-9-27
18
+ */
19
+@Data
20
+@EqualsAndHashCode(callSuper = false)
21
+@Accessors(chain = true)
22
+@ApiModel(value = "统计排行",description = "")
23
+@TableName("st_rank")
24
+public class StRank implements Serializable,Cloneable{
25
+    /** 序号 */
26
+    @ApiModelProperty(name = "序号",notes = "")
27
+    @TableId(value = "id", type = IdType.AUTO)
28
+    private Integer id ;
29
+    /** 类型 */
30
+    @ApiModelProperty(name = "类型",notes = "")
31
+    private String stType ;
32
+    /** 编码 */
33
+    @ApiModelProperty(name = "编码",notes = "")
34
+    private String stCode ;
35
+    /** 值 */
36
+    @ApiModelProperty(name = "值",notes = "")
37
+    private Integer stNum ;
38
+
39
+}

+ 60
- 0
src/main/java/com/njyunzhi/avatar/person/entity/TaPerson.java Parādīt failu

@@ -0,0 +1,60 @@
1
+package com.njyunzhi.avatar.person.entity;
2
+
3
+import com.baomidou.mybatisplus.annotation.TableField;
4
+import io.swagger.annotations.ApiModel;
5
+import io.swagger.annotations.ApiModelProperty;
6
+import com.baomidou.mybatisplus.annotation.IdType;
7
+import com.baomidou.mybatisplus.annotation.TableName;
8
+import com.baomidou.mybatisplus.annotation.TableId;
9
+import java.io.Serializable;
10
+import java.time.LocalDateTime;
11
+import java.util.Date;
12
+import lombok.Data;
13
+import lombok.EqualsAndHashCode;
14
+import lombok.experimental.Accessors;
15
+
16
+/**
17
+ * 人员表;
18
+ * @author : http://www.chiner.pro
19
+ * @date : 2022-9-27
20
+ */
21
+@Data
22
+@EqualsAndHashCode(callSuper = false)
23
+@Accessors(chain = true)
24
+@ApiModel(value = "人员表",description = "")
25
+@TableName("ta_person")
26
+public class TaPerson implements Serializable,Cloneable{
27
+    /** 人员ID */
28
+    @ApiModelProperty(name = "人员ID",notes = "")
29
+    @TableId(value = "person_id", type = IdType.AUTO)
30
+    private Integer personId ;
31
+    /** openid */
32
+    @ApiModelProperty(name = "openid",notes = "")
33
+    private String openid ;
34
+    /** 昵称 */
35
+    @ApiModelProperty(name = "昵称",notes = "")
36
+    private String nickname ;
37
+    /** 头像 */
38
+    @ApiModelProperty(name = "头像",notes = "")
39
+    private String avatar ;
40
+    /** 状态 */
41
+    @ApiModelProperty(name = "状态",notes = "")
42
+    @TableField("`status`")
43
+    private Integer status ;
44
+    /** 创建时间 */
45
+    @ApiModelProperty(name = "创建时间",notes = "")
46
+    private LocalDateTime createDate ;
47
+    /** 分享人 */
48
+    @ApiModelProperty(name = "分享人",notes = "")
49
+    private Integer recommender ;
50
+    /** 分享人数 */
51
+    @ApiModelProperty(name = "分享人数",notes = "")
52
+    private Integer shareNum ;
53
+    /** 定位 */
54
+    @ApiModelProperty(name = "定位",notes = "")
55
+    private String location ;
56
+    /** 所在区域 */
57
+    @ApiModelProperty(name = "所在区域",notes = "")
58
+    private String areaCode ;
59
+
60
+}

+ 60
- 0
src/main/java/com/njyunzhi/avatar/person/entity/TdCity.java Parādīt failu

@@ -0,0 +1,60 @@
1
+package com.njyunzhi.avatar.person.entity;
2
+
3
+import io.swagger.annotations.ApiModel;
4
+import io.swagger.annotations.ApiModelProperty;
5
+import com.baomidou.mybatisplus.annotation.IdType;
6
+import com.baomidou.mybatisplus.annotation.TableName;
7
+import com.baomidou.mybatisplus.annotation.TableId;
8
+import java.io.Serializable;
9
+
10
+import lombok.Data;
11
+import lombok.EqualsAndHashCode;
12
+import lombok.experimental.Accessors;
13
+
14
+ /**
15
+ * 城市表;
16
+ * @author : http://www.chiner.pro
17
+ * @date : 2022-9-27
18
+ */
19
+@Data
20
+@EqualsAndHashCode(callSuper = false)
21
+@Accessors(chain = true)
22
+@ApiModel(value = "城市表",description = "")
23
+@TableName("td_city")
24
+public class TdCity implements Serializable,Cloneable{
25
+    /** ID */
26
+    @ApiModelProperty(name = "ID",notes = "")
27
+    @TableId(value = "id", type = IdType.INPUT)
28
+    private Integer id ;
29
+    /** 省市区名称 */
30
+    @ApiModelProperty(name = "省市区名称",notes = "")
31
+    private String name ;
32
+    /** 上级ID */
33
+    @ApiModelProperty(name = "上级ID",notes = "")
34
+    private Integer parentid ;
35
+    /** 简称 */
36
+    @ApiModelProperty(name = "简称",notes = "")
37
+    private String shortname ;
38
+    /** 级别:0,中国;1,省分;2,市;3,区、县 */
39
+    @ApiModelProperty(name = "级别:0,中国;1,省分;2,市;3,区、县",notes = "")
40
+    private Integer leveltype ;
41
+    /** 城市代码 */
42
+    @ApiModelProperty(name = "城市代码",notes = "")
43
+    private String citycode ;
44
+    /** 邮编 */
45
+    @ApiModelProperty(name = "邮编",notes = "")
46
+    private String zipcode ;
47
+    /** 经度 */
48
+    @ApiModelProperty(name = "经度",notes = "")
49
+    private String lng ;
50
+    /** 纬度 */
51
+    @ApiModelProperty(name = "纬度",notes = "")
52
+    private String lat ;
53
+    /** 拼音 */
54
+    @ApiModelProperty(name = "拼音",notes = "")
55
+    private String pinyin ;
56
+    /** 状态 */
57
+    @ApiModelProperty(name = "状态",notes = "")
58
+    private Integer status ;
59
+
60
+}

+ 25
- 0
src/main/java/com/njyunzhi/avatar/person/mapper/StRankMapper.java Parādīt failu

@@ -0,0 +1,25 @@
1
+package com.njyunzhi.avatar.person.mapper;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import com.baomidou.mybatisplus.core.metadata.IPage;
5
+import com.njyunzhi.avatar.person.vo.RankItem;
6
+import org.apache.ibatis.annotations.Mapper;
7
+import org.apache.ibatis.annotations.Param;
8
+import com.njyunzhi.avatar.person.entity.StRank;
9
+
10
+ /**
11
+ * 统计排行;(st_rank)表数据库访问层
12
+ * @author : http://njyunzhi.com
13
+ * @date : 2022-9-27
14
+ */
15
+@Mapper
16
+public interface StRankMapper  extends BaseMapper<StRank>{
17
+
18
+     int updateByArea();
19
+
20
+     int increment(@Param("stType") String stType, @Param("stCode") String stCode);
21
+
22
+     long getRankBy(@Param("stType") String stType, @Param("stCode") String stCode);
23
+
24
+     IPage<RankItem> getPageBy(IPage<RankItem> pg, @Param("stType") String stType);
25
+ }

+ 16
- 0
src/main/java/com/njyunzhi/avatar/person/mapper/TaPersonMapper.java Parādīt failu

@@ -0,0 +1,16 @@
1
+package com.njyunzhi.avatar.person.mapper;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import org.apache.ibatis.annotations.Mapper;
5
+import org.apache.ibatis.annotations.Param;
6
+import com.njyunzhi.avatar.person.entity.TaPerson;
7
+
8
+ /**
9
+ * 人员表;(ta_person)表数据库访问层
10
+ * @author : http://njyunzhi.com
11
+ * @date : 2022-9-27
12
+ */
13
+@Mapper
14
+public interface TaPersonMapper  extends BaseMapper<TaPerson>{
15
+    
16
+}

+ 16
- 0
src/main/java/com/njyunzhi/avatar/person/mapper/TdCityMapper.java Parādīt failu

@@ -0,0 +1,16 @@
1
+package com.njyunzhi.avatar.person.mapper;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import org.apache.ibatis.annotations.Mapper;
5
+import org.apache.ibatis.annotations.Param;
6
+import com.njyunzhi.avatar.person.entity.TdCity;
7
+
8
+ /**
9
+ * 城市表;(td_city)表数据库访问层
10
+ * @author : http://njyunzhi.com
11
+ * @date : 2022-9-27
12
+ */
13
+@Mapper
14
+public interface TdCityMapper  extends BaseMapper<TdCity>{
15
+    
16
+}

+ 23
- 0
src/main/java/com/njyunzhi/avatar/person/service/StRankService.java Parādīt failu

@@ -0,0 +1,23 @@
1
+package com.njyunzhi.avatar.person.service;
2
+
3
+import com.baomidou.mybatisplus.core.metadata.IPage;
4
+import com.njyunzhi.avatar.person.entity.StRank;
5
+import com.njyunzhi.avatar.person.vo.RankItem;
6
+import com.njyunzhi.avatar.service.IBaseService;
7
+
8
+/**
9
+ * 统计排行;(st_rank)表服务接口
10
+ * @author : http://njyunzhi.com
11
+ * @date : 2022-9-27
12
+ */
13
+public interface StRankService extends IBaseService<StRank> {
14
+    StRank createRank(String type, String code);
15
+
16
+    boolean updateByArea(String areaCode);
17
+
18
+    void updateByPerson(Integer personId);
19
+
20
+    long getRankBy(String person, String stCode);
21
+
22
+    IPage<RankItem> getPageBy(IPage<RankItem> pg, String type);
23
+}

+ 13
- 0
src/main/java/com/njyunzhi/avatar/person/service/TaPersonService.java Parādīt failu

@@ -0,0 +1,13 @@
1
+package com.njyunzhi.avatar.person.service;
2
+
3
+import com.njyunzhi.avatar.person.entity.TaPerson;
4
+import com.njyunzhi.avatar.service.IBaseService;
5
+
6
+/**
7
+ * 人员表;(ta_person)表服务接口
8
+ * @author : http://njyunzhi.com
9
+ * @date : 2022-9-27
10
+ */
11
+public interface TaPersonService extends IBaseService<TaPerson> {
12
+    
13
+}

+ 13
- 0
src/main/java/com/njyunzhi/avatar/person/service/TdCityService.java Parādīt failu

@@ -0,0 +1,13 @@
1
+package com.njyunzhi.avatar.person.service;
2
+
3
+import com.njyunzhi.avatar.person.entity.TdCity;
4
+import com.njyunzhi.avatar.service.IBaseService;
5
+
6
+/**
7
+ * 城市表;(td_city)表服务接口
8
+ * @author : http://njyunzhi.com
9
+ * @date : 2022-9-27
10
+ */
11
+public interface TdCityService extends IBaseService<TdCity> {
12
+    
13
+}

+ 76
- 0
src/main/java/com/njyunzhi/avatar/person/service/impl/StRankServiceImpl.java Parādīt failu

@@ -0,0 +1,76 @@
1
+package com.njyunzhi.avatar.person.service.impl;
2
+
3
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4
+import com.baomidou.mybatisplus.core.metadata.IPage;
5
+import com.njyunzhi.avatar.common.StringUtils;
6
+import com.njyunzhi.avatar.person.entity.TaPerson;
7
+import com.njyunzhi.avatar.person.mapper.TaPersonMapper;
8
+import com.njyunzhi.avatar.person.vo.RankItem;
9
+import com.njyunzhi.avatar.service.impl.BaseServiceImpl;
10
+import org.springframework.beans.factory.annotation.Autowired;
11
+import org.springframework.scheduling.annotation.Async;
12
+import org.springframework.stereotype.Service;
13
+import com.njyunzhi.avatar.person.entity.StRank;
14
+import com.njyunzhi.avatar.person.mapper.StRankMapper;
15
+import com.njyunzhi.avatar.person.service.StRankService;
16
+
17
+/**
18
+ * 统计排行;(st_rank)表服务实现类
19
+ *
20
+ * @author : http://www.chiner.pro
21
+ * @date : 2022-9-27
22
+ */
23
+@Service
24
+public class StRankServiceImpl extends BaseServiceImpl<StRankMapper, StRank> implements StRankService {
25
+
26
+    @Autowired
27
+    TaPersonMapper taPersonMapper;
28
+
29
+    @Override
30
+    public StRank createRank(String type, String code) {
31
+        QueryWrapper<StRank> queryWrapper = new QueryWrapper<>();
32
+        queryWrapper.eq("st_type", type);
33
+        queryWrapper.eq("st_code", code);
34
+
35
+        StRank stRank = getOne(queryWrapper);
36
+        if (null == stRank) {
37
+            stRank = new StRank();
38
+            stRank.setStType(type);
39
+            stRank.setStCode(code);
40
+            stRank.setStNum(0);
41
+            save(stRank);
42
+
43
+            return stRank;
44
+        }
45
+
46
+        return stRank;
47
+    }
48
+
49
+    @Override
50
+    public boolean updateByArea(String areaCode) {
51
+        return baseMapper.increment("area", areaCode) > 0;
52
+    }
53
+
54
+    @Async
55
+    @Override
56
+    public void updateByPerson(Integer personId) {
57
+        // 先将当前人员的 +1
58
+        baseMapper.increment("person", personId.toString());
59
+
60
+        // 递归更新
61
+        TaPerson taPerson = taPersonMapper.selectById(personId);
62
+        if (null != taPerson && null != taPerson.getRecommender()) {
63
+            updateByPerson(taPerson.getRecommender());
64
+        }
65
+    }
66
+
67
+    @Override
68
+    public long getRankBy(String stType, String stCode) {
69
+        return baseMapper.getRankBy(stType, stCode);
70
+    }
71
+
72
+    @Override
73
+    public IPage<RankItem> getPageBy(IPage<RankItem> pg, String type) {
74
+        return baseMapper.getPageBy(pg, type);
75
+    }
76
+}

+ 16
- 0
src/main/java/com/njyunzhi/avatar/person/service/impl/TaPersonServiceImpl.java Parādīt failu

@@ -0,0 +1,16 @@
1
+package com.njyunzhi.avatar.person.service.impl;
2
+
3
+import com.njyunzhi.avatar.service.impl.BaseServiceImpl;
4
+import org.springframework.stereotype.Service;
5
+import com.njyunzhi.avatar.person.entity.TaPerson;
6
+import com.njyunzhi.avatar.person.mapper.TaPersonMapper;
7
+import com.njyunzhi.avatar.person.service.TaPersonService;
8
+ /**
9
+ * 人员表;(ta_person)表服务实现类
10
+ * @author : http://www.chiner.pro
11
+ * @date : 2022-9-27
12
+ */
13
+@Service
14
+public class TaPersonServiceImpl extends BaseServiceImpl<TaPersonMapper, TaPerson> implements TaPersonService {
15
+    
16
+}

+ 16
- 0
src/main/java/com/njyunzhi/avatar/person/service/impl/TdCityServiceImpl.java Parādīt failu

@@ -0,0 +1,16 @@
1
+package com.njyunzhi.avatar.person.service.impl;
2
+
3
+import com.njyunzhi.avatar.service.impl.BaseServiceImpl;
4
+import org.springframework.stereotype.Service;
5
+import com.njyunzhi.avatar.person.entity.TdCity;
6
+import com.njyunzhi.avatar.person.mapper.TdCityMapper;
7
+import com.njyunzhi.avatar.person.service.TdCityService;
8
+ /**
9
+ * 城市表;(td_city)表服务实现类
10
+ * @author : http://www.chiner.pro
11
+ * @date : 2022-9-27
12
+ */
13
+@Service
14
+public class TdCityServiceImpl extends BaseServiceImpl<TdCityMapper, TdCity> implements TdCityService {
15
+    
16
+}

+ 17
- 0
src/main/java/com/njyunzhi/avatar/person/vo/MaLogin.java Parādīt failu

@@ -0,0 +1,17 @@
1
+package com.njyunzhi.avatar.person.vo;
2
+
3
+
4
+import io.swagger.annotations.ApiModel;
5
+import io.swagger.annotations.ApiModelProperty;
6
+import lombok.Data;
7
+
8
+@ApiModel(description = "小程序登录")
9
+@Data
10
+public class MaLogin {
11
+
12
+    @ApiModelProperty(value = "code",notes = "")
13
+    String code;
14
+
15
+    @ApiModelProperty(value = "recommender",notes = "")
16
+    Integer recommender;
17
+}

+ 13
- 0
src/main/java/com/njyunzhi/avatar/person/vo/RankItem.java Parādīt failu

@@ -0,0 +1,13 @@
1
+package com.njyunzhi.avatar.person.vo;
2
+
3
+import com.njyunzhi.avatar.person.entity.StRank;
4
+import lombok.Data;
5
+
6
+@Data
7
+public class RankItem extends StRank {
8
+
9
+    String name;
10
+
11
+    String avatar;
12
+
13
+}

+ 36
- 0
src/main/java/com/njyunzhi/avatar/service/IBaseService.java Parādīt failu

@@ -0,0 +1,36 @@
1
+package com.njyunzhi.avatar.service;
2
+
3
+import com.baomidou.mybatisplus.extension.service.IService;
4
+
5
+import java.io.Serializable;
6
+import java.util.List;
7
+
8
+public interface IBaseService<T> extends IService<T> {
9
+    /**
10
+     * 逻辑删除
11
+     * @param id
12
+     * @return
13
+     */
14
+    boolean removeLogicById(Serializable id);
15
+
16
+    /**
17
+     * 逻辑删除
18
+     * @param id
19
+     * @return
20
+     */
21
+    boolean removeLogicByUser(Serializable id, String userId, String userType);
22
+
23
+    boolean removeBy(String column, Object value, boolean notDelete);
24
+
25
+    boolean canAccessData(Serializable id, String userId);
26
+
27
+    boolean remvoeWithDataScope(Serializable id, String userId);
28
+
29
+    int countBy(String column, Object value, boolean notDelete);
30
+
31
+    T getByButNot(String column, Object value, String col, Object val, boolean notDelete);
32
+
33
+    T getExistBy(String column, Object value, boolean normal, boolean notDelete);
34
+
35
+    List<T> getListBy(String column, Object value, boolean normal, boolean notDelete);
36
+}

+ 130
- 0
src/main/java/com/njyunzhi/avatar/service/impl/BaseServiceImpl.java Parādīt failu

@@ -0,0 +1,130 @@
1
+package com.njyunzhi.avatar.service.impl;
2
+
3
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
5
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
6
+import com.baomidou.mybatisplus.core.metadata.TableInfo;
7
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
8
+import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
9
+import com.njyunzhi.avatar.service.IBaseService;
10
+
11
+import java.io.Serializable;
12
+import java.time.LocalDateTime;
13
+import java.util.List;
14
+
15
+public class BaseServiceImpl<M extends BaseMapper<T>, T> extends ServiceImpl<M, T> implements IBaseService<T> {
16
+    @Override
17
+    public boolean removeLogicById(Serializable id) {
18
+
19
+        TableInfo tableInfo = SqlHelper.table(currentModelClass());
20
+        UpdateWrapper<T> updateWrapper = new UpdateWrapper<>();
21
+        updateWrapper.set("status", -1)
22
+                .eq(tableInfo.getKeyColumn(), id);
23
+
24
+        return update(updateWrapper);
25
+    }
26
+
27
+    @Override
28
+    public boolean removeLogicByUser(Serializable id, String userId, String userType) {
29
+
30
+        TableInfo tableInfo = SqlHelper.table(currentModelClass());
31
+        UpdateWrapper<T> updateWrapper = new UpdateWrapper<>();
32
+        updateWrapper.set("status", -1)
33
+                .set("delete_user_type", userType)
34
+                .set("delete_user", userId)
35
+                .set("delete_date", LocalDateTime.now())
36
+                .eq(tableInfo.getKeyColumn(), id);
37
+
38
+        return update(updateWrapper);
39
+    }
40
+
41
+    @Override
42
+    public boolean removeBy(String column, Object value, boolean notDelete) {
43
+        if (notDelete) {
44
+            UpdateWrapper<T> updateWrapper = new UpdateWrapper<>();
45
+            updateWrapper.set("status", -1);
46
+            updateWrapper.eq(column, value);
47
+            return update(updateWrapper);
48
+        } else {
49
+            QueryWrapper<T> queryWrapper = new QueryWrapper<>();
50
+            queryWrapper.eq(column, value);
51
+            return remove(queryWrapper);
52
+        }
53
+    }
54
+
55
+    @Override
56
+    public boolean canAccessData(Serializable id, String userId) {
57
+        TableInfo tableInfo = SqlHelper.table(currentModelClass());
58
+
59
+        String t = tableInfo.getTableName();
60
+//        String k = tableInfo.getKeyColumn();
61
+        String kAlias = t + ".org_id";
62
+
63
+        String joinSQL = "INNER JOIN sys_user_data_scope s ON ( "+ kAlias +" = s.org_id OR "+t+".create_user = s.user_id )";
64
+        String whereSQL = "WHERE " + kAlias + " = '"+ id +"' AND s.user_id = '" + userId + "'";
65
+
66
+        String sql = joinSQL + " " + whereSQL;
67
+
68
+        QueryWrapper<T> wrapper = new QueryWrapper<>();
69
+        wrapper.last(sql);
70
+        return count(wrapper) > 0;
71
+    }
72
+
73
+    @Override
74
+    public boolean remvoeWithDataScope(Serializable id, String userId) {
75
+        TableInfo tableInfo = SqlHelper.table(currentModelClass());
76
+
77
+        String t = tableInfo.getTableName();
78
+        String k = tableInfo.getKeyColumn();
79
+        String kAlias = t + "." + k;
80
+
81
+        String joinSQL = "INNER JOIN sys_user_data_scope s ON ( "+ kAlias +" = s.org_id OR "+t+".create_user = s.user_id )";
82
+        String setSQL = "SET status = -1";
83
+        String whereSQL = "WHERE " + kAlias + " = '"+ id +"' AND s.user_id = '" + userId + "'";
84
+
85
+        String sql = joinSQL + " " + setSQL + " " + whereSQL;
86
+
87
+        UpdateWrapper<T> wrapper = new UpdateWrapper<>();
88
+        wrapper.last(sql);
89
+        return update(wrapper);
90
+    }
91
+
92
+    @Override
93
+    public int countBy(String column, Object value, boolean notDelete) {
94
+        QueryWrapper<T> queryWrapper = new QueryWrapper<>();
95
+        queryWrapper.eq(column, value);
96
+        queryWrapper.gt(notDelete, "status", -1);
97
+
98
+        return (int) count(queryWrapper);
99
+    }
100
+
101
+    @Override
102
+    public T getByButNot(String column, Object value, String col, Object val, boolean notDelete) {
103
+        QueryWrapper<T> queryWrapper = new QueryWrapper<>();
104
+        queryWrapper.eq(column, value);
105
+        queryWrapper.ne(col, val);
106
+        queryWrapper.gt(notDelete, "status", -1);
107
+        queryWrapper.last("limit 1");
108
+
109
+        return getOne(queryWrapper);
110
+    }
111
+
112
+    @Override
113
+    public T getExistBy(String column, Object value, boolean normal, boolean notDelete) {
114
+        QueryWrapper<T> queryWrapper = new QueryWrapper<>();
115
+        queryWrapper.eq(column, value);
116
+        queryWrapper.eq(normal, "status", 1);
117
+        queryWrapper.gt(notDelete, "status", -1);
118
+        queryWrapper.last("limit 1");
119
+        return getOne(queryWrapper);
120
+    }
121
+
122
+    @Override
123
+    public List<T> getListBy(String column, Object value, boolean normal, boolean notDelete) {
124
+        QueryWrapper<T> queryWrapper = new QueryWrapper<>();
125
+        queryWrapper.eq(column, value);
126
+        queryWrapper.eq(normal, "status", 1);
127
+        queryWrapper.gt(notDelete, "status", -1);
128
+        return list(queryWrapper);
129
+    }
130
+}

+ 65
- 0
src/main/resources/application.yml Parādīt failu

@@ -0,0 +1,65 @@
1
+###
2
+server:
3
+  port: 9003
4
+  servlet:
5
+    context-path: /api
6
+###
7
+spring:
8
+  mvc:
9
+    pathmatch:
10
+      matching-strategy: ANT_PATH_MATCHER
11
+  application:
12
+    name: ChangeAvatar
13
+  datasource:
14
+    url: jdbc:mysql://rm-uf6z3z6jq11x653d77o.mysql.rds.aliyuncs.com:3306/change_avatar?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true
15
+    username: change_avatar
16
+    password: avatar@ABCD1234
17
+
18
+# Sa-Token??
19
+sa-token:
20
+  # jwt??
21
+  jwt-secret-key: K85pMhy0HREVoCxYMv3OfDgkVPua5ZPN
22
+  # token?? (????cookie??)
23
+  token-name: Authorization
24
+  # ?? cookie
25
+  is-read-cookie: false
26
+  # token??????s ??30?, -1??????
27
+  timeout: 2592000
28
+  # token????? (???????????token??) ??: ?
29
+  activity-timeout: -1
30
+  # ???????????? (?true???????, ?false?????????)
31
+  is-concurrent: true
32
+  # ?????????????????token (?true?????????token, ?false?????????token)
33
+  is-share: false
34
+  # token??
35
+  token-style: uuid
36
+  # ????????
37
+  is-log: false
38
+
39
+###
40
+mybatis-plus:
41
+  configuration:
42
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
43
+    call-setters-on-nulls: true
44
+  mapper-locations: classpath:mapper/**/*.xml
45
+
46
+###
47
+wx:
48
+  miniapp:
49
+    appid: wx1a0fa56e6d0b78b3
50
+    secret: 53986b428900828471635ab260c892e9
51
+    token:
52
+    aesKey:
53
+    msgDataFormat: JSON
54
+
55
+###
56
+yz:
57
+  filter:
58
+    annList:
59
+      - "/swagger-ui/**"
60
+      - "/swagger-resources/**"
61
+      - "/v2/**"
62
+      - "/**/login"
63
+  amap:
64
+    webapi: https://restapi.amap.com
65
+    key: 3be0a9567a794d2690d378476f057a6f

+ 60
- 0
src/main/resources/mapper/StRankMapper.xml Parādīt failu

@@ -0,0 +1,60 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3
+
4
+<mapper namespace="com.njyunzhi.avatar.person.mapper.StRankMapper">
5
+
6
+    <update id="updateByArea">
7
+        UPDATE st_rank t
8
+            INNER JOIN ( SELECT a.area_code, count( * ) AS cnt FROM ta_person a GROUP BY a.area_code ) s ON s.area_code = t.st_code
9
+            AND t.st_type = 'area'
10
+            SET t.st_num = s.cnt
11
+    </update>
12
+    <update id="increment">
13
+        UPDATE st_rank t
14
+        SET t.st_num = t.st_num + 1
15
+        WHERE
16
+            t.st_type = #{stType}
17
+          AND t.st_code = #{stCode}
18
+    </update>
19
+    <select id="getRankBy" resultType="java.lang.Long">
20
+        SELECT
21
+            a.rank
22
+        FROM
23
+            (
24
+                SELECT
25
+                    p.st_code,
26
+                    @rank := @rank + 1 AS rank
27
+                FROM
28
+                    ( SELECT * FROM st_rank t WHERE t.st_type = #{stType} ) p,
29
+                    ( SELECT @rank := 0 ) B
30
+            ) a
31
+        WHERE
32
+            a.st_code = #{stCode}
33
+    </select>
34
+    <select id="getPageBy" resultType="com.njyunzhi.avatar.person.vo.RankItem">
35
+        SELECT
36
+            <if test="stType != null and stType == 'person'">
37
+                s.nickname AS `name`,
38
+                s.avatar,
39
+            </if>
40
+            <if test="stType != null and stType == 'area'">
41
+                CONCAT(m.`shortname`, s.`name`) as `name`,
42
+            </if>
43
+            t.*
44
+        FROM
45
+            st_rank t
46
+                <if test="stType != null and stType == 'person'">
47
+                INNER JOIN ta_person s ON s.person_id = t.st_code
48
+                AND t.st_type = #{stType}
49
+                </if>
50
+                <if test="stType != null and stType == 'area'">
51
+                    INNER JOIN td_city s ON s.id = t.st_code
52
+                    INNER JOIN td_city m ON s.parentid = m.id
53
+                    AND t.st_type = #{stType}
54
+                </if>
55
+        WHERE
56
+            t.st_type = #{stType}
57
+        ORDER BY
58
+            t.st_num DESC
59
+    </select>
60
+</mapper>

+ 6
- 0
src/main/resources/mapper/TaPersonMapper.xml Parādīt failu

@@ -0,0 +1,6 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3
+
4
+<mapper namespace="com.njyunzhi.avatar.person.mapper.TaPersonMapper">
5
+    
6
+</mapper>

+ 6
- 0
src/main/resources/mapper/TdCityMapper.xml Parādīt failu

@@ -0,0 +1,6 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3
+
4
+<mapper namespace="com.njyunzhi.avatar.person.mapper.TdCityMapper">
5
+    
6
+</mapper>

+ 13
- 0
src/test/java/com/njyunzhi/avatar/AvatarApplicationTests.java Parādīt failu

@@ -0,0 +1,13 @@
1
+package com.njyunzhi.avatar;
2
+
3
+import org.junit.jupiter.api.Test;
4
+import org.springframework.boot.test.context.SpringBootTest;
5
+
6
+@SpringBootTest
7
+class AvatarApplicationTests {
8
+
9
+	@Test
10
+	void contextLoads() {
11
+	}
12
+
13
+}