From c5a815b05406b4f43e7cae4c91959d190537f5dd Mon Sep 17 00:00:00 2001 From: zhanglinhao <1260788704@qq.com> Date: Thu, 4 Jul 2024 21:20:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=90=8E=E7=AB=AF=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/后端/.mvn/wrapper/maven-wrapper.jar | Bin 62547 -> 0 bytes .../.mvn/wrapper/maven-wrapper.properties | 2 - src/后端/captcha.png | Bin 447 -> 0 bytes src/后端/mvnw | 428 +- src/后端/mvnw.cmd | 301 +- src/后端/pom.xml | 100 +- .../authenticationController.java | 25 - .../authencation/authenticationService.java | 56 - .../Api/captcha/captchaController.java | 40 - .../freetogo/Api/captcha/captchaService.java | 18 - .../Api/phoneVerification/HttpUtils.java | 316 - .../phoneVerification/phoneVerification.java | 48 - .../Api/weather/weatherController.java | 118 - .../java/com/softegg/freetogo/Configurer.java | 27 - .../com/softegg/freetogo/Debug/utils.java | 37 - .../Demand/Dao/DemandsRepository.java | 19 - .../softegg/freetogo/Demand/bean/Demands.java | 53 - .../Demand/controller/DemandsController.java | 107 - .../Demand/service/DemandsService.java | 28 - .../Demand/service/DemandsServiceImpl.java | 119 - .../controller/DemandMatchController.java | 140 - .../service/DemandMatchService.java | 26 - .../service/DemandMatchServiceImpl.java | 401 - .../Evaluate/Dao/EvaluateRepository.java | 15 - .../freetogo/Evaluate/bean/Evaluations.java | 32 - .../controller/EvaluationController.java | 115 - .../Evaluate/service/EvaluateService.java | 27 - .../Evaluate/service/EvaluateServiceImpl.java | 112 - .../com/softegg/freetogo/FeedBack/bean.java | 9 - .../softegg/freetogo/FreeToGoApplication.java | 13 - .../controller/GuideMatchController.java | 119 - .../GuideMatch/service/GuideMatchService.java | 31 - .../service/GuideMatchServiceImpl.java | 384 - .../Dao/GuideServiceRepository.java | 20 - .../GuideService/bean/GuideService.java | 53 - .../controller/GuideServiceController.java | 103 - .../service/GuideServiceService.java | 28 - .../service/GuideServiceServiceImpl.java | 123 - .../freetogo/HeatMap/bean/HeatMap.java | 47 - .../HeatMap/controller/HeatMapController.java | 78 - .../HeatMap/service/HeatMapService.java | 15 - .../HeatMap/service/HeatMapServiceImpl.java | 192 - .../freetogo/HeatMap/service/area.json | 1 - .../freetogo/HeatMap/service/city.json | 10709 ---------------- .../Login/controller/LoginController.java | 77 - .../freetogo/Login/service/LoginService.java | 21 - .../Login/service/LoginServiceImpl.java | 98 - .../com/softegg/freetogo/Login/返回码.txt | 13 - .../Search/controller/SearchController.java | 120 - .../Search/service/SearchService.java | 32 - .../Search/service/SearchServiceImpl.java | 384 - .../controller/SendDemandController.java | 72 - .../SendDemand/service/SendDemandService.java | 13 - .../service/SendDemandServiceImpl.java | 70 - .../SendGuideServiceController.java | 76 - .../service/SendGuideServiceService.java | 14 - .../service/SendGuideServiceServiceImpl.java | 76 - .../freetogo/User/Dao/GuidesRepository.java | 12 - .../freetogo/User/Dao/UsersRepository.java | 13 - .../softegg/freetogo/User/bean/Guides.java | 31 - .../com/softegg/freetogo/User/bean/Users.java | 60 - .../User/controller/UsersController.java | 238 - .../freetogo/User/service/GuidesService.java | 14 - .../User/service/GuidesServiceImpl.java | 49 - .../User/service/UserServiceImpl.java | 169 - .../freetogo/User/service/UsersService.java | 33 - .../com/softegg/freetogo/helloController.java | 17 - .../src/main/resources/application.properties | 6 - src/后端/src/main/resources/application.yml | 26 - .../main/resources/static/jquery-3.7.1.min.js | 2 - .../src/main/resources/static/test.html | 29 - 71 files changed, 320 insertions(+), 16080 deletions(-) delete mode 100644 src/后端/.mvn/wrapper/maven-wrapper.jar delete mode 100644 src/后端/.mvn/wrapper/maven-wrapper.properties delete mode 100644 src/后端/captcha.png delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/Api/authencation/authenticationController.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/Api/authencation/authenticationService.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/Api/captcha/captchaController.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/Api/captcha/captchaService.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/Api/phoneVerification/HttpUtils.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/Api/phoneVerification/phoneVerification.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/Api/weather/weatherController.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/Configurer.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/Debug/utils.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/Demand/Dao/DemandsRepository.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/Demand/bean/Demands.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/Demand/controller/DemandsController.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/Demand/service/DemandsService.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/Demand/service/DemandsServiceImpl.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/DemandMatch/controller/DemandMatchController.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/DemandMatch/service/DemandMatchService.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/DemandMatch/service/DemandMatchServiceImpl.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/Evaluate/Dao/EvaluateRepository.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/Evaluate/bean/Evaluations.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/Evaluate/controller/EvaluationController.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/Evaluate/service/EvaluateService.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/Evaluate/service/EvaluateServiceImpl.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/FeedBack/bean.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/FreeToGoApplication.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/GuideMatch/controller/GuideMatchController.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/GuideMatch/service/GuideMatchService.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/GuideMatch/service/GuideMatchServiceImpl.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/GuideService/Dao/GuideServiceRepository.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/GuideService/bean/GuideService.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/GuideService/controller/GuideServiceController.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/GuideService/service/GuideServiceService.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/GuideService/service/GuideServiceServiceImpl.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/HeatMap/bean/HeatMap.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/HeatMap/controller/HeatMapController.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/HeatMap/service/HeatMapService.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/HeatMap/service/HeatMapServiceImpl.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/HeatMap/service/area.json delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/HeatMap/service/city.json delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/Login/controller/LoginController.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/Login/service/LoginService.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/Login/service/LoginServiceImpl.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/Login/返回码.txt delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/Search/controller/SearchController.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/Search/service/SearchService.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/Search/service/SearchServiceImpl.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/SendDemand/controller/SendDemandController.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/SendDemand/service/SendDemandService.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/SendDemand/service/SendDemandServiceImpl.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/SendGuideService/controller/SendGuideServiceController.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/SendGuideService/service/SendGuideServiceService.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/SendGuideService/service/SendGuideServiceServiceImpl.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/User/Dao/GuidesRepository.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/User/Dao/UsersRepository.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/User/bean/Guides.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/User/bean/Users.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/User/controller/UsersController.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/User/service/GuidesService.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/User/service/GuidesServiceImpl.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/User/service/UserServiceImpl.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/User/service/UsersService.java delete mode 100644 src/后端/src/main/java/com/softegg/freetogo/helloController.java delete mode 100644 src/后端/src/main/resources/application.properties delete mode 100644 src/后端/src/main/resources/application.yml delete mode 100644 src/后端/src/main/resources/static/jquery-3.7.1.min.js delete mode 100644 src/后端/src/main/resources/static/test.html diff --git a/src/后端/.mvn/wrapper/maven-wrapper.jar b/src/后端/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index cb28b0e37c7d206feb564310fdeec0927af4123a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62547 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 A?*IS* diff --git a/src/后端/.mvn/wrapper/maven-wrapper.properties b/src/后端/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index e70e7bc..0000000 --- a/src/后端/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1,2 +0,0 @@ -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.6/apache-maven-3.9.6-bin.zip -wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar diff --git a/src/后端/captcha.png b/src/后端/captcha.png deleted file mode 100644 index e76e199cf805770aa65dadbd41533e7346c51f85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 447 zcmV;w0YLtVP)?j@$)Mm`LN@#s}HQ&WVqGGhgCgNIvQ@vJ1hV?tdNYYZpgQlx8qxN+jV<*zQTo1M}ZnZsgF5Hd%7~bM)Lr?|Pk7RaO zp|E%R84tJm_^`Ai)hsEX+$yo+$fUyju&Oadh!y3K)1w6>ewOd1`JTA2xURWW0}|xb zGN8@F(mo;szp{ku<+_G}1|(S7NVJThGou`C2+>8f@T7o-ZzTqI2o{ zWlcso&@MnKYdB>IRKFFdc~t*$^!(+~E>!=zq}2S` zIb{h{e;Pc&8Kn|Pd}6eZ4)PC)_d(0f#;@FvWZs#bQQ9BPycV3MzXTrh&W~&2 + echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 + return 1 + fi fi else - JAVACMD="$(\unset -f command 2>/dev/null; \command -v java)" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - if [ -z "$1" ] - then - echo "Path not specified to find_maven_basedir" - return 1 + JAVACMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v java + )" || : + JAVACCMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v javac + )" || : + + if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then + echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 + return 1 + fi fi +} - basedir="$1" - wdir="$1" - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - # workaround for JBEAP-8937 (on Solaris 10/Sparc) - if [ -d "${wdir}" ]; then - wdir=$(cd "$wdir/.." || exit 1; pwd) - fi - # end of workaround +# hash string like Java String::hashCode +hash_string() { + str="${1:-}" h=0 + while [ -n "$str" ]; do + char="${str%"${str#?}"}" + h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) + str="${str#?}" done - printf '%s' "$(cd "$basedir" || exit 1; pwd)" + printf %x\\n $h } -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - # Remove \r in case we run on Windows within Git Bash - # and check out the repository with auto CRLF management - # enabled. Otherwise, we may read lines that are delimited with - # \r\n and produce $'-Xarg\r' rather than -Xarg due to word - # splitting rules. - tr -s '\r\n' ' ' < "$1" - fi +verbose() { :; } +[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } + +die() { + printf %s\\n "$1" >&2 + exit 1 } -log() { - if [ "$MVNW_VERBOSE" = true ]; then - printf '%s\n' "$1" - fi +# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties +while IFS="=" read -r key value; do + case "${key-}" in + distributionUrl) distributionUrl="${value-}" ;; + distributionSha256Sum) distributionSha256Sum="${value-}" ;; + esac +done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties" +[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties" + +case "${distributionUrl##*/}" in +maven-mvnd-*bin.*) + MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ + case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in + *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; + :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; + :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; + :Linux*x86_64*) distributionPlatform=linux-amd64 ;; + *) + echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 + distributionPlatform=linux-amd64 + ;; + esac + distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" + ;; +maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; +*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; +esac + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" +distributionUrlName="${distributionUrl##*/}" +distributionUrlNameMain="${distributionUrlName%.*}" +distributionUrlNameMain="${distributionUrlNameMain%-bin}" +MAVEN_HOME="$HOME/.m2/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" + +exec_maven() { + unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : + exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" } -BASE_DIR=$(find_maven_basedir "$(dirname "$0")") -if [ -z "$BASE_DIR" ]; then - exit 1; +if [ -d "$MAVEN_HOME" ]; then + verbose "found existing MAVEN_HOME at $MAVEN_HOME" + exec_maven "$@" fi -MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR -log "$MAVEN_PROJECTBASEDIR" +case "${distributionUrl-}" in +*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; +*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; +esac -########################################################################################## -# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -# This allows using the maven wrapper in projects that prohibit checking in binary data. -########################################################################################## -wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" -if [ -r "$wrapperJarPath" ]; then - log "Found $wrapperJarPath" +# prepare tmp dir +if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then + clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } + trap clean HUP INT TERM EXIT else - log "Couldn't find $wrapperJarPath, downloading it ..." + die "cannot create temp dir" +fi - if [ -n "$MVNW_REPOURL" ]; then - wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" - else - wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" - fi - while IFS="=" read -r key value; do - # Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' ) - safeValue=$(echo "$value" | tr -d '\r') - case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;; - esac - done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" - log "Downloading from: $wrapperUrl" +mkdir -p -- "${MAVEN_HOME%/*}" - if $cygwin; then - wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath") - fi +# Download and Install Apache Maven +verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +verbose "Downloading from: $distributionUrl" +verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" - if command -v wget > /dev/null; then - log "Found wget ... using wget" - [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet" - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" - else - wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" - fi - elif command -v curl > /dev/null; then - log "Found curl ... using curl" - [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent" - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" - else - curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" - fi - else - log "Falling back to using Java to download" - javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java" - javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class" - # For Cygwin, switch paths to Windows format before running javac - if $cygwin; then - javaSource=$(cygpath --path --windows "$javaSource") - javaClass=$(cygpath --path --windows "$javaClass") - fi - if [ -e "$javaSource" ]; then - if [ ! -e "$javaClass" ]; then - log " - Compiling MavenWrapperDownloader.java ..." - ("$JAVA_HOME/bin/javac" "$javaSource") - fi - if [ -e "$javaClass" ]; then - log " - Running MavenWrapperDownloader.java ..." - ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath" - fi - fi - fi +# select .zip or .tar.gz +if ! command -v unzip >/dev/null; then + distributionUrl="${distributionUrl%.zip}.tar.gz" + distributionUrlName="${distributionUrl##*/}" fi -########################################################################################## -# End of extension -########################################################################################## -# If specified, validate the SHA-256 sum of the Maven wrapper jar file -wrapperSha256Sum="" -while IFS="=" read -r key value; do - case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;; - esac -done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" -if [ -n "$wrapperSha256Sum" ]; then - wrapperSha256Result=false - if command -v sha256sum > /dev/null; then - if echo "$wrapperSha256Sum $wrapperJarPath" | sha256sum -c > /dev/null 2>&1; then - wrapperSha256Result=true +# verbose opt +__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' +[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v + +# normalize http auth +case "${MVNW_PASSWORD:+has-password}" in +'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; +has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; +esac + +if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then + verbose "Found wget ... using wget" + wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" +elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then + verbose "Found curl ... using curl" + curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" +elif set_java_home; then + verbose "Falling back to use Java to download" + javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" + targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" + cat >"$javaSource" <<-END + public class Downloader extends java.net.Authenticator + { + protected java.net.PasswordAuthentication getPasswordAuthentication() + { + return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); + } + public static void main( String[] args ) throws Exception + { + setDefault( new Downloader() ); + java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); + } + } + END + # For Cygwin/MinGW, switch paths to Windows format before running javac and java + verbose " - Compiling Downloader.java ..." + "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" + verbose " - Running Downloader.java ..." + "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" +fi + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +if [ -n "${distributionSha256Sum-}" ]; then + distributionSha256Result=false + if [ "$MVN_CMD" = mvnd.sh ]; then + echo "Checksum validation is not supported for maven-mvnd." >&2 + echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + elif command -v sha256sum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then + distributionSha256Result=true fi - elif command -v shasum > /dev/null; then - if echo "$wrapperSha256Sum $wrapperJarPath" | shasum -a 256 -c > /dev/null 2>&1; then - wrapperSha256Result=true + elif command -v shasum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then + distributionSha256Result=true fi else - echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." - echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties." + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 exit 1 fi - if [ $wrapperSha256Result = false ]; then - echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2 - echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2 - echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2 + if [ $distributionSha256Result = false ]; then + echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 + echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 exit 1 fi fi -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$JAVA_HOME" ] && - JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME") - [ -n "$CLASSPATH" ] && - CLASSPATH=$(cygpath --path --windows "$CLASSPATH") - [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR") +# unzip and move +if command -v unzip >/dev/null; then + unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" +else + tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" fi +printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url" +mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*" -export MAVEN_CMD_LINE_ARGS - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -# shellcheck disable=SC2086 # safe args -exec "$JAVACMD" \ - $MAVEN_OPTS \ - $MAVEN_DEBUG_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" +clean || : +exec_maven "$@" diff --git a/src/后端/mvnw.cmd b/src/后端/mvnw.cmd index 95ba6f5..406932d 100644 --- a/src/后端/mvnw.cmd +++ b/src/后端/mvnw.cmd @@ -1,3 +1,4 @@ +<# : batch portion @REM ---------------------------------------------------------------------------- @REM Licensed to the Apache Software Foundation (ASF) under one @REM or more contributor license agreements. See the NOTICE file @@ -18,188 +19,128 @@ @REM ---------------------------------------------------------------------------- @REM ---------------------------------------------------------------------------- -@REM Apache Maven Wrapper startup batch script, version 3.2.0 -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir +@REM Apache Maven Wrapper startup batch script, version 3.3.1 @REM @REM Optional ENV vars -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM MVNW_REPOURL - repo url base for downloading maven distribution +@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output @REM ---------------------------------------------------------------------------- -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM set title of command window -title %0 -@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* -if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" -set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" - -FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( - IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B -) - -@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -@REM This allows using the maven wrapper in projects that prohibit checking in binary data. -if exist %WRAPPER_JAR% ( - if "%MVNW_VERBOSE%" == "true" ( - echo Found %WRAPPER_JAR% - ) -) else ( - if not "%MVNW_REPOURL%" == "" ( - SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" - ) - if "%MVNW_VERBOSE%" == "true" ( - echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %WRAPPER_URL% - ) - - powershell -Command "&{"^ - "$webclient = new-object System.Net.WebClient;"^ - "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ - "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ - "}"^ - "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^ - "}" - if "%MVNW_VERBOSE%" == "true" ( - echo Finished downloading %WRAPPER_JAR% - ) -) -@REM End of extension - -@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file -SET WRAPPER_SHA_256_SUM="" -FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( - IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B +@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) +@SET __MVNW_CMD__= +@SET __MVNW_ERROR__= +@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% +@SET PSModulePath= +@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( + IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) ) -IF NOT %WRAPPER_SHA_256_SUM%=="" ( - powershell -Command "&{"^ - "$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^ - "If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^ - " Write-Output 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^ - " Write-Output 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^ - " Write-Output 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^ - " exit 1;"^ - "}"^ - "}" - if ERRORLEVEL 1 goto error -) - -@REM Provide a "standardized" way to retrieve the CLI args that will -@REM work with both Windows and non-Windows executions. -set MAVEN_CMD_LINE_ARGS=%* - -%MAVEN_JAVA_EXE% ^ - %JVM_CONFIG_MAVEN_PROPS% ^ - %MAVEN_OPTS% ^ - %MAVEN_DEBUG_OPTS% ^ - -classpath %WRAPPER_JAR% ^ - "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ - %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" -if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%"=="on" pause - -if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% - -cmd /C exit /B %ERROR_CODE% +@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% +@SET __MVNW_PSMODULEP_SAVE= +@SET __MVNW_ARG0_NAME__= +@SET MVNW_USERNAME= +@SET MVNW_PASSWORD= +@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*) +@echo Cannot start maven from wrapper >&2 && exit /b 1 +@GOTO :EOF +: end batch / begin powershell #> + +$ErrorActionPreference = "Stop" +if ($env:MVNW_VERBOSE -eq "true") { + $VerbosePreference = "Continue" +} + +# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties +$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl +if (!$distributionUrl) { + Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" +} + +switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { + "maven-mvnd-*" { + $USE_MVND = $true + $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" + $MVN_CMD = "mvnd.cmd" + break + } + default { + $USE_MVND = $false + $MVN_CMD = $script -replace '^mvnw','mvn' + break + } +} + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +if ($env:MVNW_REPOURL) { + $MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" } + $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')" +} +$distributionUrlName = $distributionUrl -replace '^.*/','' +$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' +$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain" +$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' +$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" + +if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { + Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" + Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" + exit $? +} + +if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { + Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" +} + +# prepare tmp dir +$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile +$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" +$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null +trap { + if ($TMP_DOWNLOAD_DIR.Exists) { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } + } +} + +New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null + +# Download and Install Apache Maven +Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +Write-Verbose "Downloading from: $distributionUrl" +Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +$webclient = New-Object System.Net.WebClient +if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { + $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) +} +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 +$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum +if ($distributionSha256Sum) { + if ($USE_MVND) { + Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." + } + Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash + if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { + Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." + } +} + +# unzip and move +Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null +Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null +try { + Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null +} catch { + if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { + Write-Error "fail to move MAVEN_HOME" + } +} finally { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } +} + +Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" diff --git a/src/后端/pom.xml b/src/后端/pom.xml index f8d69bf..4131ec6 100644 --- a/src/后端/pom.xml +++ b/src/后端/pom.xml @@ -8,11 +8,9 @@ 3.2.5 - - com.SoftEgg + com.softegg FreeToGo - 0.0.5-SNAPSHOT - + 0.0.1-SNAPSHOT FreeToGo FreeToGo @@ -21,20 +19,19 @@ org.springframework.boot - spring-boot-starter-jdbc + spring-boot-starter-data-jdbc org.springframework.boot - spring-boot-starter-web + spring-boot-starter-data-jpa org.springframework.boot - spring-boot-starter-websocket + spring-boot-starter-web - org.mybatis.spring.boot - mybatis-spring-boot-starter - 3.0.3 + org.springframework.boot + spring-boot-starter-websocket @@ -52,94 +49,25 @@ spring-boot-starter-test test - - org.mybatis.spring.boot - mybatis-spring-boot-starter-test - 3.0.3 - test - - - - - - - - org.springframework.boot - spring-boot-starter-data-jpa - 3.2.5 - - - org.springframework.data - spring-data-jpa - 3.2.5 - com.google.code.gson gson - 2.10.1 - - - com.squareup.okhttp3 - okhttp - 5.0.0-alpha.3 - - - com.github.whvcse - easy-captcha - 1.6.2 - - - org.springframework.boot - spring-boot-starter-data-redis - 3.3.0 - - - org.springframework.data - spring-data-redis - 3.3.0 - - - org.springframework.boot - spring-boot-starter-actuator - - - org.apache.httpcomponents - httpcore - 4.4.14 - - - org.apache.httpcomponents - httpclient - 4.5.13 - - - commons-lang - commons-lang - 2.6 - - - javax.annotation - javax.annotation-api - 1.2 - - - javax.servlet - javax.servlet-api - 3.1.0 - - - com.ramostear - Happy-Captcha - 1.0.1 + 2.8.9 com.googlecode.json-simple json-simple 1.1.1 + + com.squareup.okhttp3 + okhttp + 4.12.0 + + diff --git a/src/后端/src/main/java/com/softegg/freetogo/Api/authencation/authenticationController.java b/src/后端/src/main/java/com/softegg/freetogo/Api/authencation/authenticationController.java deleted file mode 100644 index ef4bb10..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/Api/authencation/authenticationController.java +++ /dev/null @@ -1,25 +0,0 @@ -//package com.softegg.freetogo.Api.authencation; -// -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.web.bind.annotation.GetMapping; -//import org.springframework.web.bind.annotation.RequestMapping; -//import org.springframework.web.bind.annotation.RestController; -// -//import java.io.IOException; -// -///** -// * @description: -// * @author: zhanglinhao -// * @date: 2024/5/23 15:47 -// */ -//@RestController -//@RequestMapping("/api") -//public class authenticationController { -// @Autowired -// com.softegg.freetogo.Api.authencation.authenticationService authenticationService; -// -// @GetMapping("authenticate") -// public void authenticate(String idc, String phone, String name) throws IOException { -// authenticationService.authenticate(idc, phone, name); -// } -//} diff --git a/src/后端/src/main/java/com/softegg/freetogo/Api/authencation/authenticationService.java b/src/后端/src/main/java/com/softegg/freetogo/Api/authencation/authenticationService.java deleted file mode 100644 index a077bfd..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/Api/authencation/authenticationService.java +++ /dev/null @@ -1,56 +0,0 @@ -//package com.softegg.freetogo.Api.authencation; -// -//import okhttp3.FormBody; -//import okhttp3.OkHttpClient; -//import okhttp3.Request; -//import okhttp3.Response; -//import org.springframework.stereotype.Service; -// -//import java.io.IOException; -//import java.util.HashMap; -//import java.util.Iterator; -//import java.util.Map; -// -///** -// * @description: 身份验证api -// * @author: zhanglinhao -// * @date: 2024/5/23 15:12 -// */ -//@Service -//public class authenticationService { -// public void authenticate(String idc, String phone, String name) throws IOException { -// String url = "https://mobile3elements.shumaidata.com/mobile/verify_real_name"; -// String appCode = "15704c321ae8459bb36fcadd888d67c4"; -// -// Map params = new HashMap<>(); -// params.put("idcard", idc); -// params.put("mobile", phone); -// params.put("name", name); -// String result = postForm(appCode, url, params); -// System.out.println(result); -// } -// -// /** -// * 用到的HTTP工具包:okhttp 3.13.1 -// * -// * com.squareup.okhttp3 -// * okhttp -// * 3.13.1 -// * -// */ -// public static String postForm(String appCode, String url, Map params) throws IOException { -// OkHttpClient client = new OkHttpClient.Builder().build(); -// FormBody.Builder formbuilder = new FormBody.Builder(); -// Iterator it = params.keySet().iterator(); -// while (it.hasNext()) { -// String key = it.next(); -// formbuilder.add(key, params.get(key)); -// } -// FormBody body = formbuilder.build(); -// Request request = new Request.Builder().url(url).addHeader("Authorization", "APPCODE " + appCode).post(body).build(); -// Response response = client.newCall(request).execute(); -// System.out.println("返回状态码" + response.code() + ",message:" + response.message()); -// String result = response.body().string(); -// return result; -// } -//} \ No newline at end of file diff --git a/src/后端/src/main/java/com/softegg/freetogo/Api/captcha/captchaController.java b/src/后端/src/main/java/com/softegg/freetogo/Api/captcha/captchaController.java deleted file mode 100644 index b353697..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/Api/captcha/captchaController.java +++ /dev/null @@ -1,40 +0,0 @@ -//package com.softegg.freetogo.Api.captcha; -// -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.web.bind.annotation.RequestMapping; -//import org.springframework.web.bind.annotation.ResponseBody; -//import org.springframework.web.bind.annotation.RestController; -// -///** -// * @description: -// * @author: zhanglinhao -// * @date: 2024/5/24 9:54 -// */ -//@RestController -//@RequestMapping("/api") -//public class captchaController { -// @Autowired -// private RedisUtil redisUtil; -// -// @RequestMapping("/captcha") -// public JsonResult captcha(HttpServletRequest request, HttpServletResponse response) throws Exception { -// SpecCaptcha specCaptcha = new SpecCaptcha(130, 48, 5); -// String verCode = specCaptcha.text().toLowerCase(); -// String key = UUID.randomUUID().toString(); -// // 存入redis并设置过期时间为30分钟 -// redisUtil.setEx(key, verCode, 30, TimeUnit.MINUTES); -// // 将key和base64返回给前端 -// return JsonResult.ok().put("key", key).put("image", specCaptcha.toBase64()); -// } -// -// @ResponseBody -// @PostMapping("/login") -// public JsonResult login(String username,String password,String verCode,String verKey){ -// // 获取redis中的验证码 -// String redisCode = redisUtil.get(verKey); -// // 判断验证码 -// if (verCode==null || !redisCode.equals(verCode.trim().toLowerCase())) { -// return JsonResult.error("验证码不正确"); -// } -// } -//} \ No newline at end of file diff --git a/src/后端/src/main/java/com/softegg/freetogo/Api/captcha/captchaService.java b/src/后端/src/main/java/com/softegg/freetogo/Api/captcha/captchaService.java deleted file mode 100644 index 6792ed2..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/Api/captcha/captchaService.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.softegg.freetogo.Api.captcha; - - -import javax.imageio.ImageIO; -import java.awt.*; -import java.awt.geom.GeneralPath; -import java.awt.image.BufferedImage; -import java.io.File; -import java.util.Random; -import java.util.UUID; - -/** - * @description: - * @author: zhanglinhao - * @date: 2024/5/24 9:27 - */ -public class captchaService { -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/Api/phoneVerification/HttpUtils.java b/src/后端/src/main/java/com/softegg/freetogo/Api/phoneVerification/HttpUtils.java deleted file mode 100644 index 1d207be..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/Api/phoneVerification/HttpUtils.java +++ /dev/null @@ -1,316 +0,0 @@ -package com.softegg.freetogo.Api.phoneVerification; - -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; -import java.security.cert.X509Certificate; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; - -import org.apache.commons.lang.StringUtils; -import org.apache.http.HttpResponse; -import org.apache.http.NameValuePair; -import org.apache.http.client.HttpClient; -import org.apache.http.client.entity.UrlEncodedFormEntity; -import org.apache.http.client.methods.HttpDelete; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.client.methods.HttpPut; -import org.apache.http.conn.ClientConnectionManager; -import org.apache.http.conn.scheme.Scheme; -import org.apache.http.conn.scheme.SchemeRegistry; -import org.apache.http.conn.ssl.SSLSocketFactory; -import org.apache.http.entity.ByteArrayEntity; -import org.apache.http.entity.StringEntity; -import org.apache.http.impl.client.DefaultHttpClient; -import org.apache.http.message.BasicNameValuePair; -/** - * @description: 阿里云http工具包 - * @author: aliyun - * @date: 2024/5/29 15:36 - */ -public class HttpUtils { - - /** - * get - * - * @param host - * @param path - * @param method - * @param headers - * @param querys - * @return - * @throws Exception - */ - public static HttpResponse doGet(String host, String path, String method, - Map headers, - Map querys) - throws Exception { - HttpClient httpClient = wrapClient(host); - - HttpGet request = new HttpGet(buildUrl(host, path, querys)); - for (Map.Entry e : headers.entrySet()) { - request.addHeader(e.getKey(), e.getValue()); - } - - return httpClient.execute(request); - } - - /** - * post form - * - * @param host - * @param path - * @param method - * @param headers - * @param querys - * @param bodys - * @return - * @throws Exception - */ - public static HttpResponse doPost(String host, String path, String method, - Map headers, - Map querys, - Map bodys) - throws Exception { - HttpClient httpClient = wrapClient(host); - - HttpPost request = new HttpPost(buildUrl(host, path, querys)); - for (Map.Entry e : headers.entrySet()) { - request.addHeader(e.getKey(), e.getValue()); - } - - if (bodys != null) { - List nameValuePairList = new ArrayList(); - - for (String key : bodys.keySet()) { - nameValuePairList.add(new BasicNameValuePair(key, bodys.get(key))); - } - UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, "utf-8"); - formEntity.setContentType("application/x-www-form-urlencoded; charset=UTF-8"); - request.setEntity(formEntity); - } - - return httpClient.execute(request); - } - - /** - * Post String - * - * @param host - * @param path - * @param method - * @param headers - * @param querys - * @param body - * @return - * @throws Exception - */ - public static HttpResponse doPost(String host, String path, String method, - Map headers, - Map querys, - String body) - throws Exception { - HttpClient httpClient = wrapClient(host); - - HttpPost request = new HttpPost(buildUrl(host, path, querys)); - for (Map.Entry e : headers.entrySet()) { - request.addHeader(e.getKey(), e.getValue()); - } - - if (StringUtils.isNotBlank(body)) { - request.setEntity(new StringEntity(body, "utf-8")); - } - - return httpClient.execute(request); - } - - /** - * Post stream - * - * @param host - * @param path - * @param method - * @param headers - * @param querys - * @param body - * @return - * @throws Exception - */ - public static HttpResponse doPost(String host, String path, String method, - Map headers, - Map querys, - byte[] body) - throws Exception { - HttpClient httpClient = wrapClient(host); - - HttpPost request = new HttpPost(buildUrl(host, path, querys)); - for (Map.Entry e : headers.entrySet()) { - request.addHeader(e.getKey(), e.getValue()); - } - - if (body != null) { - request.setEntity(new ByteArrayEntity(body)); - } - - return httpClient.execute(request); - } - - /** - * Put String - * @param host - * @param path - * @param method - * @param headers - * @param querys - * @param body - * @return - * @throws Exception - */ - public static HttpResponse doPut(String host, String path, String method, - Map headers, - Map querys, - String body) - throws Exception { - HttpClient httpClient = wrapClient(host); - - HttpPut request = new HttpPut(buildUrl(host, path, querys)); - for (Map.Entry e : headers.entrySet()) { - request.addHeader(e.getKey(), e.getValue()); - } - - if (StringUtils.isNotBlank(body)) { - request.setEntity(new StringEntity(body, "utf-8")); - } - - return httpClient.execute(request); - } - - /** - * Put stream - * @param host - * @param path - * @param method - * @param headers - * @param querys - * @param body - * @return - * @throws Exception - */ - public static HttpResponse doPut(String host, String path, String method, - Map headers, - Map querys, - byte[] body) - throws Exception { - HttpClient httpClient = wrapClient(host); - - HttpPut request = new HttpPut(buildUrl(host, path, querys)); - for (Map.Entry e : headers.entrySet()) { - request.addHeader(e.getKey(), e.getValue()); - } - - if (body != null) { - request.setEntity(new ByteArrayEntity(body)); - } - - return httpClient.execute(request); - } - - /** - * Delete - * - * @param host - * @param path - * @param method - * @param headers - * @param querys - * @return - * @throws Exception - */ - public static HttpResponse doDelete(String host, String path, String method, - Map headers, - Map querys) - throws Exception { - HttpClient httpClient = wrapClient(host); - - HttpDelete request = new HttpDelete(buildUrl(host, path, querys)); - for (Map.Entry e : headers.entrySet()) { - request.addHeader(e.getKey(), e.getValue()); - } - - return httpClient.execute(request); - } - - private static String buildUrl(String host, String path, Map querys) throws UnsupportedEncodingException { - StringBuilder sbUrl = new StringBuilder(); - sbUrl.append(host); - if (!StringUtils.isBlank(path)) { - sbUrl.append(path); - } - if (null != querys) { - StringBuilder sbQuery = new StringBuilder(); - for (Map.Entry query : querys.entrySet()) { - if (0 < sbQuery.length()) { - sbQuery.append("&"); - } - if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) { - sbQuery.append(query.getValue()); - } - if (!StringUtils.isBlank(query.getKey())) { - sbQuery.append(query.getKey()); - if (!StringUtils.isBlank(query.getValue())) { - sbQuery.append("="); - sbQuery.append(URLEncoder.encode(query.getValue(), "utf-8")); - } - } - } - if (0 < sbQuery.length()) { - sbUrl.append("?").append(sbQuery); - } - } - - return sbUrl.toString(); - } - - private static HttpClient wrapClient(String host) { - HttpClient httpClient = new DefaultHttpClient(); - if (host.startsWith("https://")) { - sslClient(httpClient); - } - - return httpClient; - } - - private static void sslClient(HttpClient httpClient) { - try { - SSLContext ctx = SSLContext.getInstance("TLS"); - X509TrustManager tm = new X509TrustManager() { - public X509Certificate[] getAcceptedIssuers() { - return null; - } - public void checkClientTrusted(X509Certificate[] xcs, String str) { - - } - public void checkServerTrusted(X509Certificate[] xcs, String str) { - - } - }; - ctx.init(null, new TrustManager[] { tm }, null); - SSLSocketFactory ssf = new SSLSocketFactory(ctx); - ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); - ClientConnectionManager ccm = httpClient.getConnectionManager(); - SchemeRegistry registry = ccm.getSchemeRegistry(); - registry.register(new Scheme("https", 443, ssf)); - } catch (KeyManagementException ex) { - throw new RuntimeException(ex); - } catch (NoSuchAlgorithmException ex) { - throw new RuntimeException(ex); - } - } -} \ No newline at end of file diff --git a/src/后端/src/main/java/com/softegg/freetogo/Api/phoneVerification/phoneVerification.java b/src/后端/src/main/java/com/softegg/freetogo/Api/phoneVerification/phoneVerification.java deleted file mode 100644 index 1a539d4..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/Api/phoneVerification/phoneVerification.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.softegg.freetogo.Api.phoneVerification; - -import org.apache.http.HttpResponse; -import java.util.HashMap; -import java.util.Map; - -/** - * @description: 验证电话号码 - * @author: zhanglinhao - * @date: 2024/5/29 15:11 - */ -public class phoneVerification { - public void sendVerificationCode(String phone) { - String host = "https://gyytz.market.alicloudapi.com"; - String path = "/sms/smsSend"; - String method = "POST"; - String appcode = "15704c321ae8459bb36fcadd888d67c4"; - Map headers = new HashMap(); - //最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105 - headers.put("Authorization", "APPCODE " + appcode); - Map querys = new HashMap(); - querys.put("mobile", phone); - querys.put("param", "**code**:12345,**minute**:5"); - -//smsSignId(短信前缀)和templateId(短信模板),可登录国阳云控制台自助申请。参考文档:http://help.guoyangyun.com/Problem/Qm.html - - querys.put("smsSignId", "2e65b1bb3d054466b82f0c9d125465e2"); - querys.put("templateId", "908e94ccf08b4476ba6c876d13f084ad"); - Map bodys = new HashMap(); - - - try { - /** - * 重要提示如下: - * HttpUtils请从\r\n\t \t* https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/src/main/java/com/aliyun/api/gateway/demo/util/HttpUtils.java\r\n\t \t* 下载 - * - * 相应的依赖请参照 - * https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/pom.xml - */ - HttpResponse response = HttpUtils.doPost(host, path, method, headers, querys, bodys); - System.out.println(response.toString()); - //获取response的body - //System.out.println(EntityUtils.toString(response.getEntity())); - } catch (Exception e) { - e.printStackTrace(); - } - } -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/Api/weather/weatherController.java b/src/后端/src/main/java/com/softegg/freetogo/Api/weather/weatherController.java deleted file mode 100644 index 0e15bc0..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/Api/weather/weatherController.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.softegg.freetogo.Api.weather; - -import com.google.gson.*; -import com.softegg.freetogo.Debug.utils; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.net.HttpURLConnection; -import java.net.URL; -import java.time.LocalDate; -import java.time.temporal.ChronoUnit; -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * @description: 查询天气服务 - * @author: zhanglinhao - * @date: 2024/5/28 21:13 - */ -@RestController -@RequestMapping("/api") -public class weatherController { - private static final String weatherApiForWeek = "https://v1.yiketianqi.com/free/week?appid=84598529&appsecret=Z1hFDcbI&unescape=1&city="; - private static final String weatherApiForMonth = "https://v1.yiketianqi.com/free/month?appid=84598529&appsecret=Z1hFDcbI&unescape=1&city="; - private final utils util = new utils(); - - /** - * @description: 计算今天到开始日期和结束日期的日期差 - * @author: zhanglinhao - * @date: 2024/5/29 14:49 - */ - private static int dateGap(String now, String expect) { - String[] nowList = now.split("-"); - String[] expectList = expect.split("-"); - LocalDate dateNow = LocalDate.of(Integer.parseInt(nowList[0]), Integer.parseInt(nowList[1]), Integer.parseInt(nowList[2])); - LocalDate dateExpect = LocalDate.of(Integer.parseInt(expectList[0]), Integer.parseInt(expectList[1]), Integer.parseInt(expectList[2])); - return (int) ChronoUnit.DAYS.between(dateNow, dateExpect); - } - - @GetMapping("weather") - public String weatherForecast(String begin, String end, String city) { - int nowToBegin = dateGap(util.getToday(), begin); - int nowToEnd = dateGap(util.getToday(), end); - Pattern patternP = Pattern.compile("\\[(.*?)\\]"); - String json = getWeather(begin, end, city); - Matcher matcher = patternP.matcher(getWeather(begin, end, city)); - List matches = new ArrayList<>(); - while (matcher.find()) { - matches.add(matcher.group(1)); // 捕获组1是我们想要的内部字符串 - } - // 使用Gson解析JSON字符串 - JsonParser parser = new JsonParser(); - JsonArray jsonArray = parser.parse('[' + matches.get(0) + ']').getAsJsonArray(); - - // 创建一个Gson实例,用于将JsonElement对象转换为Java对象 - Gson gson = new GsonBuilder().setPrettyPrinting().create(); - List cleanedWeatherData = new ArrayList<>(); - for (JsonElement element : jsonArray) { - // 简单地将每个元素转换为字符串并添加到列表中 - cleanedWeatherData.add(gson.toJson(element)); - } - - // 判断天气情况 - for (String data : cleanedWeatherData) { - if (nowToBegin <= 0 && nowToEnd >= 0) { - if (data.contains("雨")) - return "旅行期间有雨"; - } - nowToBegin--; - nowToEnd--; - } - return "天气不错,适合出行"; - } - - /** - * @description: 获取今日起7天或30天的天气情况 - * @author: zhanglinhao - * @date: 2024/5/29 14:48 - */ - private String getWeather(String begin, String end, String city) { - try { - String today = util.getToday(); - StringBuilder response = new StringBuilder(); - URL url; - - //如果结束日期距离今日小于7天,使用未来7天天气预报,否则使用未来30天天气预报 - if (dateGap(today, end) <= 7) { - url = new URL(weatherApiForWeek + city); - } else { - url = new URL(weatherApiForMonth + city); - } - HttpURLConnection con = (HttpURLConnection) url.openConnection(); - con.setRequestMethod("GET"); - - int responseCode = con.getResponseCode(); - util.printInfo("Response Code : " + responseCode); - - BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); - String inputLine; - while ((inputLine = in.readLine()) != null) { - response.append(inputLine); - } - in.close(); - - util.printInfo(response.toString()); - return response.toString(); - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/Configurer.java b/src/后端/src/main/java/com/softegg/freetogo/Configurer.java deleted file mode 100644 index 9b95b4f..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/Configurer.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.softegg.freetogo; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.CorsRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -/** - * @description:重写http接收规则,使前后端可以跨域通联 - * @author:zhanglinhao - * @date:2024/5/9 15:20 - */ -@Configuration -public class Configurer implements WebMvcConfigurer { - @Override - public void addCorsMappings(CorsRegistry registry) { - registry.addMapping("/**") - //是否发送Cookie - .allowCredentials(true) - //放行哪些原始域 - .allowedOriginPatterns("*") - .allowedMethods("GET", "POST", "PUT", "DELETE") - .allowedHeaders("*") - .exposedHeaders("*"); -// registry.addMapping("/**").allowedOrigins("http://106.52.218.118:8090"); - } -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/Debug/utils.java b/src/后端/src/main/java/com/softegg/freetogo/Debug/utils.java deleted file mode 100644 index 4273089..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/Debug/utils.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.softegg.freetogo.Debug; - -import java.text.SimpleDateFormat; -import java.util.Date; - -/** - * @description:调试函数 - * @author: zhanglinhao - * @date: 2024/5/29 8:41 - */ -public class utils { - /** - * @description: 输出调试信息 - * @author: zhanglinhao - * @date: 2024/5/29 14:52 - */ - public void printInfo(T text){ - Date currentDate = new Date(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd|HH:mm:ss"); - StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); - StackTraceElement element = stackTrace[2]; // 获取调用printFileAndLine方法的方法的堆栈信息 - String fileName = element.getFileName(); - int lineNumber = element.getLineNumber(); - System.out.println("["+sdf.format(currentDate)+"]"+"File: " + fileName + ", Line: " + lineNumber + ", Info: "+ text); - } - - /** 获取今日日期 - * @description: - * @author: zhanglinhao - * @date: 2024/5/29 14:52 - */ - public String getToday(){ - Date currentDate = new Date(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - return sdf.format(currentDate); - } -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/Demand/Dao/DemandsRepository.java b/src/后端/src/main/java/com/softegg/freetogo/Demand/Dao/DemandsRepository.java deleted file mode 100644 index 6e2bf37..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/Demand/Dao/DemandsRepository.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.softegg.freetogo.Demand.Dao; - -import com.softegg.freetogo.Demand.bean.Demands; -import org.springframework.data.jpa.repository.JpaRepository; - -import java.util.List; - -/** - * @description:继承Jpa数据库接口类 - * @author:wuyifan - * @date:2024/5/10 19:50 - */ -public interface DemandsRepository extends JpaRepository { - List findByPhone(String phone); - - List findByCity(String city); - - List findByProvince(String province); -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/Demand/bean/Demands.java b/src/后端/src/main/java/com/softegg/freetogo/Demand/bean/Demands.java deleted file mode 100644 index 6ab3bee..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/Demand/bean/Demands.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.softegg.freetogo.Demand.bean; - -import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -import java.util.List; - -/** - * @description:数据库中表demand的对应实体类 - * @author:wuyifan - * @date:2024/5/10 11:36 - */ -@Entity -@Table(name = "demands") -@Setter -@Getter -@NoArgsConstructor -@AllArgsConstructor -public class Demands { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Integer did; - @Column - private String phone;//游客手机号码 - @Column(name = "tourist_gender") - private boolean touristGender;//游客性别 ture:male, false:female - @Column - private String nickname;//发布需求的游客昵称信息 - @Column(name = "create_time") - private String createTime;//需求发布时间 - @Column(name = "departure_date") - private String departureDate;//游客需求起始日期 - @Column(name = "end_date") - private String endDate;//游客需求结束日期 - @Column(name = "sum_day") - private String sumDay;//游客旅游总天数 - @Column - private String province;//发布需求的目的省份 - @Column - private String city;//发布需求的目的城市 - @Column - private String message;//需求备注内容 - @Column - private Integer status;//游客需求状态 0:未匹配 1:请求匹配 2:已完成匹配 3:已完成所有服务 - @Column - private Integer guideServiceId;//游客需求最终匹配到的导游服务id - @ElementCollection - @Column(name = "guide_service_id_list") - private List guideServiceIdList;//游客需求申请匹配到的导游服务id -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/Demand/controller/DemandsController.java b/src/后端/src/main/java/com/softegg/freetogo/Demand/controller/DemandsController.java deleted file mode 100644 index 876ea81..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/Demand/controller/DemandsController.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.softegg.freetogo.Demand.controller; - -import com.softegg.freetogo.Demand.bean.Demands; -import com.softegg.freetogo.Demand.service.DemandsService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import java.util.Collections; -import java.util.List; -import java.util.Map; - -/** - * @description:Demand控制类,用于前后端交互 - * @author:wuyifan - * @date:2024/5/10 11:40 - */ -@RestController -//@CrossOrigin(origins = "*") -@RequestMapping("/demands") -public class DemandsController { - @Autowired - private DemandsService demandsService; - - @GetMapping("findAllRandom") - public List findAllRandom() { - List dlist = demandsService.findAll(); - Collections.shuffle(dlist); - return dlist; - } - - @GetMapping("add") - public String add(String phone, - boolean tGender, - String nkn, - String ct, - String dDate, - String eDate, - String sDay, - String province, - String city, - String message, - Integer status, - Integer guideServiceId, - List guideServiceIdList) { - Demands demand = new Demands(); - setDemands(phone, tGender, nkn, ct, dDate, eDate, sDay, province, city, message, status, demand, guideServiceId, guideServiceIdList); - demandsService.add(demand); - return "添加成功"; - } - - @PostMapping("delbyid") - public int delById(@RequestBody Map map) { - int did = Integer.parseInt(map.get("did").toString()); - demandsService.deleteById(did); - return 1; - } - - @GetMapping("findbyid") - public Demands getUserById(int id) { - return demandsService.getDemandById(id); - } - - @GetMapping("update") - public String update(int id, - String phone, - boolean tGender, - String nkn, - String ct, - String dDate, - String eDate, - String sDay, - String province, - String city, - String message, - Integer status, - Integer guideServiceId, - List guideServiceIdList) { - Demands demand = demandsService.getDemandById(id); - setDemands(phone, tGender, nkn, ct, dDate, eDate, sDay, province, city, message, status, demand, guideServiceId, guideServiceIdList); - demandsService.update(demand); - return "更新成功"; - } - - @GetMapping("getByPhone") - public List getByPhone(String phone) { - System.out.println("根据手机号获取游客需求信息:" + phone); - return demandsService.getDemandsByPhone(phone); - } - - private void setDemands(String phone, boolean tGender, String nkn, String ct, String dDate, String eDate, String sDay, String province, String city, String message, Integer status, Demands demand,Integer guideServiceId,List guideServiceIdList) { - demand.setPhone(phone); - demand.setTouristGender(tGender); - demand.setNickname(nkn); - demand.setCreateTime(ct); - demand.setDepartureDate(dDate); - demand.setEndDate(eDate); - demand.setSumDay(sDay); - demand.setProvince(province); - demand.setCity(city); - demand.setMessage(message); - demand.setStatus(status); - demand.setGuideServiceId(guideServiceId); - demand.setGuideServiceIdList(guideServiceIdList); - } - - -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/Demand/service/DemandsService.java b/src/后端/src/main/java/com/softegg/freetogo/Demand/service/DemandsService.java deleted file mode 100644 index 9aa1816..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/Demand/service/DemandsService.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.softegg.freetogo.Demand.service; - -import com.softegg.freetogo.Demand.bean.Demands; - -import java.util.List; - -/** - * @description:数据库操作抽象接口类 - * @author:wuyifan - * @date:2024/5/10 20:59 - */ -public interface DemandsService { - List findAll();//查找所有需求 - - void add(Demands demand);//以demand为用户入库 - - void deleteById(int id);//删除对应id需求 - - Demands getDemandById(int id);//获得对应id需求 - - void update(Demands demand);//更新需求信息 - - List getDemandsByPhone(String phone);//根据手机号获得对应游客用户的服务 - - List getDemandsByCity(String city);//根据手机号获得对应游客用户的服务 - - List getDemandsByProvince(String province);//根据手机号获得对应游客用户的服务 -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/Demand/service/DemandsServiceImpl.java b/src/后端/src/main/java/com/softegg/freetogo/Demand/service/DemandsServiceImpl.java deleted file mode 100644 index d232db1..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/Demand/service/DemandsServiceImpl.java +++ /dev/null @@ -1,119 +0,0 @@ -package com.softegg.freetogo.Demand.service; - -import com.softegg.freetogo.Demand.Dao.DemandsRepository; -import com.softegg.freetogo.Demand.bean.Demands; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.Iterator; -import java.util.List; - -/** - * @description:数据库操作接口实现类 - * @author:wuyifan - * @date:2024/5/10 19:50 - */ -@Component -public class DemandsServiceImpl implements DemandsService { - @Autowired - private DemandsRepository DemandsRepository; - - /** - * @description: 查找所有游客需求 - * @param: null - * @return: java.util.List - * @author: wuyifan - * @date: 2024/5/10 19:53 - */ - public List findAll() { - System.out.println("查询成功"); - return DemandsRepository.findAll(); - } - - /** - * @description: 以demand为游客需求入库 - * @param: demand - * @return: void - * @author: wuyifan - * @date: 2024/5/10 19:55 - */ - public void add(Demands demand) { - DemandsRepository.save(demand); - System.out.println("添加成功"); - } - - /** - * @description: 删除对应序号id的需求 - * @param: id - * @return: void - * @author: wuyifan - * @date: 2024/5/10 19:59 - */ - public void deleteById(int did) { - DemandsRepository.deleteById(did); - System.out.println("删除成功对应did:"); - } - - /** - * @description: 获得对应手机号游客的需求 - * @param: id - * @return: com.softegg.freetogo.Demand.Bean.Demands - * @author: wuyifan - * @date: 2024/5/10 20:02 - */ - public Demands getDemandById(int id) { - return DemandsRepository.findById(id).orElse(null); - } - - /** - * @description: 更新需求信息 - * @param: demand - * @return: void - * @author: wuyifan - * @date: 2024/5/10 20:05 - */ - public void update(Demands demand) { - DemandsRepository.save(demand); - System.out.println("需求更新成功"); - } - - /** - * @description: 根据手机号获得游客用户的所有需求 - * @param: phone - * @return: com.softegg.freetogo.GuideService.Bean.GuideService - * @author: wuyifan - * @date: 2024/5/15 20:18 - */ - - public List getDemandsByPhone(String phone) { - List demandsList = DemandsRepository.findByPhone(phone); - // 使用迭代器的 remove 方法 - demandsList.removeIf(demand -> demand.getStatus() == 4); - return demandsList; - } - - /** - * @description: 根据城市获得游客用户的所有需求 - * @param: city - * @return: com.softegg.freetogo.GuideService.Bean.GuideService - * @author: wuyifan - * @date: 2024/5/15 20:18 - */ - - public List getDemandsByCity(String city) { - return DemandsRepository.findByCity(city); - } - - /** - * @description: 根据城市获得游客用户的所有需求 - * @param: city - * @return: com.softegg.freetogo.GuideService.Bean.GuideService - * @author: wuyifan - * @date: 2024/5/15 20:18 - */ - public List getDemandsByProvince(String province) { - return DemandsRepository.findByProvince(province); - } - - -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/DemandMatch/controller/DemandMatchController.java b/src/后端/src/main/java/com/softegg/freetogo/DemandMatch/controller/DemandMatchController.java deleted file mode 100644 index 4ac37bf..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/DemandMatch/controller/DemandMatchController.java +++ /dev/null @@ -1,140 +0,0 @@ -package com.softegg.freetogo.DemandMatch.controller; - -import com.softegg.freetogo.GuideService.bean.GuideService; -import com.softegg.freetogo.GuideService.service.GuideServiceService; -import com.softegg.freetogo.DemandMatch.service.DemandMatchService; -import com.softegg.freetogo.User.service.UsersService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import java.util.List; -import java.util.Map; - -/** - * @description:游客需求匹配前后端交互 - * @author:wuyifan - * @date:2024/6/4 14:47 - */ -@RestController -@RequestMapping("/DemandMatch") -public class DemandMatchController { - @Autowired - DemandMatchService demandMatchService; - @Autowired - UsersService usersService; - @Autowired - GuideServiceService guideServiceService; - /** - * @description: 导游服务匹配的交互逻辑 - * @param: map - * @return: java.lang.String - * @author: wuyifan - * @date: 2024/6/4 14:48 - */ - @GetMapping("register") - public List GuideMatch(int did) { - System.out.println("接收的did:"+did); - return demandMatchService.guideMatchAccount(did); - } - - /** - * @description: 选中导游服务的详细信息交互逻辑 - * @param: map - * @return: java.lang.String - * @author: wuyifan - * @date: 2024/6/4 14:48 - */ - @GetMapping("specific") - public List specific(int did, int gid) { - System.out.println("接收的did:"+did); - return demandMatchService.guideMatchAccount(did); - } - - /** - * @description: 申请匹配导游服务的交互逻辑 - * @param: map - * @return: java.lang.String - * @author: wuyifan - * @date: 2024/6/11 10:12 - */ - @PostMapping("match") - public int Match(@RequestBody Map map) { - int did = (int) map.get("did"); - System.out.println("接收的did:"+did); - int gid = (int) map.get("gid"); - System.out.println("接收的did:"+did); - return demandMatchService.match(did, gid); - } - - /** - * @description: 确定那些导游服务申请的交互逻辑 - * @param: map - * @return: java.lang.String - * @author: wuyifan - * @date: 2024/6/11 10:12 - */ - @GetMapping("confirmedPage") - public List confirmedpage(int did) { - System.out.println("接收的did:"+did); - return demandMatchService.confirmedPage(did); - } - - /** - * @description: 确定匹配导游服务的交互逻辑 - * @param: map - * @return: java.lang.String - * @author: wuyifan - * @date: 2024/6/11 10:12 - */ - @PostMapping("confirmed") - public int confirmed(@RequestBody Map map) { - int did = Integer.parseInt(map.get("did").toString()); - System.out.println("接收的did:"+did); - int gid = Integer.parseInt(map.get("gid").toString()); - System.out.println("接收的did:"+gid); - return demandMatchService.confirmed(did, gid); - } - - /** - * @description: 取消游客需求匹配结果的交互逻辑 - * @param: map - * @return: java.lang.String - * @author: wuyifan - * @date: 2024/6/11 10:12 - */ - @PostMapping("refuse") - public int refuse(@RequestBody Map map) { - int did = (int) map.get("did"); - System.out.println("接收的did:"+did); - return demandMatchService.refuse(did); - } - - /** - * @description: 取消导游服务的交互逻辑 - * @param: map - * @return: java.lang.String - * @author: wuyifan - * @date: 2024/6/11 10:12 - */ - @PostMapping("finish") - public int finish(@RequestBody Map map) { - int did = (int) map.get("did"); - System.out.println("接收的did:"+did); - return demandMatchService.finish(did); - } - - /** - * @description: 表面删除游客需求的交互逻辑 - * @param: map - * @return: java.lang.String - * @author: wuyifan - * @date: 2024/6/11 10:12 - */ - @PostMapping("delete") - public int delete(@RequestBody Map map) { - int did = (int) map.get("did"); - System.out.println("接收的did:"+did); - return demandMatchService.delete(did); - } - -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/DemandMatch/service/DemandMatchService.java b/src/后端/src/main/java/com/softegg/freetogo/DemandMatch/service/DemandMatchService.java deleted file mode 100644 index ef6d421..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/DemandMatch/service/DemandMatchService.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.softegg.freetogo.DemandMatch.service; - -import com.softegg.freetogo.Demand.bean.Demands; -import com.softegg.freetogo.GuideService.bean.GuideService; - -import java.util.List; - -public interface DemandMatchService { - List guideMatchAccount(int did); - - int match(int did, int gid); - - int confirmed(int did, int gid); - - List confirmedPage(int did); - - int refuse(int did); - - int finish(int did); - - int delete(int did); - - double timeScore(int gsum, String gddate, String gedate, int dsum, String dddate, String dedate); - - double messageScore(String gmessage, String dmessage); -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/DemandMatch/service/DemandMatchServiceImpl.java b/src/后端/src/main/java/com/softegg/freetogo/DemandMatch/service/DemandMatchServiceImpl.java deleted file mode 100644 index d829eaf..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/DemandMatch/service/DemandMatchServiceImpl.java +++ /dev/null @@ -1,401 +0,0 @@ -package com.softegg.freetogo.DemandMatch.service; - -import com.softegg.freetogo.Demand.bean.Demands; -import com.softegg.freetogo.Demand.service.DemandsService; -import com.softegg.freetogo.GuideService.bean.GuideService; -import com.softegg.freetogo.User.service.UsersService; -import com.softegg.freetogo.GuideService.service.GuideServiceService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.time.format.DateTimeFormatter; -import java.util.*; - -import static java.lang.Math.abs; -import java.time.LocalDate; - -/** - * description:导游服务匹配实现类 - * @author:wuyifan - * date:2024/5/28 19:51 - */ -@Component -public class DemandMatchServiceImpl implements DemandMatchService{ - @Autowired - DemandsService demandsService; - @Autowired - UsersService usersService; - @Autowired - GuideServiceService guideServiceService; - - /** - * @description: 导游服务匹配实现函数,根据返回码进行操作 - * @param: city - * @return: int - * author: wuyifan - * @date: 2024/5/28 19:52 - */ - @Override - public List guideMatchAccount(int did){ - Demands demand = demandsService.getDemandById(did); - int demandSumDay = Integer.parseInt(demand.getSumDay()); - String demandDepartureDate = demand.getDepartureDate(); - String demandEndDate = demand.getEndDate(); - String demandMessage = demand.getMessage(); - List guideServiceList = guideServiceService.getGuideServiceByCity(demand.getCity()); - // 使用迭代器的 remove 方法 - guideServiceList.removeIf(guideService -> guideService.getStatus() > 1); - int length = guideServiceList.size(); - double[] sumScores = new double[length]; - int i = 0; - for (GuideService guideService : guideServiceList) { - double sumScore = 0; - int guideServiceSumDay = Integer.parseInt(guideService.getSumDay()); - String guideServiceDepartureDate = guideService.getDepartureDate(); - String guideServiceEndDate = guideService.getEndDate(); - String guideServiceMessage = guideService.getMessage(); - double timeScore = timeScore(guideServiceSumDay, guideServiceDepartureDate, guideServiceEndDate, demandSumDay, demandDepartureDate, demandEndDate); - double messageScore = messageScore(guideServiceMessage, demandMessage); - sumScore += timeScore + messageScore; - sumScores[i] = sumScore; - i++; - } - // 创建一个包含索引和值的列表 - List> list = new ArrayList<>(); - for (int j = 0; j < sumScores.length; j++) { - list.add(new AbstractMap.SimpleEntry<>(sumScores[j], guideServiceList.get(j))); - } - // 根据sumScores的元素大小对 list 进行排序 - list.sort((o1, o2) -> o2.getKey().compareTo(o1.getKey())); - List newgList = new ArrayList<>(); - for (Map.Entry entry : list) { - newgList.add(entry.getValue()); - } - return newgList; - } - - /** - * @description: 申请匹配导游服务匹配实现函数,游客向导游申请 - * @param: did,gid - * @return: int - * author: wuyifan - * @date: 2024/5/28 19:52 - */ - @Override - public int match(int did, int gid){ - Demands demand = demandsService.getDemandById(did); - GuideService guideService = guideServiceService.getGuideServiceById(gid); - List demandIdList = guideService.getDemandIdList(); - if (demandIdList == null) { - demandIdList = new ArrayList<>(); - } - if(!demandIdList.contains(did)) { - demandIdList.add(did); - } - guideService.setStatus(1); - guideService.setDemandIdList(demandIdList); - demandsService.update(demand); - guideServiceService.update(guideService); - System.out.println(guideService.getDemandIdList()); - return 1006; - } - - /** - * @description: 确定匹配导游服务匹配实现函数,根据返回码进行操作 - * @param: did,gid - * @return: int - * author: wuyifan - * @date: 2024/5/28 19:52 - */ - @Override - public int confirmed(int did, int gid){ - Demands demand = demandsService.getDemandById(did); - GuideService guideService = guideServiceService.getGuideServiceById(gid); - demand.setStatus(2); - demand.setGuideServiceId(gid); - guideService.setStatus(2); - guideService.setDemandId(did); - demandsService.update(demand); - guideServiceService.update(guideService); - return 1007; - } - - /** - * @description: 确定导游服务申请列表实现函数,根据返回码进行操作 - * @param: did,gid - * @return: int - * author: wuyifan - * @date: 2024/5/28 19:52 - */ - @Override - public List confirmedPage(int did){ - Demands demand = demandsService.getDemandById(did); - List guideServiceIdList = demand.getGuideServiceIdList(); - List guideServiceList = new ArrayList<>(); - for(int number : guideServiceIdList) { - GuideService guideService = guideServiceService.getGuideServiceById(number); - guideServiceList.add(guideService); - } - return guideServiceList; - } - - /** - * @description: 取消导游服务实现函数,根据返回码进行操作 - * @param: did,gid - * @return: int - * author: wuyifan - * @date: 2024/5/28 19:52 - */ - @Override - public int refuse(int did){ - Demands demand = demandsService.getDemandById(did); - int gid = demand.getGuideServiceId(); - GuideService guideService = guideServiceService.getGuideServiceById(gid); - List demandIdList = guideService.getDemandIdList(); - if (demandIdList == null) { - guideService.setStatus(0); - }else { - guideService.setStatus(1); - } - List guideServiceIdList = demand.getGuideServiceIdList(); - if(guideServiceIdList == null){ - demand.setStatus(0); - }else { - demand.setStatus(1); - } - demand.setGuideServiceId(null); - guideService.setDemandId(null); - demandsService.update(demand); - guideServiceService.update(guideService); - return 1; - } - - /** - * @description: 完成服务实现函数,根据返回码进行操作 - * @param: did,gid - * @return: int - * author: wuyifan - * @date: 2024/5/28 19:52 - */ - @Override - public int finish(int did){ - Demands demand = demandsService.getDemandById(did); - int gid = demand.getGuideServiceId(); - GuideService guideService = guideServiceService.getGuideServiceById(gid); - demand.setStatus(3); - demand.setGuideServiceIdList(null); - guideService.setStatus(3); - guideService.setDemandIdList(null); - demandsService.update(demand); - guideServiceService.update(guideService); - return 1; - } - - /** - * @description: 完成服务后表面删除实现函数,根据返回码进行操作 - * @param: did,gid - * @return: int - * author: wuyifan - * @date: 2024/5/28 19:52 - */ - @Override - public int delete(int did){ - Demands demand = demandsService.getDemandById(did); - demand.setStatus(4); - demandsService.update(demand); - return 1; - } - - public static boolean isRangeWithinRange(LocalDate startDate1, LocalDate endDate1, LocalDate startDate2, LocalDate endDate2) { - // 第一个范围的起始日期必须在第二个范围内或与其起始日期相同 - return !startDate1.isBefore(startDate2) && !endDate1.isAfter(endDate2); - } - - /** - * @description: 时间匹配分数 - * @param: gsum、dsum、ddate、edate - * @return: float - * @author: wuyifan - * @date: 2024/5/28 20:35 - */ - @Override - public double timeScore(int gsum, String gddate, String gedate, int dsum, String dddate, String dedate){ - double score = 0; - int difference = gsum - dsum; - if (abs(difference) < 15 ){ - score += 10 / (float)(abs(difference) + 1); - } - - // 使用DateTimeFormatter将字符串转换为LocalDate对象 - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - LocalDate startDate1 = LocalDate.parse(dddate, formatter); - LocalDate endDate1 = LocalDate.parse(dedate, formatter); - - LocalDate startDate2 = LocalDate.parse(gddate, formatter); - LocalDate endDate2 = LocalDate.parse(gedate, formatter); - - // 判断第一个范围是否在第二个范围内 - boolean isRange1WithinRange2 = isRangeWithinRange(startDate1, endDate1, startDate2, endDate2); - - if (isRange1WithinRange2){ - score += 100; - } - return score; - } - - /** - * @description: Jaccard相似度算法 - * @param: String - * @return: float - * @author: wuyifan - * @date: 2024/5/30 20:35 - */ - public static double jaccardSimilarity(String s1, String s2) { - if (s1 == null || s2 == null ) { - return 0.0; // 如果任何一个字符串为空,直接返回0 - } - - Set set1 = new HashSet<>(); - Set set2 = new HashSet<>(); - - for (char c : s1.toCharArray()) { - set1.add(c); - } - - for (char c : s2.toCharArray()) { - set2.add(c); - } - - Set intersection = new HashSet<>(set1); - intersection.retainAll(set2); - - Set union = new HashSet<>(set1); - union.addAll(set2); - - return (double) intersection.size() / union.size(); - } - - /** - * @description: 余弦相似度算法 - * @param: String - * @return: float - * @author: wuyifan - * @date: 2024/5/30 20:35 - */ - - private static Map getCharacterFrequency(String s) { - Map frequencyMap = new HashMap<>(); - for (char c : s.toCharArray()) { - frequencyMap.put(c, frequencyMap.getOrDefault(c, 0) + 1); - } - return frequencyMap; - } - - public static double cosineSimilarity(String s1, String s2) { - if (s1 == null || s2 == null || s1.isEmpty() || s2.isEmpty()) { - return 0.0; // 如果任何一个字符串为空,直接返回0 - } - Map freq1 = getCharacterFrequency(s1); - Map freq2 = getCharacterFrequency(s2); - - double dotProduct = 0.0; - double mag1 = 0.0; - double mag2 = 0.0; - - for (char c : freq1.keySet()) { - if (freq2.containsKey(c)) { - dotProduct += freq1.get(c) * freq2.get(c); - } - mag1 += Math.pow(freq1.get(c), 2); - } - - for (char c : freq2.keySet()) { - mag2 += Math.pow(freq2.get(c), 2); - } - - mag1 = Math.sqrt(mag1); - mag2 = Math.sqrt(mag2); - - return dotProduct / (mag1 * mag2); - } - - /** - * @description: Dice系数算法 - * @param: String - * @return: float - * @author: wuyifan - * @date: 2024/5/30 20:25 - */ - public static double diceCoefficient(String s1, String s2) { - if (s1 == null || s2 == null ) { - return 0.0; // 如果任何一个字符串为空,直接返回0 - } - - int intersection = 0; - - for (int i = 0; i < s1.length() - 1; i++) { - String bigram = s1.substring(i, i + 2); - if (s2.contains(bigram)) { - intersection++; - } - } - - int union = s1.length() + s2.length() - intersection; - - return (double) (2 * intersection) / union; - } - - /** - * @description: N-gram 模型算法 - * @param: String - * @return: float - * @author: wuyifan - * @date: 2024/5/30 20:22 - */ - private static Set generateNGrams(String s, int n) { - if (s == null || s.length() < n || n <= 0) { - throw new IllegalArgumentException("Invalid input string or n-gram size"); - } - - Set nGrams = new HashSet<>(); - for (int i = 0; i <= s.length() - n; i++) { - nGrams.add(s.substring(i, i + n)); - } - return nGrams; - } - - public static double bigramSimilarity(String s1, String s2) { - if (s1 == null || s2 == null || s1.isEmpty() || s2.isEmpty()) { - return 0.0; // 如果任何一个字符串为空,直接返回0 - } - - Set bigrams1 = generateNGrams(s1, 2); - Set bigrams2 = generateNGrams(s2, 2); - - Set commonBigrams = new HashSet<>(bigrams1); - commonBigrams.retainAll(bigrams2); - - Set allBigrams = new HashSet<>(bigrams1); - allBigrams.addAll(bigrams2); - - return (double) commonBigrams.size() / allBigrams.size(); - } - - /** - * @description: 备注匹配分数 - * @param: gmessage、dmessage - * @return: float - * @author: wuyifan - * @date: 2024/5/28 20:35 - */ - @Override - public double messageScore(String gmessage, String dmessage){ - double score; - double similarity1 = jaccardSimilarity(gmessage, dmessage); - double similarity2 = cosineSimilarity(gmessage, dmessage); - double similarity3 = diceCoefficient(gmessage, dmessage); - double similarity4 = bigramSimilarity(gmessage, dmessage); - score = similarity1 + similarity2 + similarity3 + similarity4; - return score; - } -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/Evaluate/Dao/EvaluateRepository.java b/src/后端/src/main/java/com/softegg/freetogo/Evaluate/Dao/EvaluateRepository.java deleted file mode 100644 index c786088..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/Evaluate/Dao/EvaluateRepository.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.softegg.freetogo.Evaluate.Dao; - -import com.softegg.freetogo.Evaluate.bean.Evaluations; -import org.springframework.data.jpa.repository.JpaRepository; - -/** - * @description: 继承Jpa数据库接口类 - * @author: zhanglinhao - * @date: 2024/5/10 9:27 - */ -public interface EvaluateRepository extends JpaRepository { -// List findByEditorPhone(String phone); - -// List findByEditedPhone(String phone); -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/Evaluate/bean/Evaluations.java b/src/后端/src/main/java/com/softegg/freetogo/Evaluate/bean/Evaluations.java deleted file mode 100644 index ff5cbc2..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/Evaluate/bean/Evaluations.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.softegg.freetogo.Evaluate.bean; - -import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -/** - * @description: - * @author:zhanglinhao - * @date:2024/5/10 9:07 - */ -@Entity -@Table(name = "evaluation") -@Setter -@Getter -@AllArgsConstructor -@NoArgsConstructor -public class Evaluations { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private int eid;//评价id - @Column(name = "createtime") - private String ct;//创建日期 - @Column(name = "modifytime") - private String mt;//编辑日期 - @Column - private String ebody;//评价本体 - @Column - private int satisfaction;//满意度整数1-5 -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/Evaluate/controller/EvaluationController.java b/src/后端/src/main/java/com/softegg/freetogo/Evaluate/controller/EvaluationController.java deleted file mode 100644 index 1a7de91..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/Evaluate/controller/EvaluationController.java +++ /dev/null @@ -1,115 +0,0 @@ -package com.softegg.freetogo.Evaluate.controller; - -import com.softegg.freetogo.Evaluate.bean.Evaluations; -import com.softegg.freetogo.Evaluate.service.EvaluateService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import java.time.LocalDateTime; -import java.util.List; -import java.util.Map; - -/** - * @description: 对评价的操作 - * @author: zhanglinhao - * @date: 2024/5/11 17:33 - */ -@RestController -@RequestMapping("/evaluate") -public class EvaluationController { - @Autowired - EvaluateService evaluateService; - - /** - * @description: 获取所有需求 - * @param: null - * @return: java.util.List - * @author: zhanglinhao - * @date: 2024/5/12 0:11 - */ - @GetMapping("findAllEvaluation") - public List findAllEvaluation() { - return evaluateService.evaluationList(); - } - - /** - * @description: 添加评价 - * @param: ebody - * @return: void - * @author: zhanglinhao - * @date: 2024/5/12 0:28 - */ - @PostMapping("addEvaluation") - public void addEvaluation(@RequestBody Map ebody) { - LocalDateTime currentTime = LocalDateTime.now(); - Evaluations evaluation = new Evaluations(); - evaluation.setEid(Integer.parseInt(ebody.get("eid"))); - evaluation.setEbody(ebody.get("ebody")); - evaluation.setSatisfaction(Integer.parseInt(ebody.get("satisfaction"))); - evaluation.setCt(currentTime.toString()); - evaluation.setMt(currentTime.toString()); - evaluateService.addEvaluation(evaluation); - } - - /** - * @description: 获取该用户对别人的评价 - * @param: phone - * @return: java.util.List - * @author: zhanglinhao - * @date: 2024/5/12 0:30 - */ -// @GetMapping("evaluationByPhone") -// public List evaluationByPhone(String phone) { -// return evaluateService.getEListByPhone(phone); -// } - @GetMapping("getEvaluation") - public Evaluations getEvaluation(int eid) { - return evaluateService.getEvaluationById(eid); - } - - /** - * @description: 编辑评论 - * @param: eid - * @param: ebody - * @return: void - * @author: zhanglinhao - * @date: 2024/5/12 13:31 - */ - @PostMapping("editEvaluation") - public void editEvaluation(@RequestBody Map ebody) { - System.out.println("接收的json:" + ebody); - LocalDateTime currentTime = LocalDateTime.now(); - Evaluations evaluation = new Evaluations(Integer.parseInt(ebody.get("eid")), ebody.get("ct"), currentTime.toString(), ebody.get("ebody"), Integer.parseInt(ebody.get("satisfaction"))); - evaluateService.editEvaluation(evaluation); - } - - /** - * @description: 删除评论 - * @param: eid - * @return: void - * @author: zhanglinhao - * @date: 2024/5/12 13:32 - */ - @GetMapping("deleteEvaluation") - public void deleteEvaluation(int eid) { - evaluateService.deleteEvaluation(eid); - } - - /** - * @description: 获取该用户的受满意程度 - * @param: phone - * @return: int - * @author: zhanglinhao - * @date: 2024/5/12 13:39 - */ -// @GetMapping("getSatisfaction") -// public String getSatisfaction(String phone) { -// List elist = evaluateService.getEvaluatedByPhone(phone); -// float sumOfSatisfaction = 0; -// for (Evaluations evaluation : elist) { -// sumOfSatisfaction += evaluation.getSatisfaction(); -// } -// System.out.println("查询满意度:"+ sumOfSatisfaction); -// return Float.toString(sumOfSatisfaction /elist.size()); -// } -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/Evaluate/service/EvaluateService.java b/src/后端/src/main/java/com/softegg/freetogo/Evaluate/service/EvaluateService.java deleted file mode 100644 index a192a6b..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/Evaluate/service/EvaluateService.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.softegg.freetogo.Evaluate.service; - -import com.softegg.freetogo.Evaluate.bean.Evaluations; -import org.springframework.stereotype.Service; - -import java.util.List; - -/** - * @description: - * @author:zhanglinhao - * @date:2024/5/10 8:52 - */ -@Service -public interface EvaluateService { - List evaluationList();//获取所有评论 - -// List getEListByPhone(String phone);//根据电话筛选评价 - - // List getEvaluatedByPhone(String phone); - Evaluations getEvaluationById(int eid);//根据id获取评论 - - void addEvaluation(Evaluations evaluation);//添加评论 - - void editEvaluation(Evaluations evaluation);//编辑评论 - - void deleteEvaluation(int eid);//删除评论 -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/Evaluate/service/EvaluateServiceImpl.java b/src/后端/src/main/java/com/softegg/freetogo/Evaluate/service/EvaluateServiceImpl.java deleted file mode 100644 index ac3f622..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/Evaluate/service/EvaluateServiceImpl.java +++ /dev/null @@ -1,112 +0,0 @@ -package com.softegg.freetogo.Evaluate.service; - -import com.softegg.freetogo.Evaluate.Dao.EvaluateRepository; -import com.softegg.freetogo.Evaluate.bean.Evaluations; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.List; - -/** - * @description: - * @author:zhanglinhao - * @date:2024/5/10 9:25 - */ -@Component -public class EvaluateServiceImpl implements EvaluateService { - - @Autowired - EvaluateRepository evaluateRepository; - - /** - * @description: 获取所有评论 - * @param: null - * @return: void - * @author: zhanglinhao - * @date: 2024/5/10 9:25 - */ - @Override - public List evaluationList() { - System.out.println("查询评论"); - return evaluateRepository.findAll(); - } - - /** - * @description: 根据id获取评论 - * @param: eid - * @return: com.softegg.freetogo.Evaluate.bean.Evaluations - * @author: zhanglinhao - * @date: 2024/5/15 8:13 - */ - @Override - public Evaluations getEvaluationById(int eid) { - return evaluateRepository.findById(eid).get(); - } - - - /** - * @description: 根据电话筛选评价 - * @param: phone - * @return: java.util.List - * @author: zhanglinhao - * @date: 2024/5/11 16:28 - */ -// @Override -// public List getEListByPhone(String phone) { -// System.out.println("查询" + phone + "的评论"); -// return evaluateRepository.findByEditorPhone(phone); -// } - - /** - * @description: 获取该用户所有被他人评价的评价 - * @param: phone - * @return: java.util.List - * @author: zhanglinhao - * @date: 2024/5/12 21:21 - */ -// @Override -// public List getEvaluatedByPhone(String phone) { -// return evaluateRepository.findByEditedPhone(phone); -// } - - /** - * @description: 添加评论 - * @param: evaluation - * @return: void - * @author: zhanglinhao - * @date: 2024/5/10 21:20 - */ - @Override - public void addEvaluation(Evaluations evaluation) { - evaluateRepository.save(evaluation); - System.out.println("添加评论:" + evaluation.getEbody()); - } - - /** - * @description: 编辑评论 - * @param: eid - * @return: void - * @author: zhanglinhao - * @date: 2024/5/11 17:10 - */ - @Override - public void editEvaluation(Evaluations evaluation) { - int eid = evaluation.getEid(); - System.out.println("编辑评论:" + eid); - evaluateRepository.save(evaluation); - System.out.println("编辑成功:" + eid); - } - - /** - * @description: 删除评论 - * @param: eid - * @return: void - * @author: zhanglinhao - * @date: 2024/5/11 17:28 - */ - @Override - public void deleteEvaluation(int eid) { - evaluateRepository.deleteById(eid); - System.out.println("删除评论:" + eid); - } -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/FeedBack/bean.java b/src/后端/src/main/java/com/softegg/freetogo/FeedBack/bean.java deleted file mode 100644 index aacb79d..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/FeedBack/bean.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.softegg.freetogo.FeedBack; - -/** - * @description: - * @author: zhanglinhao - * @date: 2024/5/20 11:14 - */ -public class bean { -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/FreeToGoApplication.java b/src/后端/src/main/java/com/softegg/freetogo/FreeToGoApplication.java deleted file mode 100644 index ee65fcb..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/FreeToGoApplication.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.softegg.freetogo; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class FreeToGoApplication { - - public static void main(String[] args) { - SpringApplication.run(FreeToGoApplication.class, args); - } - -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/GuideMatch/controller/GuideMatchController.java b/src/后端/src/main/java/com/softegg/freetogo/GuideMatch/controller/GuideMatchController.java deleted file mode 100644 index 48da4a6..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/GuideMatch/controller/GuideMatchController.java +++ /dev/null @@ -1,119 +0,0 @@ -package com.softegg.freetogo.GuideMatch.controller; - -import com.softegg.freetogo.Demand.bean.Demands; -import com.softegg.freetogo.GuideService.bean.GuideService; -import com.softegg.freetogo.GuideService.service.GuideServiceService; -import com.softegg.freetogo.GuideMatch.service.GuideMatchService; -import com.softegg.freetogo.User.bean.Users; -import com.softegg.freetogo.User.service.UsersService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import java.util.List; -import java.util.Map; - -/** - * @description:导游服务匹配前后端交互 - * @author:wuyifan - * @date:2024/5/30 10:47 - */ -@RestController -//@CrossOrigin(origins = "*") -@RequestMapping("/GuideMatch") -public class GuideMatchController { - @Autowired - GuideMatchService guideMatchService; - @Autowired - UsersService usersService; - @Autowired - GuideServiceService guideServiceService; - - /** - * @description: 导游服务匹配的交互逻辑 - * @param: map - * @return: java.lang.String - * @author: wuyifan - * @date: 2024/5/30 20:48 - */ - @GetMapping("register") - public List GuideMatch(int gid) { - System.out.println("需匹配的gid:" + gid); - return guideMatchService.guideMatchAccount(gid); - - } - - /** - * @description: 申请匹配游客需求的交互逻辑 - * @param: map - * @return: java.lang.int - * @author: wuyifan - * @date: 2024/6/11 10:12 - */ - @PostMapping("match") - public int Match(@RequestBody Map map) { - int gid = Integer.parseInt(map.get("gid").toString()); - System.out.println("接收的gid:"+gid); - int did = Integer.parseInt(map.get("did").toString()); - System.out.println("接收的did:"+did); - return guideMatchService.match(gid, did); - } - - - /** - * @description: 确定那些游客需求申请的交互逻辑 - * @param: gid - * @return: java.lang.Demands - * @author: wuyifan - * @date: 2024/6/11 10:12 - */ - @GetMapping("confirmedPage") - public List confirmedpage(int gid) { - System.out.println("接收的gid:"+gid); - return guideMatchService.confirmedPage(gid); - } - - /** - * @description: 确定匹配导游服务的交互逻辑 - * @param: map - * @return: java.lang.String - * @author: wuyifan - * @date: 2024/6/11 10:12 - */ - @PostMapping("confirmed") - public int confirmed(@RequestBody Map map) { - int gid = Integer.parseInt(map.get("gid").toString()); - System.out.println("接收的did:"+gid); - int did = Integer.parseInt(map.get("did").toString()); - System.out.println("接收的did:"+did); - return guideMatchService.confirmed(gid, did); - } - - /** - * @description: 取消导游服务匹配结果的交互逻辑 - * @param: map - * @return: java.lang.String - * @author: wuyifan - * @date: 2024/6/11 10:12 - */ - @PostMapping("refuse") - public int refuse(@RequestBody Map map) { - int gid = (int) map.get("gid"); - System.out.println("接收的gid:"+gid); - return guideMatchService.refuse(gid); - } - - /** - * @description: 表面删除导游服务的交互逻辑 - * @param: map - * @return: java.lang.String - * @author: wuyifan - * @date: 2024/6/11 10:12 - */ - @PostMapping("delete") - public int delete(@RequestBody Map map) { - int gid = (int) map.get("gid"); - System.out.println("接收的gid:"+gid); - return guideMatchService.delete(gid); - } - -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/GuideMatch/service/GuideMatchService.java b/src/后端/src/main/java/com/softegg/freetogo/GuideMatch/service/GuideMatchService.java deleted file mode 100644 index 606e59a..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/GuideMatch/service/GuideMatchService.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.softegg.freetogo.GuideMatch.service; - -import com.softegg.freetogo.Demand.bean.Demands; -import org.springframework.stereotype.Service; - -import java.util.List; - -/** - * @description:抽象需求发送服务接口类 - * @author:wuyifan - * @date:2024/5/28 19:45 - */ -@Service -public interface GuideMatchService { - - List guideMatchAccount(int gid); - - int match(int gid, int did); - - List confirmedPage(int gid); - - int confirmed(int did, int gid); - - int refuse(int gid); - - int delete(int gid); - - double timeScore(int gsum, String gddate, String gedate, int dsum, String dddate, String dedate); - - double messageScore(String gmessage, String dmessage); -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/GuideMatch/service/GuideMatchServiceImpl.java b/src/后端/src/main/java/com/softegg/freetogo/GuideMatch/service/GuideMatchServiceImpl.java deleted file mode 100644 index ee3e396..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/GuideMatch/service/GuideMatchServiceImpl.java +++ /dev/null @@ -1,384 +0,0 @@ -package com.softegg.freetogo.GuideMatch.service; - -import com.softegg.freetogo.Demand.bean.Demands; -import com.softegg.freetogo.GuideService.bean.GuideService; -import com.softegg.freetogo.Demand.service.DemandsService; -import com.softegg.freetogo.User.service.UsersService; -import com.softegg.freetogo.GuideService.service.GuideServiceService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; -import java.util.*; - -import static java.lang.Math.abs; - -/** - * description:导游服务匹配实现类 - * @author:wuyifan - * date:2024/5/28 19:51 - */ -@Component -public class GuideMatchServiceImpl implements GuideMatchService { - @Autowired - DemandsService demandsService; - @Autowired - UsersService usersService; - @Autowired - GuideServiceService guideServiceService; - - /** - * @description: 导游服务匹配实现函数,根据返回码进行操作 - * @param: city - * @return: int - * author: wuyifan - * @date: 2024/5/28 19:52 - */ - @Override - public List guideMatchAccount(int gid){ - GuideService guideService = guideServiceService.getGuideServiceById(gid); - int guideServiceSumDay = Integer.parseInt(guideService.getSumDay()); - String guideServiceDepartureDate = guideService.getDepartureDate(); - String guideServiceEndDate = guideService.getEndDate(); - String guideServiceMessage = guideService.getMessage(); - List dlist = demandsService.getDemandsByCity(guideService.getCity()); - // 使用迭代器的 remove 方法 - dlist.removeIf(demand -> demand.getStatus() > 1); - int length = dlist.size(); - double[] sumScores = new double[length]; - int i = 0; - for (Demands demands : dlist) { - double sumScore = 0; - int demandsSumDay = Integer.parseInt(demands.getSumDay()); - String demandsDepartureDate = demands.getDepartureDate(); - String demandsEndDate = demands.getEndDate(); - String demandsMessage = demands.getMessage(); - double timeScore = timeScore(guideServiceSumDay,guideServiceDepartureDate,guideServiceEndDate,demandsSumDay,demandsDepartureDate,demandsEndDate); - double messageScore = messageScore(guideServiceMessage, demandsMessage); - sumScore += timeScore + messageScore; - sumScores[i] = sumScore; - i++; - } - // 创建一个包含索引和值的列表 - List> list = new ArrayList<>(); - for (int j = 0; j < sumScores.length; j++) { - list.add(new AbstractMap.SimpleEntry<>(sumScores[j], dlist.get(j))); - } - // 根据sumScores的元素大小对 list 进行排序 - list.sort((o1, o2) -> o2.getKey().compareTo(o1.getKey())); - List newdList = new ArrayList<>(); - for (Map.Entry entry : list) { - newdList.add(entry.getValue()); - } - return newdList; - } - - /** - * @description: 申请匹配游客需求实现函数,游客向导游申请 - * @param: did,gid - * @return: int - * author: wuyifan - * @date: 2024/5/28 19:52 - */ - - @Override - public int match(int gid, int did){ - Demands demand = demandsService.getDemandById(did); - GuideService guideService = guideServiceService.getGuideServiceById(gid); - demand.setStatus(1); - List guideServiceIdList = demand.getGuideServiceIdList(); - if (guideServiceIdList == null) { - guideServiceIdList = new ArrayList<>(); - } - if(!guideServiceIdList.contains(gid)){ - guideServiceIdList.add(gid); - } - demand.setGuideServiceIdList(guideServiceIdList); -// List demandIdList = guideService.getDemandIdList(); -// if (demandIdList == null) { -// demandIdList = new ArrayList<>(); -// } -// demandIdList.add(did); -// guideService.setDemandIdList(demandIdList); - demandsService.update(demand); - guideServiceService.update(guideService); - System.out.println(demand.getGuideServiceIdList()); - return 1006; - } - - /** - * @description: 确定导游服务申请列表实现函数,根据返回码进行操作 - * @param: did,gid - * @return: int - * author: wuyifan - * @date: 2024/5/28 19:52 - */ - @Override - public List confirmedPage(int gid){ - GuideService guideService = guideServiceService.getGuideServiceById(gid); - List demandIdList = guideService.getDemandIdList(); - List demandsList = new ArrayList<>(); - for(int number : demandIdList) { - Demands demand = demandsService.getDemandById(number); - demandsList.add(demand); - } - return demandsList; - } - - /** - * @description: 确定匹配导游服务匹配实现函数,根据返回码进行操作 - * @param: did,gid - * @return: int - * author: wuyifan - * @date: 2024/5/28 19:52 - */ - @Override - public int confirmed(int gid, int did){ - Demands demand = demandsService.getDemandById(did); - GuideService guideService = guideServiceService.getGuideServiceById(gid); - demand.setStatus(2); - demand.setGuideServiceId(gid); - guideService.setStatus(2); - guideService.setDemandId(did); - demandsService.update(demand); - guideServiceService.update(guideService); - return 1007; - } - - /** - * @description: 取消导游服务实现函数,根据返回码进行操作 - * @param: did,gid - * @return: int - * author: wuyifan - * @date: 2024/5/28 19:52 - */ - @Override - public int refuse(int gid){ - GuideService guideService = guideServiceService.getGuideServiceById(gid); - int did = guideService.getDemandId(); - Demands demand = demandsService.getDemandById(gid); - List demandIdList = guideService.getDemandIdList(); - if (demandIdList == null) { - guideService.setStatus(0); - }else { - guideService.setStatus(1); - } - List guideServiceIdList = demand.getGuideServiceIdList(); - if(guideServiceIdList == null){ - demand.setStatus(0); - }else { - demand.setStatus(1); - } - guideService.setDemandId(null); - demand.setGuideServiceId(null); - demandsService.update(demand); - guideServiceService.update(guideService); - return 1; - } - - @Override - public int delete(int gid){ - GuideService guideService = guideServiceService.getGuideServiceById(gid); - guideService.setStatus(4); - guideServiceService.update(guideService); - return 1; - } - - public static boolean isRangeWithinRange(LocalDate startDate1, LocalDate endDate1, LocalDate startDate2, LocalDate endDate2) { - return !startDate1.isBefore(startDate2) && !endDate1.isAfter(endDate2); - } - - /** - * @description: 时间匹配分数 - * @param: gsum、dsum、ddate、edate - * @return: float - * @author: wuyifan - * @date: 2024/5/28 20:35 - */ - @Override - public double timeScore(int gsum, String gddate, String gedate, int dsum, String dddate, String dedate){ - double score = 0; - int difference = gsum - dsum; - if (abs(difference) < 15 ){ - score += 10 / (float)(abs(difference) + 1); - } - - // 使用DateTimeFormatter将字符串转换为LocalDate对象 - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - LocalDate startDate1 = LocalDate.parse(dddate, formatter); - LocalDate endDate1 = LocalDate.parse(dedate, formatter); - System.out.println(startDate1); - System.out.println(endDate1); - - LocalDate startDate2 = LocalDate.parse(gddate, formatter); - LocalDate endDate2 = LocalDate.parse(gedate, formatter); - System.out.println(startDate2); - System.out.println(endDate2); - - // 判断第一个范围是否在第二个范围内 - boolean isRange1WithinRange2 = isRangeWithinRange(startDate1, endDate1, startDate2, endDate2); - - if (isRange1WithinRange2){ - score += 100; - } - return score; - } - - /** - * @description: Jaccard相似度算法 - * @param: String - * @return: float - * @author: wuyifan - * @date: 2024/5/30 20:35 - */ - public static double jaccardSimilarity(String s1, String s2) { - if (s1 == null || s2 == null || s1.isEmpty() || s2.isEmpty()) { - return 0.0; // 如果任何一个字符串为空,直接返回0 - } - - Set set1 = new HashSet<>(); - Set set2 = new HashSet<>(); - - for (char c : s1.toCharArray()) { - set1.add(c); - } - - for (char c : s2.toCharArray()) { - set2.add(c); - } - - Set intersection = new HashSet<>(set1); - intersection.retainAll(set2); - - Set union = new HashSet<>(set1); - union.addAll(set2); - - return (double) intersection.size() / union.size(); - } - - /** - * @description: 余弦相似度算法 - * @param: String - * @return: float - * @author: wuyifan - * @date: 2024/5/30 20:35 - */ - - private static Map getCharacterFrequency(String s) { - Map frequencyMap = new HashMap<>(); - for (char c : s.toCharArray()) { - frequencyMap.put(c, frequencyMap.getOrDefault(c, 0) + 1); - } - return frequencyMap; - } - - public static double cosineSimilarity(String s1, String s2) { - if (s1 == null || s2 == null || s1.isEmpty() || s2.isEmpty()) { - return 0.0; // 如果任何一个字符串为空,直接返回0 - } - Map freq1 = getCharacterFrequency(s1); - Map freq2 = getCharacterFrequency(s2); - - double dotProduct = 0.0; - double mag1 = 0.0; - double mag2 = 0.0; - - for (char c : freq1.keySet()) { - if (freq2.containsKey(c)) { - dotProduct += freq1.get(c) * freq2.get(c); - } - mag1 += Math.pow(freq1.get(c), 2); - } - - for (char c : freq2.keySet()) { - mag2 += Math.pow(freq2.get(c), 2); - } - - mag1 = Math.sqrt(mag1); - mag2 = Math.sqrt(mag2); - - return dotProduct / (mag1 * mag2); - } - - /** - * @description: Dice系数算法 - * @param: String - * @return: float - * @author: wuyifan - * @date: 2024/5/30 20:25 - */ - public static double diceCoefficient(String s1, String s2) { - if (s1 == null || s2 == null || s1.isEmpty() || s2.isEmpty()) { - return 0.0; // 如果任何一个字符串为空,直接返回0 - } - - int intersection = 0; - - for (int i = 0; i < s1.length() - 1; i++) { - String bigram = s1.substring(i, i + 2); - if (s2.contains(bigram)) { - intersection++; - } - } - - int union = s1.length() + s2.length() - intersection; - - return (double) (2 * intersection) / union; - } - - /** - * @description: N-gram 模型算法 - * @param: String - * @return: float - * @author: wuyifan - * @date: 2024/5/30 20:22 - */ - private static Set generateNGrams(String s, int n) { - if (s == null || s.length() < n || n <= 0) { - throw new IllegalArgumentException("Invalid input string or n-gram size"); - } - - - Set nGrams = new HashSet<>(); - for (int i = 0; i <= s.length() - n; i++) { - nGrams.add(s.substring(i, i + n)); - } - return nGrams; - } - - public static double bigramSimilarity(String s1, String s2) { - if (s1 == null || s2 == null || s1.isEmpty() || s2.isEmpty()) { - return 0.0; // 如果任何一个字符串为空,直接返回0 - } - - Set bigrams1 = generateNGrams(s1, 2); - Set bigrams2 = generateNGrams(s2, 2); - - Set commonBigrams = new HashSet<>(bigrams1); - commonBigrams.retainAll(bigrams2); - - Set allBigrams = new HashSet<>(bigrams1); - allBigrams.addAll(bigrams2); - - return (double) commonBigrams.size() / allBigrams.size(); - } - - /** - * @description: 备注匹配分数 - * @param: gmessage、dmessage - * @return: float - * @author: wuyifan - * @date: 2024/5/28 20:35 - */ - @Override - public double messageScore(String gmessage, String dmessage){ - double score; - double similarity1 = jaccardSimilarity(gmessage, dmessage); - double similarity2 = cosineSimilarity(gmessage, dmessage); - double similarity3 = diceCoefficient(gmessage, dmessage); - double similarity4 = bigramSimilarity(gmessage, dmessage); - score = similarity1 + similarity2 + similarity3 + similarity4; - return score; - } -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/GuideService/Dao/GuideServiceRepository.java b/src/后端/src/main/java/com/softegg/freetogo/GuideService/Dao/GuideServiceRepository.java deleted file mode 100644 index adc20bd..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/GuideService/Dao/GuideServiceRepository.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.softegg.freetogo.GuideService.Dao; - -import com.softegg.freetogo.Demand.bean.Demands; -import com.softegg.freetogo.GuideService.bean.GuideService; -import org.springframework.data.jpa.repository.JpaRepository; - -import java.util.List; - -/** - * @description:继承Jpa数据库接口类 - * @author:wuyifan - * @date:2024/5/13 9:17 - */ -public interface GuideServiceRepository extends JpaRepository { - List findByPhone(String phone); - - List findByCity(String city); - - List findByProvince(String province); -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/GuideService/bean/GuideService.java b/src/后端/src/main/java/com/softegg/freetogo/GuideService/bean/GuideService.java deleted file mode 100644 index f27e4ff..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/GuideService/bean/GuideService.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.softegg.freetogo.GuideService.bean; - -import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -import java.util.List; - -/** - * @description:数据库中表guideService的对应实体类 - * @author:wuyifan - * @date:2024/5/13 9:14 - */ -@Entity -@Table(name = "guideService") -@Setter -@Getter -@NoArgsConstructor -@AllArgsConstructor -public class GuideService { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Integer gid; - @Column - private String phone;//导游手机号码 - @Column(name = "guide_gender") - private boolean guideGender;//导游性别 ture:male, false:female - @Column - private String nickname;//发布需求的导游昵称信息 - @Column(name = "create_time") - private String createTime;//服务发布时间 - @Column(name = "departure_date") - private String departureDate;//导游服务起始日期 - @Column(name = "end_date") - private String endDate;//导游服务结束日期 - @Column(name = "sum_day") - private String sumDay;//导游服务总天数 - @Column - private String province;//导游服务的目的省份 - @Column - private String city;//导游服务的目的城市 - @Column - private String message;//导游服务备注内容 - @Column - private Integer status;//导游服务状态 0:未匹配 1:请求匹配 2:已完成匹配 3:已完成所有服务 - @Column - private Integer demandId;//导游服务最终匹配到的游客需求id - @ElementCollection - @Column - private List demandIdList;//游客需求申请匹配到的导游服务id -} \ No newline at end of file diff --git a/src/后端/src/main/java/com/softegg/freetogo/GuideService/controller/GuideServiceController.java b/src/后端/src/main/java/com/softegg/freetogo/GuideService/controller/GuideServiceController.java deleted file mode 100644 index 12725e5..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/GuideService/controller/GuideServiceController.java +++ /dev/null @@ -1,103 +0,0 @@ -package com.softegg.freetogo.GuideService.controller; - -import com.softegg.freetogo.Demand.bean.Demands; -import com.softegg.freetogo.GuideService.bean.GuideService; -import com.softegg.freetogo.GuideService.service.GuideServiceService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import java.util.List; -import java.util.Map; - -/** - * @description:Guide控制类,用于前后端交互 - * @author:wuyifan - * @date:2024/5/13 9:26 - */ -@RestController -//@CrossOrigin(origins = "*") -@RequestMapping("/guideService") -public class GuideServiceController { - @Autowired - private GuideServiceService guideServiceService; - - @GetMapping("findAll") - public List findAll() { - return guideServiceService.findAll(); - } - - @GetMapping("add") - public String add(String phone, - boolean gGender, - String nkn, - String ct, - String dDate, - String eDate, - String sDay, - String procvince, - String city, - String message, - Integer status, - Integer demandId, - List demandIdList) { - GuideService guideService = new GuideService(); - setDemands(phone, gGender, nkn, ct, dDate, eDate, sDay, procvince, city, message, status, guideService, demandId, demandIdList); - guideServiceService.add(guideService); - return "添加成功"; - } - - @PostMapping("delbyid") - public String delById(@RequestBody Map map) { - int gid = (int) map.get("gid"); - guideServiceService.deleteById(gid); - return "1"; - } - - @GetMapping("findbyid") - public GuideService getUserById(int gid) { - return guideServiceService.getGuideServiceById(gid); - } - - @GetMapping("getByPhone") - public List getByPhone(String phone) { - System.out.println("根据手机号获取游客需求信息:" + phone); - return guideServiceService.getGuideServiceByPhone(phone); - } - - @GetMapping("update") - public String update(int id, - String phone, - boolean gGender, - String nkn, - String ct, - String dDate, - String eDate, - String sDay, - String province, - String city, - String message, - Integer status, - Integer demandId, - List demandIdList) { - GuideService guideService = guideServiceService.getGuideServiceById(id); - setDemands(phone, gGender, nkn, ct, dDate, eDate, sDay, province, city, message, status, guideService, demandId, demandIdList); - guideServiceService.update(guideService); - return "更新成功"; - } - - private void setDemands(String phone, boolean gGender, String nkn, String ct, String dDate, String eDate, String sDay, String province, String city, String message, Integer status, GuideService guideservice, Integer demandId, List demandIdList) { - guideservice.setPhone(phone); - guideservice.setGuideGender(gGender); - guideservice.setNickname(nkn); - guideservice.setCreateTime(ct); - guideservice.setDepartureDate(dDate); - guideservice.setEndDate(eDate); - guideservice.setSumDay(sDay); - guideservice.setProvince(province); - guideservice.setCity(city); - guideservice.setMessage(message); - guideservice.setStatus(status); - guideservice.setDemandId(demandId); - guideservice.setDemandIdList(demandIdList); - } -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/GuideService/service/GuideServiceService.java b/src/后端/src/main/java/com/softegg/freetogo/GuideService/service/GuideServiceService.java deleted file mode 100644 index 3e99757..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/GuideService/service/GuideServiceService.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.softegg.freetogo.GuideService.service; - -import com.softegg.freetogo.GuideService.bean.GuideService; - -import java.util.List; - -/** - * @description:数据库操作抽象接口类 - * @author:wuyifan - * @date:2024/5/10 20:59 - */ -public interface GuideServiceService { - List findAll();//查找所有需求 - - void add(GuideService guideService);//以demand为用户入库 - - void deleteById(int id);//删除对应id需求 - - GuideService getGuideServiceById(int id);//获得对应id需求 - - void update(GuideService guideService);//更新需求信息 - - List getGuideServiceByPhone(String phone);//获得对应手机号的导游用户的所有服务 - - List getGuideServiceByCity(String city);//根据所选城市获得导游服务列表 - - List getGuideServiceByProvince(String province);//根据所选城市获得导游服务列表 -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/GuideService/service/GuideServiceServiceImpl.java b/src/后端/src/main/java/com/softegg/freetogo/GuideService/service/GuideServiceServiceImpl.java deleted file mode 100644 index ec20f59..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/GuideService/service/GuideServiceServiceImpl.java +++ /dev/null @@ -1,123 +0,0 @@ -package com.softegg.freetogo.GuideService.service; - -import com.softegg.freetogo.Demand.bean.Demands; -import com.softegg.freetogo.GuideService.Dao.GuideServiceRepository; -import com.softegg.freetogo.GuideService.bean.GuideService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.Iterator; -import java.util.List; - -/** - * @description:数据库操作接口实现类 - * @author:wuyifan - * @date:2024/5/13 9:19 - */ -@Component -public class GuideServiceServiceImpl implements GuideServiceService { - @Autowired - private GuideServiceRepository GuideServiceRepository; - @Autowired - private GuideServiceRepository guideServiceRepository; - - /** - * @description: 查找所有游客需求 - * @param: null - * @return: java.util.List - * @author: wuyifan - * @date: 2024/5/13 9:21 - */ - public List findAll() { - System.out.println("查询成功"); - return GuideServiceRepository.findAll(); - } - - - /** - * @description: 以guideService为导游服务入库 - * @param: guideService - * @return: void - * @author: wuyifan - * @date: 2024/5/13 9:22 - */ - public void add(GuideService guideService) { - GuideServiceRepository.save(guideService); - System.out.println("添加成功"); - } - - /** - * @description: 获得对应序号id的服务 - * @param: id - * @return: com.softegg.freetogo.GuideService.Bean.GuideService - * @author: wuyifan - * @date: 2024/5/10 20:02 - */ - public GuideService getGuideServiceById(int id) { - return GuideServiceRepository.findById(id).orElse(null); - } - - /** - * @description: 删除对应gid导游服务 - * @param: id - * @return: void - * @author: zhanglinhao - * @date: 2024/5/9 22:53 - */ - public void deleteById(int gid) { - guideServiceRepository.deleteById(gid); - System.out.println("删除成功:" + gid); - } - - /** - * @description: 更新需求信息 - * @param: guideService - * @return: void - * @author: wuyifan - * @date: 2024/5/10 20:05 - */ - public void update(GuideService guideService) { - GuideServiceRepository.save(guideService); - System.out.println("服务更新成功"); - } - - /** - * @description: 根据手机号获得导游用户的所有服务 - * @param: phone - * @return: com.softegg.freetogo.GuideService.Bean.GuideService - * @author: wuyifan - * @date: 2024/5/16 15:18 - */ - - public List getGuideServiceByPhone(String phone) { - List guideServiceList = GuideServiceRepository.findByPhone(phone); - // 使用迭代器的 remove 方法 - guideServiceList.removeIf(guideService -> guideService.getStatus() == 4); - return guideServiceList; - } - - /** - * @description: 根据城市获得导游用户的所有服务 - * @param: city - * @return: com.softegg.freetogo.GuideService.Bean.GuideService - * @author: wuyifan - * @date: 2024/5/16 15:30 - */ - - public List getGuideServiceByCity(String city) { - return GuideServiceRepository.findByCity(city); - } - - /** - * @description: 根据城市获得导游用户的所有服务 - * @param: city - * @return: com.softegg.freetogo.GuideService.Bean.GuideService - * @author: wuyifan - * @date: 2024/5/16 15:30 - */ - - public List getGuideServiceByProvince(String province) { - return GuideServiceRepository.findByProvince(province); - } - -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/HeatMap/bean/HeatMap.java b/src/后端/src/main/java/com/softegg/freetogo/HeatMap/bean/HeatMap.java deleted file mode 100644 index 886d449..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/HeatMap/bean/HeatMap.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.softegg.freetogo.HeatMap.bean; - - - -public class HeatMap { - // 定义字段 - private String name; // 省的名称 - private int data; // 省中的一些数据(示例中使用int,可以根据需求修改为其他类型) - - // 构造方法 - public HeatMap(String name, int data) { - this.name = name; - this.data = data; - } - - // Getter和Setter方法 - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getData() { - return data; - } - - public void setData(int data) { - this.data = data; - } - - // 可以添加其他方法,比如打印省的信息等 - @Override - public String toString() { - return "Province{" + - "name='" + name + '\'' + - ", data=" + data + - '}'; - } - - // 示例:打印省的信息 - public void printInfo() { - System.out.println("Province Name: " + name + ", Data: " + data); - } - -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/HeatMap/controller/HeatMapController.java b/src/后端/src/main/java/com/softegg/freetogo/HeatMap/controller/HeatMapController.java deleted file mode 100644 index 2ea2aa4..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/HeatMap/controller/HeatMapController.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.softegg.freetogo.HeatMap.controller; - -import com.softegg.freetogo.Demand.bean.Demands; -import com.softegg.freetogo.GuideService.bean.GuideService; -import com.softegg.freetogo.HeatMap.bean.HeatMap; -import com.softegg.freetogo.GuideService.service.GuideServiceService; -import com.softegg.freetogo.GuideMatch.service.GuideMatchService; -import com.softegg.freetogo.HeatMap.service.HeatMapService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - - -@RestController -//@CrossOrigin(origins = "*") -@RequestMapping("/HeatMap") -public class HeatMapController { - @Autowired - GuideMatchService guideMatchService; - @Autowired - GuideServiceService guideServiceService; - @Autowired - HeatMapService heatMapService; - - - /** - * @description: 各省导游服务交互逻辑 - * @param: map - * @return: java.lang.String - * @author: wuyifan - * @date: 2024/5/30 20:48 - */ - @GetMapping("guideServiceHeatMapRegister") - public List GuideServiceHeatMapRegister() { - return heatMapService.provinceGuideServiceHeatMap(); - } - - /** - * @description: 各省游客需求交互逻辑 - * @param: map - * @return: java.lang.String - * @author: wuyifan - * @date: 2024/5/30 20:48 - */ - @GetMapping("demandsHeatMapRegister") - public List DemandsHeatMapRegister() { - return heatMapService.provinceDemandsHeatMap(); - } - - /** - * @description: 目标省份导游服务交互逻辑 - * @param: map - * @return: java.lang.String - * @author: wuyifan - * @date: 2024/5/30 20:48 - */ - @PostMapping("demandsCityHeatMap") - public int[] DemandsProvinceHeatMap(@RequestBody Map map) { - String province = map.get("province").toString(); - return heatMapService.cityDemandsHeatMap(province); - } - - /** - * @description: 目标省份导游服务交互逻辑 - * @param: map - * @return: java.lang.String - * @author: wuyifan - * @date: 2024/5/30 20:48 - */ - @PostMapping("guideServiceCityHeatMap") - public int[] GuideServiceProvinceHeatMap(@RequestBody Map map) { - String province = map.get("province").toString(); - return heatMapService.cityGuideServiceHeatMap(province); - } -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/HeatMap/service/HeatMapService.java b/src/后端/src/main/java/com/softegg/freetogo/HeatMap/service/HeatMapService.java deleted file mode 100644 index c941111..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/HeatMap/service/HeatMapService.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.softegg.freetogo.HeatMap.service; - -import com.softegg.freetogo.HeatMap.bean.HeatMap; - -import java.util.List; - -public interface HeatMapService { - List provinceDemandsHeatMap();//获得每个省份的游客需求数目 - - int[] cityDemandsHeatMap(String province);//获得目标省份的游客需求数目 - - List provinceGuideServiceHeatMap();//获得每个省份的导游服务数目 - - int[] cityGuideServiceHeatMap(String province);//获得目标省份的游客服务数目 -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/HeatMap/service/HeatMapServiceImpl.java b/src/后端/src/main/java/com/softegg/freetogo/HeatMap/service/HeatMapServiceImpl.java deleted file mode 100644 index 8f32ddb..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/HeatMap/service/HeatMapServiceImpl.java +++ /dev/null @@ -1,192 +0,0 @@ -package com.softegg.freetogo.HeatMap.service; - -import com.softegg.freetogo.Demand.bean.Demands; -import com.softegg.freetogo.Demand.service.DemandsService; -import com.softegg.freetogo.GuideService.service.GuideServiceService; - -import com.softegg.freetogo.GuideService.bean.GuideService; -import com.softegg.freetogo.HeatMap.bean.HeatMap; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - - -import java.io.FileReader; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -/** - * description:热力图实现类 - * @author:wuyifan - * date:2024/6/6 10:51 - */ -@Component -public class HeatMapServiceImpl implements HeatMapService { - @Autowired - DemandsService demandsService; - @Autowired - GuideServiceService guideServiceService; - - - - public static void main(String[] args) { - List provinceList = new ArrayList<>(); - JSONParser parser = new JSONParser(); - - try { - // 读取 JSON 文件内容并解析为 JSONObject - Object obj = parser.parse(new FileReader("C:/Users/WYF/Desktop/软件体系结构/FreeToGo/src/main/java/com/softegg/freetogo/HeatMap/service/area.json")); // 直接使用文件名表示相对路径 - JSONObject jsonObject = (JSONObject) obj; - - for (Object province : jsonObject.keySet()) { - provinceList.add(province.toString()); - } - System.out.println("所有省份列表:"); - for (String province : provinceList) { - System.out.println(province); - } - } catch (IOException | ParseException e) { - e.printStackTrace(); - } - } - - /** - * @description: 获得所有省份的List - * @param: null - * @return: List - * @author: wuyifan - * @date: 2024/6/6 15:48 - */ - public List getAllProvinces() { - List provinceList = new ArrayList<>(); - - JSONParser parser = new JSONParser(); - - try { - // 读取 JSON 文件内容并解析为 JSONObject - Object obj = parser.parse(new FileReader("C:/Users/WYF/Desktop/软件体系结构/FreeToGo/src/main/java/com/softegg/freetogo/HeatMap/service/area.json")); - JSONObject jsonObject = (JSONObject) obj; - - // 遍历每个省份 - for (Object province : jsonObject.keySet()) { - // 将省份添加到列表中 - provinceList.add(province.toString()); - } - } catch (IOException | ParseException e) { - e.printStackTrace(); - } - - return provinceList; - } - - /** - * @description: 获得目标省份的所有城市的List - * @param: String - * @return: List - * @author: wuyifan - * @date: 2024/6/6 15:48 - */ - public List getCitiesInProvince(String province) { - List cityList = new ArrayList<>(); - - JSONParser parser = new JSONParser(); - - try { - // 读取 JSON 文件内容并解析为 JSONObject - Object obj = parser.parse(new FileReader("C:/Users/WYF/Desktop/软件体系结构/FreeToGo/src/main/java/com/softegg/freetogo/HeatMap/service/area.json")); - JSONObject jsonObject = (JSONObject) obj; - - // 获取湖南省的城市信息 - JSONObject hunanCities = (JSONObject) jsonObject.get(province); - - // 遍历每个城市并将城市名称添加到列表中 - for (Object city : hunanCities.keySet()) { - cityList.add(city.toString()); - } - } catch (IOException | ParseException e) { - e.printStackTrace(); - } - - return cityList; - } - - /** - * @description: 获得所有省份的游客需求数目 - * @param: null - * @return: int[] - * @author: wuyifan - * @date: 2024/6/6 15:48 - */ - @Override - public List provinceDemandsHeatMap(){ - List provinceList = getAllProvinces(); - List dataList = new ArrayList<>(); - for (String province : provinceList) { - List demandsList = demandsService.getDemandsByProvince(province); - dataList.add(new HeatMap(province, demandsList.size())); - } - return dataList; - } - - /** - * @description: 获得目标省份的游客需求数目 - * @param: String - * @return: int[] - * @author: wuyifan - * @date: 2024/6/6 15:48 - */ - @Override - public int[] cityDemandsHeatMap(String province){ - List cityList = getCitiesInProvince(province); - int[] sum = new int[cityList.size()]; - int i = 0; - for (String city : cityList) { - List demandsList = demandsService.getDemandsByCity(city); - sum[i] = demandsList.size(); - i++; - } - return sum; - } - - /** - * @description: 获得所有省份的游客需求数目 - * @param: null - * @return: int[] - * @author: wuyifan - * @date: 2024/6/6 15:48 - */ - @Override - public List provinceGuideServiceHeatMap(){ - List provinceList = getAllProvinces(); - List dataList = new ArrayList<>(); - for (String province : provinceList) { - List guideServiceList = guideServiceService.getGuideServiceByProvince(province); - dataList.add(new HeatMap(province, guideServiceList.size())); - } - return dataList; - } - - /** - * @description: 获得目标省份的游客需求数目 - * @param: String - * @return: int[] - * @author: wuyifan - * @date: 2024/6/6 15:48 - */ - @Override - public int[] cityGuideServiceHeatMap(String province){ - List cityList = getCitiesInProvince(province); - int[] sum = new int[cityList.size()]; - int i = 0; - for (String city : cityList) { - List guideServiceList = guideServiceService.getGuideServiceByCity(city); - sum[i] = guideServiceList.size(); - i++; - } - return sum; - } - -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/HeatMap/service/area.json b/src/后端/src/main/java/com/softegg/freetogo/HeatMap/service/area.json deleted file mode 100644 index ea28cd2..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/HeatMap/service/area.json +++ /dev/null @@ -1 +0,0 @@ -{"北京市":{"市辖区":["东城区","西城区","朝阳区","丰台区","石景山区","海淀区","门头沟区","房山区","通州区","顺义区","昌平区","大兴区","怀柔区","平谷区","密云区","延庆区"]},"天津市":{"市辖区":["和平区","河东区","河西区","南开区","河北区","红桥区","东丽区","西青区","津南区","北辰区","武清区","宝坻区","滨海新区","宁河区","静海区","蓟州区"]},"河北省":{"石家庄市":["长安区","桥西区","新华区","井陉矿区","裕华区","藁城区","鹿泉区","栾城区","井陉县","正定县","行唐县","灵寿县","高邑县","深泽县","赞皇县","无极县","平山县","元氏县","赵县","石家庄高新技术产业开发区","石家庄循环化工园区","辛集市","晋州市","新乐市"],"唐山市":["路南区","路北区","古冶区","开平区","丰南区","丰润区","曹妃甸区","滦南县","乐亭县","迁西县","玉田县","河北唐山芦台经济开发区","唐山市汉沽管理区","唐山高新技术产业开发区","河北唐山海港经济开发区","遵化市","迁安市","滦州市"],"秦皇岛市":["海港区","山海关区","北戴河区","抚宁区","青龙满族自治县","昌黎县","卢龙县","秦皇岛市经济技术开发区","北戴河新区"],"邯郸市":["邯山区","丛台区","复兴区","峰峰矿区","肥乡区","永年区","临漳县","成安县","大名县","涉县","磁县","邱县","鸡泽县","广平县","馆陶县","魏县","曲周县","邯郸经济技术开发区","邯郸冀南新区","武安市"],"邢台市":["襄都区","信都区","任泽区","南和区","临城县","内丘县","柏乡县","隆尧县","宁晋县","巨鹿县","新河县","广宗县","平乡县","威县","清河县","临西县","河北邢台经济开发区","南宫市","沙河市"],"保定市":["竞秀区","莲池区","满城区","清苑区","徐水区","涞水县","阜平县","定兴县","唐县","高阳县","容城县","涞源县","望都县","安新县","易县","曲阳县","蠡县","顺平县","博野县","雄县","保定高新技术产业开发区","保定白沟新城","涿州市","定州市","安国市","高碑店市"],"张家口市":["桥东区","桥西区","宣化区","下花园区","万全区","崇礼区","张北县","康保县","沽源县","尚义县","蔚县","阳原县","怀安县","怀来县","涿鹿县","赤城县","张家口经济开发区","张家口市察北管理区","张家口市塞北管理区"],"承德市":["双桥区","双滦区","鹰手营子矿区","承德县","兴隆县","滦平县","隆化县","丰宁满族自治县","宽城满族自治县","围场满族蒙古族自治县","承德高新技术产业开发区","平泉市"],"沧州市":["新华区","运河区","沧县","青县","东光县","海兴县","盐山县","肃宁县","南皮县","吴桥县","献县","孟村回族自治县","河北沧州经济开发区","沧州高新技术产业开发区","沧州渤海新区","泊头市","任丘市","黄骅市","河间市"],"廊坊市":["安次区","广阳区","固安县","永清县","香河县","大城县","文安县","大厂回族自治县","廊坊经济技术开发区","霸州市","三河市"],"衡水市":["桃城区","冀州区","枣强县","武邑县","武强县","饶阳县","安平县","故城县","景县","阜城县","河北衡水高新技术产业开发区","衡水滨湖新区","深州市"]},"山西省":{"太原市":["小店区","迎泽区","杏花岭区","尖草坪区","万柏林区","晋源区","清徐县","阳曲县","娄烦县","山西转型综合改革示范区","古交市"],"大同市":["新荣区","平城区","云冈区","云州区","阳高县","天镇县","广灵县","灵丘县","浑源县","左云县","山西大同经济开发区"],"阳泉市":["城区","矿区","郊区","平定县","盂县"],"长治市":["潞州区","上党区","屯留区","潞城区","襄垣县","平顺县","黎城县","壶关县","长子县","武乡县","沁县","沁源县"],"晋城市":["城区","沁水县","阳城县","陵川县","泽州县","高平市"],"朔州市":["朔城区","平鲁区","山阴县","应县","右玉县","山西朔州经济开发区","怀仁市"],"晋中市":["榆次区","太谷区","榆社县","左权县","和顺县","昔阳县","寿阳县","祁县","平遥县","灵石县","介休市"],"运城市":["盐湖区","临猗县","万荣县","闻喜县","稷山县","新绛县","绛县","垣曲县","夏县","平陆县","芮城县","永济市","河津市"],"忻州市":["忻府区","定襄县","五台县","代县","繁峙县","宁武县","静乐县","神池县","五寨县","岢岚县","河曲县","保德县","偏关县","五台山风景名胜区","原平市"],"临汾市":["尧都区","曲沃县","翼城县","襄汾县","洪洞县","古县","安泽县","浮山县","吉县","乡宁县","大宁县","隰县","永和县","蒲县","汾西县","侯马市","霍州市"],"吕梁市":["离石区","文水县","交城县","兴县","临县","柳林县","石楼县","岚县","方山县","中阳县","交口县","孝义市","汾阳市"]},"内蒙古自治区":{"呼和浩特市":["新城区","回民区","玉泉区","赛罕区","土默特左旗","托克托县","和林格尔县","清水河县","武川县","呼和浩特经济技术开发区"],"包头市":["东河区","昆都仑区","青山区","石拐区","白云鄂博矿区","九原区","土默特右旗","固阳县","达尔罕茂明安联合旗","包头稀土高新技术产业开发区"],"乌海市":["海勃湾区","海南区","乌达区"],"赤峰市":["红山区","元宝山区","松山区","阿鲁科尔沁旗","巴林左旗","巴林右旗","林西县","克什克腾旗","翁牛特旗","喀喇沁旗","宁城县","敖汉旗"],"通辽市":["科尔沁区","科尔沁左翼中旗","科尔沁左翼后旗","开鲁县","库伦旗","奈曼旗","扎鲁特旗","通辽经济技术开发区","霍林郭勒市"],"鄂尔多斯市":["东胜区","康巴什区","达拉特旗","准格尔旗","鄂托克前旗","鄂托克旗","杭锦旗","乌审旗","伊金霍洛旗"],"呼伦贝尔市":["海拉尔区","扎赉诺尔区","阿荣旗","莫力达瓦达斡尔族自治旗","鄂伦春自治旗","鄂温克族自治旗","陈巴尔虎旗","新巴尔虎左旗","新巴尔虎右旗","满洲里市","牙克石市","扎兰屯市","额尔古纳市","根河市"],"巴彦淖尔市":["临河区","五原县","磴口县","乌拉特前旗","乌拉特中旗","乌拉特后旗","杭锦后旗"],"乌兰察布市":["集宁区","卓资县","化德县","商都县","兴和县","凉城县","察哈尔右翼前旗","察哈尔右翼中旗","察哈尔右翼后旗","四子王旗","丰镇市"],"兴安盟":["乌兰浩特市","阿尔山市","科尔沁右翼前旗","科尔沁右翼中旗","扎赉特旗","突泉县"],"锡林郭勒盟":["二连浩特市","锡林浩特市","阿巴嘎旗","苏尼特左旗","苏尼特右旗","东乌珠穆沁旗","西乌珠穆沁旗","太仆寺旗","镶黄旗","正镶白旗","正蓝旗","多伦县","乌拉盖管理区管委会"],"阿拉善盟":["阿拉善左旗","阿拉善右旗","额济纳旗","内蒙古阿拉善高新技术产业开发区"]},"辽宁省":{"沈阳市":["和平区","沈河区","大东区","皇姑区","铁西区","苏家屯区","浑南区","沈北新区","于洪区","辽中区","康平县","法库县","新民市"],"大连市":["中山区","西岗区","沙河口区","甘井子区","旅顺口区","金州区","普兰店区","长海县","瓦房店市","庄河市"],"鞍山市":["铁东区","铁西区","立山区","千山区","台安县","岫岩满族自治县","海城市"],"抚顺市":["新抚区","东洲区","望花区","顺城区","抚顺县","新宾满族自治县","清原满族自治县"],"本溪市":["平山区","溪湖区","明山区","南芬区","本溪满族自治县","桓仁满族自治县"],"丹东市":["元宝区","振兴区","振安区","宽甸满族自治县","东港市","凤城市"],"锦州市":["古塔区","凌河区","太和区","黑山县","义县","凌海市","北镇市"],"营口市":["站前区","西市区","鲅鱼圈区","老边区","盖州市","大石桥市"],"阜新市":["海州区","新邱区","太平区","清河门区","细河区","阜新蒙古族自治县","彰武县"],"辽阳市":["白塔区","文圣区","宏伟区","弓长岭区","太子河区","辽阳县","灯塔市"],"盘锦市":["双台子区","兴隆台区","大洼区","盘山县"],"铁岭市":["银州区","清河区","铁岭县","西丰县","昌图县","调兵山市","开原市"],"朝阳市":["双塔区","龙城区","朝阳县","建平县","喀喇沁左翼蒙古族自治县","北票市","凌源市"],"葫芦岛市":["连山区","龙港区","南票区","绥中县","建昌县","兴城市"]},"吉林省":{"长春市":["南关区","宽城区","朝阳区","二道区","绿园区","双阳区","九台区","农安县","长春经济技术开发区","长春净月高新技术产业开发区","长春高新技术产业开发区","长春汽车经济技术开发区","榆树市","德惠市","公主岭市"],"吉林市":["昌邑区","龙潭区","船营区","丰满区","永吉县","吉林经济开发区","吉林高新技术产业开发区","吉林中国新加坡食品区","蛟河市","桦甸市","舒兰市","磐石市"],"四平市":["铁西区","铁东区","梨树县","伊通满族自治县","双辽市"],"辽源市":["龙山区","西安区","东丰县","东辽县"],"通化市":["东昌区","二道江区","通化县","辉南县","柳河县","梅河口市","集安市"],"白山市":["浑江区","江源区","抚松县","靖宇县","长白朝鲜族自治县","临江市"],"松原市":["宁江区","前郭尔罗斯蒙古族自治县","长岭县","乾安县","吉林松原经济开发区","扶余市"],"白城市":["洮北区","镇赉县","通榆县","吉林白城经济开发区","洮南市","大安市"],"延边朝鲜族自治州":["延吉市","图们市","敦化市","珲春市","龙井市","和龙市","汪清县","安图县"]},"黑龙江省":{"哈尔滨市":["道里区","南岗区","道外区","平房区","松北区","香坊区","呼兰区","阿城区","双城区","依兰县","方正县","宾县","巴彦县","木兰县","通河县","延寿县","尚志市","五常市"],"齐齐哈尔市":["龙沙区","建华区","铁锋区","昂昂溪区","富拉尔基区","碾子山区","梅里斯达斡尔族区","龙江县","依安县","泰来县","甘南县","富裕县","克山县","克东县","拜泉县","讷河市"],"鸡西市":["鸡冠区","恒山区","滴道区","梨树区","城子河区","麻山区","鸡东县","虎林市","密山市"],"鹤岗市":["向阳区","工农区","南山区","兴安区","东山区","兴山区","萝北县","绥滨县"],"双鸭山市":["尖山区","岭东区","四方台区","宝山区","集贤县","友谊县","宝清县","饶河县"],"大庆市":["萨尔图区","龙凤区","让胡路区","红岗区","大同区","肇州县","肇源县","林甸县","杜尔伯特蒙古族自治县","大庆高新技术产业开发区"],"伊春市":["伊美区","乌翠区","友好区","嘉荫县","汤旺县","丰林县","大箐山县","南岔县","金林区","铁力市"],"佳木斯市":["向阳区","前进区","东风区","郊区","桦南县","桦川县","汤原县","同江市","富锦市","抚远市"],"七台河市":["新兴区","桃山区","茄子河区","勃利县"],"牡丹江市":["东安区","阳明区","爱民区","西安区","林口县","绥芬河市","海林市","宁安市","穆棱市","东宁市"],"黑河市":["爱辉区","逊克县","孙吴县","北安市","五大连池市","嫩江市"],"绥化市":["北林区","望奎县","兰西县","青冈县","庆安县","明水县","绥棱县","安达市","肇东市","海伦市"],"大兴安岭地区":["漠河市","呼玛县","塔河县","加格达奇区","松岭区","新林区","呼中区"]},"上海市":{"市辖区":["黄浦区","徐汇区","长宁区","静安区","普陀区","虹口区","杨浦区","闵行区","宝山区","嘉定区","浦东新区","金山区","松江区","青浦区","奉贤区","崇明区"]},"江苏省":{"南京市":["玄武区","秦淮区","建邺区","鼓楼区","浦口区","栖霞区","雨花台区","江宁区","六合区","溧水区","高淳区"],"无锡市":["锡山区","惠山区","滨湖区","梁溪区","新吴区","江阴市","宜兴市"],"徐州市":["鼓楼区","云龙区","贾汪区","泉山区","铜山区","丰县","沛县","睢宁县","徐州经济技术开发区","新沂市","邳州市"],"常州市":["天宁区","钟楼区","新北区","武进区","金坛区","溧阳市"],"苏州市":["虎丘区","吴中区","相城区","姑苏区","吴江区","苏州工业园区","常熟市","张家港市","昆山市","太仓市"],"南通市":["通州区","崇川区","海门区","如东县","南通经济技术开发区","启东市","如皋市","海安市"],"连云港市":["连云区","海州区","赣榆区","东海县","灌云县","灌南县","连云港经济技术开发区"],"淮安市":["淮安区","淮阴区","清江浦区","洪泽区","涟水县","盱眙县","金湖县","淮安经济技术开发区"],"盐城市":["亭湖区","盐都区","大丰区","响水县","滨海县","阜宁县","射阳县","建湖县","盐城经济技术开发区","东台市"],"扬州市":["广陵区","邗江区","江都区","宝应县","扬州经济技术开发区","仪征市","高邮市"],"镇江市":["京口区","润州区","丹徒区","镇江新区","丹阳市","扬中市","句容市"],"泰州市":["海陵区","高港区","姜堰区","兴化市","靖江市","泰兴市"],"宿迁市":["宿城区","宿豫区","沭阳县","泗阳县","泗洪县","宿迁经济技术开发区"]},"浙江省":{"杭州市":["上城区","拱墅区","西湖区","滨江区","萧山区","余杭区","富阳区","临安区","临平区","钱塘区","桐庐县","淳安县","建德市"],"宁波市":["海曙区","江北区","北仑区","镇海区","鄞州区","奉化区","象山县","宁海县","余姚市","慈溪市"],"温州市":["鹿城区","龙湾区","瓯海区","洞头区","永嘉县","平阳县","苍南县","文成县","泰顺县","瑞安市","乐清市","龙港市"],"嘉兴市":["南湖区","秀洲区","嘉善县","海盐县","海宁市","平湖市","桐乡市"],"湖州市":["吴兴区","南浔区","德清县","长兴县","安吉县"],"绍兴市":["越城区","柯桥区","上虞区","新昌县","诸暨市","嵊州市"],"金华市":["婺城区","金东区","武义县","浦江县","磐安县","兰溪市","义乌市","东阳市","永康市"],"衢州市":["柯城区","衢江区","常山县","开化县","龙游县","江山市"],"舟山市":["定海区","普陀区","岱山县","嵊泗县"],"台州市":["椒江区","黄岩区","路桥区","三门县","天台县","仙居县","温岭市","临海市","玉环市"],"丽水市":["莲都区","青田县","缙云县","遂昌县","松阳县","云和县","庆元县","景宁畲族自治县","龙泉市"]},"安徽省":{"合肥市":["瑶海区","庐阳区","蜀山区","包河区","长丰县","肥东县","肥西县","庐江县","合肥高新技术产业开发区","合肥经济技术开发区","合肥新站高新技术产业开发区","巢湖市"],"芜湖市":["镜湖区","鸠江区","弋江区","湾沚区","繁昌区","南陵县","芜湖经济技术开发区","安徽芜湖三山经济开发区","无为市"],"蚌埠市":["龙子湖区","蚌山区","禹会区","淮上区","怀远县","五河县","固镇县","蚌埠市高新技术开发区","蚌埠市经济开发区"],"淮南市":["大通区","田家庵区","谢家集区","八公山区","潘集区","凤台县","寿县"],"马鞍山市":["花山区","雨山区","博望区","当涂县","含山县","和县"],"淮北市":["杜集区","相山区","烈山区","濉溪县"],"铜陵市":["铜官区","义安区","郊区","枞阳县"],"安庆市":["迎江区","大观区","宜秀区","怀宁县","太湖县","宿松县","望江县","岳西县","安徽安庆经济开发区","桐城市","潜山市"],"黄山市":["屯溪区","黄山区","徽州区","歙县","休宁县","黟县","祁门县"],"滁州市":["琅琊区","南谯区","来安县","全椒县","定远县","凤阳县","中新苏滁高新技术产业开发区","滁州经济技术开发区","天长市","明光市"],"阜阳市":["颍州区","颍东区","颍泉区","临泉县","太和县","阜南县","颍上县","阜阳合肥现代产业园区","阜阳经济技术开发区","界首市"],"宿州市":["埇桥区","砀山县","萧县","灵璧县","泗县","宿州马鞍山现代产业园区","宿州经济技术开发区"],"六安市":["金安区","裕安区","叶集区","霍邱县","舒城县","金寨县","霍山县"],"亳州市":["谯城区","涡阳县","蒙城县","利辛县"],"池州市":["贵池区","东至县","石台县","青阳县"],"宣城市":["宣州区","郎溪县","泾县","绩溪县","旌德县","宣城市经济开发区","宁国市","广德市"]},"福建省":{"福州市":["鼓楼区","台江区","仓山区","马尾区","晋安区","长乐区","闽侯县","连江县","罗源县","闽清县","永泰县","平潭县","福清市"],"厦门市":["思明区","海沧区","湖里区","集美区","同安区","翔安区"],"莆田市":["城厢区","涵江区","荔城区","秀屿区","仙游县"],"三明市":["三元区","沙县区","明溪县","清流县","宁化县","大田县","尤溪县","将乐县","泰宁县","建宁县","永安市"],"泉州市":["鲤城区","丰泽区","洛江区","泉港区","惠安县","安溪县","永春县","德化县","金门县","石狮市","晋江市","南安市"],"漳州市":["芗城区","龙文区","龙海区","长泰区","云霄县","漳浦县","诏安县","东山县","南靖县","平和县","华安县"],"南平市":["延平区","建阳区","顺昌县","浦城县","光泽县","松溪县","政和县","邵武市","武夷山市","建瓯市"],"龙岩市":["新罗区","永定区","长汀县","上杭县","武平县","连城县","漳平市"],"宁德市":["蕉城区","霞浦县","古田县","屏南县","寿宁县","周宁县","柘荣县","福安市","福鼎市"]},"江西省":{"南昌市":["东湖区","西湖区","青云谱区","青山湖区","新建区","红谷滩区","南昌县","安义县","进贤县"],"景德镇市":["昌江区","珠山区","浮梁县","乐平市"],"萍乡市":["安源区","湘东区","莲花县","上栗县","芦溪县"],"九江市":["濂溪区","浔阳区","柴桑区","武宁县","修水县","永修县","德安县","都昌县","湖口县","彭泽县","瑞昌市","共青城市","庐山市"],"新余市":["渝水区","分宜县"],"鹰潭市":["月湖区","余江区","贵溪市"],"赣州市":["章贡区","南康区","赣县区","信丰县","大余县","上犹县","崇义县","安远县","定南县","全南县","宁都县","于都县","兴国县","会昌县","寻乌县","石城县","瑞金市","龙南市"],"吉安市":["吉州区","青原区","吉安县","吉水县","峡江县","新干县","永丰县","泰和县","遂川县","万安县","安福县","永新县","井冈山市"],"宜春市":["袁州区","奉新县","万载县","上高县","宜丰县","靖安县","铜鼓县","丰城市","樟树市","高安市"],"抚州市":["临川区","东乡区","南城县","黎川县","南丰县","崇仁县","乐安县","宜黄县","金溪县","资溪县","广昌县"],"上饶市":["信州区","广丰区","广信区","玉山县","铅山县","横峰县","弋阳县","余干县","鄱阳县","万年县","婺源县","德兴市"]},"山东省":{"济南市":["历下区","市中区","槐荫区","天桥区","历城区","长清区","章丘区","济阳区","莱芜区","钢城区","平阴县","商河县","济南高新技术产业开发区"],"青岛市":["市南区","市北区","黄岛区","崂山区","李沧区","城阳区","即墨区","胶州市","平度市","莱西市"],"淄博市":["淄川区","张店区","博山区","临淄区","周村区","桓台县","高青县","沂源县"],"枣庄市":["市中区","薛城区","峄城区","台儿庄区","山亭区","滕州市"],"东营市":["东营区","河口区","垦利区","利津县","广饶县","东营经济技术开发区","东营港经济开发区"],"烟台市":["芝罘区","福山区","牟平区","莱山区","蓬莱区","烟台高新技术产业开发区","烟台经济技术开发区","龙口市","莱阳市","莱州市","招远市","栖霞市","海阳市"],"潍坊市":["潍城区","寒亭区","坊子区","奎文区","临朐县","昌乐县","潍坊滨海经济技术开发区","青州市","诸城市","寿光市","安丘市","高密市","昌邑市"],"济宁市":["任城区","兖州区","微山县","鱼台县","金乡县","嘉祥县","汶上县","泗水县","梁山县","济宁高新技术产业开发区","曲阜市","邹城市"],"泰安市":["泰山区","岱岳区","宁阳县","东平县","新泰市","肥城市"],"威海市":["环翠区","文登区","威海火炬高技术产业开发区","威海经济技术开发区","威海临港经济技术开发区","荣成市","乳山市"],"日照市":["东港区","岚山区","五莲县","莒县","日照经济技术开发区"],"临沂市":["兰山区","罗庄区","河东区","沂南县","郯城县","沂水县","兰陵县","费县","平邑县","莒南县","蒙阴县","临沭县","临沂高新技术产业开发区"],"德州市":["德城区","陵城区","宁津县","庆云县","临邑县","齐河县","平原县","夏津县","武城县","德州天衢新区","乐陵市","禹城市"],"聊城市":["东昌府区","茌平区","阳谷县","莘县","东阿县","冠县","高唐县","临清市"],"滨州市":["滨城区","沾化区","惠民县","阳信县","无棣县","博兴县","邹平市"],"菏泽市":["牡丹区","定陶区","曹县","单县","成武县","巨野县","郓城县","鄄城县","东明县","菏泽经济技术开发区","菏泽高新技术开发区"]},"河南省":{"郑州市":["中原区","二七区","管城回族区","金水区","上街区","惠济区","中牟县","郑州经济技术开发区","郑州高新技术产业开发区","郑州航空港经济综合实验区","巩义市","荥阳市","新密市","新郑市","登封市"],"开封市":["龙亭区","顺河回族区","鼓楼区","禹王台区","祥符区","杞县","通许县","尉氏县","兰考县"],"洛阳市":["老城区","西工区","瀍河回族区","涧西区","偃师区","孟津区","洛龙区","新安县","栾川县","嵩县","汝阳县","宜阳县","洛宁县","伊川县","洛阳高新技术产业开发区"],"平顶山市":["新华区","卫东区","石龙区","湛河区","宝丰县","叶县","鲁山县","郏县","平顶山高新技术产业开发区","平顶山市城乡一体化示范区","舞钢市","汝州市"],"安阳市":["文峰区","北关区","殷都区","龙安区","安阳县","汤阴县","滑县","内黄县","安阳高新技术产业开发区","林州市"],"鹤壁市":["鹤山区","山城区","淇滨区","浚县","淇县","鹤壁经济技术开发区"],"新乡市":["红旗区","卫滨区","凤泉区","牧野区","新乡县","获嘉县","原阳县","延津县","封丘县","新乡高新技术产业开发区","新乡经济技术开发区","新乡市平原城乡一体化示范区","卫辉市","辉县市","长垣市"],"焦作市":["解放区","中站区","马村区","山阳区","修武县","博爱县","武陟县","温县","焦作城乡一体化示范区","沁阳市","孟州市"],"濮阳市":["华龙区","清丰县","南乐县","范县","台前县","濮阳县","河南濮阳工业园区","濮阳经济技术开发区"],"许昌市":["魏都区","建安区","鄢陵县","襄城县","许昌经济技术开发区","禹州市","长葛市"],"漯河市":["源汇区","郾城区","召陵区","舞阳县","临颍县","漯河经济技术开发区"],"三门峡市":["湖滨区","陕州区","渑池县","卢氏县","河南三门峡经济开发区","义马市","灵宝市"],"南阳市":["宛城区","卧龙区","南召县","方城县","西峡县","镇平县","内乡县","淅川县","社旗县","唐河县","新野县","桐柏县","南阳高新技术产业开发区","南阳市城乡一体化示范区","邓州市"],"商丘市":["梁园区","睢阳区","民权县","睢县","宁陵县","柘城县","虞城县","夏邑县","豫东综合物流产业聚集区","河南商丘经济开发区","永城市"],"信阳市":["浉河区","平桥区","罗山县","光山县","新县","商城县","固始县","潢川县","淮滨县","息县","信阳高新技术产业开发区"],"周口市":["川汇区","淮阳区","扶沟县","西华县","商水县","沈丘县","郸城县","太康县","鹿邑县","周口临港开发区","项城市"],"驻马店市":["驿城区","西平县","上蔡县","平舆县","正阳县","确山县","泌阳县","汝南县","遂平县","新蔡县","河南驻马店经济开发区"],"省直辖县级行政区划":["济源市"]},"湖北省":{"武汉市":["江岸区","江汉区","硚口区","汉阳区","武昌区","青山区","洪山区","东西湖区","汉南区","蔡甸区","江夏区","黄陂区","新洲区"],"黄石市":["黄石港区","西塞山区","下陆区","铁山区","阳新县","大冶市"],"十堰市":["茅箭区","张湾区","郧阳区","郧西县","竹山县","竹溪县","房县","丹江口市"],"宜昌市":["西陵区","伍家岗区","点军区","猇亭区","夷陵区","远安县","兴山县","秭归县","长阳土家族自治县","五峰土家族自治县","宜都市","当阳市","枝江市"],"襄阳市":["襄城区","樊城区","襄州区","南漳县","谷城县","保康县","老河口市","枣阳市","宜城市"],"鄂州市":["梁子湖区","华容区","鄂城区"],"荆门市":["东宝区","掇刀区","沙洋县","钟祥市","京山市"],"孝感市":["孝南区","孝昌县","大悟县","云梦县","应城市","安陆市","汉川市"],"荆州市":["沙市区","荆州区","公安县","江陵县","荆州经济技术开发区","石首市","洪湖市","松滋市","监利市"],"黄冈市":["黄州区","团风县","红安县","罗田县","英山县","浠水县","蕲春县","黄梅县","龙感湖管理区","麻城市","武穴市"],"咸宁市":["咸安区","嘉鱼县","通城县","崇阳县","通山县","赤壁市"],"随州市":["曾都区","随县","广水市"],"恩施土家族苗族自治州":["恩施市","利川市","建始县","巴东县","宣恩县","咸丰县","来凤县","鹤峰县"],"省直辖县级行政区划":["仙桃市","潜江市","天门市","神农架林区"]},"湖南省":{"长沙市":["芙蓉区","天心区","岳麓区","开福区","雨花区","望城区","长沙县","浏阳市","宁乡市"],"株洲市":["荷塘区","芦淞区","石峰区","天元区","渌口区","攸县","茶陵县","炎陵县","醴陵市"],"湘潭市":["雨湖区","岳塘区","湘潭县","湖南湘潭高新技术产业园区","湘潭昭山示范区","湘潭九华示范区","湘乡市","韶山市"],"衡阳市":["珠晖区","雁峰区","石鼓区","蒸湘区","南岳区","衡阳县","衡南县","衡山县","衡东县","祁东县","湖南衡阳松木经济开发区","湖南衡阳高新技术产业园区","耒阳市","常宁市"],"邵阳市":["双清区","大祥区","北塔区","新邵县","邵阳县","隆回县","洞口县","绥宁县","新宁县","城步苗族自治县","武冈市","邵东市"],"岳阳市":["岳阳楼区","云溪区","君山区","岳阳县","华容县","湘阴县","平江县","岳阳市屈原管理区","汨罗市","临湘市"],"常德市":["武陵区","鼎城区","安乡县","汉寿县","澧县","临澧县","桃源县","石门县","常德市西洞庭管理区","津市市"],"张家界市":["永定区","武陵源区","慈利县","桑植县"],"益阳市":["资阳区","赫山区","南县","桃江县","安化县","益阳市大通湖管理区","湖南益阳高新技术产业园区","沅江市"],"郴州市":["北湖区","苏仙区","桂阳县","宜章县","永兴县","嘉禾县","临武县","汝城县","桂东县","安仁县","资兴市"],"永州市":["零陵区","冷水滩区","东安县","双牌县","道县","江永县","宁远县","蓝山县","新田县","江华瑶族自治县","永州经济技术开发区","永州市回龙圩管理区","祁阳市"],"怀化市":["鹤城区","中方县","沅陵县","辰溪县","溆浦县","会同县","麻阳苗族自治县","新晃侗族自治县","芷江侗族自治县","靖州苗族侗族自治县","通道侗族自治县","怀化市洪江管理区","洪江市"],"娄底市":["娄星区","双峰县","新化县","冷水江市","涟源市"],"湘西土家族苗族自治州":["吉首市","泸溪县","凤凰县","花垣县","保靖县","古丈县","永顺县","龙山县"]},"广东省":{"广州市":["荔湾区","越秀区","海珠区","天河区","白云区","黄埔区","番禺区","花都区","南沙区","从化区","增城区"],"韶关市":["武江区","浈江区","曲江区","始兴县","仁化县","翁源县","乳源瑶族自治县","新丰县","乐昌市","南雄市"],"深圳市":["罗湖区","福田区","南山区","宝安区","龙岗区","盐田区","龙华区","坪山区","光明区"],"珠海市":["香洲区","斗门区","金湾区"],"汕头市":["龙湖区","金平区","濠江区","潮阳区","潮南区","澄海区","南澳县"],"佛山市":["禅城区","南海区","顺德区","三水区","高明区"],"江门市":["蓬江区","江海区","新会区","台山市","开平市","鹤山市","恩平市"],"湛江市":["赤坎区","霞山区","坡头区","麻章区","遂溪县","徐闻县","廉江市","雷州市","吴川市"],"茂名市":["茂南区","电白区","高州市","化州市","信宜市"],"肇庆市":["端州区","鼎湖区","高要区","广宁县","怀集县","封开县","德庆县","四会市"],"惠州市":["惠城区","惠阳区","博罗县","惠东县","龙门县"],"梅州市":["梅江区","梅县区","大埔县","丰顺县","五华县","平远县","蕉岭县","兴宁市"],"汕尾市":["城区","海丰县","陆河县","陆丰市"],"河源市":["源城区","紫金县","龙川县","连平县","和平县","东源县"],"阳江市":["江城区","阳东区","阳西县","阳春市"],"清远市":["清城区","清新区","佛冈县","阳山县","连山壮族瑶族自治县","连南瑶族自治县","英德市","连州市"],"东莞市":["东城街道","南城街道","万江街道","莞城街道","石碣镇","石龙镇","茶山镇","石排镇","企石镇","横沥镇","桥头镇","谢岗镇","东坑镇","常平镇","寮步镇","樟木头镇","大朗镇","黄江镇","清溪镇","塘厦镇","凤岗镇","大岭山镇","长安镇","虎门镇","厚街镇","沙田镇","道滘镇","洪梅镇","麻涌镇","望牛墩镇","中堂镇","高埗镇","松山湖","东莞港","东莞生态园","东莞滨海湾新区"],"中山市":["石岐街道","东区街道","中山港街道","西区街道","南区街道","五桂山街道","民众街道","南朗街道","黄圃镇","东凤镇","古镇镇","沙溪镇","坦洲镇","港口镇","三角镇","横栏镇","南头镇","阜沙镇","三乡镇","板芙镇","大涌镇","神湾镇","小榄镇"],"潮州市":["湘桥区","潮安区","饶平县"],"揭阳市":["榕城区","揭东区","揭西县","惠来县","普宁市"],"云浮市":["云城区","云安区","新兴县","郁南县","罗定市"]},"广西壮族自治区":{"南宁市":["兴宁区","青秀区","江南区","西乡塘区","良庆区","邕宁区","武鸣区","隆安县","马山县","上林县","宾阳县","横州市"],"柳州市":["城中区","鱼峰区","柳南区","柳北区","柳江区","柳城县","鹿寨县","融安县","融水苗族自治县","三江侗族自治县"],"桂林市":["秀峰区","叠彩区","象山区","七星区","雁山区","临桂区","阳朔县","灵川县","全州县","兴安县","永福县","灌阳县","龙胜各族自治县","资源县","平乐县","恭城瑶族自治县","荔浦市"],"梧州市":["万秀区","长洲区","龙圩区","苍梧县","藤县","蒙山县","岑溪市"],"北海市":["海城区","银海区","铁山港区","合浦县"],"防城港市":["港口区","防城区","上思县","东兴市"],"钦州市":["钦南区","钦北区","灵山县","浦北县"],"贵港市":["港北区","港南区","覃塘区","平南县","桂平市"],"玉林市":["玉州区","福绵区","容县","陆川县","博白县","兴业县","北流市"],"百色市":["右江区","田阳区","田东县","德保县","那坡县","凌云县","乐业县","田林县","西林县","隆林各族自治县","靖西市","平果市"],"贺州市":["八步区","平桂区","昭平县","钟山县","富川瑶族自治县"],"河池市":["金城江区","宜州区","南丹县","天峨县","凤山县","东兰县","罗城仫佬族自治县","环江毛南族自治县","巴马瑶族自治县","都安瑶族自治县","大化瑶族自治县"],"来宾市":["兴宾区","忻城县","象州县","武宣县","金秀瑶族自治县","合山市"],"崇左市":["江州区","扶绥县","宁明县","龙州县","大新县","天等县","凭祥市"]},"海南省":{"海口市":["秀英区","龙华区","琼山区","美兰区"],"三亚市":["海棠区","吉阳区","天涯区","崖州区"],"三沙市":["西沙群岛","南沙群岛","中沙群岛的岛礁及其海域"],"儋州市":["那大镇","和庆镇","南丰镇","大成镇","雅星镇","兰洋镇","光村镇","木棠镇","海头镇","峨蔓镇","王五镇","白马井镇","中和镇","排浦镇","东成镇","新州镇","洋浦经济开发区","华南热作学院"],"省直辖县级行政区划":["五指山市","琼海市","文昌市","万宁市","东方市","定安县","屯昌县","澄迈县","临高县","白沙黎族自治县","昌江黎族自治县","乐东黎族自治县","陵水黎族自治县","保亭黎族苗族自治县","琼中黎族苗族自治县"]},"重庆市":{"市辖区":["万州区","涪陵区","渝中区","大渡口区","江北区","沙坪坝区","九龙坡区","南岸区","北碚区","綦江区","大足区","渝北区","巴南区","黔江区","长寿区","江津区","合川区","永川区","南川区","璧山区","铜梁区","潼南区","荣昌区","开州区","梁平区","武隆区"],"县":["城口县","丰都县","垫江县","忠县","云阳县","奉节县","巫山县","巫溪县","石柱土家族自治县","秀山土家族苗族自治县","酉阳土家族苗族自治县","彭水苗族土家族自治县"]},"四川省":{"成都市":["锦江区","青羊区","金牛区","武侯区","成华区","龙泉驿区","青白江区","新都区","温江区","双流区","郫都区","新津区","金堂县","大邑县","蒲江县","都江堰市","彭州市","邛崃市","崇州市","简阳市"],"自贡市":["自流井区","贡井区","大安区","沿滩区","荣县","富顺县"],"攀枝花市":["东区","西区","仁和区","米易县","盐边县"],"泸州市":["江阳区","纳溪区","龙马潭区","泸县","合江县","叙永县","古蔺县"],"德阳市":["旌阳区","罗江区","中江县","广汉市","什邡市","绵竹市"],"绵阳市":["涪城区","游仙区","安州区","三台县","盐亭县","梓潼县","北川羌族自治县","平武县","江油市"],"广元市":["利州区","昭化区","朝天区","旺苍县","青川县","剑阁县","苍溪县"],"遂宁市":["船山区","安居区","蓬溪县","大英县","射洪市"],"内江市":["市中区","东兴区","威远县","资中县","隆昌市"],"乐山市":["市中区","沙湾区","五通桥区","金口河区","犍为县","井研县","夹江县","沐川县","峨边彝族自治县","马边彝族自治县","峨眉山市"],"南充市":["顺庆区","高坪区","嘉陵区","南部县","营山县","蓬安县","仪陇县","西充县","阆中市"],"眉山市":["东坡区","彭山区","仁寿县","洪雅县","丹棱县","青神县"],"宜宾市":["翠屏区","南溪区","叙州区","江安县","长宁县","高县","珙县","筠连县","兴文县","屏山县"],"广安市":["广安区","前锋区","岳池县","武胜县","邻水县","华蓥市"],"达州市":["通川区","达川区","宣汉县","开江县","大竹县","渠县","万源市"],"雅安市":["雨城区","名山区","荥经县","汉源县","石棉县","天全县","芦山县","宝兴县"],"巴中市":["巴州区","恩阳区","通江县","南江县","平昌县"],"资阳市":["雁江区","安岳县","乐至县"],"阿坝藏族羌族自治州":["马尔康市","汶川县","理县","茂县","松潘县","九寨沟县","金川县","小金县","黑水县","壤塘县","阿坝县","若尔盖县","红原县"],"甘孜藏族自治州":["康定市","泸定县","丹巴县","九龙县","雅江县","道孚县","炉霍县","甘孜县","新龙县","德格县","白玉县","石渠县","色达县","理塘县","巴塘县","乡城县","稻城县","得荣县"],"凉山彝族自治州":["西昌市","会理市","木里藏族自治县","盐源县","德昌县","会东县","宁南县","普格县","布拖县","金阳县","昭觉县","喜德县","冕宁县","越西县","甘洛县","美姑县","雷波县"]},"贵州省":{"贵阳市":["南明区","云岩区","花溪区","乌当区","白云区","观山湖区","开阳县","息烽县","修文县","清镇市"],"六盘水市":["钟山区","六枝特区","水城区","盘州市"],"遵义市":["红花岗区","汇川区","播州区","桐梓县","绥阳县","正安县","道真仡佬族苗族自治县","务川仡佬族苗族自治县","凤冈县","湄潭县","余庆县","习水县","赤水市","仁怀市"],"安顺市":["西秀区","平坝区","普定县","镇宁布依族苗族自治县","关岭布依族苗族自治县","紫云苗族布依族自治县"],"毕节市":["七星关区","大方县","金沙县","织金县","纳雍县","威宁彝族回族苗族自治县","赫章县","黔西市"],"铜仁市":["碧江区","万山区","江口县","玉屏侗族自治县","石阡县","思南县","印江土家族苗族自治县","德江县","沿河土家族自治县","松桃苗族自治县"],"黔西南布依族苗族自治州":["兴义市","兴仁市","普安县","晴隆县","贞丰县","望谟县","册亨县","安龙县"],"黔东南苗族侗族自治州":["凯里市","黄平县","施秉县","三穗县","镇远县","岑巩县","天柱县","锦屏县","剑河县","台江县","黎平县","榕江县","从江县","雷山县","麻江县","丹寨县"],"黔南布依族苗族自治州":["都匀市","福泉市","荔波县","贵定县","瓮安县","独山县","平塘县","罗甸县","长顺县","龙里县","惠水县","三都水族自治县"]},"云南省":{"昆明市":["五华区","盘龙区","官渡区","西山区","东川区","呈贡区","晋宁区","富民县","宜良县","石林彝族自治县","嵩明县","禄劝彝族苗族自治县","寻甸回族彝族自治县","安宁市"],"曲靖市":["麒麟区","沾益区","马龙区","陆良县","师宗县","罗平县","富源县","会泽县","宣威市"],"玉溪市":["红塔区","江川区","通海县","华宁县","易门县","峨山彝族自治县","新平彝族傣族自治县","元江哈尼族彝族傣族自治县","澄江市"],"保山市":["隆阳区","施甸县","龙陵县","昌宁县","腾冲市"],"昭通市":["昭阳区","鲁甸县","巧家县","盐津县","大关县","永善县","绥江县","镇雄县","彝良县","威信县","水富市"],"丽江市":["古城区","玉龙纳西族自治县","永胜县","华坪县","宁蒗彝族自治县"],"普洱市":["思茅区","宁洱哈尼族彝族自治县","墨江哈尼族自治县","景东彝族自治县","景谷傣族彝族自治县","镇沅彝族哈尼族拉祜族自治县","江城哈尼族彝族自治县","孟连傣族拉祜族佤族自治县","澜沧拉祜族自治县","西盟佤族自治县"],"临沧市":["临翔区","凤庆县","云县","永德县","镇康县","双江拉祜族佤族布朗族傣族自治县","耿马傣族佤族自治县","沧源佤族自治县"],"楚雄彝族自治州":["楚雄市","禄丰市","双柏县","牟定县","南华县","姚安县","大姚县","永仁县","元谋县","武定县"],"红河哈尼族彝族自治州":["个旧市","开远市","蒙自市","弥勒市","屏边苗族自治县","建水县","石屏县","泸西县","元阳县","红河县","金平苗族瑶族傣族自治县","绿春县","河口瑶族自治县"],"文山壮族苗族自治州":["文山市","砚山县","西畴县","麻栗坡县","马关县","丘北县","广南县","富宁县"],"西双版纳傣族自治州":["景洪市","勐海县","勐腊县"],"大理白族自治州":["大理市","漾濞彝族自治县","祥云县","宾川县","弥渡县","南涧彝族自治县","巍山彝族回族自治县","永平县","云龙县","洱源县","剑川县","鹤庆县"],"德宏傣族景颇族自治州":["瑞丽市","芒市","梁河县","盈江县","陇川县"],"怒江傈僳族自治州":["泸水市","福贡县","贡山独龙族怒族自治县","兰坪白族普米族自治县"],"迪庆藏族自治州":["香格里拉市","德钦县","维西傈僳族自治县"]},"西藏自治区":{"拉萨市":["城关区","堆龙德庆区","达孜区","林周县","当雄县","尼木县","曲水县","墨竹工卡县","格尔木藏青工业园区","拉萨经济技术开发区","西藏文化旅游创意园区","达孜工业园区"],"日喀则市":["桑珠孜区","南木林县","江孜县","定日县","萨迦县","拉孜县","昂仁县","谢通门县","白朗县","仁布县","康马县","定结县","仲巴县","亚东县","吉隆县","聂拉木县","萨嘎县","岗巴县"],"昌都市":["卡若区","江达县","贡觉县","类乌齐县","丁青县","察雅县","八宿县","左贡县","芒康县","洛隆县","边坝县"],"林芝市":["巴宜区","工布江达县","墨脱县","波密县","察隅县","朗县","米林市"],"山南市":["乃东区","扎囊县","贡嘎县","桑日县","琼结县","曲松县","措美县","洛扎县","加查县","隆子县","浪卡子县","错那市"],"那曲市":["色尼区","嘉黎县","比如县","聂荣县","安多县","申扎县","索县","班戈县","巴青县","尼玛县","双湖县"],"阿里地区":["普兰县","札达县","噶尔县","日土县","革吉县","改则县","措勤县"]},"陕西省":{"西安市":["新城区","碑林区","莲湖区","灞桥区","未央区","雁塔区","阎良区","临潼区","长安区","高陵区","鄠邑区","蓝田县","周至县"],"铜川市":["王益区","印台区","耀州区","宜君县"],"宝鸡市":["渭滨区","金台区","陈仓区","凤翔区","岐山县","扶风县","眉县","陇县","千阳县","麟游县","凤县","太白县"],"咸阳市":["秦都区","杨陵区","渭城区","三原县","泾阳县","乾县","礼泉县","永寿县","长武县","旬邑县","淳化县","武功县","兴平市","彬州市"],"渭南市":["临渭区","华州区","潼关县","大荔县","合阳县","澄城县","蒲城县","白水县","富平县","韩城市","华阴市"],"延安市":["宝塔区","安塞区","延长县","延川县","志丹县","吴起县","甘泉县","富县","洛川县","宜川县","黄龙县","黄陵县","子长市"],"汉中市":["汉台区","南郑区","城固县","洋县","西乡县","勉县","宁强县","略阳县","镇巴县","留坝县","佛坪县"],"榆林市":["榆阳区","横山区","府谷县","靖边县","定边县","绥德县","米脂县","佳县","吴堡县","清涧县","子洲县","神木市"],"安康市":["汉滨区","汉阴县","石泉县","宁陕县","紫阳县","岚皋县","平利县","镇坪县","白河县","旬阳市"],"商洛市":["商州区","洛南县","丹凤县","商南县","山阳县","镇安县","柞水县"]},"甘肃省":{"兰州市":["城关区","七里河区","西固区","安宁区","红古区","永登县","皋兰县","榆中县","兰州新区"],"嘉峪关市":["雄关街道","钢城街道","新城镇","峪泉镇","文殊镇"],"金昌市":["金川区","永昌县"],"白银市":["白银区","平川区","靖远县","会宁县","景泰县"],"天水市":["秦州区","麦积区","清水县","秦安县","甘谷县","武山县","张家川回族自治县"],"武威市":["凉州区","民勤县","古浪县","天祝藏族自治县"],"张掖市":["甘州区","肃南裕固族自治县","民乐县","临泽县","高台县","山丹县"],"平凉市":["崆峒区","泾川县","灵台县","崇信县","庄浪县","静宁县","华亭市"],"酒泉市":["肃州区","金塔县","瓜州县","肃北蒙古族自治县","阿克塞哈萨克族自治县","玉门市","敦煌市"],"庆阳市":["西峰区","庆城县","环县","华池县","合水县","正宁县","宁县","镇原县"],"定西市":["安定区","通渭县","陇西县","渭源县","临洮县","漳县","岷县"],"陇南市":["武都区","成县","文县","宕昌县","康县","西和县","礼县","徽县","两当县"],"临夏回族自治州":["临夏市","临夏县","康乐县","永靖县","广河县","和政县","东乡族自治县","积石山保安族东乡族撒拉族自治县"],"甘南藏族自治州":["合作市","临潭县","卓尼县","舟曲县","迭部县","玛曲县","碌曲县","夏河县"]},"青海省":{"西宁市":["城东区","城中区","城西区","城北区","湟中区","大通回族土族自治县","湟源县"],"海东市":["乐都区","平安区","民和回族土族自治县","互助土族自治县","化隆回族自治县","循化撒拉族自治县"],"海北藏族自治州":["门源回族自治县","祁连县","海晏县","刚察县"],"黄南藏族自治州":["同仁市","尖扎县","泽库县","河南蒙古族自治县"],"海南藏族自治州":["共和县","同德县","贵德县","兴海县","贵南县"],"果洛藏族自治州":["玛沁县","班玛县","甘德县","达日县","久治县","玛多县"],"玉树藏族自治州":["玉树市","杂多县","称多县","治多县","囊谦县","曲麻莱县"],"海西蒙古族藏族自治州":["格尔木市","德令哈市","茫崖市","乌兰县","都兰县","天峻县","大柴旦行政委员会"]},"宁夏回族自治区":{"银川市":["兴庆区","西夏区","金凤区","永宁县","贺兰县","灵武市"],"石嘴山市":["大武口区","惠农区","平罗县"],"吴忠市":["利通区","红寺堡区","盐池县","同心县","青铜峡市"],"固原市":["原州区","西吉县","隆德县","泾源县","彭阳县"],"中卫市":["沙坡头区","中宁县","海原县"]},"新疆维吾尔自治区":{"乌鲁木齐市":["天山区","沙依巴克区","新市区","水磨沟区","头屯河区","达坂城区","米东区","乌鲁木齐县"],"克拉玛依市":["独山子区","克拉玛依区","白碱滩区","乌尔禾区"],"吐鲁番市":["高昌区","鄯善县","托克逊县"],"哈密市":["伊州区","巴里坤哈萨克自治县","伊吾县"],"昌吉回族自治州":["昌吉市","阜康市","呼图壁县","玛纳斯县","奇台县","吉木萨尔县","木垒哈萨克自治县"],"博尔塔拉蒙古自治州":["博乐市","阿拉山口市","精河县","温泉县"],"巴音郭楞蒙古自治州":["库尔勒市","轮台县","尉犁县","若羌县","且末县","焉耆回族自治县","和静县","和硕县","博湖县"],"阿克苏地区":["阿克苏市","库车市","温宿县","沙雅县","新和县","拜城县","乌什县","阿瓦提县","柯坪县"],"克孜勒苏柯尔克孜自治州":["阿图什市","阿克陶县","阿合奇县","乌恰县"],"喀什地区":["喀什市","疏附县","疏勒县","英吉沙县","泽普县","莎车县","叶城县","麦盖提县","岳普湖县","伽师县","巴楚县","塔什库尔干塔吉克自治县"],"和田地区":["和田市","和田县","墨玉县","皮山县","洛浦县","策勒县","于田县","民丰县"],"伊犁哈萨克自治州":["伊宁市","奎屯市","霍尔果斯市","伊宁县","察布查尔锡伯自治县","霍城县","巩留县","新源县","昭苏县","特克斯县","尼勒克县"],"塔城地区":["塔城市","乌苏市","沙湾市","额敏县","托里县","裕民县","和布克赛尔蒙古自治县"],"阿勒泰地区":["阿勒泰市","布尔津县","富蕴县","福海县","哈巴河县","青河县","吉木乃县"],"自治区直辖县级行政区划":["石河子市","阿拉尔市","图木舒克市","五家渠市","北屯市","铁门关市","双河市","可克达拉市","昆玉市","胡杨河市","新星市","白杨市"]}} \ No newline at end of file diff --git a/src/后端/src/main/java/com/softegg/freetogo/HeatMap/service/city.json b/src/后端/src/main/java/com/softegg/freetogo/HeatMap/service/city.json deleted file mode 100644 index 114bbee..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/HeatMap/service/city.json +++ /dev/null @@ -1,10709 +0,0 @@ -[{ - "code": "11", - "name": "北京市", - "children": [{ - "code": "1101", - "name": "市辖区", - "children": [{ - "code": "110101", - "name": "东城区" - }, { - "code": "110102", - "name": "西城区" - }, { - "code": "110105", - "name": "朝阳区" - }, { - "code": "110106", - "name": "丰台区" - }, { - "code": "110107", - "name": "石景山区" - }, { - "code": "110108", - "name": "海淀区" - }, { - "code": "110109", - "name": "门头沟区" - }, { - "code": "110111", - "name": "房山区" - }, { - "code": "110112", - "name": "通州区" - }, { - "code": "110113", - "name": "顺义区" - }, { - "code": "110114", - "name": "昌平区" - }, { - "code": "110115", - "name": "大兴区" - }, { - "code": "110116", - "name": "怀柔区" - }, { - "code": "110117", - "name": "平谷区" - }, { - "code": "110118", - "name": "密云区" - }, { - "code": "110119", - "name": "延庆区" - }] - }] -}, { - "code": "12", - "name": "天津市", - "children": [{ - "code": "1201", - "name": "市辖区", - "children": [{ - "code": "120101", - "name": "和平区" - }, { - "code": "120102", - "name": "河东区" - }, { - "code": "120103", - "name": "河西区" - }, { - "code": "120104", - "name": "南开区" - }, { - "code": "120105", - "name": "河北区" - }, { - "code": "120106", - "name": "红桥区" - }, { - "code": "120110", - "name": "东丽区" - }, { - "code": "120111", - "name": "西青区" - }, { - "code": "120112", - "name": "津南区" - }, { - "code": "120113", - "name": "北辰区" - }, { - "code": "120114", - "name": "武清区" - }, { - "code": "120115", - "name": "宝坻区" - }, { - "code": "120116", - "name": "滨海新区" - }, { - "code": "120117", - "name": "宁河区" - }, { - "code": "120118", - "name": "静海区" - }, { - "code": "120119", - "name": "蓟州区" - }] - }] -}, { - "code": "13", - "name": "河北省", - "children": [{ - "code": "1301", - "name": "石家庄市", - "children": [{ - "code": "130102", - "name": "长安区" - }, { - "code": "130104", - "name": "桥西区" - }, { - "code": "130105", - "name": "新华区" - }, { - "code": "130107", - "name": "井陉矿区" - }, { - "code": "130108", - "name": "裕华区" - }, { - "code": "130109", - "name": "藁城区" - }, { - "code": "130110", - "name": "鹿泉区" - }, { - "code": "130111", - "name": "栾城区" - }, { - "code": "130121", - "name": "井陉县" - }, { - "code": "130123", - "name": "正定县" - }, { - "code": "130125", - "name": "行唐县" - }, { - "code": "130126", - "name": "灵寿县" - }, { - "code": "130127", - "name": "高邑县" - }, { - "code": "130128", - "name": "深泽县" - }, { - "code": "130129", - "name": "赞皇县" - }, { - "code": "130130", - "name": "无极县" - }, { - "code": "130131", - "name": "平山县" - }, { - "code": "130132", - "name": "元氏县" - }, { - "code": "130133", - "name": "赵县" - }, { - "code": "130171", - "name": "石家庄高新技术产业开发区" - }, { - "code": "130172", - "name": "石家庄循环化工园区" - }, { - "code": "130181", - "name": "辛集市" - }, { - "code": "130183", - "name": "晋州市" - }, { - "code": "130184", - "name": "新乐市" - }] - }, { - "code": "1302", - "name": "唐山市", - "children": [{ - "code": "130202", - "name": "路南区" - }, { - "code": "130203", - "name": "路北区" - }, { - "code": "130204", - "name": "古冶区" - }, { - "code": "130205", - "name": "开平区" - }, { - "code": "130207", - "name": "丰南区" - }, { - "code": "130208", - "name": "丰润区" - }, { - "code": "130209", - "name": "曹妃甸区" - }, { - "code": "130224", - "name": "滦南县" - }, { - "code": "130225", - "name": "乐亭县" - }, { - "code": "130227", - "name": "迁西县" - }, { - "code": "130229", - "name": "玉田县" - }, { - "code": "130271", - "name": "河北唐山芦台经济开发区" - }, { - "code": "130272", - "name": "唐山市汉沽管理区" - }, { - "code": "130273", - "name": "唐山高新技术产业开发区" - }, { - "code": "130274", - "name": "河北唐山海港经济开发区" - }, { - "code": "130281", - "name": "遵化市" - }, { - "code": "130283", - "name": "迁安市" - }, { - "code": "130284", - "name": "滦州市" - }] - }, { - "code": "1303", - "name": "秦皇岛市", - "children": [{ - "code": "130302", - "name": "海港区" - }, { - "code": "130303", - "name": "山海关区" - }, { - "code": "130304", - "name": "北戴河区" - }, { - "code": "130306", - "name": "抚宁区" - }, { - "code": "130321", - "name": "青龙满族自治县" - }, { - "code": "130322", - "name": "昌黎县" - }, { - "code": "130324", - "name": "卢龙县" - }, { - "code": "130371", - "name": "秦皇岛市经济技术开发区" - }, { - "code": "130372", - "name": "北戴河新区" - }] - }, { - "code": "1304", - "name": "邯郸市", - "children": [{ - "code": "130402", - "name": "邯山区" - }, { - "code": "130403", - "name": "丛台区" - }, { - "code": "130404", - "name": "复兴区" - }, { - "code": "130406", - "name": "峰峰矿区" - }, { - "code": "130407", - "name": "肥乡区" - }, { - "code": "130408", - "name": "永年区" - }, { - "code": "130423", - "name": "临漳县" - }, { - "code": "130424", - "name": "成安县" - }, { - "code": "130425", - "name": "大名县" - }, { - "code": "130426", - "name": "涉县" - }, { - "code": "130427", - "name": "磁县" - }, { - "code": "130430", - "name": "邱县" - }, { - "code": "130431", - "name": "鸡泽县" - }, { - "code": "130432", - "name": "广平县" - }, { - "code": "130433", - "name": "馆陶县" - }, { - "code": "130434", - "name": "魏县" - }, { - "code": "130435", - "name": "曲周县" - }, { - "code": "130471", - "name": "邯郸经济技术开发区" - }, { - "code": "130473", - "name": "邯郸冀南新区" - }, { - "code": "130481", - "name": "武安市" - }] - }, { - "code": "1305", - "name": "邢台市", - "children": [{ - "code": "130502", - "name": "襄都区" - }, { - "code": "130503", - "name": "信都区" - }, { - "code": "130505", - "name": "任泽区" - }, { - "code": "130506", - "name": "南和区" - }, { - "code": "130522", - "name": "临城县" - }, { - "code": "130523", - "name": "内丘县" - }, { - "code": "130524", - "name": "柏乡县" - }, { - "code": "130525", - "name": "隆尧县" - }, { - "code": "130528", - "name": "宁晋县" - }, { - "code": "130529", - "name": "巨鹿县" - }, { - "code": "130530", - "name": "新河县" - }, { - "code": "130531", - "name": "广宗县" - }, { - "code": "130532", - "name": "平乡县" - }, { - "code": "130533", - "name": "威县" - }, { - "code": "130534", - "name": "清河县" - }, { - "code": "130535", - "name": "临西县" - }, { - "code": "130571", - "name": "河北邢台经济开发区" - }, { - "code": "130581", - "name": "南宫市" - }, { - "code": "130582", - "name": "沙河市" - }] - }, { - "code": "1306", - "name": "保定市", - "children": [{ - "code": "130602", - "name": "竞秀区" - }, { - "code": "130606", - "name": "莲池区" - }, { - "code": "130607", - "name": "满城区" - }, { - "code": "130608", - "name": "清苑区" - }, { - "code": "130609", - "name": "徐水区" - }, { - "code": "130623", - "name": "涞水县" - }, { - "code": "130624", - "name": "阜平县" - }, { - "code": "130626", - "name": "定兴县" - }, { - "code": "130627", - "name": "唐县" - }, { - "code": "130628", - "name": "高阳县" - }, { - "code": "130629", - "name": "容城县" - }, { - "code": "130630", - "name": "涞源县" - }, { - "code": "130631", - "name": "望都县" - }, { - "code": "130632", - "name": "安新县" - }, { - "code": "130633", - "name": "易县" - }, { - "code": "130634", - "name": "曲阳县" - }, { - "code": "130635", - "name": "蠡县" - }, { - "code": "130636", - "name": "顺平县" - }, { - "code": "130637", - "name": "博野县" - }, { - "code": "130638", - "name": "雄县" - }, { - "code": "130671", - "name": "保定高新技术产业开发区" - }, { - "code": "130672", - "name": "保定白沟新城" - }, { - "code": "130681", - "name": "涿州市" - }, { - "code": "130682", - "name": "定州市" - }, { - "code": "130683", - "name": "安国市" - }, { - "code": "130684", - "name": "高碑店市" - }] - }, { - "code": "1307", - "name": "张家口市", - "children": [{ - "code": "130702", - "name": "桥东区" - }, { - "code": "130703", - "name": "桥西区" - }, { - "code": "130705", - "name": "宣化区" - }, { - "code": "130706", - "name": "下花园区" - }, { - "code": "130708", - "name": "万全区" - }, { - "code": "130709", - "name": "崇礼区" - }, { - "code": "130722", - "name": "张北县" - }, { - "code": "130723", - "name": "康保县" - }, { - "code": "130724", - "name": "沽源县" - }, { - "code": "130725", - "name": "尚义县" - }, { - "code": "130726", - "name": "蔚县" - }, { - "code": "130727", - "name": "阳原县" - }, { - "code": "130728", - "name": "怀安县" - }, { - "code": "130730", - "name": "怀来县" - }, { - "code": "130731", - "name": "涿鹿县" - }, { - "code": "130732", - "name": "赤城县" - }, { - "code": "130771", - "name": "张家口经济开发区" - }, { - "code": "130772", - "name": "张家口市察北管理区" - }, { - "code": "130773", - "name": "张家口市塞北管理区" - }] - }, { - "code": "1308", - "name": "承德市", - "children": [{ - "code": "130802", - "name": "双桥区" - }, { - "code": "130803", - "name": "双滦区" - }, { - "code": "130804", - "name": "鹰手营子矿区" - }, { - "code": "130821", - "name": "承德县" - }, { - "code": "130822", - "name": "兴隆县" - }, { - "code": "130824", - "name": "滦平县" - }, { - "code": "130825", - "name": "隆化县" - }, { - "code": "130826", - "name": "丰宁满族自治县" - }, { - "code": "130827", - "name": "宽城满族自治县" - }, { - "code": "130828", - "name": "围场满族蒙古族自治县" - }, { - "code": "130871", - "name": "承德高新技术产业开发区" - }, { - "code": "130881", - "name": "平泉市" - }] - }, { - "code": "1309", - "name": "沧州市", - "children": [{ - "code": "130902", - "name": "新华区" - }, { - "code": "130903", - "name": "运河区" - }, { - "code": "130921", - "name": "沧县" - }, { - "code": "130922", - "name": "青县" - }, { - "code": "130923", - "name": "东光县" - }, { - "code": "130924", - "name": "海兴县" - }, { - "code": "130925", - "name": "盐山县" - }, { - "code": "130926", - "name": "肃宁县" - }, { - "code": "130927", - "name": "南皮县" - }, { - "code": "130928", - "name": "吴桥县" - }, { - "code": "130929", - "name": "献县" - }, { - "code": "130930", - "name": "孟村回族自治县" - }, { - "code": "130971", - "name": "河北沧州经济开发区" - }, { - "code": "130972", - "name": "沧州高新技术产业开发区" - }, { - "code": "130973", - "name": "沧州渤海新区" - }, { - "code": "130981", - "name": "泊头市" - }, { - "code": "130982", - "name": "任丘市" - }, { - "code": "130983", - "name": "黄骅市" - }, { - "code": "130984", - "name": "河间市" - }] - }, { - "code": "1310", - "name": "廊坊市", - "children": [{ - "code": "131002", - "name": "安次区" - }, { - "code": "131003", - "name": "广阳区" - }, { - "code": "131022", - "name": "固安县" - }, { - "code": "131023", - "name": "永清县" - }, { - "code": "131024", - "name": "香河县" - }, { - "code": "131025", - "name": "大城县" - }, { - "code": "131026", - "name": "文安县" - }, { - "code": "131028", - "name": "大厂回族自治县" - }, { - "code": "131071", - "name": "廊坊经济技术开发区" - }, { - "code": "131081", - "name": "霸州市" - }, { - "code": "131082", - "name": "三河市" - }] - }, { - "code": "1311", - "name": "衡水市", - "children": [{ - "code": "131102", - "name": "桃城区" - }, { - "code": "131103", - "name": "冀州区" - }, { - "code": "131121", - "name": "枣强县" - }, { - "code": "131122", - "name": "武邑县" - }, { - "code": "131123", - "name": "武强县" - }, { - "code": "131124", - "name": "饶阳县" - }, { - "code": "131125", - "name": "安平县" - }, { - "code": "131126", - "name": "故城县" - }, { - "code": "131127", - "name": "景县" - }, { - "code": "131128", - "name": "阜城县" - }, { - "code": "131171", - "name": "河北衡水高新技术产业开发区" - }, { - "code": "131172", - "name": "衡水滨湖新区" - }, { - "code": "131182", - "name": "深州市" - }] - }] -}, { - "code": "14", - "name": "山西省", - "children": [{ - "code": "1401", - "name": "太原市", - "children": [{ - "code": "140105", - "name": "小店区" - }, { - "code": "140106", - "name": "迎泽区" - }, { - "code": "140107", - "name": "杏花岭区" - }, { - "code": "140108", - "name": "尖草坪区" - }, { - "code": "140109", - "name": "万柏林区" - }, { - "code": "140110", - "name": "晋源区" - }, { - "code": "140121", - "name": "清徐县" - }, { - "code": "140122", - "name": "阳曲县" - }, { - "code": "140123", - "name": "娄烦县" - }, { - "code": "140171", - "name": "山西转型综合改革示范区" - }, { - "code": "140181", - "name": "古交市" - }] - }, { - "code": "1402", - "name": "大同市", - "children": [{ - "code": "140212", - "name": "新荣区" - }, { - "code": "140213", - "name": "平城区" - }, { - "code": "140214", - "name": "云冈区" - }, { - "code": "140215", - "name": "云州区" - }, { - "code": "140221", - "name": "阳高县" - }, { - "code": "140222", - "name": "天镇县" - }, { - "code": "140223", - "name": "广灵县" - }, { - "code": "140224", - "name": "灵丘县" - }, { - "code": "140225", - "name": "浑源县" - }, { - "code": "140226", - "name": "左云县" - }, { - "code": "140271", - "name": "山西大同经济开发区" - }] - }, { - "code": "1403", - "name": "阳泉市", - "children": [{ - "code": "140302", - "name": "城区" - }, { - "code": "140303", - "name": "矿区" - }, { - "code": "140311", - "name": "郊区" - }, { - "code": "140321", - "name": "平定县" - }, { - "code": "140322", - "name": "盂县" - }] - }, { - "code": "1404", - "name": "长治市", - "children": [{ - "code": "140403", - "name": "潞州区" - }, { - "code": "140404", - "name": "上党区" - }, { - "code": "140405", - "name": "屯留区" - }, { - "code": "140406", - "name": "潞城区" - }, { - "code": "140423", - "name": "襄垣县" - }, { - "code": "140425", - "name": "平顺县" - }, { - "code": "140426", - "name": "黎城县" - }, { - "code": "140427", - "name": "壶关县" - }, { - "code": "140428", - "name": "长子县" - }, { - "code": "140429", - "name": "武乡县" - }, { - "code": "140430", - "name": "沁县" - }, { - "code": "140431", - "name": "沁源县" - }, { - "code": "140471", - "name": "山西长治高新技术产业园区" - }] - }, { - "code": "1405", - "name": "晋城市", - "children": [{ - "code": "140502", - "name": "城区" - }, { - "code": "140521", - "name": "沁水县" - }, { - "code": "140522", - "name": "阳城县" - }, { - "code": "140524", - "name": "陵川县" - }, { - "code": "140525", - "name": "泽州县" - }, { - "code": "140581", - "name": "高平市" - }] - }, { - "code": "1406", - "name": "朔州市", - "children": [{ - "code": "140602", - "name": "朔城区" - }, { - "code": "140603", - "name": "平鲁区" - }, { - "code": "140621", - "name": "山阴县" - }, { - "code": "140622", - "name": "应县" - }, { - "code": "140623", - "name": "右玉县" - }, { - "code": "140671", - "name": "山西朔州经济开发区" - }, { - "code": "140681", - "name": "怀仁市" - }] - }, { - "code": "1407", - "name": "晋中市", - "children": [{ - "code": "140702", - "name": "榆次区" - }, { - "code": "140703", - "name": "太谷区" - }, { - "code": "140721", - "name": "榆社县" - }, { - "code": "140722", - "name": "左权县" - }, { - "code": "140723", - "name": "和顺县" - }, { - "code": "140724", - "name": "昔阳县" - }, { - "code": "140725", - "name": "寿阳县" - }, { - "code": "140727", - "name": "祁县" - }, { - "code": "140728", - "name": "平遥县" - }, { - "code": "140729", - "name": "灵石县" - }, { - "code": "140781", - "name": "介休市" - }] - }, { - "code": "1408", - "name": "运城市", - "children": [{ - "code": "140802", - "name": "盐湖区" - }, { - "code": "140821", - "name": "临猗县" - }, { - "code": "140822", - "name": "万荣县" - }, { - "code": "140823", - "name": "闻喜县" - }, { - "code": "140824", - "name": "稷山县" - }, { - "code": "140825", - "name": "新绛县" - }, { - "code": "140826", - "name": "绛县" - }, { - "code": "140827", - "name": "垣曲县" - }, { - "code": "140828", - "name": "夏县" - }, { - "code": "140829", - "name": "平陆县" - }, { - "code": "140830", - "name": "芮城县" - }, { - "code": "140881", - "name": "永济市" - }, { - "code": "140882", - "name": "河津市" - }] - }, { - "code": "1409", - "name": "忻州市", - "children": [{ - "code": "140902", - "name": "忻府区" - }, { - "code": "140921", - "name": "定襄县" - }, { - "code": "140922", - "name": "五台县" - }, { - "code": "140923", - "name": "代县" - }, { - "code": "140924", - "name": "繁峙县" - }, { - "code": "140925", - "name": "宁武县" - }, { - "code": "140926", - "name": "静乐县" - }, { - "code": "140927", - "name": "神池县" - }, { - "code": "140928", - "name": "五寨县" - }, { - "code": "140929", - "name": "岢岚县" - }, { - "code": "140930", - "name": "河曲县" - }, { - "code": "140931", - "name": "保德县" - }, { - "code": "140932", - "name": "偏关县" - }, { - "code": "140971", - "name": "五台山风景名胜区" - }, { - "code": "140981", - "name": "原平市" - }] - }, { - "code": "1410", - "name": "临汾市", - "children": [{ - "code": "141002", - "name": "尧都区" - }, { - "code": "141021", - "name": "曲沃县" - }, { - "code": "141022", - "name": "翼城县" - }, { - "code": "141023", - "name": "襄汾县" - }, { - "code": "141024", - "name": "洪洞县" - }, { - "code": "141025", - "name": "古县" - }, { - "code": "141026", - "name": "安泽县" - }, { - "code": "141027", - "name": "浮山县" - }, { - "code": "141028", - "name": "吉县" - }, { - "code": "141029", - "name": "乡宁县" - }, { - "code": "141030", - "name": "大宁县" - }, { - "code": "141031", - "name": "隰县" - }, { - "code": "141032", - "name": "永和县" - }, { - "code": "141033", - "name": "蒲县" - }, { - "code": "141034", - "name": "汾西县" - }, { - "code": "141081", - "name": "侯马市" - }, { - "code": "141082", - "name": "霍州市" - }] - }, { - "code": "1411", - "name": "吕梁市", - "children": [{ - "code": "141102", - "name": "离石区" - }, { - "code": "141121", - "name": "文水县" - }, { - "code": "141122", - "name": "交城县" - }, { - "code": "141123", - "name": "兴县" - }, { - "code": "141124", - "name": "临县" - }, { - "code": "141125", - "name": "柳林县" - }, { - "code": "141126", - "name": "石楼县" - }, { - "code": "141127", - "name": "岚县" - }, { - "code": "141128", - "name": "方山县" - }, { - "code": "141129", - "name": "中阳县" - }, { - "code": "141130", - "name": "交口县" - }, { - "code": "141181", - "name": "孝义市" - }, { - "code": "141182", - "name": "汾阳市" - }] - }] -}, { - "code": "15", - "name": "内蒙古自治区", - "children": [{ - "code": "1501", - "name": "呼和浩特市", - "children": [{ - "code": "150102", - "name": "新城区" - }, { - "code": "150103", - "name": "回民区" - }, { - "code": "150104", - "name": "玉泉区" - }, { - "code": "150105", - "name": "赛罕区" - }, { - "code": "150121", - "name": "土默特左旗" - }, { - "code": "150122", - "name": "托克托县" - }, { - "code": "150123", - "name": "和林格尔县" - }, { - "code": "150124", - "name": "清水河县" - }, { - "code": "150125", - "name": "武川县" - }, { - "code": "150172", - "name": "呼和浩特经济技术开发区" - }] - }, { - "code": "1502", - "name": "包头市", - "children": [{ - "code": "150202", - "name": "东河区" - }, { - "code": "150203", - "name": "昆都仑区" - }, { - "code": "150204", - "name": "青山区" - }, { - "code": "150205", - "name": "石拐区" - }, { - "code": "150206", - "name": "白云鄂博矿区" - }, { - "code": "150207", - "name": "九原区" - }, { - "code": "150221", - "name": "土默特右旗" - }, { - "code": "150222", - "name": "固阳县" - }, { - "code": "150223", - "name": "达尔罕茂明安联合旗" - }, { - "code": "150271", - "name": "包头稀土高新技术产业开发区" - }] - }, { - "code": "1503", - "name": "乌海市", - "children": [{ - "code": "150302", - "name": "海勃湾区" - }, { - "code": "150303", - "name": "海南区" - }, { - "code": "150304", - "name": "乌达区" - }] - }, { - "code": "1504", - "name": "赤峰市", - "children": [{ - "code": "150402", - "name": "红山区" - }, { - "code": "150403", - "name": "元宝山区" - }, { - "code": "150404", - "name": "松山区" - }, { - "code": "150421", - "name": "阿鲁科尔沁旗" - }, { - "code": "150422", - "name": "巴林左旗" - }, { - "code": "150423", - "name": "巴林右旗" - }, { - "code": "150424", - "name": "林西县" - }, { - "code": "150425", - "name": "克什克腾旗" - }, { - "code": "150426", - "name": "翁牛特旗" - }, { - "code": "150428", - "name": "喀喇沁旗" - }, { - "code": "150429", - "name": "宁城县" - }, { - "code": "150430", - "name": "敖汉旗" - }] - }, { - "code": "1505", - "name": "通辽市", - "children": [{ - "code": "150502", - "name": "科尔沁区" - }, { - "code": "150521", - "name": "科尔沁左翼中旗" - }, { - "code": "150522", - "name": "科尔沁左翼后旗" - }, { - "code": "150523", - "name": "开鲁县" - }, { - "code": "150524", - "name": "库伦旗" - }, { - "code": "150525", - "name": "奈曼旗" - }, { - "code": "150526", - "name": "扎鲁特旗" - }, { - "code": "150571", - "name": "通辽经济技术开发区" - }, { - "code": "150581", - "name": "霍林郭勒市" - }] - }, { - "code": "1506", - "name": "鄂尔多斯市", - "children": [{ - "code": "150602", - "name": "东胜区" - }, { - "code": "150603", - "name": "康巴什区" - }, { - "code": "150621", - "name": "达拉特旗" - }, { - "code": "150622", - "name": "准格尔旗" - }, { - "code": "150623", - "name": "鄂托克前旗" - }, { - "code": "150624", - "name": "鄂托克旗" - }, { - "code": "150625", - "name": "杭锦旗" - }, { - "code": "150626", - "name": "乌审旗" - }, { - "code": "150627", - "name": "伊金霍洛旗" - }] - }, { - "code": "1507", - "name": "呼伦贝尔市", - "children": [{ - "code": "150702", - "name": "海拉尔区" - }, { - "code": "150703", - "name": "扎赉诺尔区" - }, { - "code": "150721", - "name": "阿荣旗" - }, { - "code": "150722", - "name": "莫力达瓦达斡尔族自治旗" - }, { - "code": "150723", - "name": "鄂伦春自治旗" - }, { - "code": "150724", - "name": "鄂温克族自治旗" - }, { - "code": "150725", - "name": "陈巴尔虎旗" - }, { - "code": "150726", - "name": "新巴尔虎左旗" - }, { - "code": "150727", - "name": "新巴尔虎右旗" - }, { - "code": "150781", - "name": "满洲里市" - }, { - "code": "150782", - "name": "牙克石市" - }, { - "code": "150783", - "name": "扎兰屯市" - }, { - "code": "150784", - "name": "额尔古纳市" - }, { - "code": "150785", - "name": "根河市" - }] - }, { - "code": "1508", - "name": "巴彦淖尔市", - "children": [{ - "code": "150802", - "name": "临河区" - }, { - "code": "150821", - "name": "五原县" - }, { - "code": "150822", - "name": "磴口县" - }, { - "code": "150823", - "name": "乌拉特前旗" - }, { - "code": "150824", - "name": "乌拉特中旗" - }, { - "code": "150825", - "name": "乌拉特后旗" - }, { - "code": "150826", - "name": "杭锦后旗" - }] - }, { - "code": "1509", - "name": "乌兰察布市", - "children": [{ - "code": "150902", - "name": "集宁区" - }, { - "code": "150921", - "name": "卓资县" - }, { - "code": "150922", - "name": "化德县" - }, { - "code": "150923", - "name": "商都县" - }, { - "code": "150924", - "name": "兴和县" - }, { - "code": "150925", - "name": "凉城县" - }, { - "code": "150926", - "name": "察哈尔右翼前旗" - }, { - "code": "150927", - "name": "察哈尔右翼中旗" - }, { - "code": "150928", - "name": "察哈尔右翼后旗" - }, { - "code": "150929", - "name": "四子王旗" - }, { - "code": "150981", - "name": "丰镇市" - }] - }, { - "code": "1522", - "name": "兴安盟", - "children": [{ - "code": "152201", - "name": "乌兰浩特市" - }, { - "code": "152202", - "name": "阿尔山市" - }, { - "code": "152221", - "name": "科尔沁右翼前旗" - }, { - "code": "152222", - "name": "科尔沁右翼中旗" - }, { - "code": "152223", - "name": "扎赉特旗" - }, { - "code": "152224", - "name": "突泉县" - }] - }, { - "code": "1525", - "name": "锡林郭勒盟", - "children": [{ - "code": "152501", - "name": "二连浩特市" - }, { - "code": "152502", - "name": "锡林浩特市" - }, { - "code": "152522", - "name": "阿巴嘎旗" - }, { - "code": "152523", - "name": "苏尼特左旗" - }, { - "code": "152524", - "name": "苏尼特右旗" - }, { - "code": "152525", - "name": "东乌珠穆沁旗" - }, { - "code": "152526", - "name": "西乌珠穆沁旗" - }, { - "code": "152527", - "name": "太仆寺旗" - }, { - "code": "152528", - "name": "镶黄旗" - }, { - "code": "152529", - "name": "正镶白旗" - }, { - "code": "152530", - "name": "正蓝旗" - }, { - "code": "152531", - "name": "多伦县" - }, { - "code": "152571", - "name": "乌拉盖管委会" - }] - }, { - "code": "1529", - "name": "阿拉善盟", - "children": [{ - "code": "152921", - "name": "阿拉善左旗" - }, { - "code": "152922", - "name": "阿拉善右旗" - }, { - "code": "152923", - "name": "额济纳旗" - }, { - "code": "152971", - "name": "内蒙古阿拉善经济开发区" - }] - }] -}, { - "code": "21", - "name": "辽宁省", - "children": [{ - "code": "2101", - "name": "沈阳市", - "children": [{ - "code": "210102", - "name": "和平区" - }, { - "code": "210103", - "name": "沈河区" - }, { - "code": "210104", - "name": "大东区" - }, { - "code": "210105", - "name": "皇姑区" - }, { - "code": "210106", - "name": "铁西区" - }, { - "code": "210111", - "name": "苏家屯区" - }, { - "code": "210112", - "name": "浑南区" - }, { - "code": "210113", - "name": "沈北新区" - }, { - "code": "210114", - "name": "于洪区" - }, { - "code": "210115", - "name": "辽中区" - }, { - "code": "210123", - "name": "康平县" - }, { - "code": "210124", - "name": "法库县" - }, { - "code": "210181", - "name": "新民市" - }] - }, { - "code": "2102", - "name": "大连市", - "children": [{ - "code": "210202", - "name": "中山区" - }, { - "code": "210203", - "name": "西岗区" - }, { - "code": "210204", - "name": "沙河口区" - }, { - "code": "210211", - "name": "甘井子区" - }, { - "code": "210212", - "name": "旅顺口区" - }, { - "code": "210213", - "name": "金州区" - }, { - "code": "210214", - "name": "普兰店区" - }, { - "code": "210224", - "name": "长海县" - }, { - "code": "210281", - "name": "瓦房店市" - }, { - "code": "210283", - "name": "庄河市" - }] - }, { - "code": "2103", - "name": "鞍山市", - "children": [{ - "code": "210302", - "name": "铁东区" - }, { - "code": "210303", - "name": "铁西区" - }, { - "code": "210304", - "name": "立山区" - }, { - "code": "210311", - "name": "千山区" - }, { - "code": "210321", - "name": "台安县" - }, { - "code": "210323", - "name": "岫岩满族自治县" - }, { - "code": "210381", - "name": "海城市" - }] - }, { - "code": "2104", - "name": "抚顺市", - "children": [{ - "code": "210402", - "name": "新抚区" - }, { - "code": "210403", - "name": "东洲区" - }, { - "code": "210404", - "name": "望花区" - }, { - "code": "210411", - "name": "顺城区" - }, { - "code": "210421", - "name": "抚顺县" - }, { - "code": "210422", - "name": "新宾满族自治县" - }, { - "code": "210423", - "name": "清原满族自治县" - }] - }, { - "code": "2105", - "name": "本溪市", - "children": [{ - "code": "210502", - "name": "平山区" - }, { - "code": "210503", - "name": "溪湖区" - }, { - "code": "210504", - "name": "明山区" - }, { - "code": "210505", - "name": "南芬区" - }, { - "code": "210521", - "name": "本溪满族自治县" - }, { - "code": "210522", - "name": "桓仁满族自治县" - }] - }, { - "code": "2106", - "name": "丹东市", - "children": [{ - "code": "210602", - "name": "元宝区" - }, { - "code": "210603", - "name": "振兴区" - }, { - "code": "210604", - "name": "振安区" - }, { - "code": "210624", - "name": "宽甸满族自治县" - }, { - "code": "210681", - "name": "东港市" - }, { - "code": "210682", - "name": "凤城市" - }] - }, { - "code": "2107", - "name": "锦州市", - "children": [{ - "code": "210702", - "name": "古塔区" - }, { - "code": "210703", - "name": "凌河区" - }, { - "code": "210711", - "name": "太和区" - }, { - "code": "210726", - "name": "黑山县" - }, { - "code": "210727", - "name": "义县" - }, { - "code": "210781", - "name": "凌海市" - }, { - "code": "210782", - "name": "北镇市" - }] - }, { - "code": "2108", - "name": "营口市", - "children": [{ - "code": "210802", - "name": "站前区" - }, { - "code": "210803", - "name": "西市区" - }, { - "code": "210804", - "name": "鲅鱼圈区" - }, { - "code": "210811", - "name": "老边区" - }, { - "code": "210881", - "name": "盖州市" - }, { - "code": "210882", - "name": "大石桥市" - }] - }, { - "code": "2109", - "name": "阜新市", - "children": [{ - "code": "210902", - "name": "海州区" - }, { - "code": "210903", - "name": "新邱区" - }, { - "code": "210904", - "name": "太平区" - }, { - "code": "210905", - "name": "清河门区" - }, { - "code": "210911", - "name": "细河区" - }, { - "code": "210921", - "name": "阜新蒙古族自治县" - }, { - "code": "210922", - "name": "彰武县" - }] - }, { - "code": "2110", - "name": "辽阳市", - "children": [{ - "code": "211002", - "name": "白塔区" - }, { - "code": "211003", - "name": "文圣区" - }, { - "code": "211004", - "name": "宏伟区" - }, { - "code": "211005", - "name": "弓长岭区" - }, { - "code": "211011", - "name": "太子河区" - }, { - "code": "211021", - "name": "辽阳县" - }, { - "code": "211081", - "name": "灯塔市" - }] - }, { - "code": "2111", - "name": "盘锦市", - "children": [{ - "code": "211102", - "name": "双台子区" - }, { - "code": "211103", - "name": "兴隆台区" - }, { - "code": "211104", - "name": "大洼区" - }, { - "code": "211122", - "name": "盘山县" - }] - }, { - "code": "2112", - "name": "铁岭市", - "children": [{ - "code": "211202", - "name": "银州区" - }, { - "code": "211204", - "name": "清河区" - }, { - "code": "211221", - "name": "铁岭县" - }, { - "code": "211223", - "name": "西丰县" - }, { - "code": "211224", - "name": "昌图县" - }, { - "code": "211281", - "name": "调兵山市" - }, { - "code": "211282", - "name": "开原市" - }] - }, { - "code": "2113", - "name": "朝阳市", - "children": [{ - "code": "211302", - "name": "双塔区" - }, { - "code": "211303", - "name": "龙城区" - }, { - "code": "211321", - "name": "朝阳县" - }, { - "code": "211322", - "name": "建平县" - }, { - "code": "211324", - "name": "喀喇沁左翼蒙古族自治县" - }, { - "code": "211381", - "name": "北票市" - }, { - "code": "211382", - "name": "凌源市" - }] - }, { - "code": "2114", - "name": "葫芦岛市", - "children": [{ - "code": "211402", - "name": "连山区" - }, { - "code": "211403", - "name": "龙港区" - }, { - "code": "211404", - "name": "南票区" - }, { - "code": "211421", - "name": "绥中县" - }, { - "code": "211422", - "name": "建昌县" - }, { - "code": "211481", - "name": "兴城市" - }] - }] -}, { - "code": "22", - "name": "吉林省", - "children": [{ - "code": "2201", - "name": "长春市", - "children": [{ - "code": "220102", - "name": "南关区" - }, { - "code": "220103", - "name": "宽城区" - }, { - "code": "220104", - "name": "朝阳区" - }, { - "code": "220105", - "name": "二道区" - }, { - "code": "220106", - "name": "绿园区" - }, { - "code": "220112", - "name": "双阳区" - }, { - "code": "220113", - "name": "九台区" - }, { - "code": "220122", - "name": "农安县" - }, { - "code": "220171", - "name": "长春经济技术开发区" - }, { - "code": "220172", - "name": "长春净月高新技术产业开发区" - }, { - "code": "220173", - "name": "长春高新技术产业开发区" - }, { - "code": "220174", - "name": "长春汽车经济技术开发区" - }, { - "code": "220182", - "name": "榆树市" - }, { - "code": "220183", - "name": "德惠市" - }, { - "code": "220184", - "name": "公主岭市" - }] - }, { - "code": "2202", - "name": "吉林市", - "children": [{ - "code": "220202", - "name": "昌邑区" - }, { - "code": "220203", - "name": "龙潭区" - }, { - "code": "220204", - "name": "船营区" - }, { - "code": "220211", - "name": "丰满区" - }, { - "code": "220221", - "name": "永吉县" - }, { - "code": "220271", - "name": "吉林经济开发区" - }, { - "code": "220272", - "name": "吉林高新技术产业开发区" - }, { - "code": "220273", - "name": "吉林中国新加坡食品区" - }, { - "code": "220281", - "name": "蛟河市" - }, { - "code": "220282", - "name": "桦甸市" - }, { - "code": "220283", - "name": "舒兰市" - }, { - "code": "220284", - "name": "磐石市" - }] - }, { - "code": "2203", - "name": "四平市", - "children": [{ - "code": "220302", - "name": "铁西区" - }, { - "code": "220303", - "name": "铁东区" - }, { - "code": "220322", - "name": "梨树县" - }, { - "code": "220323", - "name": "伊通满族自治县" - }, { - "code": "220382", - "name": "双辽市" - }] - }, { - "code": "2204", - "name": "辽源市", - "children": [{ - "code": "220402", - "name": "龙山区" - }, { - "code": "220403", - "name": "西安区" - }, { - "code": "220421", - "name": "东丰县" - }, { - "code": "220422", - "name": "东辽县" - }] - }, { - "code": "2205", - "name": "通化市", - "children": [{ - "code": "220502", - "name": "东昌区" - }, { - "code": "220503", - "name": "二道江区" - }, { - "code": "220521", - "name": "通化县" - }, { - "code": "220523", - "name": "辉南县" - }, { - "code": "220524", - "name": "柳河县" - }, { - "code": "220581", - "name": "梅河口市" - }, { - "code": "220582", - "name": "集安市" - }] - }, { - "code": "2206", - "name": "白山市", - "children": [{ - "code": "220602", - "name": "浑江区" - }, { - "code": "220605", - "name": "江源区" - }, { - "code": "220621", - "name": "抚松县" - }, { - "code": "220622", - "name": "靖宇县" - }, { - "code": "220623", - "name": "长白朝鲜族自治县" - }, { - "code": "220681", - "name": "临江市" - }] - }, { - "code": "2207", - "name": "松原市", - "children": [{ - "code": "220702", - "name": "宁江区" - }, { - "code": "220721", - "name": "前郭尔罗斯蒙古族自治县" - }, { - "code": "220722", - "name": "长岭县" - }, { - "code": "220723", - "name": "乾安县" - }, { - "code": "220771", - "name": "吉林松原经济开发区" - }, { - "code": "220781", - "name": "扶余市" - }] - }, { - "code": "2208", - "name": "白城市", - "children": [{ - "code": "220802", - "name": "洮北区" - }, { - "code": "220821", - "name": "镇赉县" - }, { - "code": "220822", - "name": "通榆县" - }, { - "code": "220871", - "name": "吉林白城经济开发区" - }, { - "code": "220881", - "name": "洮南市" - }, { - "code": "220882", - "name": "大安市" - }] - }, { - "code": "2224", - "name": "延边朝鲜族自治州", - "children": [{ - "code": "222401", - "name": "延吉市" - }, { - "code": "222402", - "name": "图们市" - }, { - "code": "222403", - "name": "敦化市" - }, { - "code": "222404", - "name": "珲春市" - }, { - "code": "222405", - "name": "龙井市" - }, { - "code": "222406", - "name": "和龙市" - }, { - "code": "222424", - "name": "汪清县" - }, { - "code": "222426", - "name": "安图县" - }] - }] -}, { - "code": "23", - "name": "黑龙江省", - "children": [{ - "code": "2301", - "name": "哈尔滨市", - "children": [{ - "code": "230102", - "name": "道里区" - }, { - "code": "230103", - "name": "南岗区" - }, { - "code": "230104", - "name": "道外区" - }, { - "code": "230108", - "name": "平房区" - }, { - "code": "230109", - "name": "松北区" - }, { - "code": "230110", - "name": "香坊区" - }, { - "code": "230111", - "name": "呼兰区" - }, { - "code": "230112", - "name": "阿城区" - }, { - "code": "230113", - "name": "双城区" - }, { - "code": "230123", - "name": "依兰县" - }, { - "code": "230124", - "name": "方正县" - }, { - "code": "230125", - "name": "宾县" - }, { - "code": "230126", - "name": "巴彦县" - }, { - "code": "230127", - "name": "木兰县" - }, { - "code": "230128", - "name": "通河县" - }, { - "code": "230129", - "name": "延寿县" - }, { - "code": "230183", - "name": "尚志市" - }, { - "code": "230184", - "name": "五常市" - }] - }, { - "code": "2302", - "name": "齐齐哈尔市", - "children": [{ - "code": "230202", - "name": "龙沙区" - }, { - "code": "230203", - "name": "建华区" - }, { - "code": "230204", - "name": "铁锋区" - }, { - "code": "230205", - "name": "昂昂溪区" - }, { - "code": "230206", - "name": "富拉尔基区" - }, { - "code": "230207", - "name": "碾子山区" - }, { - "code": "230208", - "name": "梅里斯达斡尔族区" - }, { - "code": "230221", - "name": "龙江县" - }, { - "code": "230223", - "name": "依安县" - }, { - "code": "230224", - "name": "泰来县" - }, { - "code": "230225", - "name": "甘南县" - }, { - "code": "230227", - "name": "富裕县" - }, { - "code": "230229", - "name": "克山县" - }, { - "code": "230230", - "name": "克东县" - }, { - "code": "230231", - "name": "拜泉县" - }, { - "code": "230281", - "name": "讷河市" - }] - }, { - "code": "2303", - "name": "鸡西市", - "children": [{ - "code": "230302", - "name": "鸡冠区" - }, { - "code": "230303", - "name": "恒山区" - }, { - "code": "230304", - "name": "滴道区" - }, { - "code": "230305", - "name": "梨树区" - }, { - "code": "230306", - "name": "城子河区" - }, { - "code": "230307", - "name": "麻山区" - }, { - "code": "230321", - "name": "鸡东县" - }, { - "code": "230381", - "name": "虎林市" - }, { - "code": "230382", - "name": "密山市" - }] - }, { - "code": "2304", - "name": "鹤岗市", - "children": [{ - "code": "230402", - "name": "向阳区" - }, { - "code": "230403", - "name": "工农区" - }, { - "code": "230404", - "name": "南山区" - }, { - "code": "230405", - "name": "兴安区" - }, { - "code": "230406", - "name": "东山区" - }, { - "code": "230407", - "name": "兴山区" - }, { - "code": "230421", - "name": "萝北县" - }, { - "code": "230422", - "name": "绥滨县" - }] - }, { - "code": "2305", - "name": "双鸭山市", - "children": [{ - "code": "230502", - "name": "尖山区" - }, { - "code": "230503", - "name": "岭东区" - }, { - "code": "230505", - "name": "四方台区" - }, { - "code": "230506", - "name": "宝山区" - }, { - "code": "230521", - "name": "集贤县" - }, { - "code": "230522", - "name": "友谊县" - }, { - "code": "230523", - "name": "宝清县" - }, { - "code": "230524", - "name": "饶河县" - }] - }, { - "code": "2306", - "name": "大庆市", - "children": [{ - "code": "230602", - "name": "萨尔图区" - }, { - "code": "230603", - "name": "龙凤区" - }, { - "code": "230604", - "name": "让胡路区" - }, { - "code": "230605", - "name": "红岗区" - }, { - "code": "230606", - "name": "大同区" - }, { - "code": "230621", - "name": "肇州县" - }, { - "code": "230622", - "name": "肇源县" - }, { - "code": "230623", - "name": "林甸县" - }, { - "code": "230624", - "name": "杜尔伯特蒙古族自治县" - }, { - "code": "230671", - "name": "大庆高新技术产业开发区" - }] - }, { - "code": "2307", - "name": "伊春市", - "children": [{ - "code": "230717", - "name": "伊美区" - }, { - "code": "230718", - "name": "乌翠区" - }, { - "code": "230719", - "name": "友好区" - }, { - "code": "230722", - "name": "嘉荫县" - }, { - "code": "230723", - "name": "汤旺县" - }, { - "code": "230724", - "name": "丰林县" - }, { - "code": "230725", - "name": "大箐山县" - }, { - "code": "230726", - "name": "南岔县" - }, { - "code": "230751", - "name": "金林区" - }, { - "code": "230781", - "name": "铁力市" - }] - }, { - "code": "2308", - "name": "佳木斯市", - "children": [{ - "code": "230803", - "name": "向阳区" - }, { - "code": "230804", - "name": "前进区" - }, { - "code": "230805", - "name": "东风区" - }, { - "code": "230811", - "name": "郊区" - }, { - "code": "230822", - "name": "桦南县" - }, { - "code": "230826", - "name": "桦川县" - }, { - "code": "230828", - "name": "汤原县" - }, { - "code": "230881", - "name": "同江市" - }, { - "code": "230882", - "name": "富锦市" - }, { - "code": "230883", - "name": "抚远市" - }] - }, { - "code": "2309", - "name": "七台河市", - "children": [{ - "code": "230902", - "name": "新兴区" - }, { - "code": "230903", - "name": "桃山区" - }, { - "code": "230904", - "name": "茄子河区" - }, { - "code": "230921", - "name": "勃利县" - }] - }, { - "code": "2310", - "name": "牡丹江市", - "children": [{ - "code": "231002", - "name": "东安区" - }, { - "code": "231003", - "name": "阳明区" - }, { - "code": "231004", - "name": "爱民区" - }, { - "code": "231005", - "name": "西安区" - }, { - "code": "231025", - "name": "林口县" - }, { - "code": "231071", - "name": "牡丹江经济技术开发区" - }, { - "code": "231081", - "name": "绥芬河市" - }, { - "code": "231083", - "name": "海林市" - }, { - "code": "231084", - "name": "宁安市" - }, { - "code": "231085", - "name": "穆棱市" - }, { - "code": "231086", - "name": "东宁市" - }] - }, { - "code": "2311", - "name": "黑河市", - "children": [{ - "code": "231102", - "name": "爱辉区" - }, { - "code": "231123", - "name": "逊克县" - }, { - "code": "231124", - "name": "孙吴县" - }, { - "code": "231181", - "name": "北安市" - }, { - "code": "231182", - "name": "五大连池市" - }, { - "code": "231183", - "name": "嫩江市" - }] - }, { - "code": "2312", - "name": "绥化市", - "children": [{ - "code": "231202", - "name": "北林区" - }, { - "code": "231221", - "name": "望奎县" - }, { - "code": "231222", - "name": "兰西县" - }, { - "code": "231223", - "name": "青冈县" - }, { - "code": "231224", - "name": "庆安县" - }, { - "code": "231225", - "name": "明水县" - }, { - "code": "231226", - "name": "绥棱县" - }, { - "code": "231281", - "name": "安达市" - }, { - "code": "231282", - "name": "肇东市" - }, { - "code": "231283", - "name": "海伦市" - }] - }, { - "code": "2327", - "name": "大兴安岭地区", - "children": [{ - "code": "232701", - "name": "漠河市" - }, { - "code": "232721", - "name": "呼玛县" - }, { - "code": "232722", - "name": "塔河县" - }, { - "code": "232761", - "name": "加格达奇区" - }, { - "code": "232762", - "name": "松岭区" - }, { - "code": "232763", - "name": "新林区" - }, { - "code": "232764", - "name": "呼中区" - }] - }] -}, { - "code": "31", - "name": "上海市", - "children": [{ - "code": "3101", - "name": "市辖区", - "children": [{ - "code": "310101", - "name": "黄浦区" - }, { - "code": "310104", - "name": "徐汇区" - }, { - "code": "310105", - "name": "长宁区" - }, { - "code": "310106", - "name": "静安区" - }, { - "code": "310107", - "name": "普陀区" - }, { - "code": "310109", - "name": "虹口区" - }, { - "code": "310110", - "name": "杨浦区" - }, { - "code": "310112", - "name": "闵行区" - }, { - "code": "310113", - "name": "宝山区" - }, { - "code": "310114", - "name": "嘉定区" - }, { - "code": "310115", - "name": "浦东新区" - }, { - "code": "310116", - "name": "金山区" - }, { - "code": "310117", - "name": "松江区" - }, { - "code": "310118", - "name": "青浦区" - }, { - "code": "310120", - "name": "奉贤区" - }, { - "code": "310151", - "name": "崇明区" - }] - }] -}, { - "code": "32", - "name": "江苏省", - "children": [{ - "code": "3201", - "name": "南京市", - "children": [{ - "code": "320102", - "name": "玄武区" - }, { - "code": "320104", - "name": "秦淮区" - }, { - "code": "320105", - "name": "建邺区" - }, { - "code": "320106", - "name": "鼓楼区" - }, { - "code": "320111", - "name": "浦口区" - }, { - "code": "320113", - "name": "栖霞区" - }, { - "code": "320114", - "name": "雨花台区" - }, { - "code": "320115", - "name": "江宁区" - }, { - "code": "320116", - "name": "六合区" - }, { - "code": "320117", - "name": "溧水区" - }, { - "code": "320118", - "name": "高淳区" - }] - }, { - "code": "3202", - "name": "无锡市", - "children": [{ - "code": "320205", - "name": "锡山区" - }, { - "code": "320206", - "name": "惠山区" - }, { - "code": "320211", - "name": "滨湖区" - }, { - "code": "320213", - "name": "梁溪区" - }, { - "code": "320214", - "name": "新吴区" - }, { - "code": "320281", - "name": "江阴市" - }, { - "code": "320282", - "name": "宜兴市" - }] - }, { - "code": "3203", - "name": "徐州市", - "children": [{ - "code": "320302", - "name": "鼓楼区" - }, { - "code": "320303", - "name": "云龙区" - }, { - "code": "320305", - "name": "贾汪区" - }, { - "code": "320311", - "name": "泉山区" - }, { - "code": "320312", - "name": "铜山区" - }, { - "code": "320321", - "name": "丰县" - }, { - "code": "320322", - "name": "沛县" - }, { - "code": "320324", - "name": "睢宁县" - }, { - "code": "320371", - "name": "徐州经济技术开发区" - }, { - "code": "320381", - "name": "新沂市" - }, { - "code": "320382", - "name": "邳州市" - }] - }, { - "code": "3204", - "name": "常州市", - "children": [{ - "code": "320402", - "name": "天宁区" - }, { - "code": "320404", - "name": "钟楼区" - }, { - "code": "320411", - "name": "新北区" - }, { - "code": "320412", - "name": "武进区" - }, { - "code": "320413", - "name": "金坛区" - }, { - "code": "320481", - "name": "溧阳市" - }] - }, { - "code": "3205", - "name": "苏州市", - "children": [{ - "code": "320505", - "name": "虎丘区" - }, { - "code": "320506", - "name": "吴中区" - }, { - "code": "320507", - "name": "相城区" - }, { - "code": "320508", - "name": "姑苏区" - }, { - "code": "320509", - "name": "吴江区" - }, { - "code": "320571", - "name": "苏州工业园区" - }, { - "code": "320581", - "name": "常熟市" - }, { - "code": "320582", - "name": "张家港市" - }, { - "code": "320583", - "name": "昆山市" - }, { - "code": "320585", - "name": "太仓市" - }] - }, { - "code": "3206", - "name": "南通市", - "children": [{ - "code": "320602", - "name": "崇川区" - }, { - "code": "320611", - "name": "港闸区" - }, { - "code": "320612", - "name": "通州区" - }, { - "code": "320623", - "name": "如东县" - }, { - "code": "320671", - "name": "南通经济技术开发区" - }, { - "code": "320681", - "name": "启东市" - }, { - "code": "320682", - "name": "如皋市" - }, { - "code": "320684", - "name": "海门市" - }, { - "code": "320685", - "name": "海安市" - }] - }, { - "code": "3207", - "name": "连云港市", - "children": [{ - "code": "320703", - "name": "连云区" - }, { - "code": "320706", - "name": "海州区" - }, { - "code": "320707", - "name": "赣榆区" - }, { - "code": "320722", - "name": "东海县" - }, { - "code": "320723", - "name": "灌云县" - }, { - "code": "320724", - "name": "灌南县" - }, { - "code": "320771", - "name": "连云港经济技术开发区" - }, { - "code": "320772", - "name": "连云港高新技术产业开发区" - }] - }, { - "code": "3208", - "name": "淮安市", - "children": [{ - "code": "320803", - "name": "淮安区" - }, { - "code": "320804", - "name": "淮阴区" - }, { - "code": "320812", - "name": "清江浦区" - }, { - "code": "320813", - "name": "洪泽区" - }, { - "code": "320826", - "name": "涟水县" - }, { - "code": "320830", - "name": "盱眙县" - }, { - "code": "320831", - "name": "金湖县" - }, { - "code": "320871", - "name": "淮安经济技术开发区" - }] - }, { - "code": "3209", - "name": "盐城市", - "children": [{ - "code": "320902", - "name": "亭湖区" - }, { - "code": "320903", - "name": "盐都区" - }, { - "code": "320904", - "name": "大丰区" - }, { - "code": "320921", - "name": "响水县" - }, { - "code": "320922", - "name": "滨海县" - }, { - "code": "320923", - "name": "阜宁县" - }, { - "code": "320924", - "name": "射阳县" - }, { - "code": "320925", - "name": "建湖县" - }, { - "code": "320971", - "name": "盐城经济技术开发区" - }, { - "code": "320981", - "name": "东台市" - }] - }, { - "code": "3210", - "name": "扬州市", - "children": [{ - "code": "321002", - "name": "广陵区" - }, { - "code": "321003", - "name": "邗江区" - }, { - "code": "321012", - "name": "江都区" - }, { - "code": "321023", - "name": "宝应县" - }, { - "code": "321071", - "name": "扬州经济技术开发区" - }, { - "code": "321081", - "name": "仪征市" - }, { - "code": "321084", - "name": "高邮市" - }] - }, { - "code": "3211", - "name": "镇江市", - "children": [{ - "code": "321102", - "name": "京口区" - }, { - "code": "321111", - "name": "润州区" - }, { - "code": "321112", - "name": "丹徒区" - }, { - "code": "321171", - "name": "镇江新区" - }, { - "code": "321181", - "name": "丹阳市" - }, { - "code": "321182", - "name": "扬中市" - }, { - "code": "321183", - "name": "句容市" - }] - }, { - "code": "3212", - "name": "泰州市", - "children": [{ - "code": "321202", - "name": "海陵区" - }, { - "code": "321203", - "name": "高港区" - }, { - "code": "321204", - "name": "姜堰区" - }, { - "code": "321271", - "name": "泰州医药高新技术产业开发区" - }, { - "code": "321281", - "name": "兴化市" - }, { - "code": "321282", - "name": "靖江市" - }, { - "code": "321283", - "name": "泰兴市" - }] - }, { - "code": "3213", - "name": "宿迁市", - "children": [{ - "code": "321302", - "name": "宿城区" - }, { - "code": "321311", - "name": "宿豫区" - }, { - "code": "321322", - "name": "沭阳县" - }, { - "code": "321323", - "name": "泗阳县" - }, { - "code": "321324", - "name": "泗洪县" - }, { - "code": "321371", - "name": "宿迁经济技术开发区" - }] - }] -}, { - "code": "33", - "name": "浙江省", - "children": [{ - "code": "3301", - "name": "杭州市", - "children": [{ - "code": "330102", - "name": "上城区" - }, { - "code": "330103", - "name": "下城区" - }, { - "code": "330104", - "name": "江干区" - }, { - "code": "330105", - "name": "拱墅区" - }, { - "code": "330106", - "name": "西湖区" - }, { - "code": "330108", - "name": "滨江区" - }, { - "code": "330109", - "name": "萧山区" - }, { - "code": "330110", - "name": "余杭区" - }, { - "code": "330111", - "name": "富阳区" - }, { - "code": "330112", - "name": "临安区" - }, { - "code": "330122", - "name": "桐庐县" - }, { - "code": "330127", - "name": "淳安县" - }, { - "code": "330182", - "name": "建德市" - }] - }, { - "code": "3302", - "name": "宁波市", - "children": [{ - "code": "330203", - "name": "海曙区" - }, { - "code": "330205", - "name": "江北区" - }, { - "code": "330206", - "name": "北仑区" - }, { - "code": "330211", - "name": "镇海区" - }, { - "code": "330212", - "name": "鄞州区" - }, { - "code": "330213", - "name": "奉化区" - }, { - "code": "330225", - "name": "象山县" - }, { - "code": "330226", - "name": "宁海县" - }, { - "code": "330281", - "name": "余姚市" - }, { - "code": "330282", - "name": "慈溪市" - }] - }, { - "code": "3303", - "name": "温州市", - "children": [{ - "code": "330302", - "name": "鹿城区" - }, { - "code": "330303", - "name": "龙湾区" - }, { - "code": "330304", - "name": "瓯海区" - }, { - "code": "330305", - "name": "洞头区" - }, { - "code": "330324", - "name": "永嘉县" - }, { - "code": "330326", - "name": "平阳县" - }, { - "code": "330327", - "name": "苍南县" - }, { - "code": "330328", - "name": "文成县" - }, { - "code": "330329", - "name": "泰顺县" - }, { - "code": "330371", - "name": "温州经济技术开发区" - }, { - "code": "330381", - "name": "瑞安市" - }, { - "code": "330382", - "name": "乐清市" - }, { - "code": "330383", - "name": "龙港市" - }] - }, { - "code": "3304", - "name": "嘉兴市", - "children": [{ - "code": "330402", - "name": "南湖区" - }, { - "code": "330411", - "name": "秀洲区" - }, { - "code": "330421", - "name": "嘉善县" - }, { - "code": "330424", - "name": "海盐县" - }, { - "code": "330481", - "name": "海宁市" - }, { - "code": "330482", - "name": "平湖市" - }, { - "code": "330483", - "name": "桐乡市" - }] - }, { - "code": "3305", - "name": "湖州市", - "children": [{ - "code": "330502", - "name": "吴兴区" - }, { - "code": "330503", - "name": "南浔区" - }, { - "code": "330521", - "name": "德清县" - }, { - "code": "330522", - "name": "长兴县" - }, { - "code": "330523", - "name": "安吉县" - }] - }, { - "code": "3306", - "name": "绍兴市", - "children": [{ - "code": "330602", - "name": "越城区" - }, { - "code": "330603", - "name": "柯桥区" - }, { - "code": "330604", - "name": "上虞区" - }, { - "code": "330624", - "name": "新昌县" - }, { - "code": "330681", - "name": "诸暨市" - }, { - "code": "330683", - "name": "嵊州市" - }] - }, { - "code": "3307", - "name": "金华市", - "children": [{ - "code": "330702", - "name": "婺城区" - }, { - "code": "330703", - "name": "金东区" - }, { - "code": "330723", - "name": "武义县" - }, { - "code": "330726", - "name": "浦江县" - }, { - "code": "330727", - "name": "磐安县" - }, { - "code": "330781", - "name": "兰溪市" - }, { - "code": "330782", - "name": "义乌市" - }, { - "code": "330783", - "name": "东阳市" - }, { - "code": "330784", - "name": "永康市" - }] - }, { - "code": "3308", - "name": "衢州市", - "children": [{ - "code": "330802", - "name": "柯城区" - }, { - "code": "330803", - "name": "衢江区" - }, { - "code": "330822", - "name": "常山县" - }, { - "code": "330824", - "name": "开化县" - }, { - "code": "330825", - "name": "龙游县" - }, { - "code": "330881", - "name": "江山市" - }] - }, { - "code": "3309", - "name": "舟山市", - "children": [{ - "code": "330902", - "name": "定海区" - }, { - "code": "330903", - "name": "普陀区" - }, { - "code": "330921", - "name": "岱山县" - }, { - "code": "330922", - "name": "嵊泗县" - }] - }, { - "code": "3310", - "name": "台州市", - "children": [{ - "code": "331002", - "name": "椒江区" - }, { - "code": "331003", - "name": "黄岩区" - }, { - "code": "331004", - "name": "路桥区" - }, { - "code": "331022", - "name": "三门县" - }, { - "code": "331023", - "name": "天台县" - }, { - "code": "331024", - "name": "仙居县" - }, { - "code": "331081", - "name": "温岭市" - }, { - "code": "331082", - "name": "临海市" - }, { - "code": "331083", - "name": "玉环市" - }] - }, { - "code": "3311", - "name": "丽水市", - "children": [{ - "code": "331102", - "name": "莲都区" - }, { - "code": "331121", - "name": "青田县" - }, { - "code": "331122", - "name": "缙云县" - }, { - "code": "331123", - "name": "遂昌县" - }, { - "code": "331124", - "name": "松阳县" - }, { - "code": "331125", - "name": "云和县" - }, { - "code": "331126", - "name": "庆元县" - }, { - "code": "331127", - "name": "景宁畲族自治县" - }, { - "code": "331181", - "name": "龙泉市" - }] - }] -}, { - "code": "34", - "name": "安徽省", - "children": [{ - "code": "3401", - "name": "合肥市", - "children": [{ - "code": "340102", - "name": "瑶海区" - }, { - "code": "340103", - "name": "庐阳区" - }, { - "code": "340104", - "name": "蜀山区" - }, { - "code": "340111", - "name": "包河区" - }, { - "code": "340121", - "name": "长丰县" - }, { - "code": "340122", - "name": "肥东县" - }, { - "code": "340123", - "name": "肥西县" - }, { - "code": "340124", - "name": "庐江县" - }, { - "code": "340171", - "name": "合肥高新技术产业开发区" - }, { - "code": "340172", - "name": "合肥经济技术开发区" - }, { - "code": "340173", - "name": "合肥新站高新技术产业开发区" - }, { - "code": "340181", - "name": "巢湖市" - }] - }, { - "code": "3402", - "name": "芜湖市", - "children": [{ - "code": "340202", - "name": "镜湖区" - }, { - "code": "340203", - "name": "弋江区" - }, { - "code": "340207", - "name": "鸠江区" - }, { - "code": "340208", - "name": "三山区" - }, { - "code": "340221", - "name": "芜湖县" - }, { - "code": "340222", - "name": "繁昌县" - }, { - "code": "340223", - "name": "南陵县" - }, { - "code": "340271", - "name": "芜湖经济技术开发区" - }, { - "code": "340272", - "name": "安徽芜湖长江大桥经济开发区" - }, { - "code": "340281", - "name": "无为市" - }] - }, { - "code": "3403", - "name": "蚌埠市", - "children": [{ - "code": "340302", - "name": "龙子湖区" - }, { - "code": "340303", - "name": "蚌山区" - }, { - "code": "340304", - "name": "禹会区" - }, { - "code": "340311", - "name": "淮上区" - }, { - "code": "340321", - "name": "怀远县" - }, { - "code": "340322", - "name": "五河县" - }, { - "code": "340323", - "name": "固镇县" - }, { - "code": "340371", - "name": "蚌埠市高新技术开发区" - }, { - "code": "340372", - "name": "蚌埠市经济开发区" - }] - }, { - "code": "3404", - "name": "淮南市", - "children": [{ - "code": "340402", - "name": "大通区" - }, { - "code": "340403", - "name": "田家庵区" - }, { - "code": "340404", - "name": "谢家集区" - }, { - "code": "340405", - "name": "八公山区" - }, { - "code": "340406", - "name": "潘集区" - }, { - "code": "340421", - "name": "凤台县" - }, { - "code": "340422", - "name": "寿县" - }] - }, { - "code": "3405", - "name": "马鞍山市", - "children": [{ - "code": "340503", - "name": "花山区" - }, { - "code": "340504", - "name": "雨山区" - }, { - "code": "340506", - "name": "博望区" - }, { - "code": "340521", - "name": "当涂县" - }, { - "code": "340522", - "name": "含山县" - }, { - "code": "340523", - "name": "和县" - }] - }, { - "code": "3406", - "name": "淮北市", - "children": [{ - "code": "340602", - "name": "杜集区" - }, { - "code": "340603", - "name": "相山区" - }, { - "code": "340604", - "name": "烈山区" - }, { - "code": "340621", - "name": "濉溪县" - }] - }, { - "code": "3407", - "name": "铜陵市", - "children": [{ - "code": "340705", - "name": "铜官区" - }, { - "code": "340706", - "name": "义安区" - }, { - "code": "340711", - "name": "郊区" - }, { - "code": "340722", - "name": "枞阳县" - }] - }, { - "code": "3408", - "name": "安庆市", - "children": [{ - "code": "340802", - "name": "迎江区" - }, { - "code": "340803", - "name": "大观区" - }, { - "code": "340811", - "name": "宜秀区" - }, { - "code": "340822", - "name": "怀宁县" - }, { - "code": "340825", - "name": "太湖县" - }, { - "code": "340826", - "name": "宿松县" - }, { - "code": "340827", - "name": "望江县" - }, { - "code": "340828", - "name": "岳西县" - }, { - "code": "340871", - "name": "安徽安庆经济开发区" - }, { - "code": "340881", - "name": "桐城市" - }, { - "code": "340882", - "name": "潜山市" - }] - }, { - "code": "3410", - "name": "黄山市", - "children": [{ - "code": "341002", - "name": "屯溪区" - }, { - "code": "341003", - "name": "黄山区" - }, { - "code": "341004", - "name": "徽州区" - }, { - "code": "341021", - "name": "歙县" - }, { - "code": "341022", - "name": "休宁县" - }, { - "code": "341023", - "name": "黟县" - }, { - "code": "341024", - "name": "祁门县" - }] - }, { - "code": "3411", - "name": "滁州市", - "children": [{ - "code": "341102", - "name": "琅琊区" - }, { - "code": "341103", - "name": "南谯区" - }, { - "code": "341122", - "name": "来安县" - }, { - "code": "341124", - "name": "全椒县" - }, { - "code": "341125", - "name": "定远县" - }, { - "code": "341126", - "name": "凤阳县" - }, { - "code": "341171", - "name": "苏滁现代产业园" - }, { - "code": "341172", - "name": "滁州经济技术开发区" - }, { - "code": "341181", - "name": "天长市" - }, { - "code": "341182", - "name": "明光市" - }] - }, { - "code": "3412", - "name": "阜阳市", - "children": [{ - "code": "341202", - "name": "颍州区" - }, { - "code": "341203", - "name": "颍东区" - }, { - "code": "341204", - "name": "颍泉区" - }, { - "code": "341221", - "name": "临泉县" - }, { - "code": "341222", - "name": "太和县" - }, { - "code": "341225", - "name": "阜南县" - }, { - "code": "341226", - "name": "颍上县" - }, { - "code": "341271", - "name": "阜阳合肥现代产业园区" - }, { - "code": "341272", - "name": "阜阳经济技术开发区" - }, { - "code": "341282", - "name": "界首市" - }] - }, { - "code": "3413", - "name": "宿州市", - "children": [{ - "code": "341302", - "name": "埇桥区" - }, { - "code": "341321", - "name": "砀山县" - }, { - "code": "341322", - "name": "萧县" - }, { - "code": "341323", - "name": "灵璧县" - }, { - "code": "341324", - "name": "泗县" - }, { - "code": "341371", - "name": "宿州马鞍山现代产业园区" - }, { - "code": "341372", - "name": "宿州经济技术开发区" - }] - }, { - "code": "3415", - "name": "六安市", - "children": [{ - "code": "341502", - "name": "金安区" - }, { - "code": "341503", - "name": "裕安区" - }, { - "code": "341504", - "name": "叶集区" - }, { - "code": "341522", - "name": "霍邱县" - }, { - "code": "341523", - "name": "舒城县" - }, { - "code": "341524", - "name": "金寨县" - }, { - "code": "341525", - "name": "霍山县" - }] - }, { - "code": "3416", - "name": "亳州市", - "children": [{ - "code": "341602", - "name": "谯城区" - }, { - "code": "341621", - "name": "涡阳县" - }, { - "code": "341622", - "name": "蒙城县" - }, { - "code": "341623", - "name": "利辛县" - }] - }, { - "code": "3417", - "name": "池州市", - "children": [{ - "code": "341702", - "name": "贵池区" - }, { - "code": "341721", - "name": "东至县" - }, { - "code": "341722", - "name": "石台县" - }, { - "code": "341723", - "name": "青阳县" - }] - }, { - "code": "3418", - "name": "宣城市", - "children": [{ - "code": "341802", - "name": "宣州区" - }, { - "code": "341821", - "name": "郎溪县" - }, { - "code": "341823", - "name": "泾县" - }, { - "code": "341824", - "name": "绩溪县" - }, { - "code": "341825", - "name": "旌德县" - }, { - "code": "341871", - "name": "宣城市经济开发区" - }, { - "code": "341881", - "name": "宁国市" - }, { - "code": "341882", - "name": "广德市" - }] - }] -}, { - "code": "35", - "name": "福建省", - "children": [{ - "code": "3501", - "name": "福州市", - "children": [{ - "code": "350102", - "name": "鼓楼区" - }, { - "code": "350103", - "name": "台江区" - }, { - "code": "350104", - "name": "仓山区" - }, { - "code": "350105", - "name": "马尾区" - }, { - "code": "350111", - "name": "晋安区" - }, { - "code": "350112", - "name": "长乐区" - }, { - "code": "350121", - "name": "闽侯县" - }, { - "code": "350122", - "name": "连江县" - }, { - "code": "350123", - "name": "罗源县" - }, { - "code": "350124", - "name": "闽清县" - }, { - "code": "350125", - "name": "永泰县" - }, { - "code": "350128", - "name": "平潭县" - }, { - "code": "350181", - "name": "福清市" - }] - }, { - "code": "3502", - "name": "厦门市", - "children": [{ - "code": "350203", - "name": "思明区" - }, { - "code": "350205", - "name": "海沧区" - }, { - "code": "350206", - "name": "湖里区" - }, { - "code": "350211", - "name": "集美区" - }, { - "code": "350212", - "name": "同安区" - }, { - "code": "350213", - "name": "翔安区" - }] - }, { - "code": "3503", - "name": "莆田市", - "children": [{ - "code": "350302", - "name": "城厢区" - }, { - "code": "350303", - "name": "涵江区" - }, { - "code": "350304", - "name": "荔城区" - }, { - "code": "350305", - "name": "秀屿区" - }, { - "code": "350322", - "name": "仙游县" - }] - }, { - "code": "3504", - "name": "三明市", - "children": [{ - "code": "350402", - "name": "梅列区" - }, { - "code": "350403", - "name": "三元区" - }, { - "code": "350421", - "name": "明溪县" - }, { - "code": "350423", - "name": "清流县" - }, { - "code": "350424", - "name": "宁化县" - }, { - "code": "350425", - "name": "大田县" - }, { - "code": "350426", - "name": "尤溪县" - }, { - "code": "350427", - "name": "沙县" - }, { - "code": "350428", - "name": "将乐县" - }, { - "code": "350429", - "name": "泰宁县" - }, { - "code": "350430", - "name": "建宁县" - }, { - "code": "350481", - "name": "永安市" - }] - }, { - "code": "3505", - "name": "泉州市", - "children": [{ - "code": "350502", - "name": "鲤城区" - }, { - "code": "350503", - "name": "丰泽区" - }, { - "code": "350504", - "name": "洛江区" - }, { - "code": "350505", - "name": "泉港区" - }, { - "code": "350521", - "name": "惠安县" - }, { - "code": "350524", - "name": "安溪县" - }, { - "code": "350525", - "name": "永春县" - }, { - "code": "350526", - "name": "德化县" - }, { - "code": "350527", - "name": "金门县" - }, { - "code": "350581", - "name": "石狮市" - }, { - "code": "350582", - "name": "晋江市" - }, { - "code": "350583", - "name": "南安市" - }] - }, { - "code": "3506", - "name": "漳州市", - "children": [{ - "code": "350602", - "name": "芗城区" - }, { - "code": "350603", - "name": "龙文区" - }, { - "code": "350622", - "name": "云霄县" - }, { - "code": "350623", - "name": "漳浦县" - }, { - "code": "350624", - "name": "诏安县" - }, { - "code": "350625", - "name": "长泰县" - }, { - "code": "350626", - "name": "东山县" - }, { - "code": "350627", - "name": "南靖县" - }, { - "code": "350628", - "name": "平和县" - }, { - "code": "350629", - "name": "华安县" - }, { - "code": "350681", - "name": "龙海市" - }] - }, { - "code": "3507", - "name": "南平市", - "children": [{ - "code": "350702", - "name": "延平区" - }, { - "code": "350703", - "name": "建阳区" - }, { - "code": "350721", - "name": "顺昌县" - }, { - "code": "350722", - "name": "浦城县" - }, { - "code": "350723", - "name": "光泽县" - }, { - "code": "350724", - "name": "松溪县" - }, { - "code": "350725", - "name": "政和县" - }, { - "code": "350781", - "name": "邵武市" - }, { - "code": "350782", - "name": "武夷山市" - }, { - "code": "350783", - "name": "建瓯市" - }] - }, { - "code": "3508", - "name": "龙岩市", - "children": [{ - "code": "350802", - "name": "新罗区" - }, { - "code": "350803", - "name": "永定区" - }, { - "code": "350821", - "name": "长汀县" - }, { - "code": "350823", - "name": "上杭县" - }, { - "code": "350824", - "name": "武平县" - }, { - "code": "350825", - "name": "连城县" - }, { - "code": "350881", - "name": "漳平市" - }] - }, { - "code": "3509", - "name": "宁德市", - "children": [{ - "code": "350902", - "name": "蕉城区" - }, { - "code": "350921", - "name": "霞浦县" - }, { - "code": "350922", - "name": "古田县" - }, { - "code": "350923", - "name": "屏南县" - }, { - "code": "350924", - "name": "寿宁县" - }, { - "code": "350925", - "name": "周宁县" - }, { - "code": "350926", - "name": "柘荣县" - }, { - "code": "350981", - "name": "福安市" - }, { - "code": "350982", - "name": "福鼎市" - }] - }] -}, { - "code": "36", - "name": "江西省", - "children": [{ - "code": "3601", - "name": "南昌市", - "children": [{ - "code": "360102", - "name": "东湖区" - }, { - "code": "360103", - "name": "西湖区" - }, { - "code": "360104", - "name": "青云谱区" - }, { - "code": "360111", - "name": "青山湖区" - }, { - "code": "360112", - "name": "新建区" - }, { - "code": "360113", - "name": "红谷滩区" - }, { - "code": "360121", - "name": "南昌县" - }, { - "code": "360123", - "name": "安义县" - }, { - "code": "360124", - "name": "进贤县" - }] - }, { - "code": "3602", - "name": "景德镇市", - "children": [{ - "code": "360202", - "name": "昌江区" - }, { - "code": "360203", - "name": "珠山区" - }, { - "code": "360222", - "name": "浮梁县" - }, { - "code": "360281", - "name": "乐平市" - }] - }, { - "code": "3603", - "name": "萍乡市", - "children": [{ - "code": "360302", - "name": "安源区" - }, { - "code": "360313", - "name": "湘东区" - }, { - "code": "360321", - "name": "莲花县" - }, { - "code": "360322", - "name": "上栗县" - }, { - "code": "360323", - "name": "芦溪县" - }] - }, { - "code": "3604", - "name": "九江市", - "children": [{ - "code": "360402", - "name": "濂溪区" - }, { - "code": "360403", - "name": "浔阳区" - }, { - "code": "360404", - "name": "柴桑区" - }, { - "code": "360423", - "name": "武宁县" - }, { - "code": "360424", - "name": "修水县" - }, { - "code": "360425", - "name": "永修县" - }, { - "code": "360426", - "name": "德安县" - }, { - "code": "360428", - "name": "都昌县" - }, { - "code": "360429", - "name": "湖口县" - }, { - "code": "360430", - "name": "彭泽县" - }, { - "code": "360481", - "name": "瑞昌市" - }, { - "code": "360482", - "name": "共青城市" - }, { - "code": "360483", - "name": "庐山市" - }] - }, { - "code": "3605", - "name": "新余市", - "children": [{ - "code": "360502", - "name": "渝水区" - }, { - "code": "360521", - "name": "分宜县" - }] - }, { - "code": "3606", - "name": "鹰潭市", - "children": [{ - "code": "360602", - "name": "月湖区" - }, { - "code": "360603", - "name": "余江区" - }, { - "code": "360681", - "name": "贵溪市" - }] - }, { - "code": "3607", - "name": "赣州市", - "children": [{ - "code": "360702", - "name": "章贡区" - }, { - "code": "360703", - "name": "南康区" - }, { - "code": "360704", - "name": "赣县区" - }, { - "code": "360722", - "name": "信丰县" - }, { - "code": "360723", - "name": "大余县" - }, { - "code": "360724", - "name": "上犹县" - }, { - "code": "360725", - "name": "崇义县" - }, { - "code": "360726", - "name": "安远县" - }, { - "code": "360728", - "name": "定南县" - }, { - "code": "360729", - "name": "全南县" - }, { - "code": "360730", - "name": "宁都县" - }, { - "code": "360731", - "name": "于都县" - }, { - "code": "360732", - "name": "兴国县" - }, { - "code": "360733", - "name": "会昌县" - }, { - "code": "360734", - "name": "寻乌县" - }, { - "code": "360735", - "name": "石城县" - }, { - "code": "360781", - "name": "瑞金市" - }, { - "code": "360783", - "name": "龙南市" - }] - }, { - "code": "3608", - "name": "吉安市", - "children": [{ - "code": "360802", - "name": "吉州区" - }, { - "code": "360803", - "name": "青原区" - }, { - "code": "360821", - "name": "吉安县" - }, { - "code": "360822", - "name": "吉水县" - }, { - "code": "360823", - "name": "峡江县" - }, { - "code": "360824", - "name": "新干县" - }, { - "code": "360825", - "name": "永丰县" - }, { - "code": "360826", - "name": "泰和县" - }, { - "code": "360827", - "name": "遂川县" - }, { - "code": "360828", - "name": "万安县" - }, { - "code": "360829", - "name": "安福县" - }, { - "code": "360830", - "name": "永新县" - }, { - "code": "360881", - "name": "井冈山市" - }] - }, { - "code": "3609", - "name": "宜春市", - "children": [{ - "code": "360902", - "name": "袁州区" - }, { - "code": "360921", - "name": "奉新县" - }, { - "code": "360922", - "name": "万载县" - }, { - "code": "360923", - "name": "上高县" - }, { - "code": "360924", - "name": "宜丰县" - }, { - "code": "360925", - "name": "靖安县" - }, { - "code": "360926", - "name": "铜鼓县" - }, { - "code": "360981", - "name": "丰城市" - }, { - "code": "360982", - "name": "樟树市" - }, { - "code": "360983", - "name": "高安市" - }] - }, { - "code": "3610", - "name": "抚州市", - "children": [{ - "code": "361002", - "name": "临川区" - }, { - "code": "361003", - "name": "东乡区" - }, { - "code": "361021", - "name": "南城县" - }, { - "code": "361022", - "name": "黎川县" - }, { - "code": "361023", - "name": "南丰县" - }, { - "code": "361024", - "name": "崇仁县" - }, { - "code": "361025", - "name": "乐安县" - }, { - "code": "361026", - "name": "宜黄县" - }, { - "code": "361027", - "name": "金溪县" - }, { - "code": "361028", - "name": "资溪县" - }, { - "code": "361030", - "name": "广昌县" - }] - }, { - "code": "3611", - "name": "上饶市", - "children": [{ - "code": "361102", - "name": "信州区" - }, { - "code": "361103", - "name": "广丰区" - }, { - "code": "361104", - "name": "广信区" - }, { - "code": "361123", - "name": "玉山县" - }, { - "code": "361124", - "name": "铅山县" - }, { - "code": "361125", - "name": "横峰县" - }, { - "code": "361126", - "name": "弋阳县" - }, { - "code": "361127", - "name": "余干县" - }, { - "code": "361128", - "name": "鄱阳县" - }, { - "code": "361129", - "name": "万年县" - }, { - "code": "361130", - "name": "婺源县" - }, { - "code": "361181", - "name": "德兴市" - }] - }] -}, { - "code": "37", - "name": "山东省", - "children": [{ - "code": "3701", - "name": "济南市", - "children": [{ - "code": "370102", - "name": "历下区" - }, { - "code": "370103", - "name": "市中区" - }, { - "code": "370104", - "name": "槐荫区" - }, { - "code": "370105", - "name": "天桥区" - }, { - "code": "370112", - "name": "历城区" - }, { - "code": "370113", - "name": "长清区" - }, { - "code": "370114", - "name": "章丘区" - }, { - "code": "370115", - "name": "济阳区" - }, { - "code": "370116", - "name": "莱芜区" - }, { - "code": "370117", - "name": "钢城区" - }, { - "code": "370124", - "name": "平阴县" - }, { - "code": "370126", - "name": "商河县" - }, { - "code": "370171", - "name": "济南高新技术产业开发区" - }] - }, { - "code": "3702", - "name": "青岛市", - "children": [{ - "code": "370202", - "name": "市南区" - }, { - "code": "370203", - "name": "市北区" - }, { - "code": "370211", - "name": "黄岛区" - }, { - "code": "370212", - "name": "崂山区" - }, { - "code": "370213", - "name": "李沧区" - }, { - "code": "370214", - "name": "城阳区" - }, { - "code": "370215", - "name": "即墨区" - }, { - "code": "370271", - "name": "青岛高新技术产业开发区" - }, { - "code": "370281", - "name": "胶州市" - }, { - "code": "370283", - "name": "平度市" - }, { - "code": "370285", - "name": "莱西市" - }] - }, { - "code": "3703", - "name": "淄博市", - "children": [{ - "code": "370302", - "name": "淄川区" - }, { - "code": "370303", - "name": "张店区" - }, { - "code": "370304", - "name": "博山区" - }, { - "code": "370305", - "name": "临淄区" - }, { - "code": "370306", - "name": "周村区" - }, { - "code": "370321", - "name": "桓台县" - }, { - "code": "370322", - "name": "高青县" - }, { - "code": "370323", - "name": "沂源县" - }] - }, { - "code": "3704", - "name": "枣庄市", - "children": [{ - "code": "370402", - "name": "市中区" - }, { - "code": "370403", - "name": "薛城区" - }, { - "code": "370404", - "name": "峄城区" - }, { - "code": "370405", - "name": "台儿庄区" - }, { - "code": "370406", - "name": "山亭区" - }, { - "code": "370481", - "name": "滕州市" - }] - }, { - "code": "3705", - "name": "东营市", - "children": [{ - "code": "370502", - "name": "东营区" - }, { - "code": "370503", - "name": "河口区" - }, { - "code": "370505", - "name": "垦利区" - }, { - "code": "370522", - "name": "利津县" - }, { - "code": "370523", - "name": "广饶县" - }, { - "code": "370571", - "name": "东营经济技术开发区" - }, { - "code": "370572", - "name": "东营港经济开发区" - }] - }, { - "code": "3706", - "name": "烟台市", - "children": [{ - "code": "370602", - "name": "芝罘区" - }, { - "code": "370611", - "name": "福山区" - }, { - "code": "370612", - "name": "牟平区" - }, { - "code": "370613", - "name": "莱山区" - }, { - "code": "370614", - "name": "蓬莱区" - }, { - "code": "370671", - "name": "烟台高新技术产业开发区" - }, { - "code": "370672", - "name": "烟台经济技术开发区" - }, { - "code": "370681", - "name": "龙口市" - }, { - "code": "370682", - "name": "莱阳市" - }, { - "code": "370683", - "name": "莱州市" - }, { - "code": "370685", - "name": "招远市" - }, { - "code": "370686", - "name": "栖霞市" - }, { - "code": "370687", - "name": "海阳市" - }] - }, { - "code": "3707", - "name": "潍坊市", - "children": [{ - "code": "370702", - "name": "潍城区" - }, { - "code": "370703", - "name": "寒亭区" - }, { - "code": "370704", - "name": "坊子区" - }, { - "code": "370705", - "name": "奎文区" - }, { - "code": "370724", - "name": "临朐县" - }, { - "code": "370725", - "name": "昌乐县" - }, { - "code": "370772", - "name": "潍坊滨海经济技术开发区" - }, { - "code": "370781", - "name": "青州市" - }, { - "code": "370782", - "name": "诸城市" - }, { - "code": "370783", - "name": "寿光市" - }, { - "code": "370784", - "name": "安丘市" - }, { - "code": "370785", - "name": "高密市" - }, { - "code": "370786", - "name": "昌邑市" - }] - }, { - "code": "3708", - "name": "济宁市", - "children": [{ - "code": "370811", - "name": "任城区" - }, { - "code": "370812", - "name": "兖州区" - }, { - "code": "370826", - "name": "微山县" - }, { - "code": "370827", - "name": "鱼台县" - }, { - "code": "370828", - "name": "金乡县" - }, { - "code": "370829", - "name": "嘉祥县" - }, { - "code": "370830", - "name": "汶上县" - }, { - "code": "370831", - "name": "泗水县" - }, { - "code": "370832", - "name": "梁山县" - }, { - "code": "370871", - "name": "济宁高新技术产业开发区" - }, { - "code": "370881", - "name": "曲阜市" - }, { - "code": "370883", - "name": "邹城市" - }] - }, { - "code": "3709", - "name": "泰安市", - "children": [{ - "code": "370902", - "name": "泰山区" - }, { - "code": "370911", - "name": "岱岳区" - }, { - "code": "370921", - "name": "宁阳县" - }, { - "code": "370923", - "name": "东平县" - }, { - "code": "370982", - "name": "新泰市" - }, { - "code": "370983", - "name": "肥城市" - }] - }, { - "code": "3710", - "name": "威海市", - "children": [{ - "code": "371002", - "name": "环翠区" - }, { - "code": "371003", - "name": "文登区" - }, { - "code": "371071", - "name": "威海火炬高技术产业开发区" - }, { - "code": "371072", - "name": "威海经济技术开发区" - }, { - "code": "371073", - "name": "威海临港经济技术开发区" - }, { - "code": "371082", - "name": "荣成市" - }, { - "code": "371083", - "name": "乳山市" - }] - }, { - "code": "3711", - "name": "日照市", - "children": [{ - "code": "371102", - "name": "东港区" - }, { - "code": "371103", - "name": "岚山区" - }, { - "code": "371121", - "name": "五莲县" - }, { - "code": "371122", - "name": "莒县" - }, { - "code": "371171", - "name": "日照经济技术开发区" - }] - }, { - "code": "3713", - "name": "临沂市", - "children": [{ - "code": "371302", - "name": "兰山区" - }, { - "code": "371311", - "name": "罗庄区" - }, { - "code": "371312", - "name": "河东区" - }, { - "code": "371321", - "name": "沂南县" - }, { - "code": "371322", - "name": "郯城县" - }, { - "code": "371323", - "name": "沂水县" - }, { - "code": "371324", - "name": "兰陵县" - }, { - "code": "371325", - "name": "费县" - }, { - "code": "371326", - "name": "平邑县" - }, { - "code": "371327", - "name": "莒南县" - }, { - "code": "371328", - "name": "蒙阴县" - }, { - "code": "371329", - "name": "临沭县" - }, { - "code": "371371", - "name": "临沂高新技术产业开发区" - }] - }, { - "code": "3714", - "name": "德州市", - "children": [{ - "code": "371402", - "name": "德城区" - }, { - "code": "371403", - "name": "陵城区" - }, { - "code": "371422", - "name": "宁津县" - }, { - "code": "371423", - "name": "庆云县" - }, { - "code": "371424", - "name": "临邑县" - }, { - "code": "371425", - "name": "齐河县" - }, { - "code": "371426", - "name": "平原县" - }, { - "code": "371427", - "name": "夏津县" - }, { - "code": "371428", - "name": "武城县" - }, { - "code": "371471", - "name": "德州经济技术开发区" - }, { - "code": "371472", - "name": "德州运河经济开发区" - }, { - "code": "371481", - "name": "乐陵市" - }, { - "code": "371482", - "name": "禹城市" - }] - }, { - "code": "3715", - "name": "聊城市", - "children": [{ - "code": "371502", - "name": "东昌府区" - }, { - "code": "371503", - "name": "茌平区" - }, { - "code": "371521", - "name": "阳谷县" - }, { - "code": "371522", - "name": "莘县" - }, { - "code": "371524", - "name": "东阿县" - }, { - "code": "371525", - "name": "冠县" - }, { - "code": "371526", - "name": "高唐县" - }, { - "code": "371581", - "name": "临清市" - }] - }, { - "code": "3716", - "name": "滨州市", - "children": [{ - "code": "371602", - "name": "滨城区" - }, { - "code": "371603", - "name": "沾化区" - }, { - "code": "371621", - "name": "惠民县" - }, { - "code": "371622", - "name": "阳信县" - }, { - "code": "371623", - "name": "无棣县" - }, { - "code": "371625", - "name": "博兴县" - }, { - "code": "371681", - "name": "邹平市" - }] - }, { - "code": "3717", - "name": "菏泽市", - "children": [{ - "code": "371702", - "name": "牡丹区" - }, { - "code": "371703", - "name": "定陶区" - }, { - "code": "371721", - "name": "曹县" - }, { - "code": "371722", - "name": "单县" - }, { - "code": "371723", - "name": "成武县" - }, { - "code": "371724", - "name": "巨野县" - }, { - "code": "371725", - "name": "郓城县" - }, { - "code": "371726", - "name": "鄄城县" - }, { - "code": "371728", - "name": "东明县" - }, { - "code": "371771", - "name": "菏泽经济技术开发区" - }, { - "code": "371772", - "name": "菏泽高新技术开发区" - }] - }] -}, { - "code": "41", - "name": "河南省", - "children": [{ - "code": "4101", - "name": "郑州市", - "children": [{ - "code": "410102", - "name": "中原区" - }, { - "code": "410103", - "name": "二七区" - }, { - "code": "410104", - "name": "管城回族区" - }, { - "code": "410105", - "name": "金水区" - }, { - "code": "410106", - "name": "上街区" - }, { - "code": "410108", - "name": "惠济区" - }, { - "code": "410122", - "name": "中牟县" - }, { - "code": "410171", - "name": "郑州经济技术开发区" - }, { - "code": "410172", - "name": "郑州高新技术产业开发区" - }, { - "code": "410173", - "name": "郑州航空港经济综合实验区" - }, { - "code": "410181", - "name": "巩义市" - }, { - "code": "410182", - "name": "荥阳市" - }, { - "code": "410183", - "name": "新密市" - }, { - "code": "410184", - "name": "新郑市" - }, { - "code": "410185", - "name": "登封市" - }] - }, { - "code": "4102", - "name": "开封市", - "children": [{ - "code": "410202", - "name": "龙亭区" - }, { - "code": "410203", - "name": "顺河回族区" - }, { - "code": "410204", - "name": "鼓楼区" - }, { - "code": "410205", - "name": "禹王台区" - }, { - "code": "410212", - "name": "祥符区" - }, { - "code": "410221", - "name": "杞县" - }, { - "code": "410222", - "name": "通许县" - }, { - "code": "410223", - "name": "尉氏县" - }, { - "code": "410225", - "name": "兰考县" - }] - }, { - "code": "4103", - "name": "洛阳市", - "children": [{ - "code": "410302", - "name": "老城区" - }, { - "code": "410303", - "name": "西工区" - }, { - "code": "410304", - "name": "瀍河回族区" - }, { - "code": "410305", - "name": "涧西区" - }, { - "code": "410306", - "name": "吉利区" - }, { - "code": "410311", - "name": "洛龙区" - }, { - "code": "410322", - "name": "孟津县" - }, { - "code": "410323", - "name": "新安县" - }, { - "code": "410324", - "name": "栾川县" - }, { - "code": "410325", - "name": "嵩县" - }, { - "code": "410326", - "name": "汝阳县" - }, { - "code": "410327", - "name": "宜阳县" - }, { - "code": "410328", - "name": "洛宁县" - }, { - "code": "410329", - "name": "伊川县" - }, { - "code": "410371", - "name": "洛阳高新技术产业开发区" - }, { - "code": "410381", - "name": "偃师市" - }] - }, { - "code": "4104", - "name": "平顶山市", - "children": [{ - "code": "410402", - "name": "新华区" - }, { - "code": "410403", - "name": "卫东区" - }, { - "code": "410404", - "name": "石龙区" - }, { - "code": "410411", - "name": "湛河区" - }, { - "code": "410421", - "name": "宝丰县" - }, { - "code": "410422", - "name": "叶县" - }, { - "code": "410423", - "name": "鲁山县" - }, { - "code": "410425", - "name": "郏县" - }, { - "code": "410471", - "name": "平顶山高新技术产业开发区" - }, { - "code": "410472", - "name": "平顶山市城乡一体化示范区" - }, { - "code": "410481", - "name": "舞钢市" - }, { - "code": "410482", - "name": "汝州市" - }] - }, { - "code": "4105", - "name": "安阳市", - "children": [{ - "code": "410502", - "name": "文峰区" - }, { - "code": "410503", - "name": "北关区" - }, { - "code": "410505", - "name": "殷都区" - }, { - "code": "410506", - "name": "龙安区" - }, { - "code": "410522", - "name": "安阳县" - }, { - "code": "410523", - "name": "汤阴县" - }, { - "code": "410526", - "name": "滑县" - }, { - "code": "410527", - "name": "内黄县" - }, { - "code": "410571", - "name": "安阳高新技术产业开发区" - }, { - "code": "410581", - "name": "林州市" - }] - }, { - "code": "4106", - "name": "鹤壁市", - "children": [{ - "code": "410602", - "name": "鹤山区" - }, { - "code": "410603", - "name": "山城区" - }, { - "code": "410611", - "name": "淇滨区" - }, { - "code": "410621", - "name": "浚县" - }, { - "code": "410622", - "name": "淇县" - }, { - "code": "410671", - "name": "鹤壁经济技术开发区" - }] - }, { - "code": "4107", - "name": "新乡市", - "children": [{ - "code": "410702", - "name": "红旗区" - }, { - "code": "410703", - "name": "卫滨区" - }, { - "code": "410704", - "name": "凤泉区" - }, { - "code": "410711", - "name": "牧野区" - }, { - "code": "410721", - "name": "新乡县" - }, { - "code": "410724", - "name": "获嘉县" - }, { - "code": "410725", - "name": "原阳县" - }, { - "code": "410726", - "name": "延津县" - }, { - "code": "410727", - "name": "封丘县" - }, { - "code": "410771", - "name": "新乡高新技术产业开发区" - }, { - "code": "410772", - "name": "新乡经济技术开发区" - }, { - "code": "410773", - "name": "新乡市平原城乡一体化示范区" - }, { - "code": "410781", - "name": "卫辉市" - }, { - "code": "410782", - "name": "辉县市" - }, { - "code": "410783", - "name": "长垣市" - }] - }, { - "code": "4108", - "name": "焦作市", - "children": [{ - "code": "410802", - "name": "解放区" - }, { - "code": "410803", - "name": "中站区" - }, { - "code": "410804", - "name": "马村区" - }, { - "code": "410811", - "name": "山阳区" - }, { - "code": "410821", - "name": "修武县" - }, { - "code": "410822", - "name": "博爱县" - }, { - "code": "410823", - "name": "武陟县" - }, { - "code": "410825", - "name": "温县" - }, { - "code": "410871", - "name": "焦作城乡一体化示范区" - }, { - "code": "410882", - "name": "沁阳市" - }, { - "code": "410883", - "name": "孟州市" - }] - }, { - "code": "4109", - "name": "濮阳市", - "children": [{ - "code": "410902", - "name": "华龙区" - }, { - "code": "410922", - "name": "清丰县" - }, { - "code": "410923", - "name": "南乐县" - }, { - "code": "410926", - "name": "范县" - }, { - "code": "410927", - "name": "台前县" - }, { - "code": "410928", - "name": "濮阳县" - }, { - "code": "410971", - "name": "河南濮阳工业园区" - }, { - "code": "410972", - "name": "濮阳经济技术开发区" - }] - }, { - "code": "4110", - "name": "许昌市", - "children": [{ - "code": "411002", - "name": "魏都区" - }, { - "code": "411003", - "name": "建安区" - }, { - "code": "411024", - "name": "鄢陵县" - }, { - "code": "411025", - "name": "襄城县" - }, { - "code": "411071", - "name": "许昌经济技术开发区" - }, { - "code": "411081", - "name": "禹州市" - }, { - "code": "411082", - "name": "长葛市" - }] - }, { - "code": "4111", - "name": "漯河市", - "children": [{ - "code": "411102", - "name": "源汇区" - }, { - "code": "411103", - "name": "郾城区" - }, { - "code": "411104", - "name": "召陵区" - }, { - "code": "411121", - "name": "舞阳县" - }, { - "code": "411122", - "name": "临颍县" - }, { - "code": "411171", - "name": "漯河经济技术开发区" - }] - }, { - "code": "4112", - "name": "三门峡市", - "children": [{ - "code": "411202", - "name": "湖滨区" - }, { - "code": "411203", - "name": "陕州区" - }, { - "code": "411221", - "name": "渑池县" - }, { - "code": "411224", - "name": "卢氏县" - }, { - "code": "411271", - "name": "河南三门峡经济开发区" - }, { - "code": "411281", - "name": "义马市" - }, { - "code": "411282", - "name": "灵宝市" - }] - }, { - "code": "4113", - "name": "南阳市", - "children": [{ - "code": "411302", - "name": "宛城区" - }, { - "code": "411303", - "name": "卧龙区" - }, { - "code": "411321", - "name": "南召县" - }, { - "code": "411322", - "name": "方城县" - }, { - "code": "411323", - "name": "西峡县" - }, { - "code": "411324", - "name": "镇平县" - }, { - "code": "411325", - "name": "内乡县" - }, { - "code": "411326", - "name": "淅川县" - }, { - "code": "411327", - "name": "社旗县" - }, { - "code": "411328", - "name": "唐河县" - }, { - "code": "411329", - "name": "新野县" - }, { - "code": "411330", - "name": "桐柏县" - }, { - "code": "411371", - "name": "南阳高新技术产业开发区" - }, { - "code": "411372", - "name": "南阳市城乡一体化示范区" - }, { - "code": "411381", - "name": "邓州市" - }] - }, { - "code": "4114", - "name": "商丘市", - "children": [{ - "code": "411402", - "name": "梁园区" - }, { - "code": "411403", - "name": "睢阳区" - }, { - "code": "411421", - "name": "民权县" - }, { - "code": "411422", - "name": "睢县" - }, { - "code": "411423", - "name": "宁陵县" - }, { - "code": "411424", - "name": "柘城县" - }, { - "code": "411425", - "name": "虞城县" - }, { - "code": "411426", - "name": "夏邑县" - }, { - "code": "411471", - "name": "豫东综合物流产业聚集区" - }, { - "code": "411472", - "name": "河南商丘经济开发区" - }, { - "code": "411481", - "name": "永城市" - }] - }, { - "code": "4115", - "name": "信阳市", - "children": [{ - "code": "411502", - "name": "浉河区" - }, { - "code": "411503", - "name": "平桥区" - }, { - "code": "411521", - "name": "罗山县" - }, { - "code": "411522", - "name": "光山县" - }, { - "code": "411523", - "name": "新县" - }, { - "code": "411524", - "name": "商城县" - }, { - "code": "411525", - "name": "固始县" - }, { - "code": "411526", - "name": "潢川县" - }, { - "code": "411527", - "name": "淮滨县" - }, { - "code": "411528", - "name": "息县" - }, { - "code": "411571", - "name": "信阳高新技术产业开发区" - }] - }, { - "code": "4116", - "name": "周口市", - "children": [{ - "code": "411602", - "name": "川汇区" - }, { - "code": "411603", - "name": "淮阳区" - }, { - "code": "411621", - "name": "扶沟县" - }, { - "code": "411622", - "name": "西华县" - }, { - "code": "411623", - "name": "商水县" - }, { - "code": "411624", - "name": "沈丘县" - }, { - "code": "411625", - "name": "郸城县" - }, { - "code": "411627", - "name": "太康县" - }, { - "code": "411628", - "name": "鹿邑县" - }, { - "code": "411671", - "name": "河南周口经济开发区" - }, { - "code": "411681", - "name": "项城市" - }] - }, { - "code": "4117", - "name": "驻马店市", - "children": [{ - "code": "411702", - "name": "驿城区" - }, { - "code": "411721", - "name": "西平县" - }, { - "code": "411722", - "name": "上蔡县" - }, { - "code": "411723", - "name": "平舆县" - }, { - "code": "411724", - "name": "正阳县" - }, { - "code": "411725", - "name": "确山县" - }, { - "code": "411726", - "name": "泌阳县" - }, { - "code": "411727", - "name": "汝南县" - }, { - "code": "411728", - "name": "遂平县" - }, { - "code": "411729", - "name": "新蔡县" - }, { - "code": "411771", - "name": "河南驻马店经济开发区" - }] - }, { - "code": "4190", - "name": "省直辖县级行政区划", - "children": [{ - "code": "419001", - "name": "济源市" - }] - }] -}, { - "code": "42", - "name": "湖北省", - "children": [{ - "code": "4201", - "name": "武汉市", - "children": [{ - "code": "420102", - "name": "江岸区" - }, { - "code": "420103", - "name": "江汉区" - }, { - "code": "420104", - "name": "硚口区" - }, { - "code": "420105", - "name": "汉阳区" - }, { - "code": "420106", - "name": "武昌区" - }, { - "code": "420107", - "name": "青山区" - }, { - "code": "420111", - "name": "洪山区" - }, { - "code": "420112", - "name": "东西湖区" - }, { - "code": "420113", - "name": "汉南区" - }, { - "code": "420114", - "name": "蔡甸区" - }, { - "code": "420115", - "name": "江夏区" - }, { - "code": "420116", - "name": "黄陂区" - }, { - "code": "420117", - "name": "新洲区" - }] - }, { - "code": "4202", - "name": "黄石市", - "children": [{ - "code": "420202", - "name": "黄石港区" - }, { - "code": "420203", - "name": "西塞山区" - }, { - "code": "420204", - "name": "下陆区" - }, { - "code": "420205", - "name": "铁山区" - }, { - "code": "420222", - "name": "阳新县" - }, { - "code": "420281", - "name": "大冶市" - }] - }, { - "code": "4203", - "name": "十堰市", - "children": [{ - "code": "420302", - "name": "茅箭区" - }, { - "code": "420303", - "name": "张湾区" - }, { - "code": "420304", - "name": "郧阳区" - }, { - "code": "420322", - "name": "郧西县" - }, { - "code": "420323", - "name": "竹山县" - }, { - "code": "420324", - "name": "竹溪县" - }, { - "code": "420325", - "name": "房县" - }, { - "code": "420381", - "name": "丹江口市" - }] - }, { - "code": "4205", - "name": "宜昌市", - "children": [{ - "code": "420502", - "name": "西陵区" - }, { - "code": "420503", - "name": "伍家岗区" - }, { - "code": "420504", - "name": "点军区" - }, { - "code": "420505", - "name": "猇亭区" - }, { - "code": "420506", - "name": "夷陵区" - }, { - "code": "420525", - "name": "远安县" - }, { - "code": "420526", - "name": "兴山县" - }, { - "code": "420527", - "name": "秭归县" - }, { - "code": "420528", - "name": "长阳土家族自治县" - }, { - "code": "420529", - "name": "五峰土家族自治县" - }, { - "code": "420581", - "name": "宜都市" - }, { - "code": "420582", - "name": "当阳市" - }, { - "code": "420583", - "name": "枝江市" - }] - }, { - "code": "4206", - "name": "襄阳市", - "children": [{ - "code": "420602", - "name": "襄城区" - }, { - "code": "420606", - "name": "樊城区" - }, { - "code": "420607", - "name": "襄州区" - }, { - "code": "420624", - "name": "南漳县" - }, { - "code": "420625", - "name": "谷城县" - }, { - "code": "420626", - "name": "保康县" - }, { - "code": "420682", - "name": "老河口市" - }, { - "code": "420683", - "name": "枣阳市" - }, { - "code": "420684", - "name": "宜城市" - }] - }, { - "code": "4207", - "name": "鄂州市", - "children": [{ - "code": "420702", - "name": "梁子湖区" - }, { - "code": "420703", - "name": "华容区" - }, { - "code": "420704", - "name": "鄂城区" - }] - }, { - "code": "4208", - "name": "荆门市", - "children": [{ - "code": "420802", - "name": "东宝区" - }, { - "code": "420804", - "name": "掇刀区" - }, { - "code": "420822", - "name": "沙洋县" - }, { - "code": "420881", - "name": "钟祥市" - }, { - "code": "420882", - "name": "京山市" - }] - }, { - "code": "4209", - "name": "孝感市", - "children": [{ - "code": "420902", - "name": "孝南区" - }, { - "code": "420921", - "name": "孝昌县" - }, { - "code": "420922", - "name": "大悟县" - }, { - "code": "420923", - "name": "云梦县" - }, { - "code": "420981", - "name": "应城市" - }, { - "code": "420982", - "name": "安陆市" - }, { - "code": "420984", - "name": "汉川市" - }] - }, { - "code": "4210", - "name": "荆州市", - "children": [{ - "code": "421002", - "name": "沙市区" - }, { - "code": "421003", - "name": "荆州区" - }, { - "code": "421022", - "name": "公安县" - }, { - "code": "421023", - "name": "监利县" - }, { - "code": "421024", - "name": "江陵县" - }, { - "code": "421071", - "name": "荆州经济技术开发区" - }, { - "code": "421081", - "name": "石首市" - }, { - "code": "421083", - "name": "洪湖市" - }, { - "code": "421087", - "name": "松滋市" - }] - }, { - "code": "4211", - "name": "黄冈市", - "children": [{ - "code": "421102", - "name": "黄州区" - }, { - "code": "421121", - "name": "团风县" - }, { - "code": "421122", - "name": "红安县" - }, { - "code": "421123", - "name": "罗田县" - }, { - "code": "421124", - "name": "英山县" - }, { - "code": "421125", - "name": "浠水县" - }, { - "code": "421126", - "name": "蕲春县" - }, { - "code": "421127", - "name": "黄梅县" - }, { - "code": "421171", - "name": "龙感湖管理区" - }, { - "code": "421181", - "name": "麻城市" - }, { - "code": "421182", - "name": "武穴市" - }] - }, { - "code": "4212", - "name": "咸宁市", - "children": [{ - "code": "421202", - "name": "咸安区" - }, { - "code": "421221", - "name": "嘉鱼县" - }, { - "code": "421222", - "name": "通城县" - }, { - "code": "421223", - "name": "崇阳县" - }, { - "code": "421224", - "name": "通山县" - }, { - "code": "421281", - "name": "赤壁市" - }] - }, { - "code": "4213", - "name": "随州市", - "children": [{ - "code": "421303", - "name": "曾都区" - }, { - "code": "421321", - "name": "随县" - }, { - "code": "421381", - "name": "广水市" - }] - }, { - "code": "4228", - "name": "恩施土家族苗族自治州", - "children": [{ - "code": "422801", - "name": "恩施市" - }, { - "code": "422802", - "name": "利川市" - }, { - "code": "422822", - "name": "建始县" - }, { - "code": "422823", - "name": "巴东县" - }, { - "code": "422825", - "name": "宣恩县" - }, { - "code": "422826", - "name": "咸丰县" - }, { - "code": "422827", - "name": "来凤县" - }, { - "code": "422828", - "name": "鹤峰县" - }] - }, { - "code": "4290", - "name": "省直辖县级行政区划", - "children": [{ - "code": "429004", - "name": "仙桃市" - }, { - "code": "429005", - "name": "潜江市" - }, { - "code": "429006", - "name": "天门市" - }, { - "code": "429021", - "name": "神农架林区" - }] - }] -}, { - "code": "43", - "name": "湖南省", - "children": [{ - "code": "4301", - "name": "长沙市", - "children": [{ - "code": "430102", - "name": "芙蓉区" - }, { - "code": "430103", - "name": "天心区" - }, { - "code": "430104", - "name": "岳麓区" - }, { - "code": "430105", - "name": "开福区" - }, { - "code": "430111", - "name": "雨花区" - }, { - "code": "430112", - "name": "望城区" - }, { - "code": "430121", - "name": "长沙县" - }, { - "code": "430181", - "name": "浏阳市" - }, { - "code": "430182", - "name": "宁乡市" - }] - }, { - "code": "4302", - "name": "株洲市", - "children": [{ - "code": "430202", - "name": "荷塘区" - }, { - "code": "430203", - "name": "芦淞区" - }, { - "code": "430204", - "name": "石峰区" - }, { - "code": "430211", - "name": "天元区" - }, { - "code": "430212", - "name": "渌口区" - }, { - "code": "430223", - "name": "攸县" - }, { - "code": "430224", - "name": "茶陵县" - }, { - "code": "430225", - "name": "炎陵县" - }, { - "code": "430271", - "name": "云龙示范区" - }, { - "code": "430281", - "name": "醴陵市" - }] - }, { - "code": "4303", - "name": "湘潭市", - "children": [{ - "code": "430302", - "name": "雨湖区" - }, { - "code": "430304", - "name": "岳塘区" - }, { - "code": "430321", - "name": "湘潭县" - }, { - "code": "430371", - "name": "湖南湘潭高新技术产业园区" - }, { - "code": "430372", - "name": "湘潭昭山示范区" - }, { - "code": "430373", - "name": "湘潭九华示范区" - }, { - "code": "430381", - "name": "湘乡市" - }, { - "code": "430382", - "name": "韶山市" - }] - }, { - "code": "4304", - "name": "衡阳市", - "children": [{ - "code": "430405", - "name": "珠晖区" - }, { - "code": "430406", - "name": "雁峰区" - }, { - "code": "430407", - "name": "石鼓区" - }, { - "code": "430408", - "name": "蒸湘区" - }, { - "code": "430412", - "name": "南岳区" - }, { - "code": "430421", - "name": "衡阳县" - }, { - "code": "430422", - "name": "衡南县" - }, { - "code": "430423", - "name": "衡山县" - }, { - "code": "430424", - "name": "衡东县" - }, { - "code": "430426", - "name": "祁东县" - }, { - "code": "430471", - "name": "衡阳综合保税区" - }, { - "code": "430472", - "name": "湖南衡阳高新技术产业园区" - }, { - "code": "430473", - "name": "湖南衡阳松木经济开发区" - }, { - "code": "430481", - "name": "耒阳市" - }, { - "code": "430482", - "name": "常宁市" - }] - }, { - "code": "4305", - "name": "邵阳市", - "children": [{ - "code": "430502", - "name": "双清区" - }, { - "code": "430503", - "name": "大祥区" - }, { - "code": "430511", - "name": "北塔区" - }, { - "code": "430522", - "name": "新邵县" - }, { - "code": "430523", - "name": "邵阳县" - }, { - "code": "430524", - "name": "隆回县" - }, { - "code": "430525", - "name": "洞口县" - }, { - "code": "430527", - "name": "绥宁县" - }, { - "code": "430528", - "name": "新宁县" - }, { - "code": "430529", - "name": "城步苗族自治县" - }, { - "code": "430581", - "name": "武冈市" - }, { - "code": "430582", - "name": "邵东市" - }] - }, { - "code": "4306", - "name": "岳阳市", - "children": [{ - "code": "430602", - "name": "岳阳楼区" - }, { - "code": "430603", - "name": "云溪区" - }, { - "code": "430611", - "name": "君山区" - }, { - "code": "430621", - "name": "岳阳县" - }, { - "code": "430623", - "name": "华容县" - }, { - "code": "430624", - "name": "湘阴县" - }, { - "code": "430626", - "name": "平江县" - }, { - "code": "430671", - "name": "岳阳市屈原管理区" - }, { - "code": "430681", - "name": "汨罗市" - }, { - "code": "430682", - "name": "临湘市" - }] - }, { - "code": "4307", - "name": "常德市", - "children": [{ - "code": "430702", - "name": "武陵区" - }, { - "code": "430703", - "name": "鼎城区" - }, { - "code": "430721", - "name": "安乡县" - }, { - "code": "430722", - "name": "汉寿县" - }, { - "code": "430723", - "name": "澧县" - }, { - "code": "430724", - "name": "临澧县" - }, { - "code": "430725", - "name": "桃源县" - }, { - "code": "430726", - "name": "石门县" - }, { - "code": "430771", - "name": "常德市西洞庭管理区" - }, { - "code": "430781", - "name": "津市市" - }] - }, { - "code": "4308", - "name": "张家界市", - "children": [{ - "code": "430802", - "name": "永定区" - }, { - "code": "430811", - "name": "武陵源区" - }, { - "code": "430821", - "name": "慈利县" - }, { - "code": "430822", - "name": "桑植县" - }] - }, { - "code": "4309", - "name": "益阳市", - "children": [{ - "code": "430902", - "name": "资阳区" - }, { - "code": "430903", - "name": "赫山区" - }, { - "code": "430921", - "name": "南县" - }, { - "code": "430922", - "name": "桃江县" - }, { - "code": "430923", - "name": "安化县" - }, { - "code": "430971", - "name": "益阳市大通湖管理区" - }, { - "code": "430972", - "name": "湖南益阳高新技术产业园区" - }, { - "code": "430981", - "name": "沅江市" - }] - }, { - "code": "4310", - "name": "郴州市", - "children": [{ - "code": "431002", - "name": "北湖区" - }, { - "code": "431003", - "name": "苏仙区" - }, { - "code": "431021", - "name": "桂阳县" - }, { - "code": "431022", - "name": "宜章县" - }, { - "code": "431023", - "name": "永兴县" - }, { - "code": "431024", - "name": "嘉禾县" - }, { - "code": "431025", - "name": "临武县" - }, { - "code": "431026", - "name": "汝城县" - }, { - "code": "431027", - "name": "桂东县" - }, { - "code": "431028", - "name": "安仁县" - }, { - "code": "431081", - "name": "资兴市" - }] - }, { - "code": "4311", - "name": "永州市", - "children": [{ - "code": "431102", - "name": "零陵区" - }, { - "code": "431103", - "name": "冷水滩区" - }, { - "code": "431121", - "name": "祁阳县" - }, { - "code": "431122", - "name": "东安县" - }, { - "code": "431123", - "name": "双牌县" - }, { - "code": "431124", - "name": "道县" - }, { - "code": "431125", - "name": "江永县" - }, { - "code": "431126", - "name": "宁远县" - }, { - "code": "431127", - "name": "蓝山县" - }, { - "code": "431128", - "name": "新田县" - }, { - "code": "431129", - "name": "江华瑶族自治县" - }, { - "code": "431171", - "name": "永州经济技术开发区" - }, { - "code": "431172", - "name": "永州市金洞管理区" - }, { - "code": "431173", - "name": "永州市回龙圩管理区" - }] - }, { - "code": "4312", - "name": "怀化市", - "children": [{ - "code": "431202", - "name": "鹤城区" - }, { - "code": "431221", - "name": "中方县" - }, { - "code": "431222", - "name": "沅陵县" - }, { - "code": "431223", - "name": "辰溪县" - }, { - "code": "431224", - "name": "溆浦县" - }, { - "code": "431225", - "name": "会同县" - }, { - "code": "431226", - "name": "麻阳苗族自治县" - }, { - "code": "431227", - "name": "新晃侗族自治县" - }, { - "code": "431228", - "name": "芷江侗族自治县" - }, { - "code": "431229", - "name": "靖州苗族侗族自治县" - }, { - "code": "431230", - "name": "通道侗族自治县" - }, { - "code": "431271", - "name": "怀化市洪江管理区" - }, { - "code": "431281", - "name": "洪江市" - }] - }, { - "code": "4313", - "name": "娄底市", - "children": [{ - "code": "431302", - "name": "娄星区" - }, { - "code": "431321", - "name": "双峰县" - }, { - "code": "431322", - "name": "新化县" - }, { - "code": "431381", - "name": "冷水江市" - }, { - "code": "431382", - "name": "涟源市" - }] - }, { - "code": "4331", - "name": "湘西土家族苗族自治州", - "children": [{ - "code": "433101", - "name": "吉首市" - }, { - "code": "433122", - "name": "泸溪县" - }, { - "code": "433123", - "name": "凤凰县" - }, { - "code": "433124", - "name": "花垣县" - }, { - "code": "433125", - "name": "保靖县" - }, { - "code": "433126", - "name": "古丈县" - }, { - "code": "433127", - "name": "永顺县" - }, { - "code": "433130", - "name": "龙山县" - }] - }] -}, { - "code": "44", - "name": "广东省", - "children": [{ - "code": "4401", - "name": "广州市", - "children": [{ - "code": "440103", - "name": "荔湾区" - }, { - "code": "440104", - "name": "越秀区" - }, { - "code": "440105", - "name": "海珠区" - }, { - "code": "440106", - "name": "天河区" - }, { - "code": "440111", - "name": "白云区" - }, { - "code": "440112", - "name": "黄埔区" - }, { - "code": "440113", - "name": "番禺区" - }, { - "code": "440114", - "name": "花都区" - }, { - "code": "440115", - "name": "南沙区" - }, { - "code": "440117", - "name": "从化区" - }, { - "code": "440118", - "name": "增城区" - }] - }, { - "code": "4402", - "name": "韶关市", - "children": [{ - "code": "440203", - "name": "武江区" - }, { - "code": "440204", - "name": "浈江区" - }, { - "code": "440205", - "name": "曲江区" - }, { - "code": "440222", - "name": "始兴县" - }, { - "code": "440224", - "name": "仁化县" - }, { - "code": "440229", - "name": "翁源县" - }, { - "code": "440232", - "name": "乳源瑶族自治县" - }, { - "code": "440233", - "name": "新丰县" - }, { - "code": "440281", - "name": "乐昌市" - }, { - "code": "440282", - "name": "南雄市" - }] - }, { - "code": "4403", - "name": "深圳市", - "children": [{ - "code": "440303", - "name": "罗湖区" - }, { - "code": "440304", - "name": "福田区" - }, { - "code": "440305", - "name": "南山区" - }, { - "code": "440306", - "name": "宝安区" - }, { - "code": "440307", - "name": "龙岗区" - }, { - "code": "440308", - "name": "盐田区" - }, { - "code": "440309", - "name": "龙华区" - }, { - "code": "440310", - "name": "坪山区" - }, { - "code": "440311", - "name": "光明区" - }] - }, { - "code": "4404", - "name": "珠海市", - "children": [{ - "code": "440402", - "name": "香洲区" - }, { - "code": "440403", - "name": "斗门区" - }, { - "code": "440404", - "name": "金湾区" - }] - }, { - "code": "4405", - "name": "汕头市", - "children": [{ - "code": "440507", - "name": "龙湖区" - }, { - "code": "440511", - "name": "金平区" - }, { - "code": "440512", - "name": "濠江区" - }, { - "code": "440513", - "name": "潮阳区" - }, { - "code": "440514", - "name": "潮南区" - }, { - "code": "440515", - "name": "澄海区" - }, { - "code": "440523", - "name": "南澳县" - }] - }, { - "code": "4406", - "name": "佛山市", - "children": [{ - "code": "440604", - "name": "禅城区" - }, { - "code": "440605", - "name": "南海区" - }, { - "code": "440606", - "name": "顺德区" - }, { - "code": "440607", - "name": "三水区" - }, { - "code": "440608", - "name": "高明区" - }] - }, { - "code": "4407", - "name": "江门市", - "children": [{ - "code": "440703", - "name": "蓬江区" - }, { - "code": "440704", - "name": "江海区" - }, { - "code": "440705", - "name": "新会区" - }, { - "code": "440781", - "name": "台山市" - }, { - "code": "440783", - "name": "开平市" - }, { - "code": "440784", - "name": "鹤山市" - }, { - "code": "440785", - "name": "恩平市" - }] - }, { - "code": "4408", - "name": "湛江市", - "children": [{ - "code": "440802", - "name": "赤坎区" - }, { - "code": "440803", - "name": "霞山区" - }, { - "code": "440804", - "name": "坡头区" - }, { - "code": "440811", - "name": "麻章区" - }, { - "code": "440823", - "name": "遂溪县" - }, { - "code": "440825", - "name": "徐闻县" - }, { - "code": "440881", - "name": "廉江市" - }, { - "code": "440882", - "name": "雷州市" - }, { - "code": "440883", - "name": "吴川市" - }] - }, { - "code": "4409", - "name": "茂名市", - "children": [{ - "code": "440902", - "name": "茂南区" - }, { - "code": "440904", - "name": "电白区" - }, { - "code": "440981", - "name": "高州市" - }, { - "code": "440982", - "name": "化州市" - }, { - "code": "440983", - "name": "信宜市" - }] - }, { - "code": "4412", - "name": "肇庆市", - "children": [{ - "code": "441202", - "name": "端州区" - }, { - "code": "441203", - "name": "鼎湖区" - }, { - "code": "441204", - "name": "高要区" - }, { - "code": "441223", - "name": "广宁县" - }, { - "code": "441224", - "name": "怀集县" - }, { - "code": "441225", - "name": "封开县" - }, { - "code": "441226", - "name": "德庆县" - }, { - "code": "441284", - "name": "四会市" - }] - }, { - "code": "4413", - "name": "惠州市", - "children": [{ - "code": "441302", - "name": "惠城区" - }, { - "code": "441303", - "name": "惠阳区" - }, { - "code": "441322", - "name": "博罗县" - }, { - "code": "441323", - "name": "惠东县" - }, { - "code": "441324", - "name": "龙门县" - }] - }, { - "code": "4414", - "name": "梅州市", - "children": [{ - "code": "441402", - "name": "梅江区" - }, { - "code": "441403", - "name": "梅县区" - }, { - "code": "441422", - "name": "大埔县" - }, { - "code": "441423", - "name": "丰顺县" - }, { - "code": "441424", - "name": "五华县" - }, { - "code": "441426", - "name": "平远县" - }, { - "code": "441427", - "name": "蕉岭县" - }, { - "code": "441481", - "name": "兴宁市" - }] - }, { - "code": "4415", - "name": "汕尾市", - "children": [{ - "code": "441502", - "name": "城区" - }, { - "code": "441521", - "name": "海丰县" - }, { - "code": "441523", - "name": "陆河县" - }, { - "code": "441581", - "name": "陆丰市" - }] - }, { - "code": "4416", - "name": "河源市", - "children": [{ - "code": "441602", - "name": "源城区" - }, { - "code": "441621", - "name": "紫金县" - }, { - "code": "441622", - "name": "龙川县" - }, { - "code": "441623", - "name": "连平县" - }, { - "code": "441624", - "name": "和平县" - }, { - "code": "441625", - "name": "东源县" - }] - }, { - "code": "4417", - "name": "阳江市", - "children": [{ - "code": "441702", - "name": "江城区" - }, { - "code": "441704", - "name": "阳东区" - }, { - "code": "441721", - "name": "阳西县" - }, { - "code": "441781", - "name": "阳春市" - }] - }, { - "code": "4418", - "name": "清远市", - "children": [{ - "code": "441802", - "name": "清城区" - }, { - "code": "441803", - "name": "清新区" - }, { - "code": "441821", - "name": "佛冈县" - }, { - "code": "441823", - "name": "阳山县" - }, { - "code": "441825", - "name": "连山壮族瑶族自治县" - }, { - "code": "441826", - "name": "连南瑶族自治县" - }, { - "code": "441881", - "name": "英德市" - }, { - "code": "441882", - "name": "连州市" - }] - }, { - "code": "4419", - "name": "东莞市", - "children": [{ - "code": "441900003", - "name": "东城街道" - }, { - "code": "441900004", - "name": "南城街道" - }, { - "code": "441900005", - "name": "万江街道" - }, { - "code": "441900006", - "name": "莞城街道" - }, { - "code": "441900101", - "name": "石碣镇" - }, { - "code": "441900102", - "name": "石龙镇" - }, { - "code": "441900103", - "name": "茶山镇" - }, { - "code": "441900104", - "name": "石排镇" - }, { - "code": "441900105", - "name": "企石镇" - }, { - "code": "441900106", - "name": "横沥镇" - }, { - "code": "441900107", - "name": "桥头镇" - }, { - "code": "441900108", - "name": "谢岗镇" - }, { - "code": "441900109", - "name": "东坑镇" - }, { - "code": "441900110", - "name": "常平镇" - }, { - "code": "441900111", - "name": "寮步镇" - }, { - "code": "441900112", - "name": "樟木头镇" - }, { - "code": "441900113", - "name": "大朗镇" - }, { - "code": "441900114", - "name": "黄江镇" - }, { - "code": "441900115", - "name": "清溪镇" - }, { - "code": "441900116", - "name": "塘厦镇" - }, { - "code": "441900117", - "name": "凤岗镇" - }, { - "code": "441900118", - "name": "大岭山镇" - }, { - "code": "441900119", - "name": "长安镇" - }, { - "code": "441900121", - "name": "虎门镇" - }, { - "code": "441900122", - "name": "厚街镇" - }, { - "code": "441900123", - "name": "沙田镇" - }, { - "code": "441900124", - "name": "道滘镇" - }, { - "code": "441900125", - "name": "洪梅镇" - }, { - "code": "441900126", - "name": "麻涌镇" - }, { - "code": "441900127", - "name": "望牛墩镇" - }, { - "code": "441900128", - "name": "中堂镇" - }, { - "code": "441900129", - "name": "高埗镇" - }, { - "code": "441900401", - "name": "松山湖" - }, { - "code": "441900402", - "name": "东莞港" - }, { - "code": "441900403", - "name": "东莞生态园" - }] - }, { - "code": "4420", - "name": "中山市", - "children": [{ - "code": "442000001", - "name": "石岐街道" - }, { - "code": "442000002", - "name": "东区街道" - }, { - "code": "442000003", - "name": "中山港街道" - }, { - "code": "442000004", - "name": "西区街道" - }, { - "code": "442000005", - "name": "南区街道" - }, { - "code": "442000006", - "name": "五桂山街道" - }, { - "code": "442000100", - "name": "小榄镇" - }, { - "code": "442000101", - "name": "黄圃镇" - }, { - "code": "442000102", - "name": "民众镇" - }, { - "code": "442000103", - "name": "东凤镇" - }, { - "code": "442000104", - "name": "东升镇" - }, { - "code": "442000105", - "name": "古镇镇" - }, { - "code": "442000106", - "name": "沙溪镇" - }, { - "code": "442000107", - "name": "坦洲镇" - }, { - "code": "442000108", - "name": "港口镇" - }, { - "code": "442000109", - "name": "三角镇" - }, { - "code": "442000110", - "name": "横栏镇" - }, { - "code": "442000111", - "name": "南头镇" - }, { - "code": "442000112", - "name": "阜沙镇" - }, { - "code": "442000113", - "name": "南朗镇" - }, { - "code": "442000114", - "name": "三乡镇" - }, { - "code": "442000115", - "name": "板芙镇" - }, { - "code": "442000116", - "name": "大涌镇" - }, { - "code": "442000117", - "name": "神湾镇" - }] - }, { - "code": "4451", - "name": "潮州市", - "children": [{ - "code": "445102", - "name": "湘桥区" - }, { - "code": "445103", - "name": "潮安区" - }, { - "code": "445122", - "name": "饶平县" - }] - }, { - "code": "4452", - "name": "揭阳市", - "children": [{ - "code": "445202", - "name": "榕城区" - }, { - "code": "445203", - "name": "揭东区" - }, { - "code": "445222", - "name": "揭西县" - }, { - "code": "445224", - "name": "惠来县" - }, { - "code": "445281", - "name": "普宁市" - }] - }, { - "code": "4453", - "name": "云浮市", - "children": [{ - "code": "445302", - "name": "云城区" - }, { - "code": "445303", - "name": "云安区" - }, { - "code": "445321", - "name": "新兴县" - }, { - "code": "445322", - "name": "郁南县" - }, { - "code": "445381", - "name": "罗定市" - }] - }] -}, { - "code": "45", - "name": "广西壮族自治区", - "children": [{ - "code": "4501", - "name": "南宁市", - "children": [{ - "code": "450102", - "name": "兴宁区" - }, { - "code": "450103", - "name": "青秀区" - }, { - "code": "450105", - "name": "江南区" - }, { - "code": "450107", - "name": "西乡塘区" - }, { - "code": "450108", - "name": "良庆区" - }, { - "code": "450109", - "name": "邕宁区" - }, { - "code": "450110", - "name": "武鸣区" - }, { - "code": "450123", - "name": "隆安县" - }, { - "code": "450124", - "name": "马山县" - }, { - "code": "450125", - "name": "上林县" - }, { - "code": "450126", - "name": "宾阳县" - }, { - "code": "450127", - "name": "横县" - }] - }, { - "code": "4502", - "name": "柳州市", - "children": [{ - "code": "450202", - "name": "城中区" - }, { - "code": "450203", - "name": "鱼峰区" - }, { - "code": "450204", - "name": "柳南区" - }, { - "code": "450205", - "name": "柳北区" - }, { - "code": "450206", - "name": "柳江区" - }, { - "code": "450222", - "name": "柳城县" - }, { - "code": "450223", - "name": "鹿寨县" - }, { - "code": "450224", - "name": "融安县" - }, { - "code": "450225", - "name": "融水苗族自治县" - }, { - "code": "450226", - "name": "三江侗族自治县" - }] - }, { - "code": "4503", - "name": "桂林市", - "children": [{ - "code": "450302", - "name": "秀峰区" - }, { - "code": "450303", - "name": "叠彩区" - }, { - "code": "450304", - "name": "象山区" - }, { - "code": "450305", - "name": "七星区" - }, { - "code": "450311", - "name": "雁山区" - }, { - "code": "450312", - "name": "临桂区" - }, { - "code": "450321", - "name": "阳朔县" - }, { - "code": "450323", - "name": "灵川县" - }, { - "code": "450324", - "name": "全州县" - }, { - "code": "450325", - "name": "兴安县" - }, { - "code": "450326", - "name": "永福县" - }, { - "code": "450327", - "name": "灌阳县" - }, { - "code": "450328", - "name": "龙胜各族自治县" - }, { - "code": "450329", - "name": "资源县" - }, { - "code": "450330", - "name": "平乐县" - }, { - "code": "450332", - "name": "恭城瑶族自治县" - }, { - "code": "450381", - "name": "荔浦市" - }] - }, { - "code": "4504", - "name": "梧州市", - "children": [{ - "code": "450403", - "name": "万秀区" - }, { - "code": "450405", - "name": "长洲区" - }, { - "code": "450406", - "name": "龙圩区" - }, { - "code": "450421", - "name": "苍梧县" - }, { - "code": "450422", - "name": "藤县" - }, { - "code": "450423", - "name": "蒙山县" - }, { - "code": "450481", - "name": "岑溪市" - }] - }, { - "code": "4505", - "name": "北海市", - "children": [{ - "code": "450502", - "name": "海城区" - }, { - "code": "450503", - "name": "银海区" - }, { - "code": "450512", - "name": "铁山港区" - }, { - "code": "450521", - "name": "合浦县" - }] - }, { - "code": "4506", - "name": "防城港市", - "children": [{ - "code": "450602", - "name": "港口区" - }, { - "code": "450603", - "name": "防城区" - }, { - "code": "450621", - "name": "上思县" - }, { - "code": "450681", - "name": "东兴市" - }] - }, { - "code": "4507", - "name": "钦州市", - "children": [{ - "code": "450702", - "name": "钦南区" - }, { - "code": "450703", - "name": "钦北区" - }, { - "code": "450721", - "name": "灵山县" - }, { - "code": "450722", - "name": "浦北县" - }] - }, { - "code": "4508", - "name": "贵港市", - "children": [{ - "code": "450802", - "name": "港北区" - }, { - "code": "450803", - "name": "港南区" - }, { - "code": "450804", - "name": "覃塘区" - }, { - "code": "450821", - "name": "平南县" - }, { - "code": "450881", - "name": "桂平市" - }] - }, { - "code": "4509", - "name": "玉林市", - "children": [{ - "code": "450902", - "name": "玉州区" - }, { - "code": "450903", - "name": "福绵区" - }, { - "code": "450921", - "name": "容县" - }, { - "code": "450922", - "name": "陆川县" - }, { - "code": "450923", - "name": "博白县" - }, { - "code": "450924", - "name": "兴业县" - }, { - "code": "450981", - "name": "北流市" - }] - }, { - "code": "4510", - "name": "百色市", - "children": [{ - "code": "451002", - "name": "右江区" - }, { - "code": "451003", - "name": "田阳区" - }, { - "code": "451022", - "name": "田东县" - }, { - "code": "451024", - "name": "德保县" - }, { - "code": "451026", - "name": "那坡县" - }, { - "code": "451027", - "name": "凌云县" - }, { - "code": "451028", - "name": "乐业县" - }, { - "code": "451029", - "name": "田林县" - }, { - "code": "451030", - "name": "西林县" - }, { - "code": "451031", - "name": "隆林各族自治县" - }, { - "code": "451081", - "name": "靖西市" - }, { - "code": "451082", - "name": "平果市" - }] - }, { - "code": "4511", - "name": "贺州市", - "children": [{ - "code": "451102", - "name": "八步区" - }, { - "code": "451103", - "name": "平桂区" - }, { - "code": "451121", - "name": "昭平县" - }, { - "code": "451122", - "name": "钟山县" - }, { - "code": "451123", - "name": "富川瑶族自治县" - }] - }, { - "code": "4512", - "name": "河池市", - "children": [{ - "code": "451202", - "name": "金城江区" - }, { - "code": "451203", - "name": "宜州区" - }, { - "code": "451221", - "name": "南丹县" - }, { - "code": "451222", - "name": "天峨县" - }, { - "code": "451223", - "name": "凤山县" - }, { - "code": "451224", - "name": "东兰县" - }, { - "code": "451225", - "name": "罗城仫佬族自治县" - }, { - "code": "451226", - "name": "环江毛南族自治县" - }, { - "code": "451227", - "name": "巴马瑶族自治县" - }, { - "code": "451228", - "name": "都安瑶族自治县" - }, { - "code": "451229", - "name": "大化瑶族自治县" - }] - }, { - "code": "4513", - "name": "来宾市", - "children": [{ - "code": "451302", - "name": "兴宾区" - }, { - "code": "451321", - "name": "忻城县" - }, { - "code": "451322", - "name": "象州县" - }, { - "code": "451323", - "name": "武宣县" - }, { - "code": "451324", - "name": "金秀瑶族自治县" - }, { - "code": "451381", - "name": "合山市" - }] - }, { - "code": "4514", - "name": "崇左市", - "children": [{ - "code": "451402", - "name": "江州区" - }, { - "code": "451421", - "name": "扶绥县" - }, { - "code": "451422", - "name": "宁明县" - }, { - "code": "451423", - "name": "龙州县" - }, { - "code": "451424", - "name": "大新县" - }, { - "code": "451425", - "name": "天等县" - }, { - "code": "451481", - "name": "凭祥市" - }] - }] -}, { - "code": "46", - "name": "海南省", - "children": [{ - "code": "4601", - "name": "海口市", - "children": [{ - "code": "460105", - "name": "秀英区" - }, { - "code": "460106", - "name": "龙华区" - }, { - "code": "460107", - "name": "琼山区" - }, { - "code": "460108", - "name": "美兰区" - }] - }, { - "code": "4602", - "name": "三亚市", - "children": [{ - "code": "460202", - "name": "海棠区" - }, { - "code": "460203", - "name": "吉阳区" - }, { - "code": "460204", - "name": "天涯区" - }, { - "code": "460205", - "name": "崖州区" - }] - }, { - "code": "4603", - "name": "三沙市", - "children": [{ - "code": "460321", - "name": "西沙群岛" - }, { - "code": "460322", - "name": "南沙群岛" - }, { - "code": "460323", - "name": "中沙群岛的岛礁及其海域" - }] - }, { - "code": "4604", - "name": "儋州市", - "children": [{ - "code": "460400100", - "name": "那大镇" - }, { - "code": "460400101", - "name": "和庆镇" - }, { - "code": "460400102", - "name": "南丰镇" - }, { - "code": "460400103", - "name": "大成镇" - }, { - "code": "460400104", - "name": "雅星镇" - }, { - "code": "460400105", - "name": "兰洋镇" - }, { - "code": "460400106", - "name": "光村镇" - }, { - "code": "460400107", - "name": "木棠镇" - }, { - "code": "460400108", - "name": "海头镇" - }, { - "code": "460400109", - "name": "峨蔓镇" - }, { - "code": "460400111", - "name": "王五镇" - }, { - "code": "460400112", - "name": "白马井镇" - }, { - "code": "460400113", - "name": "中和镇" - }, { - "code": "460400114", - "name": "排浦镇" - }, { - "code": "460400115", - "name": "东成镇" - }, { - "code": "460400116", - "name": "新州镇" - }, { - "code": "460400499", - "name": "洋浦经济开发区" - }, { - "code": "460400500", - "name": "华南热作学院" - }] - }, { - "code": "4690", - "name": "省直辖县级行政区划", - "children": [{ - "code": "469001", - "name": "五指山市" - }, { - "code": "469002", - "name": "琼海市" - }, { - "code": "469005", - "name": "文昌市" - }, { - "code": "469006", - "name": "万宁市" - }, { - "code": "469007", - "name": "东方市" - }, { - "code": "469021", - "name": "定安县" - }, { - "code": "469022", - "name": "屯昌县" - }, { - "code": "469023", - "name": "澄迈县" - }, { - "code": "469024", - "name": "临高县" - }, { - "code": "469025", - "name": "白沙黎族自治县" - }, { - "code": "469026", - "name": "昌江黎族自治县" - }, { - "code": "469027", - "name": "乐东黎族自治县" - }, { - "code": "469028", - "name": "陵水黎族自治县" - }, { - "code": "469029", - "name": "保亭黎族苗族自治县" - }, { - "code": "469030", - "name": "琼中黎族苗族自治县" - }] - }] -}, { - "code": "50", - "name": "重庆市", - "children": [{ - "code": "5001", - "name": "市辖区", - "children": [{ - "code": "500101", - "name": "万州区" - }, { - "code": "500102", - "name": "涪陵区" - }, { - "code": "500103", - "name": "渝中区" - }, { - "code": "500104", - "name": "大渡口区" - }, { - "code": "500105", - "name": "江北区" - }, { - "code": "500106", - "name": "沙坪坝区" - }, { - "code": "500107", - "name": "九龙坡区" - }, { - "code": "500108", - "name": "南岸区" - }, { - "code": "500109", - "name": "北碚区" - }, { - "code": "500110", - "name": "綦江区" - }, { - "code": "500111", - "name": "大足区" - }, { - "code": "500112", - "name": "渝北区" - }, { - "code": "500113", - "name": "巴南区" - }, { - "code": "500114", - "name": "黔江区" - }, { - "code": "500115", - "name": "长寿区" - }, { - "code": "500116", - "name": "江津区" - }, { - "code": "500117", - "name": "合川区" - }, { - "code": "500118", - "name": "永川区" - }, { - "code": "500119", - "name": "南川区" - }, { - "code": "500120", - "name": "璧山区" - }, { - "code": "500151", - "name": "铜梁区" - }, { - "code": "500152", - "name": "潼南区" - }, { - "code": "500153", - "name": "荣昌区" - }, { - "code": "500154", - "name": "开州区" - }, { - "code": "500155", - "name": "梁平区" - }, { - "code": "500156", - "name": "武隆区" - }] - }, { - "code": "5002", - "name": "县", - "children": [{ - "code": "500229", - "name": "城口县" - }, { - "code": "500230", - "name": "丰都县" - }, { - "code": "500231", - "name": "垫江县" - }, { - "code": "500233", - "name": "忠县" - }, { - "code": "500235", - "name": "云阳县" - }, { - "code": "500236", - "name": "奉节县" - }, { - "code": "500237", - "name": "巫山县" - }, { - "code": "500238", - "name": "巫溪县" - }, { - "code": "500240", - "name": "石柱土家族自治县" - }, { - "code": "500241", - "name": "秀山土家族苗族自治县" - }, { - "code": "500242", - "name": "酉阳土家族苗族自治县" - }, { - "code": "500243", - "name": "彭水苗族土家族自治县" - }] - }] -}, { - "code": "51", - "name": "四川省", - "children": [{ - "code": "5101", - "name": "成都市", - "children": [{ - "code": "510104", - "name": "锦江区" - }, { - "code": "510105", - "name": "青羊区" - }, { - "code": "510106", - "name": "金牛区" - }, { - "code": "510107", - "name": "武侯区" - }, { - "code": "510108", - "name": "成华区" - }, { - "code": "510112", - "name": "龙泉驿区" - }, { - "code": "510113", - "name": "青白江区" - }, { - "code": "510114", - "name": "新都区" - }, { - "code": "510115", - "name": "温江区" - }, { - "code": "510116", - "name": "双流区" - }, { - "code": "510117", - "name": "郫都区" - }, { - "code": "510118", - "name": "新津区" - }, { - "code": "510121", - "name": "金堂县" - }, { - "code": "510129", - "name": "大邑县" - }, { - "code": "510131", - "name": "蒲江县" - }, { - "code": "510181", - "name": "都江堰市" - }, { - "code": "510182", - "name": "彭州市" - }, { - "code": "510183", - "name": "邛崃市" - }, { - "code": "510184", - "name": "崇州市" - }, { - "code": "510185", - "name": "简阳市" - }] - }, { - "code": "5103", - "name": "自贡市", - "children": [{ - "code": "510302", - "name": "自流井区" - }, { - "code": "510303", - "name": "贡井区" - }, { - "code": "510304", - "name": "大安区" - }, { - "code": "510311", - "name": "沿滩区" - }, { - "code": "510321", - "name": "荣县" - }, { - "code": "510322", - "name": "富顺县" - }] - }, { - "code": "5104", - "name": "攀枝花市", - "children": [{ - "code": "510402", - "name": "东区" - }, { - "code": "510403", - "name": "西区" - }, { - "code": "510411", - "name": "仁和区" - }, { - "code": "510421", - "name": "米易县" - }, { - "code": "510422", - "name": "盐边县" - }] - }, { - "code": "5105", - "name": "泸州市", - "children": [{ - "code": "510502", - "name": "江阳区" - }, { - "code": "510503", - "name": "纳溪区" - }, { - "code": "510504", - "name": "龙马潭区" - }, { - "code": "510521", - "name": "泸县" - }, { - "code": "510522", - "name": "合江县" - }, { - "code": "510524", - "name": "叙永县" - }, { - "code": "510525", - "name": "古蔺县" - }] - }, { - "code": "5106", - "name": "德阳市", - "children": [{ - "code": "510603", - "name": "旌阳区" - }, { - "code": "510604", - "name": "罗江区" - }, { - "code": "510623", - "name": "中江县" - }, { - "code": "510681", - "name": "广汉市" - }, { - "code": "510682", - "name": "什邡市" - }, { - "code": "510683", - "name": "绵竹市" - }] - }, { - "code": "5107", - "name": "绵阳市", - "children": [{ - "code": "510703", - "name": "涪城区" - }, { - "code": "510704", - "name": "游仙区" - }, { - "code": "510705", - "name": "安州区" - }, { - "code": "510722", - "name": "三台县" - }, { - "code": "510723", - "name": "盐亭县" - }, { - "code": "510725", - "name": "梓潼县" - }, { - "code": "510726", - "name": "北川羌族自治县" - }, { - "code": "510727", - "name": "平武县" - }, { - "code": "510781", - "name": "江油市" - }] - }, { - "code": "5108", - "name": "广元市", - "children": [{ - "code": "510802", - "name": "利州区" - }, { - "code": "510811", - "name": "昭化区" - }, { - "code": "510812", - "name": "朝天区" - }, { - "code": "510821", - "name": "旺苍县" - }, { - "code": "510822", - "name": "青川县" - }, { - "code": "510823", - "name": "剑阁县" - }, { - "code": "510824", - "name": "苍溪县" - }] - }, { - "code": "5109", - "name": "遂宁市", - "children": [{ - "code": "510903", - "name": "船山区" - }, { - "code": "510904", - "name": "安居区" - }, { - "code": "510921", - "name": "蓬溪县" - }, { - "code": "510923", - "name": "大英县" - }, { - "code": "510981", - "name": "射洪市" - }] - }, { - "code": "5110", - "name": "内江市", - "children": [{ - "code": "511002", - "name": "市中区" - }, { - "code": "511011", - "name": "东兴区" - }, { - "code": "511024", - "name": "威远县" - }, { - "code": "511025", - "name": "资中县" - }, { - "code": "511071", - "name": "内江经济开发区" - }, { - "code": "511083", - "name": "隆昌市" - }] - }, { - "code": "5111", - "name": "乐山市", - "children": [{ - "code": "511102", - "name": "市中区" - }, { - "code": "511111", - "name": "沙湾区" - }, { - "code": "511112", - "name": "五通桥区" - }, { - "code": "511113", - "name": "金口河区" - }, { - "code": "511123", - "name": "犍为县" - }, { - "code": "511124", - "name": "井研县" - }, { - "code": "511126", - "name": "夹江县" - }, { - "code": "511129", - "name": "沐川县" - }, { - "code": "511132", - "name": "峨边彝族自治县" - }, { - "code": "511133", - "name": "马边彝族自治县" - }, { - "code": "511181", - "name": "峨眉山市" - }] - }, { - "code": "5113", - "name": "南充市", - "children": [{ - "code": "511302", - "name": "顺庆区" - }, { - "code": "511303", - "name": "高坪区" - }, { - "code": "511304", - "name": "嘉陵区" - }, { - "code": "511321", - "name": "南部县" - }, { - "code": "511322", - "name": "营山县" - }, { - "code": "511323", - "name": "蓬安县" - }, { - "code": "511324", - "name": "仪陇县" - }, { - "code": "511325", - "name": "西充县" - }, { - "code": "511381", - "name": "阆中市" - }] - }, { - "code": "5114", - "name": "眉山市", - "children": [{ - "code": "511402", - "name": "东坡区" - }, { - "code": "511403", - "name": "彭山区" - }, { - "code": "511421", - "name": "仁寿县" - }, { - "code": "511423", - "name": "洪雅县" - }, { - "code": "511424", - "name": "丹棱县" - }, { - "code": "511425", - "name": "青神县" - }] - }, { - "code": "5115", - "name": "宜宾市", - "children": [{ - "code": "511502", - "name": "翠屏区" - }, { - "code": "511503", - "name": "南溪区" - }, { - "code": "511504", - "name": "叙州区" - }, { - "code": "511523", - "name": "江安县" - }, { - "code": "511524", - "name": "长宁县" - }, { - "code": "511525", - "name": "高县" - }, { - "code": "511526", - "name": "珙县" - }, { - "code": "511527", - "name": "筠连县" - }, { - "code": "511528", - "name": "兴文县" - }, { - "code": "511529", - "name": "屏山县" - }] - }, { - "code": "5116", - "name": "广安市", - "children": [{ - "code": "511602", - "name": "广安区" - }, { - "code": "511603", - "name": "前锋区" - }, { - "code": "511621", - "name": "岳池县" - }, { - "code": "511622", - "name": "武胜县" - }, { - "code": "511623", - "name": "邻水县" - }, { - "code": "511681", - "name": "华蓥市" - }] - }, { - "code": "5117", - "name": "达州市", - "children": [{ - "code": "511702", - "name": "通川区" - }, { - "code": "511703", - "name": "达川区" - }, { - "code": "511722", - "name": "宣汉县" - }, { - "code": "511723", - "name": "开江县" - }, { - "code": "511724", - "name": "大竹县" - }, { - "code": "511725", - "name": "渠县" - }, { - "code": "511771", - "name": "达州经济开发区" - }, { - "code": "511781", - "name": "万源市" - }] - }, { - "code": "5118", - "name": "雅安市", - "children": [{ - "code": "511802", - "name": "雨城区" - }, { - "code": "511803", - "name": "名山区" - }, { - "code": "511822", - "name": "荥经县" - }, { - "code": "511823", - "name": "汉源县" - }, { - "code": "511824", - "name": "石棉县" - }, { - "code": "511825", - "name": "天全县" - }, { - "code": "511826", - "name": "芦山县" - }, { - "code": "511827", - "name": "宝兴县" - }] - }, { - "code": "5119", - "name": "巴中市", - "children": [{ - "code": "511902", - "name": "巴州区" - }, { - "code": "511903", - "name": "恩阳区" - }, { - "code": "511921", - "name": "通江县" - }, { - "code": "511922", - "name": "南江县" - }, { - "code": "511923", - "name": "平昌县" - }, { - "code": "511971", - "name": "巴中经济开发区" - }] - }, { - "code": "5120", - "name": "资阳市", - "children": [{ - "code": "512002", - "name": "雁江区" - }, { - "code": "512021", - "name": "安岳县" - }, { - "code": "512022", - "name": "乐至县" - }] - }, { - "code": "5132", - "name": "阿坝藏族羌族自治州", - "children": [{ - "code": "513201", - "name": "马尔康市" - }, { - "code": "513221", - "name": "汶川县" - }, { - "code": "513222", - "name": "理县" - }, { - "code": "513223", - "name": "茂县" - }, { - "code": "513224", - "name": "松潘县" - }, { - "code": "513225", - "name": "九寨沟县" - }, { - "code": "513226", - "name": "金川县" - }, { - "code": "513227", - "name": "小金县" - }, { - "code": "513228", - "name": "黑水县" - }, { - "code": "513230", - "name": "壤塘县" - }, { - "code": "513231", - "name": "阿坝县" - }, { - "code": "513232", - "name": "若尔盖县" - }, { - "code": "513233", - "name": "红原县" - }] - }, { - "code": "5133", - "name": "甘孜藏族自治州", - "children": [{ - "code": "513301", - "name": "康定市" - }, { - "code": "513322", - "name": "泸定县" - }, { - "code": "513323", - "name": "丹巴县" - }, { - "code": "513324", - "name": "九龙县" - }, { - "code": "513325", - "name": "雅江县" - }, { - "code": "513326", - "name": "道孚县" - }, { - "code": "513327", - "name": "炉霍县" - }, { - "code": "513328", - "name": "甘孜县" - }, { - "code": "513329", - "name": "新龙县" - }, { - "code": "513330", - "name": "德格县" - }, { - "code": "513331", - "name": "白玉县" - }, { - "code": "513332", - "name": "石渠县" - }, { - "code": "513333", - "name": "色达县" - }, { - "code": "513334", - "name": "理塘县" - }, { - "code": "513335", - "name": "巴塘县" - }, { - "code": "513336", - "name": "乡城县" - }, { - "code": "513337", - "name": "稻城县" - }, { - "code": "513338", - "name": "得荣县" - }] - }, { - "code": "5134", - "name": "凉山彝族自治州", - "children": [{ - "code": "513401", - "name": "西昌市" - }, { - "code": "513422", - "name": "木里藏族自治县" - }, { - "code": "513423", - "name": "盐源县" - }, { - "code": "513424", - "name": "德昌县" - }, { - "code": "513425", - "name": "会理县" - }, { - "code": "513426", - "name": "会东县" - }, { - "code": "513427", - "name": "宁南县" - }, { - "code": "513428", - "name": "普格县" - }, { - "code": "513429", - "name": "布拖县" - }, { - "code": "513430", - "name": "金阳县" - }, { - "code": "513431", - "name": "昭觉县" - }, { - "code": "513432", - "name": "喜德县" - }, { - "code": "513433", - "name": "冕宁县" - }, { - "code": "513434", - "name": "越西县" - }, { - "code": "513435", - "name": "甘洛县" - }, { - "code": "513436", - "name": "美姑县" - }, { - "code": "513437", - "name": "雷波县" - }] - }] -}, { - "code": "52", - "name": "贵州省", - "children": [{ - "code": "5201", - "name": "贵阳市", - "children": [{ - "code": "520102", - "name": "南明区" - }, { - "code": "520103", - "name": "云岩区" - }, { - "code": "520111", - "name": "花溪区" - }, { - "code": "520112", - "name": "乌当区" - }, { - "code": "520113", - "name": "白云区" - }, { - "code": "520115", - "name": "观山湖区" - }, { - "code": "520121", - "name": "开阳县" - }, { - "code": "520122", - "name": "息烽县" - }, { - "code": "520123", - "name": "修文县" - }, { - "code": "520181", - "name": "清镇市" - }] - }, { - "code": "5202", - "name": "六盘水市", - "children": [{ - "code": "520201", - "name": "钟山区" - }, { - "code": "520203", - "name": "六枝特区" - }, { - "code": "520221", - "name": "水城县" - }, { - "code": "520281", - "name": "盘州市" - }] - }, { - "code": "5203", - "name": "遵义市", - "children": [{ - "code": "520302", - "name": "红花岗区" - }, { - "code": "520303", - "name": "汇川区" - }, { - "code": "520304", - "name": "播州区" - }, { - "code": "520322", - "name": "桐梓县" - }, { - "code": "520323", - "name": "绥阳县" - }, { - "code": "520324", - "name": "正安县" - }, { - "code": "520325", - "name": "道真仡佬族苗族自治县" - }, { - "code": "520326", - "name": "务川仡佬族苗族自治县" - }, { - "code": "520327", - "name": "凤冈县" - }, { - "code": "520328", - "name": "湄潭县" - }, { - "code": "520329", - "name": "余庆县" - }, { - "code": "520330", - "name": "习水县" - }, { - "code": "520381", - "name": "赤水市" - }, { - "code": "520382", - "name": "仁怀市" - }] - }, { - "code": "5204", - "name": "安顺市", - "children": [{ - "code": "520402", - "name": "西秀区" - }, { - "code": "520403", - "name": "平坝区" - }, { - "code": "520422", - "name": "普定县" - }, { - "code": "520423", - "name": "镇宁布依族苗族自治县" - }, { - "code": "520424", - "name": "关岭布依族苗族自治县" - }, { - "code": "520425", - "name": "紫云苗族布依族自治县" - }] - }, { - "code": "5205", - "name": "毕节市", - "children": [{ - "code": "520502", - "name": "七星关区" - }, { - "code": "520521", - "name": "大方县" - }, { - "code": "520522", - "name": "黔西县" - }, { - "code": "520523", - "name": "金沙县" - }, { - "code": "520524", - "name": "织金县" - }, { - "code": "520525", - "name": "纳雍县" - }, { - "code": "520526", - "name": "威宁彝族回族苗族自治县" - }, { - "code": "520527", - "name": "赫章县" - }] - }, { - "code": "5206", - "name": "铜仁市", - "children": [{ - "code": "520602", - "name": "碧江区" - }, { - "code": "520603", - "name": "万山区" - }, { - "code": "520621", - "name": "江口县" - }, { - "code": "520622", - "name": "玉屏侗族自治县" - }, { - "code": "520623", - "name": "石阡县" - }, { - "code": "520624", - "name": "思南县" - }, { - "code": "520625", - "name": "印江土家族苗族自治县" - }, { - "code": "520626", - "name": "德江县" - }, { - "code": "520627", - "name": "沿河土家族自治县" - }, { - "code": "520628", - "name": "松桃苗族自治县" - }] - }, { - "code": "5223", - "name": "黔西南布依族苗族自治州", - "children": [{ - "code": "522301", - "name": "兴义市" - }, { - "code": "522302", - "name": "兴仁市" - }, { - "code": "522323", - "name": "普安县" - }, { - "code": "522324", - "name": "晴隆县" - }, { - "code": "522325", - "name": "贞丰县" - }, { - "code": "522326", - "name": "望谟县" - }, { - "code": "522327", - "name": "册亨县" - }, { - "code": "522328", - "name": "安龙县" - }] - }, { - "code": "5226", - "name": "黔东南苗族侗族自治州", - "children": [{ - "code": "522601", - "name": "凯里市" - }, { - "code": "522622", - "name": "黄平县" - }, { - "code": "522623", - "name": "施秉县" - }, { - "code": "522624", - "name": "三穗县" - }, { - "code": "522625", - "name": "镇远县" - }, { - "code": "522626", - "name": "岑巩县" - }, { - "code": "522627", - "name": "天柱县" - }, { - "code": "522628", - "name": "锦屏县" - }, { - "code": "522629", - "name": "剑河县" - }, { - "code": "522630", - "name": "台江县" - }, { - "code": "522631", - "name": "黎平县" - }, { - "code": "522632", - "name": "榕江县" - }, { - "code": "522633", - "name": "从江县" - }, { - "code": "522634", - "name": "雷山县" - }, { - "code": "522635", - "name": "麻江县" - }, { - "code": "522636", - "name": "丹寨县" - }] - }, { - "code": "5227", - "name": "黔南布依族苗族自治州", - "children": [{ - "code": "522701", - "name": "都匀市" - }, { - "code": "522702", - "name": "福泉市" - }, { - "code": "522722", - "name": "荔波县" - }, { - "code": "522723", - "name": "贵定县" - }, { - "code": "522725", - "name": "瓮安县" - }, { - "code": "522726", - "name": "独山县" - }, { - "code": "522727", - "name": "平塘县" - }, { - "code": "522728", - "name": "罗甸县" - }, { - "code": "522729", - "name": "长顺县" - }, { - "code": "522730", - "name": "龙里县" - }, { - "code": "522731", - "name": "惠水县" - }, { - "code": "522732", - "name": "三都水族自治县" - }] - }] -}, { - "code": "53", - "name": "云南省", - "children": [{ - "code": "5301", - "name": "昆明市", - "children": [{ - "code": "530102", - "name": "五华区" - }, { - "code": "530103", - "name": "盘龙区" - }, { - "code": "530111", - "name": "官渡区" - }, { - "code": "530112", - "name": "西山区" - }, { - "code": "530113", - "name": "东川区" - }, { - "code": "530114", - "name": "呈贡区" - }, { - "code": "530115", - "name": "晋宁区" - }, { - "code": "530124", - "name": "富民县" - }, { - "code": "530125", - "name": "宜良县" - }, { - "code": "530126", - "name": "石林彝族自治县" - }, { - "code": "530127", - "name": "嵩明县" - }, { - "code": "530128", - "name": "禄劝彝族苗族自治县" - }, { - "code": "530129", - "name": "寻甸回族彝族自治县" - }, { - "code": "530181", - "name": "安宁市" - }] - }, { - "code": "5303", - "name": "曲靖市", - "children": [{ - "code": "530302", - "name": "麒麟区" - }, { - "code": "530303", - "name": "沾益区" - }, { - "code": "530304", - "name": "马龙区" - }, { - "code": "530322", - "name": "陆良县" - }, { - "code": "530323", - "name": "师宗县" - }, { - "code": "530324", - "name": "罗平县" - }, { - "code": "530325", - "name": "富源县" - }, { - "code": "530326", - "name": "会泽县" - }, { - "code": "530381", - "name": "宣威市" - }] - }, { - "code": "5304", - "name": "玉溪市", - "children": [{ - "code": "530402", - "name": "红塔区" - }, { - "code": "530403", - "name": "江川区" - }, { - "code": "530423", - "name": "通海县" - }, { - "code": "530424", - "name": "华宁县" - }, { - "code": "530425", - "name": "易门县" - }, { - "code": "530426", - "name": "峨山彝族自治县" - }, { - "code": "530427", - "name": "新平彝族傣族自治县" - }, { - "code": "530428", - "name": "元江哈尼族彝族傣族自治县" - }, { - "code": "530481", - "name": "澄江市" - }] - }, { - "code": "5305", - "name": "保山市", - "children": [{ - "code": "530502", - "name": "隆阳区" - }, { - "code": "530521", - "name": "施甸县" - }, { - "code": "530523", - "name": "龙陵县" - }, { - "code": "530524", - "name": "昌宁县" - }, { - "code": "530581", - "name": "腾冲市" - }] - }, { - "code": "5306", - "name": "昭通市", - "children": [{ - "code": "530602", - "name": "昭阳区" - }, { - "code": "530621", - "name": "鲁甸县" - }, { - "code": "530622", - "name": "巧家县" - }, { - "code": "530623", - "name": "盐津县" - }, { - "code": "530624", - "name": "大关县" - }, { - "code": "530625", - "name": "永善县" - }, { - "code": "530626", - "name": "绥江县" - }, { - "code": "530627", - "name": "镇雄县" - }, { - "code": "530628", - "name": "彝良县" - }, { - "code": "530629", - "name": "威信县" - }, { - "code": "530681", - "name": "水富市" - }] - }, { - "code": "5307", - "name": "丽江市", - "children": [{ - "code": "530702", - "name": "古城区" - }, { - "code": "530721", - "name": "玉龙纳西族自治县" - }, { - "code": "530722", - "name": "永胜县" - }, { - "code": "530723", - "name": "华坪县" - }, { - "code": "530724", - "name": "宁蒗彝族自治县" - }] - }, { - "code": "5308", - "name": "普洱市", - "children": [{ - "code": "530802", - "name": "思茅区" - }, { - "code": "530821", - "name": "宁洱哈尼族彝族自治县" - }, { - "code": "530822", - "name": "墨江哈尼族自治县" - }, { - "code": "530823", - "name": "景东彝族自治县" - }, { - "code": "530824", - "name": "景谷傣族彝族自治县" - }, { - "code": "530825", - "name": "镇沅彝族哈尼族拉祜族自治县" - }, { - "code": "530826", - "name": "江城哈尼族彝族自治县" - }, { - "code": "530827", - "name": "孟连傣族拉祜族佤族自治县" - }, { - "code": "530828", - "name": "澜沧拉祜族自治县" - }, { - "code": "530829", - "name": "西盟佤族自治县" - }] - }, { - "code": "5309", - "name": "临沧市", - "children": [{ - "code": "530902", - "name": "临翔区" - }, { - "code": "530921", - "name": "凤庆县" - }, { - "code": "530922", - "name": "云县" - }, { - "code": "530923", - "name": "永德县" - }, { - "code": "530924", - "name": "镇康县" - }, { - "code": "530925", - "name": "双江拉祜族佤族布朗族傣族自治县" - }, { - "code": "530926", - "name": "耿马傣族佤族自治县" - }, { - "code": "530927", - "name": "沧源佤族自治县" - }] - }, { - "code": "5323", - "name": "楚雄彝族自治州", - "children": [{ - "code": "532301", - "name": "楚雄市" - }, { - "code": "532322", - "name": "双柏县" - }, { - "code": "532323", - "name": "牟定县" - }, { - "code": "532324", - "name": "南华县" - }, { - "code": "532325", - "name": "姚安县" - }, { - "code": "532326", - "name": "大姚县" - }, { - "code": "532327", - "name": "永仁县" - }, { - "code": "532328", - "name": "元谋县" - }, { - "code": "532329", - "name": "武定县" - }, { - "code": "532331", - "name": "禄丰县" - }] - }, { - "code": "5325", - "name": "红河哈尼族彝族自治州", - "children": [{ - "code": "532501", - "name": "个旧市" - }, { - "code": "532502", - "name": "开远市" - }, { - "code": "532503", - "name": "蒙自市" - }, { - "code": "532504", - "name": "弥勒市" - }, { - "code": "532523", - "name": "屏边苗族自治县" - }, { - "code": "532524", - "name": "建水县" - }, { - "code": "532525", - "name": "石屏县" - }, { - "code": "532527", - "name": "泸西县" - }, { - "code": "532528", - "name": "元阳县" - }, { - "code": "532529", - "name": "红河县" - }, { - "code": "532530", - "name": "金平苗族瑶族傣族自治县" - }, { - "code": "532531", - "name": "绿春县" - }, { - "code": "532532", - "name": "河口瑶族自治县" - }] - }, { - "code": "5326", - "name": "文山壮族苗族自治州", - "children": [{ - "code": "532601", - "name": "文山市" - }, { - "code": "532622", - "name": "砚山县" - }, { - "code": "532623", - "name": "西畴县" - }, { - "code": "532624", - "name": "麻栗坡县" - }, { - "code": "532625", - "name": "马关县" - }, { - "code": "532626", - "name": "丘北县" - }, { - "code": "532627", - "name": "广南县" - }, { - "code": "532628", - "name": "富宁县" - }] - }, { - "code": "5328", - "name": "西双版纳傣族自治州", - "children": [{ - "code": "532801", - "name": "景洪市" - }, { - "code": "532822", - "name": "勐海县" - }, { - "code": "532823", - "name": "勐腊县" - }] - }, { - "code": "5329", - "name": "大理白族自治州", - "children": [{ - "code": "532901", - "name": "大理市" - }, { - "code": "532922", - "name": "漾濞彝族自治县" - }, { - "code": "532923", - "name": "祥云县" - }, { - "code": "532924", - "name": "宾川县" - }, { - "code": "532925", - "name": "弥渡县" - }, { - "code": "532926", - "name": "南涧彝族自治县" - }, { - "code": "532927", - "name": "巍山彝族回族自治县" - }, { - "code": "532928", - "name": "永平县" - }, { - "code": "532929", - "name": "云龙县" - }, { - "code": "532930", - "name": "洱源县" - }, { - "code": "532931", - "name": "剑川县" - }, { - "code": "532932", - "name": "鹤庆县" - }] - }, { - "code": "5331", - "name": "德宏傣族景颇族自治州", - "children": [{ - "code": "533102", - "name": "瑞丽市" - }, { - "code": "533103", - "name": "芒市" - }, { - "code": "533122", - "name": "梁河县" - }, { - "code": "533123", - "name": "盈江县" - }, { - "code": "533124", - "name": "陇川县" - }] - }, { - "code": "5333", - "name": "怒江傈僳族自治州", - "children": [{ - "code": "533301", - "name": "泸水市" - }, { - "code": "533323", - "name": "福贡县" - }, { - "code": "533324", - "name": "贡山独龙族怒族自治县" - }, { - "code": "533325", - "name": "兰坪白族普米族自治县" - }] - }, { - "code": "5334", - "name": "迪庆藏族自治州", - "children": [{ - "code": "533401", - "name": "香格里拉市" - }, { - "code": "533422", - "name": "德钦县" - }, { - "code": "533423", - "name": "维西傈僳族自治县" - }] - }] -}, { - "code": "54", - "name": "西藏自治区", - "children": [{ - "code": "5401", - "name": "拉萨市", - "children": [{ - "code": "540102", - "name": "城关区" - }, { - "code": "540103", - "name": "堆龙德庆区" - }, { - "code": "540104", - "name": "达孜区" - }, { - "code": "540121", - "name": "林周县" - }, { - "code": "540122", - "name": "当雄县" - }, { - "code": "540123", - "name": "尼木县" - }, { - "code": "540124", - "name": "曲水县" - }, { - "code": "540127", - "name": "墨竹工卡县" - }, { - "code": "540171", - "name": "格尔木藏青工业园区" - }, { - "code": "540172", - "name": "拉萨经济技术开发区" - }, { - "code": "540173", - "name": "西藏文化旅游创意园区" - }, { - "code": "540174", - "name": "达孜工业园区" - }] - }, { - "code": "5402", - "name": "日喀则市", - "children": [{ - "code": "540202", - "name": "桑珠孜区" - }, { - "code": "540221", - "name": "南木林县" - }, { - "code": "540222", - "name": "江孜县" - }, { - "code": "540223", - "name": "定日县" - }, { - "code": "540224", - "name": "萨迦县" - }, { - "code": "540225", - "name": "拉孜县" - }, { - "code": "540226", - "name": "昂仁县" - }, { - "code": "540227", - "name": "谢通门县" - }, { - "code": "540228", - "name": "白朗县" - }, { - "code": "540229", - "name": "仁布县" - }, { - "code": "540230", - "name": "康马县" - }, { - "code": "540231", - "name": "定结县" - }, { - "code": "540232", - "name": "仲巴县" - }, { - "code": "540233", - "name": "亚东县" - }, { - "code": "540234", - "name": "吉隆县" - }, { - "code": "540235", - "name": "聂拉木县" - }, { - "code": "540236", - "name": "萨嘎县" - }, { - "code": "540237", - "name": "岗巴县" - }] - }, { - "code": "5403", - "name": "昌都市", - "children": [{ - "code": "540302", - "name": "卡若区" - }, { - "code": "540321", - "name": "江达县" - }, { - "code": "540322", - "name": "贡觉县" - }, { - "code": "540323", - "name": "类乌齐县" - }, { - "code": "540324", - "name": "丁青县" - }, { - "code": "540325", - "name": "察雅县" - }, { - "code": "540326", - "name": "八宿县" - }, { - "code": "540327", - "name": "左贡县" - }, { - "code": "540328", - "name": "芒康县" - }, { - "code": "540329", - "name": "洛隆县" - }, { - "code": "540330", - "name": "边坝县" - }] - }, { - "code": "5404", - "name": "林芝市", - "children": [{ - "code": "540402", - "name": "巴宜区" - }, { - "code": "540421", - "name": "工布江达县" - }, { - "code": "540422", - "name": "米林县" - }, { - "code": "540423", - "name": "墨脱县" - }, { - "code": "540424", - "name": "波密县" - }, { - "code": "540425", - "name": "察隅县" - }, { - "code": "540426", - "name": "朗县" - }] - }, { - "code": "5405", - "name": "山南市", - "children": [{ - "code": "540502", - "name": "乃东区" - }, { - "code": "540521", - "name": "扎囊县" - }, { - "code": "540522", - "name": "贡嘎县" - }, { - "code": "540523", - "name": "桑日县" - }, { - "code": "540524", - "name": "琼结县" - }, { - "code": "540525", - "name": "曲松县" - }, { - "code": "540526", - "name": "措美县" - }, { - "code": "540527", - "name": "洛扎县" - }, { - "code": "540528", - "name": "加查县" - }, { - "code": "540529", - "name": "隆子县" - }, { - "code": "540530", - "name": "错那县" - }, { - "code": "540531", - "name": "浪卡子县" - }] - }, { - "code": "5406", - "name": "那曲市", - "children": [{ - "code": "540602", - "name": "色尼区" - }, { - "code": "540621", - "name": "嘉黎县" - }, { - "code": "540622", - "name": "比如县" - }, { - "code": "540623", - "name": "聂荣县" - }, { - "code": "540624", - "name": "安多县" - }, { - "code": "540625", - "name": "申扎县" - }, { - "code": "540626", - "name": "索县" - }, { - "code": "540627", - "name": "班戈县" - }, { - "code": "540628", - "name": "巴青县" - }, { - "code": "540629", - "name": "尼玛县" - }, { - "code": "540630", - "name": "双湖县" - }] - }, { - "code": "5425", - "name": "阿里地区", - "children": [{ - "code": "542521", - "name": "普兰县" - }, { - "code": "542522", - "name": "札达县" - }, { - "code": "542523", - "name": "噶尔县" - }, { - "code": "542524", - "name": "日土县" - }, { - "code": "542525", - "name": "革吉县" - }, { - "code": "542526", - "name": "改则县" - }, { - "code": "542527", - "name": "措勤县" - }] - }] -}, { - "code": "61", - "name": "陕西省", - "children": [{ - "code": "6101", - "name": "西安市", - "children": [{ - "code": "610102", - "name": "新城区" - }, { - "code": "610103", - "name": "碑林区" - }, { - "code": "610104", - "name": "莲湖区" - }, { - "code": "610111", - "name": "灞桥区" - }, { - "code": "610112", - "name": "未央区" - }, { - "code": "610113", - "name": "雁塔区" - }, { - "code": "610114", - "name": "阎良区" - }, { - "code": "610115", - "name": "临潼区" - }, { - "code": "610116", - "name": "长安区" - }, { - "code": "610117", - "name": "高陵区" - }, { - "code": "610118", - "name": "鄠邑区" - }, { - "code": "610122", - "name": "蓝田县" - }, { - "code": "610124", - "name": "周至县" - }] - }, { - "code": "6102", - "name": "铜川市", - "children": [{ - "code": "610202", - "name": "王益区" - }, { - "code": "610203", - "name": "印台区" - }, { - "code": "610204", - "name": "耀州区" - }, { - "code": "610222", - "name": "宜君县" - }] - }, { - "code": "6103", - "name": "宝鸡市", - "children": [{ - "code": "610302", - "name": "渭滨区" - }, { - "code": "610303", - "name": "金台区" - }, { - "code": "610304", - "name": "陈仓区" - }, { - "code": "610322", - "name": "凤翔县" - }, { - "code": "610323", - "name": "岐山县" - }, { - "code": "610324", - "name": "扶风县" - }, { - "code": "610326", - "name": "眉县" - }, { - "code": "610327", - "name": "陇县" - }, { - "code": "610328", - "name": "千阳县" - }, { - "code": "610329", - "name": "麟游县" - }, { - "code": "610330", - "name": "凤县" - }, { - "code": "610331", - "name": "太白县" - }] - }, { - "code": "6104", - "name": "咸阳市", - "children": [{ - "code": "610402", - "name": "秦都区" - }, { - "code": "610403", - "name": "杨陵区" - }, { - "code": "610404", - "name": "渭城区" - }, { - "code": "610422", - "name": "三原县" - }, { - "code": "610423", - "name": "泾阳县" - }, { - "code": "610424", - "name": "乾县" - }, { - "code": "610425", - "name": "礼泉县" - }, { - "code": "610426", - "name": "永寿县" - }, { - "code": "610428", - "name": "长武县" - }, { - "code": "610429", - "name": "旬邑县" - }, { - "code": "610430", - "name": "淳化县" - }, { - "code": "610431", - "name": "武功县" - }, { - "code": "610481", - "name": "兴平市" - }, { - "code": "610482", - "name": "彬州市" - }] - }, { - "code": "6105", - "name": "渭南市", - "children": [{ - "code": "610502", - "name": "临渭区" - }, { - "code": "610503", - "name": "华州区" - }, { - "code": "610522", - "name": "潼关县" - }, { - "code": "610523", - "name": "大荔县" - }, { - "code": "610524", - "name": "合阳县" - }, { - "code": "610525", - "name": "澄城县" - }, { - "code": "610526", - "name": "蒲城县" - }, { - "code": "610527", - "name": "白水县" - }, { - "code": "610528", - "name": "富平县" - }, { - "code": "610581", - "name": "韩城市" - }, { - "code": "610582", - "name": "华阴市" - }] - }, { - "code": "6106", - "name": "延安市", - "children": [{ - "code": "610602", - "name": "宝塔区" - }, { - "code": "610603", - "name": "安塞区" - }, { - "code": "610621", - "name": "延长县" - }, { - "code": "610622", - "name": "延川县" - }, { - "code": "610625", - "name": "志丹县" - }, { - "code": "610626", - "name": "吴起县" - }, { - "code": "610627", - "name": "甘泉县" - }, { - "code": "610628", - "name": "富县" - }, { - "code": "610629", - "name": "洛川县" - }, { - "code": "610630", - "name": "宜川县" - }, { - "code": "610631", - "name": "黄龙县" - }, { - "code": "610632", - "name": "黄陵县" - }, { - "code": "610681", - "name": "子长市" - }] - }, { - "code": "6107", - "name": "汉中市", - "children": [{ - "code": "610702", - "name": "汉台区" - }, { - "code": "610703", - "name": "南郑区" - }, { - "code": "610722", - "name": "城固县" - }, { - "code": "610723", - "name": "洋县" - }, { - "code": "610724", - "name": "西乡县" - }, { - "code": "610725", - "name": "勉县" - }, { - "code": "610726", - "name": "宁强县" - }, { - "code": "610727", - "name": "略阳县" - }, { - "code": "610728", - "name": "镇巴县" - }, { - "code": "610729", - "name": "留坝县" - }, { - "code": "610730", - "name": "佛坪县" - }] - }, { - "code": "6108", - "name": "榆林市", - "children": [{ - "code": "610802", - "name": "榆阳区" - }, { - "code": "610803", - "name": "横山区" - }, { - "code": "610822", - "name": "府谷县" - }, { - "code": "610824", - "name": "靖边县" - }, { - "code": "610825", - "name": "定边县" - }, { - "code": "610826", - "name": "绥德县" - }, { - "code": "610827", - "name": "米脂县" - }, { - "code": "610828", - "name": "佳县" - }, { - "code": "610829", - "name": "吴堡县" - }, { - "code": "610830", - "name": "清涧县" - }, { - "code": "610831", - "name": "子洲县" - }, { - "code": "610881", - "name": "神木市" - }] - }, { - "code": "6109", - "name": "安康市", - "children": [{ - "code": "610902", - "name": "汉滨区" - }, { - "code": "610921", - "name": "汉阴县" - }, { - "code": "610922", - "name": "石泉县" - }, { - "code": "610923", - "name": "宁陕县" - }, { - "code": "610924", - "name": "紫阳县" - }, { - "code": "610925", - "name": "岚皋县" - }, { - "code": "610926", - "name": "平利县" - }, { - "code": "610927", - "name": "镇坪县" - }, { - "code": "610928", - "name": "旬阳县" - }, { - "code": "610929", - "name": "白河县" - }] - }, { - "code": "6110", - "name": "商洛市", - "children": [{ - "code": "611002", - "name": "商州区" - }, { - "code": "611021", - "name": "洛南县" - }, { - "code": "611022", - "name": "丹凤县" - }, { - "code": "611023", - "name": "商南县" - }, { - "code": "611024", - "name": "山阳县" - }, { - "code": "611025", - "name": "镇安县" - }, { - "code": "611026", - "name": "柞水县" - }] - }] -}, { - "code": "62", - "name": "甘肃省", - "children": [{ - "code": "6201", - "name": "兰州市", - "children": [{ - "code": "620102", - "name": "城关区" - }, { - "code": "620103", - "name": "七里河区" - }, { - "code": "620104", - "name": "西固区" - }, { - "code": "620105", - "name": "安宁区" - }, { - "code": "620111", - "name": "红古区" - }, { - "code": "620121", - "name": "永登县" - }, { - "code": "620122", - "name": "皋兰县" - }, { - "code": "620123", - "name": "榆中县" - }, { - "code": "620171", - "name": "兰州新区" - }] - }, { - "code": "6202", - "name": "嘉峪关市", - "children": [{ - "code": "620201001", - "name": "雄关街道" - }, { - "code": "620201002", - "name": "钢城街道" - }, { - "code": "620201100", - "name": "新城镇" - }, { - "code": "620201101", - "name": "峪泉镇" - }, { - "code": "620201102", - "name": "文殊镇" - }] - }, { - "code": "6203", - "name": "金昌市", - "children": [{ - "code": "620302", - "name": "金川区" - }, { - "code": "620321", - "name": "永昌县" - }] - }, { - "code": "6204", - "name": "白银市", - "children": [{ - "code": "620402", - "name": "白银区" - }, { - "code": "620403", - "name": "平川区" - }, { - "code": "620421", - "name": "靖远县" - }, { - "code": "620422", - "name": "会宁县" - }, { - "code": "620423", - "name": "景泰县" - }] - }, { - "code": "6205", - "name": "天水市", - "children": [{ - "code": "620502", - "name": "秦州区" - }, { - "code": "620503", - "name": "麦积区" - }, { - "code": "620521", - "name": "清水县" - }, { - "code": "620522", - "name": "秦安县" - }, { - "code": "620523", - "name": "甘谷县" - }, { - "code": "620524", - "name": "武山县" - }, { - "code": "620525", - "name": "张家川回族自治县" - }] - }, { - "code": "6206", - "name": "武威市", - "children": [{ - "code": "620602", - "name": "凉州区" - }, { - "code": "620621", - "name": "民勤县" - }, { - "code": "620622", - "name": "古浪县" - }, { - "code": "620623", - "name": "天祝藏族自治县" - }] - }, { - "code": "6207", - "name": "张掖市", - "children": [{ - "code": "620702", - "name": "甘州区" - }, { - "code": "620721", - "name": "肃南裕固族自治县" - }, { - "code": "620722", - "name": "民乐县" - }, { - "code": "620723", - "name": "临泽县" - }, { - "code": "620724", - "name": "高台县" - }, { - "code": "620725", - "name": "山丹县" - }] - }, { - "code": "6208", - "name": "平凉市", - "children": [{ - "code": "620802", - "name": "崆峒区" - }, { - "code": "620821", - "name": "泾川县" - }, { - "code": "620822", - "name": "灵台县" - }, { - "code": "620823", - "name": "崇信县" - }, { - "code": "620825", - "name": "庄浪县" - }, { - "code": "620826", - "name": "静宁县" - }, { - "code": "620881", - "name": "华亭市" - }] - }, { - "code": "6209", - "name": "酒泉市", - "children": [{ - "code": "620902", - "name": "肃州区" - }, { - "code": "620921", - "name": "金塔县" - }, { - "code": "620922", - "name": "瓜州县" - }, { - "code": "620923", - "name": "肃北蒙古族自治县" - }, { - "code": "620924", - "name": "阿克塞哈萨克族自治县" - }, { - "code": "620981", - "name": "玉门市" - }, { - "code": "620982", - "name": "敦煌市" - }] - }, { - "code": "6210", - "name": "庆阳市", - "children": [{ - "code": "621002", - "name": "西峰区" - }, { - "code": "621021", - "name": "庆城县" - }, { - "code": "621022", - "name": "环县" - }, { - "code": "621023", - "name": "华池县" - }, { - "code": "621024", - "name": "合水县" - }, { - "code": "621025", - "name": "正宁县" - }, { - "code": "621026", - "name": "宁县" - }, { - "code": "621027", - "name": "镇原县" - }] - }, { - "code": "6211", - "name": "定西市", - "children": [{ - "code": "621102", - "name": "安定区" - }, { - "code": "621121", - "name": "通渭县" - }, { - "code": "621122", - "name": "陇西县" - }, { - "code": "621123", - "name": "渭源县" - }, { - "code": "621124", - "name": "临洮县" - }, { - "code": "621125", - "name": "漳县" - }, { - "code": "621126", - "name": "岷县" - }] - }, { - "code": "6212", - "name": "陇南市", - "children": [{ - "code": "621202", - "name": "武都区" - }, { - "code": "621221", - "name": "成县" - }, { - "code": "621222", - "name": "文县" - }, { - "code": "621223", - "name": "宕昌县" - }, { - "code": "621224", - "name": "康县" - }, { - "code": "621225", - "name": "西和县" - }, { - "code": "621226", - "name": "礼县" - }, { - "code": "621227", - "name": "徽县" - }, { - "code": "621228", - "name": "两当县" - }] - }, { - "code": "6229", - "name": "临夏回族自治州", - "children": [{ - "code": "622901", - "name": "临夏市" - }, { - "code": "622921", - "name": "临夏县" - }, { - "code": "622922", - "name": "康乐县" - }, { - "code": "622923", - "name": "永靖县" - }, { - "code": "622924", - "name": "广河县" - }, { - "code": "622925", - "name": "和政县" - }, { - "code": "622926", - "name": "东乡族自治县" - }, { - "code": "622927", - "name": "积石山保安族东乡族撒拉族自治县" - }] - }, { - "code": "6230", - "name": "甘南藏族自治州", - "children": [{ - "code": "623001", - "name": "合作市" - }, { - "code": "623021", - "name": "临潭县" - }, { - "code": "623022", - "name": "卓尼县" - }, { - "code": "623023", - "name": "舟曲县" - }, { - "code": "623024", - "name": "迭部县" - }, { - "code": "623025", - "name": "玛曲县" - }, { - "code": "623026", - "name": "碌曲县" - }, { - "code": "623027", - "name": "夏河县" - }] - }] -}, { - "code": "63", - "name": "青海省", - "children": [{ - "code": "6301", - "name": "西宁市", - "children": [{ - "code": "630102", - "name": "城东区" - }, { - "code": "630103", - "name": "城中区" - }, { - "code": "630104", - "name": "城西区" - }, { - "code": "630105", - "name": "城北区" - }, { - "code": "630106", - "name": "湟中区" - }, { - "code": "630121", - "name": "大通回族土族自治县" - }, { - "code": "630123", - "name": "湟源县" - }] - }, { - "code": "6302", - "name": "海东市", - "children": [{ - "code": "630202", - "name": "乐都区" - }, { - "code": "630203", - "name": "平安区" - }, { - "code": "630222", - "name": "民和回族土族自治县" - }, { - "code": "630223", - "name": "互助土族自治县" - }, { - "code": "630224", - "name": "化隆回族自治县" - }, { - "code": "630225", - "name": "循化撒拉族自治县" - }] - }, { - "code": "6322", - "name": "海北藏族自治州", - "children": [{ - "code": "632221", - "name": "门源回族自治县" - }, { - "code": "632222", - "name": "祁连县" - }, { - "code": "632223", - "name": "海晏县" - }, { - "code": "632224", - "name": "刚察县" - }] - }, { - "code": "6323", - "name": "黄南藏族自治州", - "children": [{ - "code": "632321", - "name": "同仁县" - }, { - "code": "632322", - "name": "尖扎县" - }, { - "code": "632323", - "name": "泽库县" - }, { - "code": "632324", - "name": "河南蒙古族自治县" - }] - }, { - "code": "6325", - "name": "海南藏族自治州", - "children": [{ - "code": "632521", - "name": "共和县" - }, { - "code": "632522", - "name": "同德县" - }, { - "code": "632523", - "name": "贵德县" - }, { - "code": "632524", - "name": "兴海县" - }, { - "code": "632525", - "name": "贵南县" - }] - }, { - "code": "6326", - "name": "果洛藏族自治州", - "children": [{ - "code": "632621", - "name": "玛沁县" - }, { - "code": "632622", - "name": "班玛县" - }, { - "code": "632623", - "name": "甘德县" - }, { - "code": "632624", - "name": "达日县" - }, { - "code": "632625", - "name": "久治县" - }, { - "code": "632626", - "name": "玛多县" - }] - }, { - "code": "6327", - "name": "玉树藏族自治州", - "children": [{ - "code": "632701", - "name": "玉树市" - }, { - "code": "632722", - "name": "杂多县" - }, { - "code": "632723", - "name": "称多县" - }, { - "code": "632724", - "name": "治多县" - }, { - "code": "632725", - "name": "囊谦县" - }, { - "code": "632726", - "name": "曲麻莱县" - }] - }, { - "code": "6328", - "name": "海西蒙古族藏族自治州", - "children": [{ - "code": "632801", - "name": "格尔木市" - }, { - "code": "632802", - "name": "德令哈市" - }, { - "code": "632803", - "name": "茫崖市" - }, { - "code": "632821", - "name": "乌兰县" - }, { - "code": "632822", - "name": "都兰县" - }, { - "code": "632823", - "name": "天峻县" - }, { - "code": "632857", - "name": "大柴旦行政委员会" - }] - }] -}, { - "code": "64", - "name": "宁夏回族自治区", - "children": [{ - "code": "6401", - "name": "银川市", - "children": [{ - "code": "640104", - "name": "兴庆区" - }, { - "code": "640105", - "name": "西夏区" - }, { - "code": "640106", - "name": "金凤区" - }, { - "code": "640121", - "name": "永宁县" - }, { - "code": "640122", - "name": "贺兰县" - }, { - "code": "640181", - "name": "灵武市" - }] - }, { - "code": "6402", - "name": "石嘴山市", - "children": [{ - "code": "640202", - "name": "大武口区" - }, { - "code": "640205", - "name": "惠农区" - }, { - "code": "640221", - "name": "平罗县" - }] - }, { - "code": "6403", - "name": "吴忠市", - "children": [{ - "code": "640302", - "name": "利通区" - }, { - "code": "640303", - "name": "红寺堡区" - }, { - "code": "640323", - "name": "盐池县" - }, { - "code": "640324", - "name": "同心县" - }, { - "code": "640381", - "name": "青铜峡市" - }] - }, { - "code": "6404", - "name": "固原市", - "children": [{ - "code": "640402", - "name": "原州区" - }, { - "code": "640422", - "name": "西吉县" - }, { - "code": "640423", - "name": "隆德县" - }, { - "code": "640424", - "name": "泾源县" - }, { - "code": "640425", - "name": "彭阳县" - }] - }, { - "code": "6405", - "name": "中卫市", - "children": [{ - "code": "640502", - "name": "沙坡头区" - }, { - "code": "640521", - "name": "中宁县" - }, { - "code": "640522", - "name": "海原县" - }] - }] -}, { - "code": "65", - "name": "新疆维吾尔自治区", - "children": [{ - "code": "6501", - "name": "乌鲁木齐市", - "children": [{ - "code": "650102", - "name": "天山区" - }, { - "code": "650103", - "name": "沙依巴克区" - }, { - "code": "650104", - "name": "新市区" - }, { - "code": "650105", - "name": "水磨沟区" - }, { - "code": "650106", - "name": "头屯河区" - }, { - "code": "650107", - "name": "达坂城区" - }, { - "code": "650109", - "name": "米东区" - }, { - "code": "650121", - "name": "乌鲁木齐县" - }] - }, { - "code": "6502", - "name": "克拉玛依市", - "children": [{ - "code": "650202", - "name": "独山子区" - }, { - "code": "650203", - "name": "克拉玛依区" - }, { - "code": "650204", - "name": "白碱滩区" - }, { - "code": "650205", - "name": "乌尔禾区" - }] - }, { - "code": "6504", - "name": "吐鲁番市", - "children": [{ - "code": "650402", - "name": "高昌区" - }, { - "code": "650421", - "name": "鄯善县" - }, { - "code": "650422", - "name": "托克逊县" - }] - }, { - "code": "6505", - "name": "哈密市", - "children": [{ - "code": "650502", - "name": "伊州区" - }, { - "code": "650521", - "name": "巴里坤哈萨克自治县" - }, { - "code": "650522", - "name": "伊吾县" - }] - }, { - "code": "6523", - "name": "昌吉回族自治州", - "children": [{ - "code": "652301", - "name": "昌吉市" - }, { - "code": "652302", - "name": "阜康市" - }, { - "code": "652323", - "name": "呼图壁县" - }, { - "code": "652324", - "name": "玛纳斯县" - }, { - "code": "652325", - "name": "奇台县" - }, { - "code": "652327", - "name": "吉木萨尔县" - }, { - "code": "652328", - "name": "木垒哈萨克自治县" - }] - }, { - "code": "6527", - "name": "博尔塔拉蒙古自治州", - "children": [{ - "code": "652701", - "name": "博乐市" - }, { - "code": "652702", - "name": "阿拉山口市" - }, { - "code": "652722", - "name": "精河县" - }, { - "code": "652723", - "name": "温泉县" - }] - }, { - "code": "6528", - "name": "巴音郭楞蒙古自治州", - "children": [{ - "code": "652801", - "name": "库尔勒市" - }, { - "code": "652822", - "name": "轮台县" - }, { - "code": "652823", - "name": "尉犁县" - }, { - "code": "652824", - "name": "若羌县" - }, { - "code": "652825", - "name": "且末县" - }, { - "code": "652826", - "name": "焉耆回族自治县" - }, { - "code": "652827", - "name": "和静县" - }, { - "code": "652828", - "name": "和硕县" - }, { - "code": "652829", - "name": "博湖县" - }, { - "code": "652871", - "name": "库尔勒经济技术开发区" - }] - }, { - "code": "6529", - "name": "阿克苏地区", - "children": [{ - "code": "652901", - "name": "阿克苏市" - }, { - "code": "652902", - "name": "库车市" - }, { - "code": "652922", - "name": "温宿县" - }, { - "code": "652924", - "name": "沙雅县" - }, { - "code": "652925", - "name": "新和县" - }, { - "code": "652926", - "name": "拜城县" - }, { - "code": "652927", - "name": "乌什县" - }, { - "code": "652928", - "name": "阿瓦提县" - }, { - "code": "652929", - "name": "柯坪县" - }] - }, { - "code": "6530", - "name": "克孜勒苏柯尔克孜自治州", - "children": [{ - "code": "653001", - "name": "阿图什市" - }, { - "code": "653022", - "name": "阿克陶县" - }, { - "code": "653023", - "name": "阿合奇县" - }, { - "code": "653024", - "name": "乌恰县" - }] - }, { - "code": "6531", - "name": "喀什地区", - "children": [{ - "code": "653101", - "name": "喀什市" - }, { - "code": "653121", - "name": "疏附县" - }, { - "code": "653122", - "name": "疏勒县" - }, { - "code": "653123", - "name": "英吉沙县" - }, { - "code": "653124", - "name": "泽普县" - }, { - "code": "653125", - "name": "莎车县" - }, { - "code": "653126", - "name": "叶城县" - }, { - "code": "653127", - "name": "麦盖提县" - }, { - "code": "653128", - "name": "岳普湖县" - }, { - "code": "653129", - "name": "伽师县" - }, { - "code": "653130", - "name": "巴楚县" - }, { - "code": "653131", - "name": "塔什库尔干塔吉克自治县" - }] - }, { - "code": "6532", - "name": "和田地区", - "children": [{ - "code": "653201", - "name": "和田市" - }, { - "code": "653221", - "name": "和田县" - }, { - "code": "653222", - "name": "墨玉县" - }, { - "code": "653223", - "name": "皮山县" - }, { - "code": "653224", - "name": "洛浦县" - }, { - "code": "653225", - "name": "策勒县" - }, { - "code": "653226", - "name": "于田县" - }, { - "code": "653227", - "name": "民丰县" - }] - }, { - "code": "6540", - "name": "伊犁哈萨克自治州", - "children": [{ - "code": "654002", - "name": "伊宁市" - }, { - "code": "654003", - "name": "奎屯市" - }, { - "code": "654004", - "name": "霍尔果斯市" - }, { - "code": "654021", - "name": "伊宁县" - }, { - "code": "654022", - "name": "察布查尔锡伯自治县" - }, { - "code": "654023", - "name": "霍城县" - }, { - "code": "654024", - "name": "巩留县" - }, { - "code": "654025", - "name": "新源县" - }, { - "code": "654026", - "name": "昭苏县" - }, { - "code": "654027", - "name": "特克斯县" - }, { - "code": "654028", - "name": "尼勒克县" - }] - }, { - "code": "6542", - "name": "塔城地区", - "children": [{ - "code": "654201", - "name": "塔城市" - }, { - "code": "654202", - "name": "乌苏市" - }, { - "code": "654221", - "name": "额敏县" - }, { - "code": "654223", - "name": "沙湾县" - }, { - "code": "654224", - "name": "托里县" - }, { - "code": "654225", - "name": "裕民县" - }, { - "code": "654226", - "name": "和布克赛尔蒙古自治县" - }] - }, { - "code": "6543", - "name": "阿勒泰地区", - "children": [{ - "code": "654301", - "name": "阿勒泰市" - }, { - "code": "654321", - "name": "布尔津县" - }, { - "code": "654322", - "name": "富蕴县" - }, { - "code": "654323", - "name": "福海县" - }, { - "code": "654324", - "name": "哈巴河县" - }, { - "code": "654325", - "name": "青河县" - }, { - "code": "654326", - "name": "吉木乃县" - }] - }, { - "code": "6590", - "name": "自治区直辖县级行政区划", - "children": [{ - "code": "659001", - "name": "石河子市" - }, { - "code": "659002", - "name": "阿拉尔市" - }, { - "code": "659003", - "name": "图木舒克市" - }, { - "code": "659004", - "name": "五家渠市" - }, { - "code": "659005", - "name": "北屯市" - }, { - "code": "659006", - "name": "铁门关市" - }, { - "code": "659007", - "name": "双河市" - }, { - "code": "659008", - "name": "可克达拉市" - }, { - "code": "659009", - "name": "昆玉市" - }, { - "code": "659010", - "name": "胡杨河市" - }] - }] -}] diff --git a/src/后端/src/main/java/com/softegg/freetogo/Login/controller/LoginController.java b/src/后端/src/main/java/com/softegg/freetogo/Login/controller/LoginController.java deleted file mode 100644 index c6a6156..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/Login/controller/LoginController.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.softegg.freetogo.Login.controller; - -import com.softegg.freetogo.Login.service.LoginService; -import com.softegg.freetogo.User.Dao.GuidesRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.util.Map; - -/** - * @description:登录服务前后端交互 - * @author:zhanglinhao - * @date:2024/5/9 9:35 - */ -@RestController -//@CrossOrigin(origins = "*") -@RequestMapping("/Login") -public class LoginController { - - @Autowired - LoginService loginService; - - @Autowired - GuidesRepository guidesRepository; - - /** - * @description: 登录的交互逻辑 - * @param: map - * @return: java.lang.String - * @author: zhanglinhao - * @date: 2024/5/9 22:44 - */ - @PostMapping("login") - public int Login(@RequestBody Map map) { - System.out.println(map); - System.out.println("phone:" + map.get("phone").toString()); - System.out.println("password" + map.get("password").toString()); - int tag = loginService.loginAccount(map.get("phone").toString(), map.get("password").toString()); - System.out.println("LoginTag:" + tag); - return switch (tag) { - case 1000 -> 1;//登陆成功 - case 1001 -> 2;//密码或账号错误 - case 1002 -> 3;//该账户未注册 - case 1005 -> 6;//未输入账号密码 - case 1006 -> 7;//未输入账号 - case 1007 -> 8;//未输入密码 - default -> 0; - }; - } - - /** - * @description: 注册的交互逻辑 - * @param: map - * @return: java.lang.String - * @author: zhanglinhao - * @date: 2024/5/9 22:45 - */ - @PostMapping("register") - public int Register(@RequestBody Map map) { - System.out.println(map); - int tag = loginService.registerAccount((String) map.get("name"), (String) map.get("password"), (String) map.get("phone"), (String) map.get("nickname"), (String) map.get("IDCard")); - System.out.println("RegisterTag:" + tag); - return switch (tag) { - case 1003 -> 4;//该账户已经注册 - case 1004 -> 5;//注册成功 - case 1008 -> 9;//身份证输入错误18位 - case 1010 -> 11;//手机号输入错误11位 - case 1011 -> 12;//密码过短最少8位 - case 1012 -> 13;//姓名未输入 - default -> 0; - }; - } - -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/Login/service/LoginService.java b/src/后端/src/main/java/com/softegg/freetogo/Login/service/LoginService.java deleted file mode 100644 index 71d817e..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/Login/service/LoginService.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.softegg.freetogo.Login.service; - -import org.springframework.stereotype.Service; - -/** - * @description:抽象登录服务接口类 - * @author:zhanglinhao - * @date:2024/5/9 8:37 - */ -@Service -public interface LoginService { - int loginAccount(String phone, String password);//登录 -// int registerAccount(String phone, String password); - - int registerAccount(String name, - String password, - String phone, - String nickname, - String IDCard);//注册 - -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/Login/service/LoginServiceImpl.java b/src/后端/src/main/java/com/softegg/freetogo/Login/service/LoginServiceImpl.java deleted file mode 100644 index c227a13..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/Login/service/LoginServiceImpl.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.softegg.freetogo.Login.service; - -import com.softegg.freetogo.User.Dao.GuidesRepository; -import com.softegg.freetogo.User.bean.Users; -import com.softegg.freetogo.User.service.UsersService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.time.LocalDateTime; - -/** - * @description:登录服务实现类 - * @author:zhanglinhao - * @date:2024/5/9 9:33 - */ -@Component -public class LoginServiceImpl implements LoginService { - @Autowired - UsersService usersService; - @Autowired - GuidesRepository guidesRepository; - - /** - * @description: 登录接口实现函数,根据返回码进行操作 - * @param: phone - * @param: password - * @return: int - * @author: zhanglinhao - * @date: 2024/5/9 22:46 - */ - @Override - public int loginAccount(String phone, String password) { - if (phone.isEmpty() && password.isEmpty()) - return 1005;//未输入账号密码 - else if (phone.isEmpty()) - return 1006;//未输入账号 - else if (password.isEmpty()) - return 1007;//未输入密码 - if (usersService.isRegister(phone)) { - if (usersService.getUserByPhone(phone).getPassword().equals(password)) - return 1000;//登录成功 - else - return 1001;//密码或账号错误 - } else - return 1002;//该账户未注册 - } - - /** - * @description: 注册接口实现函数,根据返回码进行操作 - * @param: name - * @param: password - * @param: phone - * @param: nickname - * @param: IDCard - * @return: int - * @author: zhanglinhao - * @date: 2024/5/11 15:57 - */ - @Override - public int registerAccount(String name, - String password, - String phone, - String nickname, - String IDCard) { - if (usersService.isRegister(phone)) - return 1003;//该账户已经注册 - else if(name.isEmpty()) - return 1012;//姓名未输入 - else if (IDCard.length() != 18) - return 1008;//身份证输入错误 - else if (phone.length() != 11) - return 1010;//手机号输入错误 - else if (password.length() < 8) - return 1011;//密码过于简单 - else { - LocalDateTime currentTime = LocalDateTime.now(); - System.out.println("注册信息:姓名:" + name + "密码:" + password + "电话:" + phone + "昵称:" + nickname + "身份证:" + IDCard); - Users user = new Users(); - user.setPhone(phone); - user.setPassword(password); - user.setNickname(nickname); - user.setIdcard(IDCard); - user.setName(name); - user.setCreatetime((currentTime.getYear() + "-" + currentTime.getMonthValue() + "-" + currentTime.getDayOfMonth())); - user.setGender(isMale(IDCard)); - user.setStatus(0); - user.setReputation(60); - user.setMembertype(false); - usersService.add(user); - return 1004;//注册成功 - } - } - - boolean isMale(String IDCard) { - System.out.println("根据身份证判断性别:" + IDCard + " 第17位:" + IDCard.charAt(16)); - return (int) IDCard.charAt(16) % 2 != 0; - } -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/Login/返回码.txt b/src/后端/src/main/java/com/softegg/freetogo/Login/返回码.txt deleted file mode 100644 index 8cb8156..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/Login/返回码.txt +++ /dev/null @@ -1,13 +0,0 @@ -1000->1 登录成功 -1001->2 密码或账号错误 -1002->3 该账户未注册 -1003->4 该账户已经注册 -1004->5 注册成功 -1005->6 未输入账号密码 -1006->7 未输入账号 -1007->8 身份证输入错误 -1008->9 成功注册导游 -1009->10 已是导游 -1010->11 手机号输入错误 -1011->12 密码过短 -1012->13 未输入姓名 \ No newline at end of file diff --git a/src/后端/src/main/java/com/softegg/freetogo/Search/controller/SearchController.java b/src/后端/src/main/java/com/softegg/freetogo/Search/controller/SearchController.java deleted file mode 100644 index 2bfde50..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/Search/controller/SearchController.java +++ /dev/null @@ -1,120 +0,0 @@ -package com.softegg.freetogo.Search.controller; - -import com.softegg.freetogo.Demand.bean.Demands; -import com.softegg.freetogo.GuideService.bean.GuideService; -import com.softegg.freetogo.GuideService.service.GuideServiceService; -import com.softegg.freetogo.GuideMatch.service.GuideMatchService; -import com.softegg.freetogo.User.bean.Users; -import com.softegg.freetogo.User.service.UsersService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import java.util.List; -import java.util.Map; - -/** - * @description:导游服务匹配前后端交互 - * @author:wuyifan - * @date:2024/5/30 10:47 - */ -@RestController -//@CrossOrigin(origins = "*") -@RequestMapping("/Search") -public class SearchController { - @Autowired - GuideMatchService guideMatchService; - @Autowired - UsersService usersService; - @Autowired - GuideServiceService guideServiceService; - - /** - * @description: 导游服务匹配的交互逻辑 - * @param: map - * @return: java.lang.String - * @author: wuyifan - * @date: 2024/5/30 20:48 - */ - @GetMapping("register") - public List GuideMatch(int gid) { - System.out.println("需匹配的gid:" + gid); - return guideMatchService.guideMatchAccount(gid); - - } - - /** - * @description: 申请匹配游客需求的交互逻辑 - * @param: map - * @return: java.lang.int - * @author: wuyifan - * @date: 2024/6/11 10:12 - */ - @PostMapping("match") - public int Match(@RequestBody Map map) { - int gid = Integer.parseInt(map.get("gid").toString()); - System.out.println("接收的gid:"+gid); - int did = Integer.parseInt(map.get("did").toString()); - System.out.println("接收的did:"+did); - return guideMatchService.match(gid, did); - } - - - /** - * @description: 确定那些游客需求申请的交互逻辑 - * @param: gid - * @return: java.lang.Demands - * @author: wuyifan - * @date: 2024/6/11 10:12 - */ - @GetMapping("confirmedPage") - public List confirmedpage(int gid) { - System.out.println("接收的gid:"+gid); - return guideMatchService.confirmedPage(gid); - } - - /** - * @description: 确定匹配导游服务的交互逻辑 - * @param: map - * @return: java.lang.String - * @author: wuyifan - * @date: 2024/6/11 10:12 - */ - @PostMapping("confirmed") - public int confirmed(@RequestBody Map map) { - int gid = Integer.parseInt(map.get("gid").toString()); - System.out.println("接收的did:"+gid); - int did = Integer.parseInt(map.get("did").toString()); - System.out.println("接收的did:"+did); - return guideMatchService.confirmed(gid, did); - } - - /** - * @description: 取消导游服务匹配结果的交互逻辑 - * @param: map - * @return: java.lang.String - * @author: wuyifan - * @date: 2024/6/11 10:12 - */ - @PostMapping("refuse") - public int refuse(@RequestBody Map map) { - int gid = (int) map.get("gid"); - System.out.println("接收的gid:"+gid); - return guideMatchService.refuse(gid); - } - - /** - * @description: 表面删除导游服务的交互逻辑 - * @param: map - * @return: java.lang.String - * @author: wuyifan - * @date: 2024/6/11 10:12 - */ - @PostMapping("delete") - public int delete(@RequestBody Map map) { - int gid = (int) map.get("gid"); - System.out.println("接收的gid:"+gid); - return guideMatchService.delete(gid); - } - -} - diff --git a/src/后端/src/main/java/com/softegg/freetogo/Search/service/SearchService.java b/src/后端/src/main/java/com/softegg/freetogo/Search/service/SearchService.java deleted file mode 100644 index 149e3f9..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/Search/service/SearchService.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.softegg.freetogo.Search.service; - - -import com.softegg.freetogo.Demand.bean.Demands; -import org.springframework.stereotype.Service; - -import java.util.List; - -/** - * @description:抽象需求发送服务接口类 - * @author:wuyifan - * @date:2024/5/28 19:45 - */ -@Service -public interface SearchService { - - List guideMatchAccount(int gid); - - int match(int gid, int did); - - List confirmedPage(int gid); - - int confirmed(int did, int gid); - - int refuse(int gid); - - int delete(int gid); - - double timeScore(int gsum, String gddate, String gedate, int dsum, String dddate, String dedate); - - double messageScore(String gmessage, String dmessage); -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/Search/service/SearchServiceImpl.java b/src/后端/src/main/java/com/softegg/freetogo/Search/service/SearchServiceImpl.java deleted file mode 100644 index 70f0354..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/Search/service/SearchServiceImpl.java +++ /dev/null @@ -1,384 +0,0 @@ -package com.softegg.freetogo.Search.service; -import com.softegg.freetogo.Demand.bean.Demands; -import com.softegg.freetogo.GuideMatch.service.GuideMatchService; -import com.softegg.freetogo.GuideService.bean.GuideService; -import com.softegg.freetogo.Demand.service.DemandsService; -import com.softegg.freetogo.User.service.UsersService; -import com.softegg.freetogo.GuideService.service.GuideServiceService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; -import java.util.*; - -import static java.lang.Math.abs; - -/** - * description:导游服务匹配实现类 - * @author:wuyifan - * date:2024/5/28 19:51 - */ -@Component -public class SearchServiceImpl implements SearchService { - @Autowired - DemandsService demandsService; - @Autowired - UsersService usersService; - @Autowired - GuideServiceService guideServiceService; - - /** - * @description: 导游服务匹配实现函数,根据返回码进行操作 - * @param: city - * @return: int - * author: wuyifan - * @date: 2024/5/28 19:52 - */ - @Override - public List guideMatchAccount(int gid){ - GuideService guideService = guideServiceService.getGuideServiceById(gid); - int guideServiceSumDay = Integer.parseInt(guideService.getSumDay()); - String guideServiceDepartureDate = guideService.getDepartureDate(); - String guideServiceEndDate = guideService.getEndDate(); - String guideServiceMessage = guideService.getMessage(); - List dlist = demandsService.getDemandsByCity(guideService.getCity()); - // 使用迭代器的 remove 方法 - dlist.removeIf(demand -> demand.getStatus() > 1); - int length = dlist.size(); - double[] sumScores = new double[length]; - int i = 0; - for (Demands demands : dlist) { - double sumScore = 0; - int demandsSumDay = Integer.parseInt(demands.getSumDay()); - String demandsDepartureDate = demands.getDepartureDate(); - String demandsEndDate = demands.getEndDate(); - String demandsMessage = demands.getMessage(); - double timeScore = timeScore(guideServiceSumDay,guideServiceDepartureDate,guideServiceEndDate,demandsSumDay,demandsDepartureDate,demandsEndDate); - double messageScore = messageScore(guideServiceMessage, demandsMessage); - sumScore += timeScore + messageScore; - sumScores[i] = sumScore; - i++; - } - // 创建一个包含索引和值的列表 - List> list = new ArrayList<>(); - for (int j = 0; j < sumScores.length; j++) { - list.add(new AbstractMap.SimpleEntry<>(sumScores[j], dlist.get(j))); - } - // 根据sumScores的元素大小对 list 进行排序 - list.sort((o1, o2) -> o2.getKey().compareTo(o1.getKey())); - List newdList = new ArrayList<>(); - for (Map.Entry entry : list) { - newdList.add(entry.getValue()); - } - return newdList; - } - - /** - * @description: 申请匹配游客需求实现函数,游客向导游申请 - * @param: did,gid - * @return: int - * author: wuyifan - * @date: 2024/5/28 19:52 - */ - - @Override - public int match(int gid, int did){ - Demands demand = demandsService.getDemandById(did); - GuideService guideService = guideServiceService.getGuideServiceById(gid); - demand.setStatus(1); - List guideServiceIdList = demand.getGuideServiceIdList(); - if (guideServiceIdList == null) { - guideServiceIdList = new ArrayList<>(); - } - if(!guideServiceIdList.contains(gid)){ - guideServiceIdList.add(gid); - } - demand.setGuideServiceIdList(guideServiceIdList); -// List demandIdList = guideService.getDemandIdList(); -// if (demandIdList == null) { -// demandIdList = new ArrayList<>(); -// } -// demandIdList.add(did); -// guideService.setDemandIdList(demandIdList); - demandsService.update(demand); - guideServiceService.update(guideService); - System.out.println(demand.getGuideServiceIdList()); - return 1006; - } - - /** - * @description: 确定导游服务申请列表实现函数,根据返回码进行操作 - * @param: did,gid - * @return: int - * author: wuyifan - * @date: 2024/5/28 19:52 - */ - @Override - public List confirmedPage(int gid){ - GuideService guideService = guideServiceService.getGuideServiceById(gid); - List demandIdList = guideService.getDemandIdList(); - List demandsList = new ArrayList<>(); - for(int number : demandIdList) { - Demands demand = demandsService.getDemandById(number); - demandsList.add(demand); - } - return demandsList; - } - - /** - * @description: 确定匹配导游服务匹配实现函数,根据返回码进行操作 - * @param: did,gid - * @return: int - * author: wuyifan - * @date: 2024/5/28 19:52 - */ - @Override - public int confirmed(int gid, int did){ - Demands demand = demandsService.getDemandById(did); - GuideService guideService = guideServiceService.getGuideServiceById(gid); - demand.setStatus(2); - demand.setGuideServiceId(gid); - guideService.setStatus(2); - guideService.setDemandId(did); - demandsService.update(demand); - guideServiceService.update(guideService); - return 1007; - } - - /** - * @description: 取消导游服务实现函数,根据返回码进行操作 - * @param: did,gid - * @return: int - * author: wuyifan - * @date: 2024/5/28 19:52 - */ - @Override - public int refuse(int gid){ - GuideService guideService = guideServiceService.getGuideServiceById(gid); - int did = guideService.getDemandId(); - Demands demand = demandsService.getDemandById(gid); - List demandIdList = guideService.getDemandIdList(); - if (demandIdList == null) { - guideService.setStatus(0); - }else { - guideService.setStatus(1); - } - List guideServiceIdList = demand.getGuideServiceIdList(); - if(guideServiceIdList == null){ - demand.setStatus(0); - }else { - demand.setStatus(1); - } - guideService.setDemandId(null); - demand.setGuideServiceId(null); - demandsService.update(demand); - guideServiceService.update(guideService); - return 1; - } - - @Override - public int delete(int gid){ - GuideService guideService = guideServiceService.getGuideServiceById(gid); - guideService.setStatus(4); - guideServiceService.update(guideService); - return 1; - } - - public static boolean isRangeWithinRange(LocalDate startDate1, LocalDate endDate1, LocalDate startDate2, LocalDate endDate2) { - return !startDate1.isBefore(startDate2) && !endDate1.isAfter(endDate2); - } - - /** - * @description: 时间匹配分数 - * @param: gsum、dsum、ddate、edate - * @return: float - * @author: wuyifan - * @date: 2024/5/28 20:35 - */ - @Override - public double timeScore(int gsum, String gddate, String gedate, int dsum, String dddate, String dedate){ - double score = 0; - int difference = gsum - dsum; - if (abs(difference) < 15 ){ - score += 10 / (float)(abs(difference) + 1); - } - - // 使用DateTimeFormatter将字符串转换为LocalDate对象 - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - LocalDate startDate1 = LocalDate.parse(dddate, formatter); - LocalDate endDate1 = LocalDate.parse(dedate, formatter); - System.out.println(startDate1); - System.out.println(endDate1); - - LocalDate startDate2 = LocalDate.parse(gddate, formatter); - LocalDate endDate2 = LocalDate.parse(gedate, formatter); - System.out.println(startDate2); - System.out.println(endDate2); - - // 判断第一个范围是否在第二个范围内 - boolean isRange1WithinRange2 = isRangeWithinRange(startDate1, endDate1, startDate2, endDate2); - - if (isRange1WithinRange2){ - score += 100; - } - return score; - } - - /** - * @description: Jaccard相似度算法 - * @param: String - * @return: float - * @author: wuyifan - * @date: 2024/5/30 20:35 - */ - public static double jaccardSimilarity(String s1, String s2) { - if (s1 == null || s2 == null || s1.isEmpty() || s2.isEmpty()) { - return 0.0; // 如果任何一个字符串为空,直接返回0 - } - - Set set1 = new HashSet<>(); - Set set2 = new HashSet<>(); - - for (char c : s1.toCharArray()) { - set1.add(c); - } - - for (char c : s2.toCharArray()) { - set2.add(c); - } - - Set intersection = new HashSet<>(set1); - intersection.retainAll(set2); - - Set union = new HashSet<>(set1); - union.addAll(set2); - - return (double) intersection.size() / union.size(); - } - - /** - * @description: 余弦相似度算法 - * @param: String - * @return: float - * @author: wuyifan - * @date: 2024/5/30 20:35 - */ - - private static Map getCharacterFrequency(String s) { - Map frequencyMap = new HashMap<>(); - for (char c : s.toCharArray()) { - frequencyMap.put(c, frequencyMap.getOrDefault(c, 0) + 1); - } - return frequencyMap; - } - - public static double cosineSimilarity(String s1, String s2) { - if (s1 == null || s2 == null || s1.isEmpty() || s2.isEmpty()) { - return 0.0; // 如果任何一个字符串为空,直接返回0 - } - Map freq1 = getCharacterFrequency(s1); - Map freq2 = getCharacterFrequency(s2); - - double dotProduct = 0.0; - double mag1 = 0.0; - double mag2 = 0.0; - - for (char c : freq1.keySet()) { - if (freq2.containsKey(c)) { - dotProduct += freq1.get(c) * freq2.get(c); - } - mag1 += Math.pow(freq1.get(c), 2); - } - - for (char c : freq2.keySet()) { - mag2 += Math.pow(freq2.get(c), 2); - } - - mag1 = Math.sqrt(mag1); - mag2 = Math.sqrt(mag2); - - return dotProduct / (mag1 * mag2); - } - - /** - * @description: Dice系数算法 - * @param: String - * @return: float - * @author: wuyifan - * @date: 2024/5/30 20:25 - */ - public static double diceCoefficient(String s1, String s2) { - if (s1 == null || s2 == null || s1.isEmpty() || s2.isEmpty()) { - return 0.0; // 如果任何一个字符串为空,直接返回0 - } - - int intersection = 0; - - for (int i = 0; i < s1.length() - 1; i++) { - String bigram = s1.substring(i, i + 2); - if (s2.contains(bigram)) { - intersection++; - } - } - - int union = s1.length() + s2.length() - intersection; - - return (double) (2 * intersection) / union; - } - - /** - * @description: N-gram 模型算法 - * @param: String - * @return: float - * @author: wuyifan - * @date: 2024/5/30 20:22 - */ - private static Set generateNGrams(String s, int n) { - if (s == null || s.length() < n || n <= 0) { - throw new IllegalArgumentException("Invalid input string or n-gram size"); - } - - - Set nGrams = new HashSet<>(); - for (int i = 0; i <= s.length() - n; i++) { - nGrams.add(s.substring(i, i + n)); - } - return nGrams; - } - - public static double bigramSimilarity(String s1, String s2) { - if (s1 == null || s2 == null || s1.isEmpty() || s2.isEmpty()) { - return 0.0; // 如果任何一个字符串为空,直接返回0 - } - - Set bigrams1 = generateNGrams(s1, 2); - Set bigrams2 = generateNGrams(s2, 2); - - Set commonBigrams = new HashSet<>(bigrams1); - commonBigrams.retainAll(bigrams2); - - Set allBigrams = new HashSet<>(bigrams1); - allBigrams.addAll(bigrams2); - - return (double) commonBigrams.size() / allBigrams.size(); - } - - /** - * @description: 备注匹配分数 - * @param: gmessage、dmessage - * @return: float - * @author: wuyifan - * @date: 2024/5/28 20:35 - */ - @Override - public double messageScore(String gmessage, String dmessage){ - double score; - double similarity1 = jaccardSimilarity(gmessage, dmessage); - double similarity2 = cosineSimilarity(gmessage, dmessage); - double similarity3 = diceCoefficient(gmessage, dmessage); - double similarity4 = bigramSimilarity(gmessage, dmessage); - score = similarity1 + similarity2 + similarity3 + similarity4; - return score; - } -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/SendDemand/controller/SendDemandController.java b/src/后端/src/main/java/com/softegg/freetogo/SendDemand/controller/SendDemandController.java deleted file mode 100644 index c939509..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/SendDemand/controller/SendDemandController.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.softegg.freetogo.SendDemand.controller; - -import com.softegg.freetogo.Demand.bean.Demands; -import com.softegg.freetogo.Demand.service.DemandsService; -import com.softegg.freetogo.GuideService.bean.GuideService; -import com.softegg.freetogo.SendDemand.service.SendDemandService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import java.util.List; -import java.util.Map; - -/** - * @description:登录服务前后端交互 - * @author:wuyifan - * @date:2024/5/10 23:09 - */ - -@RestController -//@CrossOrigin(origins = "*") -@RequestMapping("/SendDemand") -public class SendDemandController { - - @Autowired - SendDemandService sendDemandService; - @Autowired - DemandsService demandsService; - - /** - * @description: 发送需求的交互逻辑 - * @param: map - * @return: java.lang.String - * @author: wuyifan - * @date: 2024/5/10 22:45 - */ - @PostMapping("register") - public String SendDemand(@RequestBody Map map) { - return switch (sendDemandService.sendnewDemandAccount(map.get("city").toString(), map.get("phone").toString(), map.get("time").toString(), (String) map.get("remark"))) { - case 1005 -> "1";//需求发送成功 - default -> "0"; - }; - } - - /** - * @description: 发送该用户所有游客需求的交互逻辑 - * @param: map - * @return: java.lang.String - * @author: wuyifan - * @date: 2024/5/16 11:01 - */ - @GetMapping("sendAllDemands") - public List sendAllDemand(String phone) { - System.out.println("收到目标用户手机号:" + phone); - List dlist = demandsService.getDemandsByPhone(phone); - System.out.println(dlist); - return dlist; - } - - /** - * @description: 发送需求的交互逻辑 - * @param: map - * @return: java.lang.String - * @author: wuyifan - * @date: 2024/6/4 16:12 - */ - @GetMapping("demand") - public Demands demand(int did) { - System.out.println("需求did:"+did); - return demandsService.getDemandById(did); - } - -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/SendDemand/service/SendDemandService.java b/src/后端/src/main/java/com/softegg/freetogo/SendDemand/service/SendDemandService.java deleted file mode 100644 index 17f3608..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/SendDemand/service/SendDemandService.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.softegg.freetogo.SendDemand.service; - -import org.springframework.stereotype.Service; - -/** - * @description:抽象需求发送服务接口类 - * @author:wuyifan - * @date:2024/5/10 23:31 - */ -@Service -public interface SendDemandService { - int sendnewDemandAccount(String city, String phone, String date, String message); -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/SendDemand/service/SendDemandServiceImpl.java b/src/后端/src/main/java/com/softegg/freetogo/SendDemand/service/SendDemandServiceImpl.java deleted file mode 100644 index f738492..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/SendDemand/service/SendDemandServiceImpl.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.softegg.freetogo.SendDemand.service; - -import com.softegg.freetogo.Demand.bean.Demands; -import com.softegg.freetogo.Demand.service.DemandsService; -import com.softegg.freetogo.User.bean.Users; -import com.softegg.freetogo.User.service.UsersService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.time.temporal.ChronoUnit; - -/** - * @description:需求服务实现类 - * @author:wuyifan - * @date:2024/5/10 23:10 - */ -@Component -public class SendDemandServiceImpl implements SendDemandService { - @Autowired - DemandsService demandsService; - @Autowired - UsersService usersService; - - /** - * @description: 导游服务实现函数,根据返回码进行操作 - * @param: city - * @return: int - * @author: wuyifan - * @date: 2024/5/10 23:25 - */ - - @Override - public int sendnewDemandAccount(String city, String phone, String date, String message) { - LocalDateTime currentDateTime = LocalDateTime.now(); - //对获取的date信息进行处理 - DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - String formattedDateTime = currentDateTime.format(formatter1); - date = date.replace("[", ""); - date = date.replace("]", ""); - String[] parts = date.split(","); - String dDate = parts[0]; - String eDate = parts[1]; - //获取整个导游服务的总天数 - eDate = eDate.trim(); - DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - LocalDate startDate = LocalDate.parse(dDate, formatter2); - LocalDate endDate = LocalDate.parse(eDate, formatter2); - String departureTime = startDate.format(formatter2); - String endTime = endDate.format(formatter2); - long daysBetween = ChronoUnit.DAYS.between(startDate, endDate) + 1; - //根据收到的消息,初始化游客需求内容 - Demands demand = new Demands(); - Users user = usersService.getUserByPhone(phone); - demand.setPhone(phone); - demand.setCity(city); - demand.setTouristGender(user.isGender()); - demand.setNickname(user.getNickname()); - demand.setCreateTime(formattedDateTime); - demand.setDepartureDate(departureTime); - demand.setEndDate(endTime); - demand.setSumDay(String.valueOf(daysBetween)); - demand.setMessage(message); - demand.setStatus(0); - demandsService.add(demand); - return 1005;//添加游客需求成功 - } -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/SendGuideService/controller/SendGuideServiceController.java b/src/后端/src/main/java/com/softegg/freetogo/SendGuideService/controller/SendGuideServiceController.java deleted file mode 100644 index 9431e31..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/SendGuideService/controller/SendGuideServiceController.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.softegg.freetogo.SendGuideService.controller; - -import com.softegg.freetogo.GuideService.bean.GuideService; -import com.softegg.freetogo.GuideService.service.GuideServiceService; -import com.softegg.freetogo.SendGuideService.service.SendGuideServiceService; -import com.softegg.freetogo.User.bean.Users; -import com.softegg.freetogo.User.service.UsersService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import java.util.List; -import java.util.Map; - -/** - * @description:登录服务前后端交互 - * @author:wuyifan - * @date:2024/5/13 10:47 - */ -@RestController -//@CrossOrigin(origins = "*") -@RequestMapping("/SendGuideService") -public class SendGuideServiceController { - @Autowired - SendGuideServiceService sendGuideServiceService; - @Autowired - UsersService usersService; - @Autowired - GuideServiceService guideServiceService; - - /** - * @description: 发送需求的交互逻辑 - * @param: map - * @return: java.lang.String - * @author: wuyifan - * @date: 2024/5/13 10:48 - */ - @PostMapping("register") - public int SendDemand(@RequestBody Map map) { - String phone = map.get("phone").toString(); - Users user = usersService.getUserByPhone(phone); - if (user.isMembertype()) { - return switch (sendGuideServiceService.sendnewGuideServiceAccount(map.get("city").toString(), map.get("phone").toString(), map.get("time").toString(), (String) map.get("remark"))) { - case 1005 -> 1;//服务发送成功 - default -> 0; - }; - } else { - return 2;//用户非导游 - } - } - - /** - * @description: 发送该用户所有导游服务的交互逻辑 - * @param: map - * @return: java.lang.String - * @author: wuyifan - * @date: 2024/5/16 11:01 - */ - @GetMapping("sendAllGuideService") - public List sendAllGuideService(String phone) { - List glist = guideServiceService.getGuideServiceByPhone(phone); - return glist; - } - - /** - * @description: 发送需求的交互逻辑 - * @param: map - * @return: java.lang.String - * @author: wuyifan - * @date: 2024/6/4 16:10 - */ - @GetMapping("GuideService") - public GuideService GuideService(int gid) { - return guideServiceService.getGuideServiceById(gid); - } - -} \ No newline at end of file diff --git a/src/后端/src/main/java/com/softegg/freetogo/SendGuideService/service/SendGuideServiceService.java b/src/后端/src/main/java/com/softegg/freetogo/SendGuideService/service/SendGuideServiceService.java deleted file mode 100644 index e48639f..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/SendGuideService/service/SendGuideServiceService.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.softegg.freetogo.SendGuideService.service; - -import org.springframework.stereotype.Service; - -/** - * @description:抽象需求发送服务接口类 - * @author:wuyifan - * @date:2024/5/13 11:11 - */ -@Service -public interface SendGuideServiceService { - - int sendnewGuideServiceAccount(String city, String phone, String date, String message); -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/SendGuideService/service/SendGuideServiceServiceImpl.java b/src/后端/src/main/java/com/softegg/freetogo/SendGuideService/service/SendGuideServiceServiceImpl.java deleted file mode 100644 index 57abe67..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/SendGuideService/service/SendGuideServiceServiceImpl.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.softegg.freetogo.SendGuideService.service; - -import com.softegg.freetogo.GuideService.bean.GuideService; -import com.softegg.freetogo.GuideService.service.GuideServiceService; -import com.softegg.freetogo.User.bean.Users; -import com.softegg.freetogo.User.service.UsersService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.time.temporal.ChronoUnit; - -/** - * @description:需求服务实现类 - * @author:wuyifan - * @date:2024/5/13 10:53 - */ -@Component -public class SendGuideServiceServiceImpl implements SendGuideServiceService { - @Autowired - GuideServiceService guideServiceService; - @Autowired - UsersService usersService; - - /** - * @description: 注册接口实现函数,根据返回码进行操作 - * @param: city - * @return: int - * @author: wuyifan - * @date: 2024/5/10 23:25 - */ - @Override - public int sendnewGuideServiceAccount(String city, String phone, String date, String message) { - LocalDateTime currentDateTime = LocalDateTime.now(); - //对获取的date信息进行处理 - DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - String formattedDateTime = currentDateTime.format(formatter1); - date = date.replace("[", ""); - date = date.replace("]", ""); - String[] parts = date.split(","); - String dDate = parts[0]; - String eDate = parts[1]; - //获取整个导游服务的总天数 - System.out.println(dDate); - System.out.println(eDate); - dDate = dDate.trim(); - eDate = eDate.trim(); - dDate = dDate.substring(0, 10); - eDate = eDate.substring(0, 10); - System.out.println(dDate); - System.out.println(eDate); - DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - LocalDate startDate = LocalDate.parse(dDate, formatter2); - LocalDate endDate = LocalDate.parse(eDate, formatter2); - String departureTime = startDate.format(formatter2); - String endTime = endDate.format(formatter2); - long daysBetween = ChronoUnit.DAYS.between(startDate, endDate) + 1; - //根据收到的消息,初始化导游服务内容 - GuideService guideService = new GuideService(); - Users user = usersService.getUserByPhone(phone); - guideService.setPhone(phone); - guideService.setCity(city); - guideService.setGuideGender(user.isGender()); - guideService.setNickname(user.getNickname()); - guideService.setCreateTime(formattedDateTime); - guideService.setDepartureDate(departureTime); - guideService.setEndDate(endTime); - guideService.setSumDay(String.valueOf(daysBetween)); - guideService.setMessage(message); - guideService.setStatus(0); - guideServiceService.add(guideService); - return 1006;//添加导游服务成功 - } -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/User/Dao/GuidesRepository.java b/src/后端/src/main/java/com/softegg/freetogo/User/Dao/GuidesRepository.java deleted file mode 100644 index 0674c4a..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/User/Dao/GuidesRepository.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.softegg.freetogo.User.Dao; - -import com.softegg.freetogo.User.bean.Guides; -import org.springframework.data.jpa.repository.JpaRepository; - -/** - * @description: 继承Jpa数据库接口类 - * @author: zhanglinhao - * @date: 2024/5/16 10:44 - */ -public interface GuidesRepository extends JpaRepository { -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/User/Dao/UsersRepository.java b/src/后端/src/main/java/com/softegg/freetogo/User/Dao/UsersRepository.java deleted file mode 100644 index a67406b..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/User/Dao/UsersRepository.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.softegg.freetogo.User.Dao; - -import com.softegg.freetogo.User.bean.Users; -import org.springframework.data.jpa.repository.JpaRepository; - -/** - * @description:继承Jpa数据库接口类 - * @author:zhanglinhao - * @date:2024/5/8 8:50 - */ -public interface UsersRepository extends JpaRepository { - Users findByPhone(String phone);//自定义函数,根据手机号进行查找返回对应对象 -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/User/bean/Guides.java b/src/后端/src/main/java/com/softegg/freetogo/User/bean/Guides.java deleted file mode 100644 index d7df762..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/User/bean/Guides.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.softegg.freetogo.User.bean; - -import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -/** - * @description: 导游实体类 - * @author: zhanglinhao - * @date: 2024/5/16 10:33 - */ -@Entity -@Table(name = "guides") -@Setter -@Getter -@NoArgsConstructor -@AllArgsConstructor -public class Guides { - @Id - private Integer uid; - @Column(name = "residence") - private String rsd; - @Column(name = "familiarareas") - private String fa; - @Column(name = "synopsis") - private String syns; - @Column(name = "experance") - private boolean re; -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/User/bean/Users.java b/src/后端/src/main/java/com/softegg/freetogo/User/bean/Users.java deleted file mode 100644 index 9f6f97a..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/User/bean/Users.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.softegg.freetogo.User.bean; - -import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -/** - * @description:数据库中表users的对应实体类 - * @author:zhanglinhao - * @date:2024/5/7 15:36 - */ -@Entity -@Table(name = "users") -@Setter -@Getter -@NoArgsConstructor -@AllArgsConstructor -public class Users { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Integer uid; - @Column - private String name; - @Column - private String email; - @Column - private String password; - @Column - private String createtime; - @Column(name="IDCard") - private String idcard; - @Column - private int reputation; - @Column - private boolean gender;//ture:male, false:female - @Column - private boolean membertype;//true:guide, false:visitor - @Column - private String phone; - @Column - private String nickname; - @Column - private int status; - - public Users(String name, String email, String psw, String ct, int rpt, String phone, String nkn, String idc, boolean gender, boolean type, int status) { - this.name = name; - this.email = email; - this.password = psw; - this.createtime = ct; - this.reputation = rpt; - this.phone = phone; - this.nickname = nkn; - this.idcard = idc; - this.gender = gender; - this.membertype = type; - this.status = status; - } -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/User/controller/UsersController.java b/src/后端/src/main/java/com/softegg/freetogo/User/controller/UsersController.java deleted file mode 100644 index 7f260c4..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/User/controller/UsersController.java +++ /dev/null @@ -1,238 +0,0 @@ -package com.softegg.freetogo.User.controller; - -import com.softegg.freetogo.User.bean.Guides; -import com.softegg.freetogo.User.bean.Users; -import com.softegg.freetogo.User.service.GuidesService; -import com.softegg.freetogo.User.service.UsersService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import java.util.List; -import java.util.Map; - -/** - * @description:Users控制类,用于前后端交互 - * @author:zhanglinhao - * @date:2024/5/8 8:28 - */ -@RestController -//@CrossOrigin(origins = "*") -@RequestMapping("/users") -public class UsersController { - @Autowired - UsersService usersService; - @Autowired - GuidesService guidesService; - - /** - * @description: 查找users表中所有数据 - * @param: null - * @return: java.util.List - * @author: zhanglinhao - * @date: 2024/5/10 8:16 - */ - @GetMapping("findAll") - public List findAll() { - System.out.println("响应查找所有数据"); - return usersService.findAll(); - } - - /** - * @description: 新增用户 - * @author: zhanglinhao - * @date: 2024/5/10 8:17 - */ - @GetMapping("add") - public String add(String name, - String email, - String password, - String createtime, - int reputation, - String phone, - String nickname, - String IDCard, - boolean gender, - boolean type, - int status) { - Users user = new Users(name, email, password, createtime, reputation, phone, nickname, IDCard, gender, type, status); - usersService.add(user); - System.out.println("添加用户"); - return "添加成功"; - } - - /** - * @description: 根据id删除用户 - * @param: id - * @return: java.lang.String - * @author: zhanglinhao - * @date: 2024/5/10 8:17 - */ - @GetMapping("delbyid") - public String delById(int id) { - usersService.deleteById(id); - System.out.println("通过id删除用户"); - return "删除成功"; - } - - /** - * @description: 根据id获取用户数据 - * @param: id - * @return: com.softegg.freetogo.User.bean.Users - * @author: zhanglinhao - * @date: 2024/5/10 8:17 - */ - @GetMapping("findbyid") - public Users getUserById(int id) { - System.out.println("通过id获取用户数据"); - return usersService.getUserById(id); - } - - /** - * @description: 使用GET接收参数更新用户信息 - * @author: zhanglinhao - * @date: 2024/5/10 8:17 - */ - @GetMapping("update") - public String update(String name, - String email, - String password, - String createtime, - int reputation, - String phone, - String nickname, - String IDCard, - boolean gender, - boolean type, - int status) { - Users User = usersService.getUserByPhone(phone); - System.out.println(User); - setUsers(name, email, password, createtime, reputation, phone, nickname, IDCard, gender, type, status, User); - usersService.update(User); - System.out.println("更新用户信息:" + User); - return "更新成功"; - } - - /** - * @description: 使用POST接受参数更新用户信息 - * @param: user - * @return: void - * @author: zhanglinhao - * @date: 2024/5/10 19:45 - */ - - - @PostMapping("Pupdate") - public boolean Pupdate(@RequestBody Map user) { - Users ubody = user.get("user"); - System.out.println(ubody); -// System.out.println(ubody.get("uid")); - Users User = new Users(ubody.getUid(), ubody.getName(), ubody.getEmail(), ubody.getPassword(), ubody.getCreatetime(), ubody.getIdcard(), ubody.getReputation(), ubody.isGender(), ubody.isMembertype(), ubody.getPhone(), ubody.getNickname(), ubody.getStatus()); - usersService.update(User); - return true; - } - - /** - * @description: 通过手机号获取用户信息 - * @param: phone - * @return: com.softegg.freetogo.User.bean.Users - * @author: zhanglinhao - * @date: 2024/5/10 8:17 - */ - @GetMapping("getByPhone") - public Users getByPhone(String phone) { - System.out.println("根据手机号获取用户信息:" + phone); - System.out.println(usersService.getUserByPhone(phone)); - return usersService.getUserByPhone(phone); - } - - /** - * @description: 判断是否是导游 - * @param: phone - * @return: boolean - * @author: zhanglinhao - * @date: 2024/5/15 20:03 - */ - @GetMapping("isGuide") - public boolean isGuide(String phone) { - System.out.println("查寻是否是导游:" + phone); - return usersService.isGuide(phone); - } - - /** - * @description: 获取id - * @param: phone - * @return: int - * @author: zhanglinhao - * @date: 2024/5/16 11:13 - */ - @GetMapping("getUid") - public int getUid(String phone) { - System.out.println("搜索uid使用的电话:" + phone); - return usersService.getIdByPhone(phone); - } - - - /** - * @description: 注册成为导游 - * @param: guide - * @return: int - * @author: zhanglinhao - * @date: 2024/5/16 10:15 - */ -// @PostMapping("registerToGuide") -// public int registerToGuide(@RequestBody Map> grequesting) {//Map> gbody) { -// System.out.println("接收的注册请求:"+grequesting); -// Map gbody = grequesting.get("registerToGuide"); -// System.out.println("处理后的注册请求:"+gbody); -// Guides guide = new Guides(); -// guide.setUid(Integer.parseInt(gbody.get("uid"))); -// guide.setRsd(gbody.get("rsd")); -// guide.setFa(gbody.get("fa")); -// guide.setSyns(gbody.get("syns")); -// guide.setRe(Boolean.parseBoolean(gbody.get("re"))); -// if(guidesService.registerToGuide(guide)) -// return 1; -// else -// return 0; -// } - @PostMapping("registerToGuide") - public int registerToGuide(@RequestBody Map grequesting) {//Map> gbody) { - System.out.println(grequesting); - Guides guide = grequesting.get("registerToGuide"); - System.out.println(guide); - if(guidesService.registerToGuide(guide)) - return 1; - else - return 0; - } - - /** - * @description: 设置user属性 - * @author: zhanglinhao - * @date: 2024/5/10 8:18 - */ - private void setUsers(String name, - String email, - String psw, - String ct, - int rpt, - String phone, - String nkn, - String idc, - boolean gender, - boolean type, - int status, - Users user) { - user.setName(name); - user.setGender(gender); - user.setPassword(psw); - user.setEmail(email); - user.setReputation(rpt); - user.setMembertype(type); - user.setCreatetime(ct); - user.setPhone(phone); - user.setNickname(nkn); - user.setIdcard(idc); - user.setStatus(status); - } -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/User/service/GuidesService.java b/src/后端/src/main/java/com/softegg/freetogo/User/service/GuidesService.java deleted file mode 100644 index 771d990..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/User/service/GuidesService.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.softegg.freetogo.User.service; - -import com.softegg.freetogo.User.bean.Guides; -import org.springframework.stereotype.Service; - -/** - * @description: 数据库操作抽象接口类 - * @author: zhanglinhao - * @date: 2024/5/16 10:45 - */ -@Service -public interface GuidesService { - boolean registerToGuide(Guides guide);//注册成为导游,将导游注册信息入库 -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/User/service/GuidesServiceImpl.java b/src/后端/src/main/java/com/softegg/freetogo/User/service/GuidesServiceImpl.java deleted file mode 100644 index 5d1202e..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/User/service/GuidesServiceImpl.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.softegg.freetogo.User.service; - -import com.softegg.freetogo.User.Dao.GuidesRepository; -import com.softegg.freetogo.User.bean.Guides; -import com.softegg.freetogo.User.bean.Users; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -/** - * @description: 数据库操作接口实现类 - * @author: zhanglinhao - * @date: 2024/5/16 10:46 - */ -@Component -public class GuidesServiceImpl implements GuidesService { - @Autowired - GuidesRepository guidesRepository; - @Autowired - UsersService usersService; -// -// @Override -// public void registerToGuide(Guides guide) { -// guidesRepository.save(guide); -// System.out.println("成功保存注册导游信息!"); -// } - - /** - * @description: 注册成为导游 - * @param: guide - * @return: int - * @author: zhanglinhao - * @date: 2024/5/15 21:19 - */ - @Override - public boolean registerToGuide(Guides guide) { - System.out.println("注册成为导游id:" + guide.getUid()); - Users user = usersService.getUserById(guide.getUid()); - user.setMembertype(true); - guidesRepository.save(guide); - if (user.isMembertype()) { - System.out.println("注册成功!"); - return true; - }else{ - System.out.println("注册失败!"); - return false; - } - - } -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/User/service/UserServiceImpl.java b/src/后端/src/main/java/com/softegg/freetogo/User/service/UserServiceImpl.java deleted file mode 100644 index 86b054e..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/User/service/UserServiceImpl.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.softegg.freetogo.User.service; - -import com.softegg.freetogo.User.Dao.UsersRepository; -import com.softegg.freetogo.User.bean.Users; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.List; - -/** - * @description: 数据库操作接口实现类 - * @author: zhanglinhao - * @date: 2024/5/8 8:50 - */ -@Component -public class UserServiceImpl implements UsersService { - @Autowired - private UsersRepository usersRepository; - - /** - * @description: 查找所有用户 - * @param: null - * @return: java.util.List - * @author: zhanglinhao - * @date: 2024/5/9 22:52 - */ - public List findAll() { - System.out.println("查询成功"); - return usersRepository.findAll(); - } - - /** - * @description: 以user为用户入库 - * @param: user - * @return: void - * @author: zhanglinhao - * @date: 2024/5/9 22:53 - */ - public void add(Users user) { - usersRepository.save(user); - System.out.println("添加成功:" + user); - } - - /** - * @description: 删除对应id用户 - * @param: id - * @return: void - * @author: zhanglinhao - * @date: 2024/5/9 22:53 - */ - public void deleteById(int id) { - usersRepository.deleteById(id); - System.out.println("删除成功:" + id); - } - - /** - * @description: 获得对应id用户 - * @param: id - * @return: com.softegg.freetogo.User.Bean.Users - * @author: zhanglinhao - * @date: 2024/5/9 22:54 - */ - public Users getUserById(int id) { - return usersRepository.findById(id).orElse(null); - } - - /** - * @description: 更新用户信息 - * @param: user - * @return: void - * @author: zhanglinhao - * @date: 2024/5/9 22:54 - */ - public void update(Users user) { - usersRepository.save(user); - System.out.println("更新成功:"); - showInfo(user); - } - - /** - * @description: 判断该手机号(账号)是否已经入库 - * @param: phone - * @return: boolean - * @author: zhanglinhao - * @date: 2024/5/9 22:54 - */ - public boolean isRegister(String phone) { - Users users = usersRepository.findByPhone(phone); - System.out.println("正在验证用户是否注册:" + users); - if (users == null) { - System.out.println("用户未注册"); - return false; - } else { - System.out.println("用户已注册"); - return true; - } - } - - /** - * @description: 根据手机号获得用户 - * @param: phone - * @return: com.softegg.freetogo.User.Bean.Users - * @author: zhanglinhao - * @date: 2024/5/9 22:55 - */ - public Users getUserByPhone(String phone) { - System.out.println("通过手机号查找用户:" + phone); - return usersRepository.findByPhone(phone); - } - - /** - * @description: 判断是否是导游 - * @param: phone - * @return: boolean - * @author: zhanglinhao - * @date: 2024/5/15 21:32 - */ - @Override - public boolean isGuide(String phone) { - System.out.println("判断是不是导游:" + phone); - Users user = getUserByPhone(phone); - if (user.isMembertype()) { - System.out.println("是导游:" + phone); - return true; - } else { - System.out.println("不是导游:" + phone); - return false; - } - } - - /** - * @description: 查找uid - * @param: phone - * @return: int - * @author: zhanglinhao - * @date: 2024/5/16 10:54 - */ - @Override - public int getIdByPhone(String phone) { - Users user = usersRepository.findByPhone(phone); - if (user == null) { - System.out.println("该电话号码未注册"); - return -1; - } else { - System.out.println("查询到的id:" + user.getUid()); - return user.getUid(); - } - } - - /** - * @description:打印所有信息 - * @author: zhanglinhao - * @date: 2024/5/16 15:55 - */ - @Override - public void showInfo(Users user) { - System.out.println(user.getUid()); - System.out.println(user.getName()); - System.out.println(user.getPhone()); - System.out.println(user.getPassword()); - System.out.println(user.getNickname()); - System.out.println(user.getCreatetime()); - System.out.println(user.getIdcard()); - System.out.println(user.getReputation()); - System.out.println(user.getStatus()); - System.out.println(user.isGender()); - System.out.println(user.isMembertype()); - } -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/User/service/UsersService.java b/src/后端/src/main/java/com/softegg/freetogo/User/service/UsersService.java deleted file mode 100644 index dcc333e..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/User/service/UsersService.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.softegg.freetogo.User.service; - -import com.softegg.freetogo.User.bean.Users; -import org.springframework.stereotype.Service; - -import java.util.List; - -/** - * @description:数据库操作抽象接口类 - * @author:zhanglinhaon - * @date:2024/5/7 16:06 - */ -@Service -public interface UsersService { - List findAll();//查找所有用户 - - void add(Users user);//以user为用户入库 - - void deleteById(int id);//删除对应id用户 - - Users getUserById(int id);//获得对应id用户 - - void update(Users user);//更新用户信息 - - boolean isRegister(String phone);//判断该手机号(账号)是否已经入库 - - Users getUserByPhone(String phone);//根据手机号获得用户 - - boolean isGuide(String phone);//查询是否是导游 - - int getIdByPhone(String phone);//查找uid - void showInfo(Users user);//打印所有信息 -} diff --git a/src/后端/src/main/java/com/softegg/freetogo/helloController.java b/src/后端/src/main/java/com/softegg/freetogo/helloController.java deleted file mode 100644 index 15947c5..0000000 --- a/src/后端/src/main/java/com/softegg/freetogo/helloController.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.softegg.freetogo; - -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * @description:测试 - * @author:zhanglinhao - * @date:2024/5/7 23:40 - */ -@RestController -public class helloController { - @GetMapping("/hello") - public String hello() { - return "hello world!"; - } -} diff --git a/src/后端/src/main/resources/application.properties b/src/后端/src/main/resources/application.properties deleted file mode 100644 index 17ae3a6..0000000 --- a/src/后端/src/main/resources/application.properties +++ /dev/null @@ -1,6 +0,0 @@ -spring.application.name=FreeToGo -spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver -spring.datasource.url=jdbc:mysql://localhost:3306/freetogo?useSSL=false&useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true -spring.datasource.username=root -spring.datasource.password=zlh1260788704 -server.port=9000 \ No newline at end of file diff --git a/src/后端/src/main/resources/application.yml b/src/后端/src/main/resources/application.yml deleted file mode 100644 index 8f27397..0000000 --- a/src/后端/src/main/resources/application.yml +++ /dev/null @@ -1,26 +0,0 @@ -spring: - jpa: - hibernate: - ddl-auto: update - show-sql: true - datasource: - username: root - password: zlh1260788704 - url: jdbc:mysql://localhost:3306/freetogo?useSSL=false&useUnicode=true&characterEncoding=utf-8 - driverClassName: com.mysql.jdbc.Driver -# data: -# redis: -# host: localhost -# port: 6379 -# #password: 123456 -# database: 0 #操作的是0号数据库 -# jedis: -# #Redis连接池配置 -# pool: -# max-active: 8 #最大连接数 -# max-wait: 1ms #连接池最大阻塞等待时间 -# max-idle: 4 #连接池中的最大空闲连接 -# min-idle: 0 #连接池中的最小空闲连接 -logging: - level: - com.softegg.freetogo.Api.alipay: debug \ No newline at end of file diff --git a/src/后端/src/main/resources/static/jquery-3.7.1.min.js b/src/后端/src/main/resources/static/jquery-3.7.1.min.js deleted file mode 100644 index 798cc8b..0000000 --- a/src/后端/src/main/resources/static/jquery-3.7.1.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0 - - - - 用户登录 - - - - -

用户登录

-
- 用户名:

- 密码 :

- 验证码: -

- -
- - - -