Yansen 2 vuotta sitten
commit
387e814171
42 muutettua tiedostoa jossa 8457 lisäystä ja 0 poistoa
  1. 33
    0
      .gitignore
  2. BIN
      .mvn/wrapper/maven-wrapper.jar
  3. 2
    0
      .mvn/wrapper/maven-wrapper.properties
  4. 1486
    0
      db/.back_紫金草行动/紫金草行动-backup-2022127115819.pdma.json
  5. 1520
    0
      db/.back_紫金草行动/紫金草行动-backup-2022127120025.pdma.json
  6. 1717
    0
      db/.back_紫金草行动/紫金草行动-backup-2022129161830.pdma.json
  7. 1683
    0
      db/紫金草行动.pdma.json
  8. 30
    0
      deploy/.s/1636896505560465-cn-shanghai-njguangdian-zijincao-httpTrigger.json
  9. 47
    0
      deploy/.s/1636896505560465-cn-shanghai-njguangdian-zijincao.json
  10. 40
    0
      deploy/.s/1636896505560465-cn-shanghai-njguangdian.json
  11. 6
    0
      deploy/.s/fc-cache/1636896505560465-cn-shanghai-njguangdian_create_resource.json
  12. 1
    0
      deploy/command.txt
  13. 93
    0
      deploy/s.prod.yaml
  14. 316
    0
      mvnw
  15. 188
    0
      mvnw.cmd
  16. 81
    0
      pom.xml
  17. 13
    0
      src/main/java/com/example/zijincao/WenhuaApplication.java
  18. 191
    0
      src/main/java/com/example/zijincao/common/IpUtil.java
  19. 75
    0
      src/main/java/com/example/zijincao/common/ResponseBean.java
  20. 17
    0
      src/main/java/com/example/zijincao/config/MybatisPlusConfig.java
  21. 24
    0
      src/main/java/com/example/zijincao/config/SwagggerConfig.java
  22. 51
    0
      src/main/java/com/example/zijincao/config/WxMpConfiguration.java
  23. 81
    0
      src/main/java/com/example/zijincao/config/WxMpProperties.java
  24. 38
    0
      src/main/java/com/example/zijincao/config/cros/CorsConfig.java
  25. 17
    0
      src/main/java/com/example/zijincao/config/cros/CorsProperties.java
  26. 114
    0
      src/main/java/com/example/zijincao/controller/TaCountryController.java
  27. 142
    0
      src/main/java/com/example/zijincao/controller/TaTrackController.java
  28. 41
    0
      src/main/java/com/example/zijincao/controller/WxJsapiController.java
  29. 39
    0
      src/main/java/com/example/zijincao/entity/TaCountry.java
  30. 55
    0
      src/main/java/com/example/zijincao/entity/TaTrack.java
  31. 19
    0
      src/main/java/com/example/zijincao/exception/GlobalExceptionHandler.java
  32. 17
    0
      src/main/java/com/example/zijincao/mapper/TaCountryMapper.java
  33. 16
    0
      src/main/java/com/example/zijincao/mapper/TaTrackMapper.java
  34. 26
    0
      src/main/java/com/example/zijincao/service/IBaseService.java
  35. 14
    0
      src/main/java/com/example/zijincao/service/TaCountryService.java
  36. 13
    0
      src/main/java/com/example/zijincao/service/TaTrackService.java
  37. 108
    0
      src/main/java/com/example/zijincao/service/impl/BaseServiceImpl.java
  38. 22
    0
      src/main/java/com/example/zijincao/service/impl/TaCountryServiceImpl.java
  39. 16
    0
      src/main/java/com/example/zijincao/service/impl/TaTrackServiceImpl.java
  40. 47
    0
      src/main/resources/application.yml
  41. 12
    0
      src/main/resources/mapper/TaCountryMapper.xml
  42. 6
    0
      src/main/resources/mapper/TaTrackMapper.xml

+ 33
- 0
.gitignore Näytä tiedosto

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

BIN
.mvn/wrapper/maven-wrapper.jar Näytä tiedosto


+ 2
- 0
.mvn/wrapper/maven-wrapper.properties Näytä tiedosto

@@ -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

+ 1486
- 0
db/.back_紫金草行动/紫金草行动-backup-2022127115819.pdma.json
File diff suppressed because it is too large
Näytä tiedosto


+ 1520
- 0
db/.back_紫金草行动/紫金草行动-backup-2022127120025.pdma.json
File diff suppressed because it is too large
Näytä tiedosto


+ 1717
- 0
db/.back_紫金草行动/紫金草行动-backup-2022129161830.pdma.json
File diff suppressed because it is too large
Näytä tiedosto


+ 1683
- 0
db/紫金草行动.pdma.json
File diff suppressed because it is too large
Näytä tiedosto


+ 30
- 0
deploy/.s/1636896505560465-cn-shanghai-njguangdian-zijincao-httpTrigger.json Näytä tiedosto

@@ -0,0 +1,30 @@
1
+{
2
+  "statefulConfig": {
3
+    "triggerName": "httpTrigger",
4
+    "description": "",
5
+    "triggerId": "8ab6bc03-741b-4493-9ae7-8a76e4c2b0ca",
6
+    "sourceArn": null,
7
+    "triggerType": "http",
8
+    "invocationRole": null,
9
+    "qualifier": null,
10
+    "urlInternet": "https://zijincao-njguangdian-pteyfulzwb.cn-shanghai.fcapp.run",
11
+    "urlIntranet": "https://zijincao-njguangdian-pteyfulzwb.cn-shanghai-vpc.fcapp.run",
12
+    "triggerConfig": {
13
+      "methods": [
14
+        "GET",
15
+        "POST",
16
+        "PUT",
17
+        "DELETE",
18
+        "HEAD",
19
+        "OPTIONS"
20
+      ],
21
+      "authType": "anonymous",
22
+      "disableURLInternet": false
23
+    },
24
+    "createdTime": "2022-12-07T09:50:36Z",
25
+    "lastModifiedTime": "2022-12-07T09:50:36Z",
26
+    "status": null,
27
+    "targetArn": null,
28
+    "name": "httpTrigger"
29
+  }
30
+}

+ 47
- 0
deploy/.s/1636896505560465-cn-shanghai-njguangdian-zijincao.json Näytä tiedosto

@@ -0,0 +1,47 @@
1
+{
2
+  "statefulConfig": {
3
+    "functionId": "5ded7839-9060-4f78-86af-92e3a8696c05",
4
+    "functionName": "zijincao",
5
+    "description": "服务管理",
6
+    "runtime": "custom",
7
+    "handler": "index.handler",
8
+    "timeout": 30,
9
+    "initializer": "",
10
+    "initializationTimeout": 3,
11
+    "codeSize": 41177701,
12
+    "codeChecksum": "11117609019932012549",
13
+    "memorySize": 1024,
14
+    "gpuMemorySize": null,
15
+    "environmentVariables": {},
16
+    "createdTime": "2022-12-07T09:50:36Z",
17
+    "lastModifiedTime": "2022-12-07T09:50:36Z",
18
+    "instanceConcurrency": 1,
19
+    "instanceSoftConcurrency": null,
20
+    "customContainerConfig": null,
21
+    "caPort": 7937,
22
+    "instanceType": "e1",
23
+    "layers": null,
24
+    "layersArnV2": null,
25
+    "instanceLifecycleConfig": {
26
+      "preFreeze": {
27
+        "handler": "",
28
+        "timeout": 3
29
+      },
30
+      "preStop": {
31
+        "handler": "",
32
+        "timeout": 3
33
+      }
34
+    },
35
+    "customDNS": null,
36
+    "customRuntimeConfig": {
37
+      "command": [
38
+        "java"
39
+      ],
40
+      "args": [
41
+        "org.springframework.boot.loader.JarLauncher"
42
+      ]
43
+    },
44
+    "customHealthCheckConfig": null,
45
+    "name": "zijincao"
46
+  }
47
+}

+ 40
- 0
deploy/.s/1636896505560465-cn-shanghai-njguangdian.json Näytä tiedosto

@@ -0,0 +1,40 @@
1
+{
2
+  "statefulConfig": {
3
+    "serviceName": "njguangdian",
4
+    "description": "南京广电",
5
+    "role": "",
6
+    "logConfig": {
7
+      "project": "",
8
+      "logstore": "",
9
+      "enableRequestMetrics": false,
10
+      "enableInstanceMetrics": false,
11
+      "logBeginRule": "None"
12
+    },
13
+    "serviceId": "e507d04c-42fe-4de7-a279-fd5b5c133331",
14
+    "createdTime": "2022-12-07T09:50:09Z",
15
+    "lastModifiedTime": "2022-12-07T09:50:36Z",
16
+    "vpcConfig": {
17
+      "vpcId": "",
18
+      "vSwitchIds": [],
19
+      "securityGroupId": "",
20
+      "role": "",
21
+      "anytunnelViaENI": null
22
+    },
23
+    "internetAccess": true,
24
+    "nasConfig": {
25
+      "userId": -1,
26
+      "groupId": -1,
27
+      "mountPoints": []
28
+    },
29
+    "ossMountConfig": {
30
+      "mountPoints": []
31
+    },
32
+    "vendorConfig": null,
33
+    "tracingConfig": {
34
+      "type": null,
35
+      "params": null,
36
+      "jaegerConfig": null
37
+    },
38
+    "name": "njguangdian"
39
+  }
40
+}

+ 6
- 0
deploy/.s/fc-cache/1636896505560465-cn-shanghai-njguangdian_create_resource.json Näytä tiedosto

@@ -0,0 +1,6 @@
1
+{
2
+  "serviceName": "njguangdian",
3
+  "functionNames": [
4
+    "njguangdian/zijincao"
5
+  ]
6
+}

+ 1
- 0
deploy/command.txt Näytä tiedosto

@@ -0,0 +1 @@
1
+s deploy -t s.prod.yaml

+ 93
- 0
deploy/s.prod.yaml Näytä tiedosto

@@ -0,0 +1,93 @@
1
+# ------------------------------------
2
+#   If you need English case, you can refer to [s_en.yaml] file
3
+# ------------------------------------
4
+#   欢迎您使用阿里云函数计算 FC 组件进行项目开发
5
+#   组件仓库地址:https://github.com/devsapp/fc
6
+#   组件帮助文档:https://www.serverless-devs.com/fc/readme
7
+#   Yaml参考文档:https://www.serverless-devs.com/fc/yaml/readme
8
+#   关于:
9
+#      - Serverless Devs和FC组件的关系、如何声明/部署多个函数、超过50M的代码包如何部署
10
+#      - 关于.fcignore使用方法、工具中.s目录是做什么、函数进行build操作之后如何处理build的产物
11
+#   等问题,可以参考文档:https://www.serverless-devs.com/fc/tips
12
+#   关于如何做CICD等问题,可以参考:https://www.serverless-devs.com/serverless-devs/cicd
13
+#   关于如何进行环境划分等问题,可以参考:https://www.serverless-devs.com/serverless-devs/extend
14
+#   更多函数计算案例,可参考:https://github.com/devsapp/awesome/
15
+#   有问题快来钉钉群问一下吧:33947367
16
+# ------------------------------------
17
+edition: 1.0.0
18
+name: njguangdian-zijincao
19
+# access 是当前应用所需要的密钥信息配置:
20
+# 密钥配置可以参考:https://www.serverless-devs.com/serverless-devs/command/config
21
+# 密钥使用顺序可以参考:https://www.serverless-devs.com/serverless-devs/tool#密钥使用顺序与规范
22
+access: default
23
+
24
+vars: # 全局变量
25
+  region: cn-shanghai
26
+  service:
27
+    name: njguangdian
28
+    description: '南京广电'
29
+
30
+services:
31
+  framework: # 业务名称/模块名称
32
+    # 如果只想针对 framework 下面的业务进行相关操作,可以在命令行中加上 framework,例如:
33
+    # 只对framework进行构建:s framework build
34
+    # 如果不带有 framework ,而是直接执行 s build,工具则会对当前Yaml下,所有和 framework 平级的业务模块(如有其他平级的模块,例如下面注释的next-function),按照一定顺序进行 build 操作
35
+    component: fc # 组件名称,Serverless Devs 工具本身类似于一种游戏机,不具备具体的业务能力,组件类似于游戏卡,用户通过向游戏机中插入不同的游戏卡实现不同的功能,即通过使用不同的组件实现不同的具体业务能力
36
+    actions: # 自定义执行逻辑,关于actions 的使用,可以参考:https://www.serverless-devs.com/serverless-devs/yaml#行为描述
37
+#      pre-deploy: # 在deploy之前运行
38
+#        - run: mvn package -DskipTests # 要执行的系统命令,类似于一种钩子的形式
39
+#          path: ./code # 执行系统命令/钩子的路径
40
+    #        - component: fc build --use-docker               # 要运行的组件,格式为【component: 组件名 命令 参数】(可以通过s cli registry search --type Component 获取组件列表)
41
+    #        - plugin: myplugin                               # 与运行的插件 (可以通过s cli registry search --type Plugin 获取组件列表)
42
+    #          args:                                          # 插件的参数信息
43
+    #            testKey: testValue
44
+    #      post-deploy: # 在deploy之后运行
45
+    #        - component: fc versions publish # 要运行的命令行
46
+    props: # 组件的属性值
47
+      region: ${vars.region} # 关于变量的使用方法,可以参考:https://www.serverless-devs.com/serverless-devs/yaml#变量赋值
48
+      service: ${vars.service}
49
+      function:
50
+        name: zijincao
51
+        description: '服务管理'
52
+        codeUri: ../target/zijincao-0.0.1-SNAPSHOT.jar
53
+        runtime: custom
54
+        memorySize: 1024
55
+        caPort: 7937
56
+        timeout: 30
57
+        customRuntimeConfig:
58
+          command:
59
+            - java
60
+          args:
61
+            - 'org.springframework.boot.loader.JarLauncher'
62
+      triggers:
63
+        - name: httpTrigger
64
+          type: http
65
+          config:
66
+            authType: anonymous
67
+            methods:
68
+              - GET
69
+              - POST
70
+              - PUT
71
+              - DELETE
72
+              - HEAD
73
+              - OPTIONS
74
+#      customDomains:
75
+#        - domainName: api.serv-summary.njyunzhi.com
76
+#          protocol: HTTP
77
+#          routeConfigs:
78
+#            - path: /*
79
+
80
+#  next-function: # 第二个函数的案例,仅供参考
81
+#    # 如果在当前项目下执行 s deploy,会同时部署模块:
82
+#    #   helloworld:服务hello-world-service,函数cpp-event-function
83
+#    #   next-function:服务hello-world-service,函数next-function-example
84
+#    # 如果想单独部署当前服务与函数,可以执行 s + 模块名/业务名 + deploy,例如:s next-function deploy
85
+#    # 如果想单独部署当前函数,可以执行 s + 模块名/业务名 + deploy function,例如:s next-function deploy function
86
+#    # 更多命令可参考:https://www.serverless-devs.com/fc/readme#文档相关
87
+#    component: fc
88
+#    props:
89
+#      region: ${vars.region}
90
+#      service: ${vars.service} # 应用整体的服务配置
91
+#      function: # 定义一个新的函数
92
+#        name: next-function-example
93
+#        description: 'hello world by serverless devs'

+ 316
- 0
mvnw Näytä tiedosto

@@ -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 Näytä tiedosto

@@ -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%

+ 81
- 0
pom.xml Näytä tiedosto

@@ -0,0 +1,81 @@
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.6</version>
9
+		<relativePath/> <!-- lookup parent from repository -->
10
+	</parent>
11
+	<groupId>com.example</groupId>
12
+	<artifactId>zijincao</artifactId>
13
+	<version>0.0.2</version>
14
+	<name>zijincao</name>
15
+	<description>Demo project for Spring Boot</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
+		<dependency>
42
+			<groupId>com.github.binarywang</groupId>
43
+			<artifactId>weixin-java-mp</artifactId>
44
+			<version>4.3.0</version>
45
+		</dependency>
46
+		<!--mybatis-plus start-->
47
+		<dependency>
48
+			<groupId>com.baomidou</groupId>
49
+			<artifactId>mybatis-plus-boot-starter</artifactId>
50
+			<version>3.5.1</version>
51
+		</dependency>
52
+		<!--mybatis-plus end-->
53
+
54
+
55
+		<!--swagger start-->
56
+		<dependency>
57
+			<groupId>io.springfox</groupId>
58
+			<artifactId>springfox-boot-starter</artifactId>
59
+			<version>3.0.0</version>
60
+		</dependency>
61
+		<!--swagger end-->
62
+	</dependencies>
63
+
64
+	<build>
65
+		<plugins>
66
+			<plugin>
67
+				<groupId>org.springframework.boot</groupId>
68
+				<artifactId>spring-boot-maven-plugin</artifactId>
69
+				<configuration>
70
+					<excludes>
71
+						<exclude>
72
+							<groupId>org.projectlombok</groupId>
73
+							<artifactId>lombok</artifactId>
74
+						</exclude>
75
+					</excludes>
76
+				</configuration>
77
+			</plugin>
78
+		</plugins>
79
+	</build>
80
+
81
+</project>

+ 13
- 0
src/main/java/com/example/zijincao/WenhuaApplication.java Näytä tiedosto

@@ -0,0 +1,13 @@
1
+package com.example.zijincao;
2
+
3
+import org.springframework.boot.SpringApplication;
4
+import org.springframework.boot.autoconfigure.SpringBootApplication;
5
+
6
+@SpringBootApplication
7
+public class WenhuaApplication {
8
+
9
+	public static void main(String[] args) {
10
+		SpringApplication.run(WenhuaApplication.class, args);
11
+	}
12
+
13
+}

+ 191
- 0
src/main/java/com/example/zijincao/common/IpUtil.java Näytä tiedosto

@@ -0,0 +1,191 @@
1
+package com.example.zijincao.common;
2
+
3
+import lombok.extern.slf4j.Slf4j;
4
+
5
+import javax.servlet.http.HttpServletRequest;
6
+import java.net.*;
7
+import java.util.Enumeration;
8
+
9
+@Slf4j
10
+public class IpUtil {
11
+    private static final String LOCAL_IP = "127.0.0.1";
12
+    /**
13
+     * 获取IP地址
14
+     *
15
+     * 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址
16
+     * 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址
17
+     */
18
+    public static String getIpAddr(HttpServletRequest request) {
19
+        if (request == null) {
20
+            return "unknown";
21
+        }
22
+        String ip = request.getHeader("x-forwarded-for");
23
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
24
+            ip = request.getHeader("Proxy-Client-IP");
25
+        }
26
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
27
+            ip = request.getHeader("X-Forwarded-For");
28
+        }
29
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
30
+            ip = request.getHeader("WL-Proxy-Client-IP");
31
+        }
32
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
33
+            ip = request.getHeader("X-Real-IP");
34
+        }
35
+
36
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
37
+            ip = request.getRemoteAddr();
38
+        }
39
+
40
+        return "0:0:0:0:0:0:0:1".equals(ip) ? LOCAL_IP : ip;
41
+    }
42
+
43
+    public static boolean internalIp(String ip) {
44
+        boolean res = false;
45
+        byte[] addr = textToNumericFormatV4(ip);
46
+        if (addr != null && ip != null) {
47
+            res = internalIp(addr) || LOCAL_IP.equals(ip);
48
+        }
49
+        return res;
50
+    }
51
+
52
+    private static boolean internalIp(byte[] addr) {
53
+        final byte b0 = addr[0];
54
+        final byte b1 = addr[1];
55
+        // 10.x.x.x/8
56
+        final byte SECTION_1 = 0x0A;
57
+        // 172.16.x.x/12
58
+        final byte SECTION_2 = (byte) 0xAC;
59
+        final byte SECTION_3 = (byte) 0x10;
60
+        final byte SECTION_4 = (byte) 0x1F;
61
+        // 192.168.x.x/16
62
+        final byte SECTION_5 = (byte) 0xC0;
63
+        final byte SECTION_6 = (byte) 0xA8;
64
+        boolean flag = false;
65
+        switch (b0) {
66
+            case SECTION_1:
67
+                flag = true;
68
+                break;
69
+            case SECTION_2:
70
+                if (b1 >= SECTION_3 && b1 <= SECTION_4) {
71
+                    flag = true;
72
+                }
73
+                break;
74
+            case SECTION_5:
75
+                if (b1 == SECTION_6) {
76
+                    flag = true;
77
+                }
78
+                break;
79
+            default:
80
+                break;
81
+        }
82
+        return flag;
83
+    }
84
+
85
+    /**
86
+     * 将IPv4地址转换成字节
87
+     *IPv4地址
88
+     * @param text
89
+     * @return byte 字节
90
+     */
91
+    public static byte[] textToNumericFormatV4(String text) {
92
+        if (text.length() == 0) {
93
+            return null;
94
+        }
95
+
96
+        byte[] bytes = new byte[4];
97
+        String[] elements = text.split("\\.", -1);
98
+        try {
99
+            long l;
100
+            int i;
101
+            switch (elements.length) {
102
+                case 1:
103
+                    l = Long.parseLong(elements[0]);
104
+                    if ((l < 0L) || (l > 4294967295L))
105
+                        return null;
106
+                    bytes[0] = (byte) (int) (l >> 24 & 0xFF);
107
+                    bytes[1] = (byte) (int) ((l & 0xFFFFFF) >> 16 & 0xFF);
108
+                    bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF);
109
+                    bytes[3] = (byte) (int) (l & 0xFF);
110
+                    break;
111
+                case 2:
112
+                    l = Integer.parseInt(elements[0]);
113
+                    if ((l < 0L) || (l > 255L))
114
+                        return null;
115
+                    bytes[0] = (byte) (int) (l & 0xFF);
116
+                    l = Integer.parseInt(elements[1]);
117
+                    if ((l < 0L) || (l > 16777215L))
118
+                        return null;
119
+                    bytes[1] = (byte) (int) (l >> 16 & 0xFF);
120
+                    bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF);
121
+                    bytes[3] = (byte) (int) (l & 0xFF);
122
+                    break;
123
+                case 3:
124
+                    for (i = 0; i < 2; ++i) {
125
+                        l = Integer.parseInt(elements[i]);
126
+                        if ((l < 0L) || (l > 255L))
127
+                            return null;
128
+                        bytes[i] = (byte) (int) (l & 0xFF);
129
+                    }
130
+                    l = Integer.parseInt(elements[2]);
131
+                    if ((l < 0L) || (l > 65535L))
132
+                        return null;
133
+                    bytes[2] = (byte) (int) (l >> 8 & 0xFF);
134
+                    bytes[3] = (byte) (int) (l & 0xFF);
135
+                    break;
136
+                case 4:
137
+                    for (i = 0; i < 4; ++i) {
138
+                        l = Integer.parseInt(elements[i]);
139
+                        if ((l < 0L) || (l > 255L))
140
+                            return null;
141
+                        bytes[i] = (byte) (int) (l & 0xFF);
142
+                    }
143
+                    break;
144
+                default:
145
+                    return null;
146
+            }
147
+        } catch (NumberFormatException e) {
148
+            log.error("数字格式化异常",e);
149
+            return null;
150
+        }
151
+        return bytes;
152
+    }
153
+
154
+    public static String getLocalIP() {
155
+        String ip = "";
156
+        if (System.getProperty("os.name").toLowerCase().startsWith("windows")) {
157
+            InetAddress addr;
158
+            try {
159
+                addr = InetAddress.getLocalHost();
160
+                ip = addr.getHostAddress();
161
+            } catch (UnknownHostException e) {
162
+                log.error("获取失败",e);
163
+            }
164
+            return ip;
165
+        } else {
166
+            try {
167
+                Enumeration<?> e1 = (Enumeration<?>) NetworkInterface
168
+                        .getNetworkInterfaces();
169
+                while (e1.hasMoreElements()) {
170
+                    NetworkInterface ni = (NetworkInterface) e1.nextElement();
171
+                    if (!ni.getName().equals("eth0")) {
172
+                        continue;
173
+                    } else {
174
+                        Enumeration<?> e2 = ni.getInetAddresses();
175
+                        while (e2.hasMoreElements()) {
176
+                            InetAddress ia = (InetAddress) e2.nextElement();
177
+                            if (ia instanceof Inet6Address)
178
+                                continue;
179
+                            ip = ia.getHostAddress();
180
+                            return ip;
181
+                        }
182
+                        break;
183
+                    }
184
+                }
185
+            } catch (SocketException e) {
186
+                log.error("获取失败",e);
187
+            }
188
+        }
189
+        return "";
190
+    }
191
+}

+ 75
- 0
src/main/java/com/example/zijincao/common/ResponseBean.java Näytä tiedosto

@@ -0,0 +1,75 @@
1
+package com.example.zijincao.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_AUTH_EXPIRED = 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
+    private String token;
23
+
24
+    /**
25
+     * 禁止外部 new
26
+     */
27
+    private ResponseBean() {
28
+        code = ResponseBean.CODE_SUCCESS;
29
+    }
30
+
31
+    public static <T> ResponseBean success(T data, String ...msgs) {
32
+        ResponseBean responseBean = new ResponseBean();
33
+        responseBean.code = ResponseBean.CODE_SUCCESS;
34
+        responseBean.data = data;
35
+
36
+        if (null != msgs && msgs.length > 0) {
37
+            responseBean.message = msgs[0];
38
+        }
39
+
40
+        return responseBean;
41
+    }
42
+
43
+    public static <T> ResponseBean error(String msg, int code, T ...datas) {
44
+        ResponseBean responseBean = new ResponseBean();
45
+        responseBean.code = code;
46
+        responseBean.message = msg;
47
+
48
+        if (null != datas && datas.length > 0) {
49
+            responseBean.data = datas[0];
50
+        }
51
+
52
+        return responseBean;
53
+    }
54
+
55
+    public int getCode() {
56
+        return code;
57
+    }
58
+
59
+    public String getMessage() {
60
+        return message;
61
+    }
62
+
63
+    public T getData() {
64
+        return data;
65
+    }
66
+
67
+    public String getToken() {
68
+        return token;
69
+    }
70
+
71
+    @Override
72
+    public String toString() {
73
+        return  "{ code: "+code+", message: "+message+", data: <T> }";
74
+    }
75
+}

+ 17
- 0
src/main/java/com/example/zijincao/config/MybatisPlusConfig.java Näytä tiedosto

@@ -0,0 +1,17 @@
1
+package com.example.zijincao.config;
2
+
3
+import com.baomidou.mybatisplus.annotation.DbType;
4
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
5
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
6
+import org.springframework.context.annotation.Bean;
7
+import org.springframework.context.annotation.Configuration;
8
+
9
+@Configuration
10
+public class MybatisPlusConfig {
11
+    @Bean
12
+    public MybatisPlusInterceptor mybatisPlusInterceptor() {
13
+        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
14
+        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
15
+        return interceptor;
16
+    }
17
+}

+ 24
- 0
src/main/java/com/example/zijincao/config/SwagggerConfig.java Näytä tiedosto

@@ -0,0 +1,24 @@
1
+package com.example.zijincao.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
+}

+ 51
- 0
src/main/java/com/example/zijincao/config/WxMpConfiguration.java Näytä tiedosto

@@ -0,0 +1,51 @@
1
+package com.example.zijincao.config;
2
+
3
+import lombok.AllArgsConstructor;
4
+import me.chanjar.weixin.common.redis.JedisWxRedisOps;
5
+import me.chanjar.weixin.mp.api.WxMpService;
6
+import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
7
+import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
8
+import me.chanjar.weixin.mp.config.impl.WxMpRedisConfigImpl;
9
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
10
+import org.springframework.context.annotation.Bean;
11
+import org.springframework.context.annotation.Configuration;
12
+//import redis.clients.jedis.JedisPool;
13
+//import redis.clients.jedis.JedisPoolConfig;
14
+
15
+/**
16
+ * wechat mp configuration
17
+ *
18
+ * @author Binary Wang(https://github.com/binarywang)
19
+ */
20
+@AllArgsConstructor
21
+@Configuration
22
+@EnableConfigurationProperties(WxMpProperties.class)
23
+public class WxMpConfiguration {
24
+    private final WxMpProperties properties;
25
+
26
+    @Bean
27
+    public WxMpService wxMpService() {
28
+        // 代码里 getConfigs()处报错的同学,请注意仔细阅读项目说明,你的IDE需要引入lombok插件!!!!
29
+        final WxMpProperties.MpConfig configs = this.properties.getConfigs();
30
+        if (configs == null) {
31
+            throw new RuntimeException("大哥,拜托先看下项目首页的说明(readme文件),添加下相关配置,注意别配错了!");
32
+        }
33
+
34
+        WxMpService service = new WxMpServiceImpl();
35
+        WxMpDefaultConfigImpl configStorage = new WxMpDefaultConfigImpl();
36
+//        if (this.properties.isUseRedis()) {
37
+//            final WxMpProperties.RedisConfig redisConfig = this.properties.getRedisConfig();
38
+//            JedisPoolConfig poolConfig = new JedisPoolConfig();
39
+//            JedisPool jedisPool = new JedisPool(poolConfig, redisConfig.getHost(), redisConfig.getPort(),
40
+//                    redisConfig.getTimeout(), redisConfig.getPassword());
41
+//            configStorage = new WxMpRedisConfigImpl(new JedisWxRedisOps(jedisPool), configs.getAppId());
42
+//        }
43
+        configStorage.setAppId(configs.getAppId());
44
+        configStorage.setSecret(configs.getSecret());
45
+        configStorage.setToken(configs.getToken());
46
+        configStorage.setAesKey(configs.getAesKey());
47
+
48
+        service.setWxMpConfigStorage(configStorage);
49
+        return service;
50
+    }
51
+}

+ 81
- 0
src/main/java/com/example/zijincao/config/WxMpProperties.java Näytä tiedosto

@@ -0,0 +1,81 @@
1
+package com.example.zijincao.config;
2
+
3
+//import com.github.binarywang.demo.wx.mp.utils.JsonUtils;
4
+import lombok.Data;
5
+import org.springframework.boot.context.properties.ConfigurationProperties;
6
+
7
+import java.util.List;
8
+
9
+/**
10
+ * wechat mp properties
11
+ *
12
+ * @author Binary Wang(https://github.com/binarywang)
13
+ */
14
+@Data
15
+@ConfigurationProperties(prefix = "wx.mp")
16
+public class WxMpProperties {
17
+    /**
18
+     * 是否使用redis存储access token
19
+     */
20
+    private boolean useRedis;
21
+
22
+    /**
23
+     * redis 配置
24
+     */
25
+    private RedisConfig redisConfig;
26
+
27
+    @Data
28
+    public static class RedisConfig {
29
+        /**
30
+         * redis服务器 主机地址
31
+         */
32
+        private String host;
33
+
34
+        /**
35
+         * redis服务器 端口号
36
+         */
37
+        private Integer port;
38
+
39
+        /**
40
+         * redis服务器 密码
41
+         */
42
+        private String password;
43
+
44
+        /**
45
+         * redis 服务连接超时时间
46
+         */
47
+        private Integer timeout;
48
+    }
49
+
50
+    /**
51
+     * 多个公众号配置信息
52
+     */
53
+    private MpConfig configs;
54
+
55
+    @Data
56
+    public static class MpConfig {
57
+        /**
58
+         * 设置微信公众号的appid
59
+         */
60
+        private String appId;
61
+
62
+        /**
63
+         * 设置微信公众号的app secret
64
+         */
65
+        private String secret;
66
+
67
+        /**
68
+         * 设置微信公众号的token
69
+         */
70
+        private String token;
71
+
72
+        /**
73
+         * 设置微信公众号的EncodingAESKey
74
+         */
75
+        private String aesKey;
76
+    }
77
+//    @Override
78
+//    public String toString() {
79
+//        return JsonUtils.toJson(this);
80
+//    }
81
+}

+ 38
- 0
src/main/java/com/example/zijincao/config/cros/CorsConfig.java Näytä tiedosto

@@ -0,0 +1,38 @@
1
+package com.example.zijincao.config.cros;
2
+
3
+import org.springframework.beans.factory.annotation.Autowired;
4
+import org.springframework.boot.SpringBootConfiguration;
5
+import org.springframework.web.servlet.config.annotation.CorsRegistration;
6
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
7
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
8
+
9
+import java.util.List;
10
+
11
+@SpringBootConfiguration
12
+public class CorsConfig implements WebMvcConfigurer {
13
+
14
+    @Autowired
15
+    CorsProperties crosProperties;
16
+
17
+    @Override
18
+    public void addCorsMappings(CorsRegistry registry) {
19
+        if (null == crosProperties.getEnabled() || !crosProperties.getEnabled()) return;
20
+
21
+//        //添加映射路径
22
+        CorsRegistration registration = registry.addMapping("/**");
23
+        //是否发送Cookie
24
+        registration.allowCredentials(true);
25
+        // 域名
26
+        registration.allowedOrigins(toArray(crosProperties.getOrigins()));
27
+        //放行哪些请求方式
28
+        registration.allowedMethods(toArray(crosProperties.getMethods()));
29
+        //放行哪些原始请求头部信息
30
+        registration.allowedHeaders("*");
31
+        //暴露哪些原始请求头部信息
32
+        registration.exposedHeaders(toArray(crosProperties.getExposedHeaders()));
33
+    }
34
+
35
+    private String[] toArray(List<String> list) {
36
+        return list.toArray(new String[0]);
37
+    }
38
+}

+ 17
- 0
src/main/java/com/example/zijincao/config/cros/CorsProperties.java Näytä tiedosto

@@ -0,0 +1,17 @@
1
+package com.example.zijincao.config.cros;
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 = "cors")
12
+public class CorsProperties {
13
+    Boolean enabled;
14
+    List<String> origins;
15
+    List<String> methods;
16
+    List<String> exposedHeaders;
17
+}

+ 114
- 0
src/main/java/com/example/zijincao/controller/TaCountryController.java Näytä tiedosto

@@ -0,0 +1,114 @@
1
+package com.example.zijincao.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.example.zijincao.common.ResponseBean;
7
+import java.util.List;
8
+import io.swagger.annotations.Api;
9
+import io.swagger.annotations.ApiOperation;
10
+import io.swagger.annotations.ApiParam;
11
+import org.springframework.beans.factory.annotation.Autowired;
12
+import org.springframework.web.bind.annotation.*;
13
+import com.example.zijincao.entity.TaCountry;
14
+import com.example.zijincao.service.TaCountryService;
15
+
16
+ /**
17
+ * 国家种植表;(ta_country)表控制层
18
+ * @author : http://njyunzhi.com
19
+ * @date : 2022-12-9
20
+ */
21
+@Api(tags = "国家种植表对象功能接口")
22
+@RestController
23
+@RequestMapping("/wx")
24
+public class TaCountryController {
25
+    
26
+    @Autowired
27
+    private TaCountryService taCountryService;
28
+    
29
+    /** 
30
+     * 通过ID查询单条数据 
31
+     *
32
+     * @param id 主键
33
+     * @return 实例对象
34
+     */
35
+    @ApiOperation("通过ID查询单条数据")
36
+    @GetMapping("/taCountry/{id}")
37
+    public ResponseBean queryById(@ApiParam("对象ID") @PathVariable Integer id) throws Exception {
38
+        return ResponseBean.success(taCountryService.getById(id));
39
+    }
40
+    
41
+    /** 
42
+     * 分页查询
43
+     *
44
+     * @param pageNum 当前页码
45
+     * @param pageSize 每页条数
46
+     * @return 查询结果
47
+     */
48
+    @ApiOperation("分页查询")
49
+    @GetMapping("/taCountry")
50
+    public ResponseBean list(@ApiParam("页码") @RequestParam(value ="pageNum",defaultValue = "1") Integer pageNum,
51
+                            @ApiParam("单页数据量") @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize) throws Exception {
52
+        
53
+        IPage<TaCountry> pg = new Page<>(pageNum, pageSize);
54
+        // QueryWrapper<TaCountry> queryWrapper = new QueryWrapper<>();
55
+        // queryWrapper.orderByDesc("create_date");
56
+        IPage<TaCountry> result = taCountryService.page(pg);
57
+        
58
+        return ResponseBean.success(result);
59
+    }
60
+    
61
+//    /**
62
+//     * 新增数据
63
+//     *
64
+//     * @param taCountry 实例对象
65
+//     * @return 实例对象
66
+//     */
67
+//    @ApiOperation("新增数据")
68
+//    @PostMapping("/taCountry")
69
+//    public ResponseBean add(@ApiParam("对象实体") @RequestBody TaCountry taCountry) throws Exception {
70
+//        taCountryService.save(taCountry);
71
+//        return ResponseBean.success(taCountry);
72
+//    }
73
+    
74
+    /** 
75
+     * 更新数据
76
+     *
77
+     * @param taCountry 实例对象
78
+     * @return 实例对象
79
+     */
80
+    @ApiOperation("更新数据")
81
+    @PutMapping("/taCountry")
82
+    public ResponseBean edit(@ApiParam("国家名称") @RequestBody TaCountry taCountry) throws Exception {
83
+        String name = taCountry.getName();
84
+        if (null == name || "".equals(name)) {
85
+            return ResponseBean.error("国家名称不能为空", ResponseBean.ERROR_ILLEGAL_PARAMS);
86
+        }
87
+
88
+        TaCountry origin = taCountryService.getExistBy("name", name, false, false);
89
+        if (null == origin) {
90
+            origin = new TaCountry();
91
+            origin.setName(name);
92
+            origin.setNum(0);
93
+            taCountryService.save(origin);
94
+        } else {
95
+            taCountryService.updateByName(name, 1);
96
+            origin.setNum(origin.getNum() + 1);
97
+        }
98
+
99
+        return ResponseBean.success(origin);
100
+    }
101
+    
102
+//    /**
103
+//     * 通过主键删除数据
104
+//     *
105
+//     * @param id 主键
106
+//     * @return 是否成功
107
+//     */
108
+//    @ApiOperation("通过主键删除数据")
109
+//    @DeleteMapping("/taCountry/{id}")
110
+//    public ResponseBean deleteById(@ApiParam("对象ID") @PathVariable Integer id){
111
+//        taCountryService.removeLogicById(id);
112
+//        return ResponseBean.success("success");
113
+//    }
114
+}

+ 142
- 0
src/main/java/com/example/zijincao/controller/TaTrackController.java Näytä tiedosto

@@ -0,0 +1,142 @@
1
+package com.example.zijincao.controller;
2
+
3
+import com.baomidou.mybatisplus.core.metadata.IPage;
4
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
5
+import com.example.zijincao.common.IpUtil;
6
+import com.example.zijincao.common.ResponseBean;
7
+
8
+import java.util.HashMap;
9
+import java.util.List;
10
+import java.util.Map;
11
+
12
+import io.swagger.annotations.Api;
13
+import io.swagger.annotations.ApiOperation;
14
+import io.swagger.annotations.ApiParam;
15
+import lombok.RequiredArgsConstructor;
16
+import me.chanjar.weixin.common.bean.WxOAuth2UserInfo;
17
+import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
18
+import me.chanjar.weixin.mp.api.WxMpService;
19
+import org.springframework.beans.factory.annotation.Autowired;
20
+import org.springframework.beans.factory.annotation.Value;
21
+import org.springframework.web.bind.annotation.*;
22
+import com.example.zijincao.entity.TaTrack;
23
+import com.example.zijincao.service.TaTrackService;
24
+
25
+import javax.servlet.http.HttpServletRequest;
26
+
27
+/**
28
+ * 埋点表;(ta_track)表控制层
29
+ * @author : http://njyunzhi.com
30
+ * @date : 2022-12-7
31
+ */
32
+@Api(tags = "埋点表对象功能接口")
33
+@RequiredArgsConstructor
34
+@RestController
35
+@RequestMapping("/")
36
+public class TaTrackController {
37
+    
38
+    @Autowired
39
+    private TaTrackService taTrackService;
40
+
41
+     private final WxMpService wxService;
42
+
43
+     @Value("${yz.initNum}")
44
+     private Integer initNum;
45
+
46
+    /** 
47
+     * 通过ID查询单条数据 
48
+     *
49
+     * @param serialNo 主键
50
+     * @return 实例对象
51
+     */
52
+    @ApiOperation("通过ID查询单条数据")
53
+    @GetMapping("/taTrack/{id}")
54
+    public ResponseBean queryById(@ApiParam("对象ID") @PathVariable Integer id) throws Exception {
55
+        return ResponseBean.success(taTrackService.getById(id));
56
+    }
57
+    
58
+    /** 
59
+     * 分页查询
60
+     *
61
+     * @param pageNum 当前页码
62
+     * @param pageSize 每页条数
63
+     * @return 查询结果
64
+     */
65
+    @ApiOperation("分页查询")
66
+    @GetMapping("/taTrack")
67
+    public ResponseBean list(@ApiParam("页码") @RequestParam(value ="pageNum",defaultValue = "1") Integer pageNum,
68
+                            @ApiParam("单页数据量") @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize) throws Exception {
69
+        
70
+        IPage<TaTrack> pg = new Page<>(pageNum, pageSize);
71
+        // QueryWrapper<TaTrack> queryWrapper = new QueryWrapper<>();
72
+        // queryWrapper.orderByDesc("create_date");
73
+        IPage<TaTrack> result = taTrackService.page(pg);
74
+        
75
+        return ResponseBean.success(result);
76
+    }
77
+    
78
+    /** 
79
+     * 新增数据
80
+     *
81
+     * @param taTrack 实例对象
82
+     * @return 实例对象
83
+     */
84
+    @ApiOperation("新增数据")
85
+    @PostMapping("/wx/taTrack")
86
+    public ResponseBean add(@ApiParam("对象实体") @RequestBody TaTrack taTrack,
87
+                            HttpServletRequest request) throws Exception {
88
+
89
+        if (null == taTrack.getIp() || "".equals(taTrack.getIp())) {
90
+            String ipAddr = IpUtil.getIpAddr(request);
91
+            taTrack.setIp(ipAddr);
92
+        }
93
+
94
+        String testCode = "123";
95
+        WxOAuth2UserInfo user = null;
96
+        if (null != taTrack.getCode() && !"".equals(taTrack.getCode()) && !testCode.equals(taTrack.getCode())) {
97
+            WxOAuth2AccessToken accessToken = wxService.getOAuth2Service().getAccessToken(taTrack.getCode());
98
+            user = wxService.getOAuth2Service().getUserInfo(accessToken, null);
99
+
100
+            taTrack.setOpenid(user.getOpenid());
101
+            taTrack.setAvatar(user.getHeadImgUrl());
102
+            taTrack.setNickname(user.getNickname());
103
+        }
104
+
105
+        taTrackService.save(taTrack);
106
+
107
+        long count = taTrackService.count();
108
+
109
+        Map<String, Object> resp = new HashMap<>();
110
+        resp.put("user", user);
111
+        resp.put("num", count + initNum);
112
+
113
+        return ResponseBean.success(resp);
114
+    }
115
+    
116
+//    /**
117
+//     * 更新数据
118
+//     *
119
+//     * @param taTrack 实例对象
120
+//     * @return 实例对象
121
+//     */
122
+//    @ApiOperation("更新数据")
123
+//    @PutMapping("/taTrack/{id}")
124
+//    public ResponseBean edit(@ApiParam("对象实体") @RequestBody TaTrack taTrack,
125
+//                            @ApiParam("对象ID") @PathVariable Integer id ) throws Exception {
126
+//        taTrackService.updateById(taTrack);
127
+//        return ResponseBean.success(taTrack);
128
+//    }
129
+//
130
+//    /**
131
+//     * 通过主键删除数据
132
+//     *
133
+//     * @param serialNo 主键
134
+//     * @return 是否成功
135
+//     */
136
+//    @ApiOperation("通过主键删除数据")
137
+//    @DeleteMapping("/taTrack/{id}")
138
+//    public ResponseBean deleteById(@ApiParam("对象ID") @PathVariable Integer id){
139
+//        taTrackService.removeLogicById(id);
140
+//        return ResponseBean.success("success");
141
+//    }
142
+}

+ 41
- 0
src/main/java/com/example/zijincao/controller/WxJsapiController.java Näytä tiedosto

@@ -0,0 +1,41 @@
1
+package com.example.zijincao.controller;
2
+
3
+import com.example.zijincao.common.ResponseBean;
4
+import lombok.AllArgsConstructor;
5
+import me.chanjar.weixin.common.bean.WxJsapiSignature;
6
+import me.chanjar.weixin.common.bean.WxOAuth2UserInfo;
7
+import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
8
+import me.chanjar.weixin.common.error.WxErrorException;
9
+import me.chanjar.weixin.mp.api.WxMpService;
10
+import me.chanjar.weixin.mp.bean.result.WxMpUser;
11
+import org.springframework.web.bind.annotation.*;
12
+
13
+
14
+/**
15
+ * jsapi 演示接口的 controller.
16
+ *
17
+ * @author <a href="https://github.com/binarywang">Binary Wang</a>
18
+ * @date 2020-04-25
19
+ */
20
+@AllArgsConstructor
21
+@RestController
22
+@RequestMapping("/wx")
23
+public class WxJsapiController {
24
+    private final WxMpService wxService;
25
+
26
+    @GetMapping("/jsapi")
27
+    public ResponseBean getJsapiTicket(@RequestParam String url) throws WxErrorException {
28
+        final WxJsapiSignature jsapiSignature = this.wxService.createJsapiSignature(url);
29
+        System.out.println(jsapiSignature);
30
+        return ResponseBean.success(jsapiSignature);
31
+    }
32
+
33
+    @GetMapping("/user")
34
+    public ResponseBean getUserInfo(@RequestParam String code) throws WxErrorException {
35
+        WxOAuth2AccessToken accessToken = wxService.getOAuth2Service().getAccessToken(code);
36
+        WxOAuth2UserInfo user = wxService.getOAuth2Service().getUserInfo(accessToken, null);
37
+
38
+        System.out.println(user);
39
+        return ResponseBean.success(user);
40
+    }
41
+}

+ 39
- 0
src/main/java/com/example/zijincao/entity/TaCountry.java Näytä tiedosto

@@ -0,0 +1,39 @@
1
+package com.example.zijincao.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-12-9
18
+ */
19
+@Data
20
+@EqualsAndHashCode(callSuper = false)
21
+@Accessors(chain = true)
22
+@ApiModel(value = "国家种植表",description = "")
23
+@TableName("ta_country")
24
+public class TaCountry 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
+    /** 定位 */
33
+    @ApiModelProperty(name = "定位",notes = "")
34
+    private String loc ;
35
+    /** 数量 */
36
+    @ApiModelProperty(name = "数量",notes = "")
37
+    private Integer num ;
38
+
39
+}

+ 55
- 0
src/main/java/com/example/zijincao/entity/TaTrack.java Näytä tiedosto

@@ -0,0 +1,55 @@
1
+package com.example.zijincao.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-12-7
20
+ */
21
+@Data
22
+@EqualsAndHashCode(callSuper = false)
23
+@Accessors(chain = true)
24
+@ApiModel(value = "埋点表",description = "")
25
+@TableName("ta_track")
26
+public class TaTrack implements Serializable,Cloneable{
27
+    /** 序号 */
28
+    @ApiModelProperty(name = "序号",notes = "")
29
+    @TableId(value = "serial_no", type = IdType.AUTO)
30
+    private Integer serialNo ;
31
+    /** 访问地址 */
32
+    @ApiModelProperty(name = "访问地址",notes = "")
33
+    private String url ;
34
+    /** UserAgent */
35
+    @ApiModelProperty(name = "UserAgent",notes = "")
36
+    private String ua ;
37
+    /** 来源地址 */
38
+    @ApiModelProperty(name = "来源地址",notes = "")
39
+    private String ip ;
40
+    /** 微信openid */
41
+    @ApiModelProperty(name = "微信openid",notes = "")
42
+    private String openid ;
43
+    /** 昵称 */
44
+    @ApiModelProperty(name = "昵称",notes = "")
45
+    private String nickname ;
46
+    /** 头像 */
47
+    @ApiModelProperty(name = "头像",notes = "")
48
+    private String avatar ;
49
+    /** 访问时间 */
50
+    @ApiModelProperty(name = "访问时间",notes = "")
51
+    private LocalDateTime createDate ;
52
+
53
+    @TableField(exist = false)
54
+    private String code;
55
+}

+ 19
- 0
src/main/java/com/example/zijincao/exception/GlobalExceptionHandler.java Näytä tiedosto

@@ -0,0 +1,19 @@
1
+package com.example.zijincao.exception;
2
+
3
+import com.example.zijincao.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
+}

+ 17
- 0
src/main/java/com/example/zijincao/mapper/TaCountryMapper.java Näytä tiedosto

@@ -0,0 +1,17 @@
1
+package com.example.zijincao.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.example.zijincao.entity.TaCountry;
7
+
8
+ /**
9
+ * 国家种植表;(ta_country)表数据库访问层
10
+ * @author : http://njyunzhi.com
11
+ * @date : 2022-12-9
12
+ */
13
+@Mapper
14
+public interface TaCountryMapper  extends BaseMapper<TaCountry>{
15
+
16
+     int updateByName(@Param("name") String name, @Param("num") int num);
17
+ }

+ 16
- 0
src/main/java/com/example/zijincao/mapper/TaTrackMapper.java Näytä tiedosto

@@ -0,0 +1,16 @@
1
+package com.example.zijincao.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.example.zijincao.entity.TaTrack;
7
+
8
+ /**
9
+ * 埋点表;(ta_track)表数据库访问层
10
+ * @author : http://njyunzhi.com
11
+ * @date : 2022-12-7
12
+ */
13
+@Mapper
14
+public interface TaTrackMapper  extends BaseMapper<TaTrack>{
15
+    
16
+}

+ 26
- 0
src/main/java/com/example/zijincao/service/IBaseService.java Näytä tiedosto

@@ -0,0 +1,26 @@
1
+package com.example.zijincao.service;
2
+
3
+import com.baomidou.mybatisplus.extension.service.IService;
4
+
5
+import java.io.Serializable;
6
+
7
+public interface IBaseService<T> extends IService<T> {
8
+    /**
9
+     * 逻辑删除
10
+     * @param id
11
+     * @return
12
+     */
13
+    boolean removeLogicById(Serializable id);
14
+
15
+    boolean removeBy(String column, Object value, boolean notDelete);
16
+
17
+    boolean canAccessData(Serializable id, String userId);
18
+
19
+    boolean remvoeWithDataScope(Serializable id, String userId);
20
+
21
+    long countBy(String column, Object value, boolean notDelete);
22
+
23
+    T getByButNot(String column, Object value, String col, Object val, boolean notDelete);
24
+
25
+    T getExistBy(String column, Object value, boolean normal, boolean notDelete);
26
+}

+ 14
- 0
src/main/java/com/example/zijincao/service/TaCountryService.java Näytä tiedosto

@@ -0,0 +1,14 @@
1
+package com.example.zijincao.service;
2
+
3
+import com.baomidou.mybatisplus.extension.service.IService;
4
+import com.example.zijincao.entity.TaCountry;
5
+
6
+ /**
7
+ * 国家种植表;(ta_country)表服务接口
8
+ * @author : http://njyunzhi.com
9
+ * @date : 2022-12-9
10
+ */
11
+public interface TaCountryService extends IBaseService<TaCountry> {
12
+
13
+     void updateByName(String name, int i);
14
+ }

+ 13
- 0
src/main/java/com/example/zijincao/service/TaTrackService.java Näytä tiedosto

@@ -0,0 +1,13 @@
1
+package com.example.zijincao.service;
2
+
3
+import com.baomidou.mybatisplus.extension.service.IService;
4
+import com.example.zijincao.entity.TaTrack;
5
+
6
+ /**
7
+ * 埋点表;(ta_track)表服务接口
8
+ * @author : http://njyunzhi.com
9
+ * @date : 2022-12-7
10
+ */
11
+public interface TaTrackService extends IBaseService<TaTrack> {
12
+    
13
+}

+ 108
- 0
src/main/java/com/example/zijincao/service/impl/BaseServiceImpl.java Näytä tiedosto

@@ -0,0 +1,108 @@
1
+package com.example.zijincao.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.example.zijincao.service.IBaseService;
10
+
11
+import java.io.Serializable;
12
+
13
+public class BaseServiceImpl<M extends BaseMapper<T>, T> extends ServiceImpl<M, T> implements IBaseService<T> {
14
+    @Override
15
+    public boolean removeLogicById(Serializable id) {
16
+
17
+        TableInfo tableInfo = SqlHelper.table(currentModelClass());
18
+        UpdateWrapper<T> updateWrapper = new UpdateWrapper<>();
19
+        updateWrapper.set("status", -1)
20
+                .eq(tableInfo.getKeyColumn(), id);
21
+
22
+        return update(updateWrapper);
23
+    }
24
+
25
+    @Override
26
+    public boolean removeBy(String column, Object value, boolean notDelete) {
27
+        if (notDelete) {
28
+            UpdateWrapper<T> updateWrapper = new UpdateWrapper<>();
29
+            updateWrapper.set("status", -1);
30
+            updateWrapper.eq(column, value);
31
+            return update(updateWrapper);
32
+        } else {
33
+            QueryWrapper<T> queryWrapper = new QueryWrapper<>();
34
+            queryWrapper.eq(column, value);
35
+            return remove(queryWrapper);
36
+        }
37
+    }
38
+
39
+    @Override
40
+    public boolean canAccessData(Serializable id, String userId) {
41
+        return true;
42
+//        if (Constants.ADMIN_ID.equals(userId)) return true;
43
+//
44
+//        TableInfo tableInfo = SqlHelper.table(currentModelClass());
45
+//
46
+//        String t = tableInfo.getTableName();
47
+////        String k = tableInfo.getKeyColumn();
48
+//        String kAlias = t + ".org_id";
49
+//
50
+//        String joinSQL = "INNER JOIN sys_user_data_scope s ON ( "+ kAlias +" = s.org_id OR "+t+".create_user = s.user_id )";
51
+//        String whereSQL = "WHERE " + kAlias + " = '"+ id +"' AND s.user_id = '" + userId + "'";
52
+//
53
+//        String sql = joinSQL + " " + whereSQL;
54
+//
55
+//        QueryWrapper<T> wrapper = new QueryWrapper<>();
56
+//        wrapper.last(sql);
57
+//        return count(wrapper) > 0;
58
+    }
59
+
60
+    @Override
61
+    public boolean remvoeWithDataScope(Serializable id, String userId) {
62
+        TableInfo tableInfo = SqlHelper.table(currentModelClass());
63
+
64
+        String t = tableInfo.getTableName();
65
+        String k = tableInfo.getKeyColumn();
66
+        String kAlias = t + "." + k;
67
+
68
+        String joinSQL = "INNER JOIN sys_user_data_scope s ON ( "+ kAlias +" = s.org_id OR "+t+".create_user = s.user_id )";
69
+        String setSQL = "SET status = -1";
70
+        String whereSQL = "WHERE " + kAlias + " = '"+ id +"' AND s.user_id = '" + userId + "'";
71
+
72
+        String sql = joinSQL + " " + setSQL + " " + whereSQL;
73
+
74
+        UpdateWrapper<T> wrapper = new UpdateWrapper<>();
75
+        wrapper.last(sql);
76
+        return update(wrapper);
77
+    }
78
+
79
+    @Override
80
+    public long countBy(String column, Object value, boolean notDelete) {
81
+        QueryWrapper<T> queryWrapper = new QueryWrapper<>();
82
+        queryWrapper.eq(column, value);
83
+        queryWrapper.gt(notDelete, "status", -1);
84
+
85
+        return count(queryWrapper);
86
+    }
87
+
88
+    @Override
89
+    public T getByButNot(String column, Object value, String col, Object val, boolean notDelete) {
90
+        QueryWrapper<T> queryWrapper = new QueryWrapper<>();
91
+        queryWrapper.eq(column, value);
92
+        queryWrapper.ne(col, val);
93
+        queryWrapper.gt(notDelete, "status", -1);
94
+        queryWrapper.last("limit 1");
95
+
96
+        return getOne(queryWrapper);
97
+    }
98
+
99
+    @Override
100
+    public T getExistBy(String column, Object value, boolean normal, boolean notDelete) {
101
+        QueryWrapper<T> queryWrapper = new QueryWrapper<>();
102
+        queryWrapper.eq(column, value);
103
+        queryWrapper.eq(normal, "status", 1);
104
+        queryWrapper.gt(notDelete, "status", -1);
105
+        queryWrapper.last("limit 1");
106
+        return getOne(queryWrapper);
107
+    }
108
+}

+ 22
- 0
src/main/java/com/example/zijincao/service/impl/TaCountryServiceImpl.java Näytä tiedosto

@@ -0,0 +1,22 @@
1
+package com.example.zijincao.service.impl;
2
+
3
+import org.springframework.beans.factory.annotation.Autowired;
4
+import org.springframework.stereotype.Service;
5
+import com.example.zijincao.entity.TaCountry;
6
+import com.example.zijincao.mapper.TaCountryMapper;
7
+import com.example.zijincao.service.TaCountryService;
8
+
9
+/**
10
+ * 国家种植表;(ta_country)表服务实现类
11
+ *
12
+ * @author : http://www.chiner.pro
13
+ * @date : 2022-12-9
14
+ */
15
+@Service
16
+public class TaCountryServiceImpl extends BaseServiceImpl<TaCountryMapper, TaCountry> implements TaCountryService {
17
+
18
+    @Override
19
+    public void updateByName(String name, int i) {
20
+        baseMapper.updateByName(name, i);
21
+    }
22
+}

+ 16
- 0
src/main/java/com/example/zijincao/service/impl/TaTrackServiceImpl.java Näytä tiedosto

@@ -0,0 +1,16 @@
1
+package com.example.zijincao.service.impl;
2
+
3
+import org.springframework.beans.factory.annotation.Autowired;
4
+import org.springframework.stereotype.Service;
5
+import com.example.zijincao.entity.TaTrack;
6
+import com.example.zijincao.mapper.TaTrackMapper;
7
+import com.example.zijincao.service.TaTrackService;
8
+ /**
9
+ * 埋点表;(ta_track)表服务实现类
10
+ * @author : http://www.chiner.pro
11
+ * @date : 2022-12-7
12
+ */
13
+@Service
14
+public class TaTrackServiceImpl extends BaseServiceImpl<TaTrackMapper, TaTrack> implements TaTrackService {
15
+    
16
+}

+ 47
- 0
src/main/resources/application.yml Näytä tiedosto

@@ -0,0 +1,47 @@
1
+
2
+server:
3
+  port: 7937
4
+  servlet:
5
+    context-path: /api
6
+
7
+spring:
8
+  mvc:
9
+    pathmatch:
10
+      matching-strategy: ANT_PATH_MATCHER
11
+  servlet:
12
+    multipart:
13
+      max-file-size: 10MB
14
+      max-request-size: 50MB
15
+  datasource:
16
+    url: jdbc:mysql://110.40.183.156:3306/zijincao?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true
17
+    username: zijincao
18
+    password: zijincao@ABCD1234
19
+
20
+yz:
21
+  initNum: 2378669
22
+
23
+cors:
24
+  enabled: false
25
+  origins:
26
+    - http://zjc.nbs.cn
27
+  exposedHeaders:
28
+    - Authorization
29
+    - Content-Disposition
30
+  methods:
31
+    - GET
32
+    - POST
33
+    - PUT
34
+    - DELETE
35
+    - OPTIONS
36
+
37
+wx:
38
+  mp:
39
+    useRedis: false
40
+    redisConfig:
41
+      host:
42
+      port:
43
+    configs:
44
+      appId: wx5d0c5a7f210d872f
45
+      secret: 1bb19687e2b0f0ce09849fb3988a4b14
46
+      token:
47
+      aesKey:

+ 12
- 0
src/main/resources/mapper/TaCountryMapper.xml Näytä tiedosto

@@ -0,0 +1,12 @@
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.example.zijincao.mapper.TaCountryMapper">
5
+
6
+    <update id="updateByName">
7
+        UPDATE ta_country t
8
+        SET t.num = t.num + ${num}
9
+        WHERE
10
+            t.`name` = #{name}
11
+    </update>
12
+</mapper>

+ 6
- 0
src/main/resources/mapper/TaTrackMapper.xml Näytä tiedosto

@@ -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.example.zijincao.mapper.TaTrackMapper">
5
+    
6
+</mapper>