wzl 4 дней назад
Сommit
2c16a4d60e
97 измененных файлов с 4835 добавлено и 0 удалено
  1. 2 0
      .gitattributes
  2. 34 0
      .gitignore
  3. 38 0
      README.MD
  4. 295 0
      mvnw
  5. 189 0
      mvnw.cmd
  6. 165 0
      pom.xml
  7. 16 0
      src/main/java/com/znzn/project/dc/dtdata/DatangEnosDataApplication.java
  8. 11 0
      src/main/java/com/znzn/project/dc/dtdata/base/FileStoreConf.java
  9. 34 0
      src/main/java/com/znzn/project/dc/dtdata/common/CommonData.java
  10. 63 0
      src/main/java/com/znzn/project/dc/dtdata/common/R.java
  11. 19 0
      src/main/java/com/znzn/project/dc/dtdata/config/JacksonConfig.java
  12. 63 0
      src/main/java/com/znzn/project/dc/dtdata/config/SwaggerConfig.java
  13. 160 0
      src/main/java/com/znzn/project/dc/dtdata/config/WindDataInitializer.java
  14. 18 0
      src/main/java/com/znzn/project/dc/dtdata/controller/ExecDataDateController.java
  15. 18 0
      src/main/java/com/znzn/project/dc/dtdata/controller/ExecErrorController.java
  16. 16 0
      src/main/java/com/znzn/project/dc/dtdata/controller/FaviconController.java
  17. 36 0
      src/main/java/com/znzn/project/dc/dtdata/controller/FileStoreController.java
  18. 45 0
      src/main/java/com/znzn/project/dc/dtdata/controller/WindFarmController.java
  19. 20 0
      src/main/java/com/znzn/project/dc/dtdata/controller/WindFarmTablesController.java
  20. 46 0
      src/main/java/com/znzn/project/dc/dtdata/controller/WindPointsController.java
  21. 39 0
      src/main/java/com/znzn/project/dc/dtdata/controller/WindTurbineController.java
  22. 48 0
      src/main/java/com/znzn/project/dc/dtdata/controller/WindTurbineDataController.java
  23. 40 0
      src/main/java/com/znzn/project/dc/dtdata/entity/ExecDataDate.java
  24. 53 0
      src/main/java/com/znzn/project/dc/dtdata/entity/ExecError.java
  25. 48 0
      src/main/java/com/znzn/project/dc/dtdata/entity/FileStore.java
  26. 48 0
      src/main/java/com/znzn/project/dc/dtdata/entity/WindFarm.java
  27. 46 0
      src/main/java/com/znzn/project/dc/dtdata/entity/WindFarmTables.java
  28. 66 0
      src/main/java/com/znzn/project/dc/dtdata/entity/WindPoints.java
  29. 54 0
      src/main/java/com/znzn/project/dc/dtdata/entity/WindTurbine.java
  30. 56 0
      src/main/java/com/znzn/project/dc/dtdata/entity/WindTurbineData.java
  31. 18 0
      src/main/java/com/znzn/project/dc/dtdata/exception/BusinessException.java
  32. 57 0
      src/main/java/com/znzn/project/dc/dtdata/exception/GloableException.java
  33. 5 0
      src/main/java/com/znzn/project/dc/dtdata/exception/UserNotLoginExeption.java
  34. 81 0
      src/main/java/com/znzn/project/dc/dtdata/generate/CodeGenerateMain.java
  35. 20 0
      src/main/java/com/znzn/project/dc/dtdata/inOutEntity/CollectDataInData.java
  36. 21 0
      src/main/java/com/znzn/project/dc/dtdata/inOutEntity/WindPointsInData.java
  37. 20 0
      src/main/java/com/znzn/project/dc/dtdata/inOutEntity/WindTurbineInData.java
  38. 18 0
      src/main/java/com/znzn/project/dc/dtdata/mapper/ExecDataDateMapper.java
  39. 18 0
      src/main/java/com/znzn/project/dc/dtdata/mapper/ExecErrorMapper.java
  40. 18 0
      src/main/java/com/znzn/project/dc/dtdata/mapper/FileStoreMapper.java
  41. 17 0
      src/main/java/com/znzn/project/dc/dtdata/mapper/StandardizedDataMapper.java
  42. 18 0
      src/main/java/com/znzn/project/dc/dtdata/mapper/WindFarmMapper.java
  43. 18 0
      src/main/java/com/znzn/project/dc/dtdata/mapper/WindFarmTablesMapper.java
  44. 21 0
      src/main/java/com/znzn/project/dc/dtdata/mapper/WindPointsMapper.java
  45. 18 0
      src/main/java/com/znzn/project/dc/dtdata/mapper/WindTurbineDataMapper.java
  46. 30 0
      src/main/java/com/znzn/project/dc/dtdata/mapper/WindTurbineMapper.java
  47. 8 0
      src/main/java/com/znzn/project/dc/dtdata/service/IDataCollectionService.java
  48. 19 0
      src/main/java/com/znzn/project/dc/dtdata/service/IExecDataDateService.java
  49. 16 0
      src/main/java/com/znzn/project/dc/dtdata/service/IExecErrorService.java
  50. 16 0
      src/main/java/com/znzn/project/dc/dtdata/service/IFileStoreService.java
  51. 71 0
      src/main/java/com/znzn/project/dc/dtdata/service/IRedisService.java
  52. 21 0
      src/main/java/com/znzn/project/dc/dtdata/service/IWindFarmService.java
  53. 16 0
      src/main/java/com/znzn/project/dc/dtdata/service/IWindFarmTablesService.java
  54. 29 0
      src/main/java/com/znzn/project/dc/dtdata/service/IWindPointsService.java
  55. 26 0
      src/main/java/com/znzn/project/dc/dtdata/service/IWindTurbineDataService.java
  56. 36 0
      src/main/java/com/znzn/project/dc/dtdata/service/IWindTurbineService.java
  57. 312 0
      src/main/java/com/znzn/project/dc/dtdata/service/impl/DataCollectionService.java
  58. 33 0
      src/main/java/com/znzn/project/dc/dtdata/service/impl/ExecDataDateServiceImpl.java
  59. 20 0
      src/main/java/com/znzn/project/dc/dtdata/service/impl/ExecErrorServiceImpl.java
  60. 20 0
      src/main/java/com/znzn/project/dc/dtdata/service/impl/FileStoreServiceImpl.java
  61. 54 0
      src/main/java/com/znzn/project/dc/dtdata/service/impl/RedisServiceImpl.java
  62. 37 0
      src/main/java/com/znzn/project/dc/dtdata/service/impl/WindFarmServiceImpl.java
  63. 20 0
      src/main/java/com/znzn/project/dc/dtdata/service/impl/WindFarmTablesServiceImpl.java
  64. 50 0
      src/main/java/com/znzn/project/dc/dtdata/service/impl/WindPointsServiceImpl.java
  65. 70 0
      src/main/java/com/znzn/project/dc/dtdata/service/impl/WindTurbineDataServiceImpl.java
  66. 64 0
      src/main/java/com/znzn/project/dc/dtdata/service/impl/WindTurbineServiceImpl.java
  67. 238 0
      src/main/java/com/znzn/project/dc/dtdata/utils/enos/EnosapiUtils.java
  68. 17 0
      src/main/java/com/znzn/project/dc/dtdata/utils/enos/FileWriterUtils.java
  69. 103 0
      src/main/java/com/znzn/project/dc/dtdata/utils/enos/JsonToParquetUtils.java
  70. 12 0
      src/main/java/com/znzn/project/dc/dtdata/utils/enos/entity/AccessibleAsset.java
  71. 20 0
      src/main/java/com/znzn/project/dc/dtdata/utils/enos/entity/AccessibleAssetResponse.java
  72. 15 0
      src/main/java/com/znzn/project/dc/dtdata/utils/enos/entity/AccessibleAssetType.java
  73. 19 0
      src/main/java/com/znzn/project/dc/dtdata/utils/enos/entity/AccessibleAssetTypeResponse.java
  74. 205 0
      src/main/java/com/znzn/project/dc/dtdata/utils/enos/entity/AssetAttribute.java
  75. 10 0
      src/main/java/com/znzn/project/dc/dtdata/utils/enos/entity/AssetTopologyRule.java
  76. 10 0
      src/main/java/com/znzn/project/dc/dtdata/utils/enos/entity/BaseResponse.java
  77. 71 0
      src/main/java/com/znzn/project/dc/dtdata/utils/enos/entity/Dimension.java
  78. 19 0
      src/main/java/com/znzn/project/dc/dtdata/utils/enos/entity/HistoricalData.java
  79. 12 0
      src/main/java/com/znzn/project/dc/dtdata/utils/enos/entity/HistoricalMeasurementPoint.java
  80. 8 0
      src/main/java/com/znzn/project/dc/dtdata/utils/enos/entity/HistoricalMeasurementPointResponse.java
  81. 12 0
      src/main/java/com/znzn/project/dc/dtdata/utils/enos/entity/I18n.java
  82. 18 0
      src/main/java/com/znzn/project/dc/dtdata/utils/enos/entity/MetaMeasurementPoint.java
  83. 11 0
      src/main/java/com/znzn/project/dc/dtdata/utils/enos/entity/MetaMeasurementPointResponse.java
  84. 46 0
      src/main/resources/application.properties
  85. 5 0
      src/main/resources/mapper/ExecDataDateMapper.xml
  86. 5 0
      src/main/resources/mapper/ExecErrorMapper.xml
  87. 5 0
      src/main/resources/mapper/FileStoreMapper.xml
  88. 18 0
      src/main/resources/mapper/StandardizedDataMapper.xml
  89. 5 0
      src/main/resources/mapper/WindFarmMapper.xml
  90. 5 0
      src/main/resources/mapper/WindFarmTablesMapper.xml
  91. 5 0
      src/main/resources/mapper/WindPointsMapper.xml
  92. 5 0
      src/main/resources/mapper/WindTurbineDataMapper.xml
  93. 5 0
      src/main/resources/mapper/WindTurbineMapper.xml
  94. 53 0
      src/test/java/Test.java
  95. 13 0
      src/test/java/com/znzn/project/dc/dtdata/DatangEnosDataApplicationTests.java
  96. 607 0
      src/test/java/com/znzn/project/dc/dtdata/TestFault.java
  97. 136 0
      src/test/java/com/znzn/project/dc/dtdata/TestStatus.java

+ 2 - 0
.gitattributes

@@ -0,0 +1,2 @@
+/mvnw text eol=lf
+*.cmd text eol=crlf

+ 34 - 0
.gitignore

@@ -0,0 +1,34 @@
+HELP.md
+target/
+.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+.sh

+ 38 - 0
README.MD

@@ -0,0 +1,38 @@
+## 配置环境变量
+<code>
+sudo vim /etc/default/datangenosdata
+FILE_STORE_ID=2
+</code>
+
+## 打包程序
+<code>
+./jpackage-rpm.sh
+</code>
+<hr>打包成deb以及rpm包
+
+## deb安裝
+
+<code>
+dpkg -i target.dist/datangenosdata_1.0.0_amd64.deb
+</code>
+
+## deb清理
+<code>
+./clear-deb.sh
+</code>
+
+## rpm-x86_64安裝
+
+<code>
+sudo yum install target/dist/datangenosdata-1.0.0-1.x86_64.rpm
+</code>
+## rpm-arm安裝
+
+<code>
+sudo yum install target/dist/datangenosdata-1.0.0-1.aarch64.rpm
+</code>
+
+## rpm 卸载
+<code>
+./clear-rpm.sh
+</code>

+ 295 - 0
mvnw

@@ -0,0 +1,295 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Apache Maven Wrapper startup batch script, version 3.3.4
+#
+# Optional ENV vars
+# -----------------
+#   JAVA_HOME - location of a JDK home dir, required when download maven via java source
+#   MVNW_REPOURL - repo url base for downloading maven distribution
+#   MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
+#   MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output
+# ----------------------------------------------------------------------------
+
+set -euf
+[ "${MVNW_VERBOSE-}" != debug ] || set -x
+
+# OS specific support.
+native_path() { printf %s\\n "$1"; }
+case "$(uname)" in
+CYGWIN* | MINGW*)
+  [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")"
+  native_path() { cygpath --path --windows "$1"; }
+  ;;
+esac
+
+# set JAVACMD and JAVACCMD
+set_java_home() {
+  # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched
+  if [ -n "${JAVA_HOME-}" ]; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ]; then
+      # IBM's JDK on AIX uses strange locations for the executables
+      JAVACMD="$JAVA_HOME/jre/sh/java"
+      JAVACCMD="$JAVA_HOME/jre/sh/javac"
+    else
+      JAVACMD="$JAVA_HOME/bin/java"
+      JAVACCMD="$JAVA_HOME/bin/javac"
+
+      if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then
+        echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&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="$(
+      '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
+}
+
+# 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 %x\\n $h
+}
+
+verbose() { :; }
+[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; }
+
+die() {
+  printf %s\\n "$1" >&2
+  exit 1
+}
+
+trim() {
+  # MWRAPPER-139:
+  #   Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds.
+  #   Needed for removing poorly interpreted newline sequences when running in more
+  #   exotic environments such as mingw bash on Windows.
+  printf "%s" "${1}" | tr -d '[:space:]'
+}
+
+scriptDir="$(dirname "$0")"
+scriptName="$(basename "$0")"
+
+# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties
+while IFS="=" read -r key value; do
+  case "${key-}" in
+  distributionUrl) distributionUrl=$(trim "${value-}") ;;
+  distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;;
+  esac
+done <"$scriptDir/.mvn/wrapper/maven-wrapper.properties"
+[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in $scriptDir/.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${scriptName#mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;;
+esac
+
+# apply MVNW_REPOURL and calculate MAVEN_HOME
+# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
+[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}"
+distributionUrlName="${distributionUrl##*/}"
+distributionUrlNameMain="${distributionUrlName%.*}"
+distributionUrlNameMain="${distributionUrlNameMain%-bin}"
+MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}"
+MAVEN_HOME="${MAVEN_USER_HOME}/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"
+}
+
+if [ -d "$MAVEN_HOME" ]; then
+  verbose "found existing MAVEN_HOME at $MAVEN_HOME"
+  exec_maven "$@"
+fi
+
+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
+
+# 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
+  die "cannot create temp dir"
+fi
+
+mkdir -p -- "${MAVEN_HOME%/*}"
+
+# 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"
+
+# select .zip or .tar.gz
+if ! command -v unzip >/dev/null; then
+  distributionUrl="${distributionUrl%.zip}.tar.gz"
+  distributionUrlName="${distributionUrl##*/}"
+fi
+
+# 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 "$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." >&2
+    echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
+    exit 1
+  fi
+  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
+
+# 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
+
+# Find the actual extracted directory name (handles snapshots where filename != directory name)
+actualDistributionDir=""
+
+# First try the expected directory name (for regular distributions)
+if [ -d "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" ]; then
+  if [ -f "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/bin/$MVN_CMD" ]; then
+    actualDistributionDir="$distributionUrlNameMain"
+  fi
+fi
+
+# If not found, search for any directory with the Maven executable (for snapshots)
+if [ -z "$actualDistributionDir" ]; then
+  # enable globbing to iterate over items
+  set +f
+  for dir in "$TMP_DOWNLOAD_DIR"/*; do
+    if [ -d "$dir" ]; then
+      if [ -f "$dir/bin/$MVN_CMD" ]; then
+        actualDistributionDir="$(basename "$dir")"
+        break
+      fi
+    fi
+  done
+  set -f
+fi
+
+if [ -z "$actualDistributionDir" ]; then
+  verbose "Contents of $TMP_DOWNLOAD_DIR:"
+  verbose "$(ls -la "$TMP_DOWNLOAD_DIR")"
+  die "Could not find Maven distribution directory in extracted archive"
+fi
+
+verbose "Found extracted Maven distribution directory: $actualDistributionDir"
+printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$actualDistributionDir/mvnw.url"
+mv -- "$TMP_DOWNLOAD_DIR/$actualDistributionDir" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME"
+
+clean || :
+exec_maven "$@"

+ 189 - 0
mvnw.cmd

@@ -0,0 +1,189 @@
+<# : batch portion
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements.  See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership.  The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License.  You may obtain a copy of the License at
+@REM
+@REM    http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied.  See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Apache Maven Wrapper startup batch script, version 3.3.4
+@REM
+@REM Optional ENV vars
+@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 ----------------------------------------------------------------------------
+
+@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)
+)
+@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-<version>,maven-mvnd-<version>-<platform>}/<hash>
+if ($env:MVNW_REPOURL) {
+  $MVNW_REPO_PATTERN = if ($USE_MVND -eq $False) { "/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_M2_PATH = "$HOME/.m2"
+if ($env:MAVEN_USER_HOME) {
+  $MAVEN_M2_PATH = "$env:MAVEN_USER_HOME"
+}
+
+if (-not (Test-Path -Path $MAVEN_M2_PATH)) {
+    New-Item -Path $MAVEN_M2_PATH -ItemType Directory | Out-Null
+}
+
+$MAVEN_WRAPPER_DISTS = $null
+if ((Get-Item $MAVEN_M2_PATH).Target[0] -eq $null) {
+  $MAVEN_WRAPPER_DISTS = "$MAVEN_M2_PATH/wrapper/dists"
+} else {
+  $MAVEN_WRAPPER_DISTS = (Get-Item $MAVEN_M2_PATH).Target[0] + "/wrapper/dists"
+}
+
+$MAVEN_HOME_PARENT = "$MAVEN_WRAPPER_DISTS/$distributionUrlNameMain"
+$MAVEN_HOME_NAME = ([System.Security.Cryptography.SHA256]::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
+
+# Find the actual extracted directory name (handles snapshots where filename != directory name)
+$actualDistributionDir = ""
+
+# First try the expected directory name (for regular distributions)
+$expectedPath = Join-Path "$TMP_DOWNLOAD_DIR" "$distributionUrlNameMain"
+$expectedMvnPath = Join-Path "$expectedPath" "bin/$MVN_CMD"
+if ((Test-Path -Path $expectedPath -PathType Container) -and (Test-Path -Path $expectedMvnPath -PathType Leaf)) {
+  $actualDistributionDir = $distributionUrlNameMain
+}
+
+# If not found, search for any directory with the Maven executable (for snapshots)
+if (!$actualDistributionDir) {
+  Get-ChildItem -Path "$TMP_DOWNLOAD_DIR" -Directory | ForEach-Object {
+    $testPath = Join-Path $_.FullName "bin/$MVN_CMD"
+    if (Test-Path -Path $testPath -PathType Leaf) {
+      $actualDistributionDir = $_.Name
+    }
+  }
+}
+
+if (!$actualDistributionDir) {
+  Write-Error "Could not find Maven distribution directory in extracted archive"
+}
+
+Write-Verbose "Found extracted Maven distribution directory: $actualDistributionDir"
+Rename-Item -Path "$TMP_DOWNLOAD_DIR/$actualDistributionDir" -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"

+ 165 - 0
pom.xml

@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>3.5.7</version>
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+    <groupId>com.znzn.project.dc.dtdata</groupId>
+    <artifactId>DatangEnosData</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>DatangEnosData</name>
+    <description>DatangEnosData</description>
+    <url/>
+
+    <properties>
+        <java.version>17</java.version>
+        <!-- 统一版本管理 -->
+        <mybatis-plus.version>3.5.7</mybatis-plus.version>
+        <knife4j.version>4.6.0</knife4j.version>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-redis</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+
+        <!-- 添加数据验证依赖 -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.mysql</groupId>
+            <artifactId>mysql-connector-j</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+
+        <!-- Lombok -->
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <optional>true</optional>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <!-- Mybatis-Plus (统一版本) -->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
+            <version>${mybatis-plus.version}</version>
+        </dependency>
+
+        <!-- Knife4j 美化 Swagger UI (已经内置 SpringDoc,不要同时引入 springdoc-openapi) -->
+        <dependency>
+            <groupId>com.github.xingfudeshi</groupId>
+            <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
+            <version>4.6.0</version>
+        </dependency>
+
+        <!-- 代码生成器 -->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-generator</artifactId>
+            <version>${mybatis-plus.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.velocity</groupId>
+            <artifactId>velocity-engine-core</artifactId>
+            <version>2.3</version>
+        </dependency>
+
+        <!-- ENOS SDK -->
+        <dependency>
+            <groupId>com.enos-iot</groupId>
+            <artifactId>apim-poseidon</artifactId>
+            <version>3.0.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba.fastjson2</groupId>
+            <artifactId>fastjson2</artifactId>
+            <version>2.0.34</version>
+        </dependency>
+
+        <!-- 保存parquet -->
+        <!-- Parquet -->
+        <dependency>
+            <groupId>org.apache.parquet</groupId>
+            <artifactId>parquet-avro</artifactId>
+            <version>1.13.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.parquet</groupId>
+            <artifactId>parquet-hadoop</artifactId>
+            <version>1.13.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.hadoop</groupId>
+            <artifactId>hadoop-common</artifactId>
+            <version>3.3.4</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.hadoop</groupId>
+            <artifactId>hadoop-mapreduce-client-core</artifactId>
+            <version>3.3.4</version>
+        </dependency>
+
+        <!-- Avro -->
+        <dependency>
+            <groupId>org.apache.avro</groupId>
+            <artifactId>avro</artifactId>
+            <version>1.11.1</version>
+        </dependency>
+
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <annotationProcessorPaths>
+                        <path>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                            <version>${lombok.version}</version>
+                        </path>
+                    </annotationProcessorPaths>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.graalvm.buildtools</groupId>
+                <artifactId>native-maven-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <excludes>
+                        <exclude>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                        </exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

+ 16 - 0
src/main/java/com/znzn/project/dc/dtdata/DatangEnosDataApplication.java

@@ -0,0 +1,16 @@
+package com.znzn.project.dc.dtdata;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+@SpringBootApplication
+@EnableScheduling
+@ConfigurationPropertiesScan
+public class DatangEnosDataApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(DatangEnosDataApplication.class, args);
+    }
+}

+ 11 - 0
src/main/java/com/znzn/project/dc/dtdata/base/FileStoreConf.java

@@ -0,0 +1,11 @@
+package com.znzn.project.dc.dtdata.base;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+@ConfigurationProperties(prefix = "file.store")
+@Data
+public class FileStoreConf {
+
+    private Integer id;
+}

+ 34 - 0
src/main/java/com/znzn/project/dc/dtdata/common/CommonData.java

@@ -0,0 +1,34 @@
+package com.znzn.project.dc.dtdata.common;
+
+import com.znzn.project.dc.dtdata.entity.FileStore;
+import com.znzn.project.dc.dtdata.entity.WindTurbine;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class CommonData {
+
+    /**
+     * 逻辑测点字段
+     */
+    public static final Map<String, String> pointIdsWithLogicMap = new HashMap<>();
+
+    /**
+     * 标准化映射字典
+     */
+    public static final Map<String, Map<String, String>> standerMap = new HashMap<>();
+
+    /**
+     * 文件存储配置
+     */
+    public static FileStore FILE_STORE = null;
+
+
+    /**
+     * 本台服务器需要运行的机组
+     */
+    public static Map<String, WindTurbine> NEED_RUN_TURBINE = new HashMap<>();
+
+
+    public static Map<String, String> TABLE_MAP = new HashMap<>();
+}

+ 63 - 0
src/main/java/com/znzn/project/dc/dtdata/common/R.java

@@ -0,0 +1,63 @@
+package com.znzn.project.dc.dtdata.common;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.Collection;
+
+@Schema(description = "返回结果")
+@Data
+public class R<T> {
+
+    private int code;
+    private String message;
+    private T datas;
+    private long total;
+
+    public R(int code, String message, T datas) {
+        this.code = code;
+        this.message = message;
+        this.datas = datas;
+    }
+
+    public R(int code, String message, T datas, long total) {
+        this.code = code;
+        this.message = message;
+        this.datas = datas;
+        this.total = total;
+    }
+
+    public static R ok() {
+        return ok(200, "success", null);
+    }
+
+    public static <T> R<T> ok(T datas) {
+        return ok(200, "success", datas);
+    }
+
+    public static <T> R<T> ok(String message, T datas) {
+        return ok(200, message, datas);
+    }
+
+
+    public static <T> R<T> ok(int code, String message, T datas) {
+        if (datas instanceof Collection) {
+            return new R(code, message, datas,((Collection) datas).size());
+        }
+        return new R(code, message, datas);
+    }
+
+    public static R error() {
+        return error(500, "fail");
+    }
+
+    public static R error(String message) {
+        return error(500, message);
+    }
+
+
+    public static R error(int code, String message) {
+        return new R(code, message, null);
+    }
+
+}

+ 19 - 0
src/main/java/com/znzn/project/dc/dtdata/config/JacksonConfig.java

@@ -0,0 +1,19 @@
+package com.znzn.project.dc.dtdata.config;
+
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+
+@Configuration
+public class JacksonConfig {
+
+    @Bean
+    @Primary
+    public ObjectMapper objectMapper() {
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true);
+        return mapper;
+    }
+}

+ 63 - 0
src/main/java/com/znzn/project/dc/dtdata/config/SwaggerConfig.java

@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2018 Zhejiang xiaominfo Technology CO.,LTD.
+ * All rights reserved.
+ * Official Web Site: http://www.xiaominfo.com.
+ * Developer Web Site: http://open.xiaominfo.com.
+ */
+
+package com.znzn.project.dc.dtdata.config;
+
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.oas.models.info.Info;
+import io.swagger.v3.oas.models.info.License;
+import org.springdoc.core.customizers.GlobalOpenApiCustomizer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/***
+ * 创建Swagger配置
+ * @since:knife4j-springdoc-openapi-demo 1.0
+ * @author <a href="mailto:xiaoymin@foxmail.com">xiaoymin@foxmail.com</a> 
+ * 2020/03/15 20:40
+ */
+@Configuration
+public class SwaggerConfig {
+    /**
+     * 根据@Tag 上的排序,写入x-order
+     *
+     * @return the global open api customizer
+     */
+    @Bean
+    public GlobalOpenApiCustomizer orderGlobalOpenApiCustomizer() {
+        return openApi -> {
+            if (openApi.getTags() != null) {
+                openApi.getTags().forEach(tag -> {
+                    Map<String, Object> map = new HashMap<>();
+//                    map.put("x-order", RandomUtil.randomInt(0,100));
+                    tag.setExtensions(map);
+                });
+            }
+            if (openApi.getPaths() != null) {
+                openApi.addExtension("x-test123", "333");
+//                openApi.getPaths().addExtension("x-abb",RandomUtil.randomInt(1,100));
+            }
+
+        };
+    }
+
+    @Bean
+    public OpenAPI customOpenAPI() {
+        return new OpenAPI()
+                .info(new Info()
+                        .title("大唐SCADA数据获取API")
+                        .version("1.0")
+                        .description("大唐SCADA数据获取API")
+                        .license(new License().name("Apache 2.0")
+                                .url("http://doc.xiaominfo.com")));
+    }
+
+
+}

+ 160 - 0
src/main/java/com/znzn/project/dc/dtdata/config/WindDataInitializer.java

@@ -0,0 +1,160 @@
+package com.znzn.project.dc.dtdata.config;
+
+import com.znzn.project.dc.dtdata.common.CommonData;
+import com.znzn.project.dc.dtdata.entity.FileStore;
+import com.znzn.project.dc.dtdata.entity.WindFarmTables;
+import com.znzn.project.dc.dtdata.entity.WindPoints;
+import com.znzn.project.dc.dtdata.entity.WindTurbine;
+import com.znzn.project.dc.dtdata.service.*;
+import com.znzn.project.dc.dtdata.utils.enos.EnosapiUtils;
+import com.znzn.project.dc.dtdata.utils.enos.entity.AccessibleAsset;
+import jakarta.annotation.Resource;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.boot.context.event.ApplicationReadyEvent;
+import org.springframework.context.event.EventListener;
+import org.springframework.core.env.Environment;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Component
+@Slf4j
+@EnableAsync
+public class WindDataInitializer {
+
+    private static final String FILE_STORE_ID_ENV_VAR = "FILE_STORE_ID";
+    @Resource
+    private IWindPointsService windPointsService;
+    @Resource
+    private IFileStoreService fileStoreService;
+    @Resource
+    private IWindTurbineService windTurbineService;
+    @Resource
+    private Environment environment;
+    @Resource
+    private IWindFarmService windFarmService;
+    @Resource
+    private IWindFarmTablesService windFarmTablesService;
+
+    @EventListener(ApplicationReadyEvent.class)
+    public void initializeWindData() throws Exception {
+        processFileStoreData();
+
+        if ("1".equals(environment.getProperty("NEED_RESTORE"))) {
+            //删除风机信息
+            log.info("开始删除风机数据");
+            windTurbineService.deleteByFileStoreId(CommonData.FILE_STORE.getId());
+            //重新写入风机信息
+            log.info("开始写入风机数据");
+            rereadWindTurbineTable();
+        }
+        log.info("写入风机数据完成");
+        // 应用启动时预加载所有数据
+        processWindPointsData();
+        log.info("风场测点数据初始化完成,需要执行的风机数为{}", CommonData.NEED_RUN_TURBINE.size());
+
+        log.info("开始查询风场机型表名映射");
+        processWindFarmTables();
+        log.info("查询风场机型表名映射完成,风场+机型数量为{}", CommonData.TABLE_MAP.size());
+    }
+
+    private void processWindFarmTables() {
+
+        List<WindFarmTables> tables = windFarmTablesService.list();
+        Map<String, String> tableMaps = tables.stream().collect(Collectors.toMap(data -> String.format("%s%s", data.getWindFarmId(), data.getType()), WindFarmTables::getTableName));
+        CommonData.TABLE_MAP.putAll(tableMaps);
+    }
+
+    @SneakyThrows
+    private void rereadWindTurbineTable() {
+        List<String> farmTypeList = windFarmService.getByFileStoreId(CommonData.FILE_STORE.getId()).stream().map(data -> String.join("--", data.getId(), data.getType())).toList();
+        log.info("本机风场+机型数量:{}", farmTypeList.size());
+        List<AccessibleAsset> assetList;
+        try {
+            assetList = EnosapiUtils.queryAccessibleAsset("EnOS_Wind_Turbine");
+        } catch (Exception e) {
+            Thread.sleep(200);
+            assetList = EnosapiUtils.queryAccessibleAsset("EnOS_Wind_Turbine");
+        }
+        if (assetList == null) {
+            System.exit(0);
+        }
+        List<WindTurbine> windTurbineList = new ArrayList<>();
+        for (AccessibleAsset asset : assetList) {
+            String key = String.join("--", asset.getAttributes().getParentId(), asset.getAttributes().getTurbineTypeID());
+            if (farmTypeList.contains(key)) {
+                windTurbineList.add(getWindTurbine(asset));
+            }
+        }
+        if (windTurbineList.isEmpty()) {
+            Thread.sleep(100);
+            rereadWindTurbineTable();
+        }
+//        FileWriterUtils.fileWriter("test.json", windTurbineList);
+        windTurbineService.saveBatch(windTurbineList, 5000);
+    }
+
+    private static WindTurbine getWindTurbine(AccessibleAsset asset) {
+        WindTurbine windTurbine = new WindTurbine();
+        windTurbine.setId(asset.getMdmId());
+        windTurbine.setCode(asset.getAttributes().getScadaName());
+        windTurbine.setName(asset.getAttributes().getName());
+        windTurbine.setType(asset.getAttributes().getTurbineTypeID());
+        windTurbine.setWindFarmId(asset.getAttributes().getParentId());
+        windTurbine.setPlcVersion(asset.getAttributes().getPLCVersion());
+        windTurbine.setTypeName(asset.getAttributes().getManufacturer());
+        return windTurbine;
+    }
+
+    private void processFileStoreData() throws Exception {
+        FileStore fileStore = fileStoreService.getById(getFileStoreIdFromEnv());
+        log.info("获取到本机的存储配置{}", fileStore.toString());
+        CommonData.FILE_STORE = fileStore;
+    }
+
+    private void processWindPointsData() {
+        windTurbineService.getByFileStoreId(CommonData.FILE_STORE.getId()).forEach(windTurbine -> CommonData.NEED_RUN_TURBINE.put(windTurbine.getId(), windTurbine));
+        log.info("本机需要运行的风机数量{}", CommonData.NEED_RUN_TURBINE.size());
+        Map<String, List<WindPoints>> groupedByKey = windPointsService.list().stream().collect(Collectors.groupingBy(data -> data.getWindFarmId() + data.getWindType()));
+        Map<String, String> pointIdsMap = groupedByKey.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().stream().map(data -> String.format("%s(%s)", data.getUseTimeAggMethods(), data.getPointNameEn())).collect(Collectors.joining(","))));
+        Map<String, Map<String, String>> standerMaps = groupedByKey.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().stream().collect(Collectors.toMap(data -> String.format("%s(%s)", data.getUseTimeAggMethods(), data.getPointNameEn()), WindPoints::getStanderNameEn, (existing, replacement) -> existing))));
+
+        for (String key : standerMaps.keySet()) {
+            standerMaps.get(key).put("localtime", "localtime");
+        }
+
+        CommonData.pointIdsWithLogicMap.putAll(pointIdsMap);
+        CommonData.standerMap.putAll(standerMaps);
+    }
+
+    private String getFileStoreIdFromEnv() throws Exception {
+
+        log.info("从系统环境变量获取 FILE_STORE_ID: {}, 从Spring Environment获取 FILE_STORE_ID: {}", System.getenv(FILE_STORE_ID_ENV_VAR), environment.getProperty(FILE_STORE_ID_ENV_VAR));
+//
+//        if (1 == 1) {
+//            return "1";
+//        }
+
+        String fileStoreId = System.getenv(FILE_STORE_ID_ENV_VAR);
+        if (StringUtils.isNotBlank(fileStoreId)) {
+            log.info("从系统环境变量获取 FILE_STORE_ID: {}", fileStoreId);
+            return fileStoreId.trim();
+        }
+
+        fileStoreId = environment.getProperty(FILE_STORE_ID_ENV_VAR);
+        if (StringUtils.isNotBlank(fileStoreId)) {
+            log.info("从Spring Environment获取 FILE_STORE_ID: {}", fileStoreId);
+            return fileStoreId.trim();
+        }
+
+        log.warn("所有方式都未获取到有效的 FILE_STORE_ID");
+        throw new Exception("所有方式都未获取到有效的 FILE_STORE_ID");
+    }
+
+}

+ 18 - 0
src/main/java/com/znzn/project/dc/dtdata/controller/ExecDataDateController.java

@@ -0,0 +1,18 @@
+package com.znzn.project.dc.dtdata.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 执行数据日期 前端控制器
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-25
+ */
+@RestController
+@RequestMapping("/execDataDate")
+public class ExecDataDateController {
+
+}

+ 18 - 0
src/main/java/com/znzn/project/dc/dtdata/controller/ExecErrorController.java

@@ -0,0 +1,18 @@
+package com.znzn.project.dc.dtdata.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-25
+ */
+@RestController
+@RequestMapping("/execError")
+public class ExecErrorController {
+
+}

+ 16 - 0
src/main/java/com/znzn/project/dc/dtdata/controller/FaviconController.java

@@ -0,0 +1,16 @@
+package com.znzn.project.dc.dtdata.controller;
+
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+@Controller
+public class FaviconController {
+
+    @GetMapping("/favicon.ico")
+    @ResponseBody
+    public void returnNoFavicon(HttpServletResponse response) {
+        response.setStatus(HttpServletResponse.SC_NO_CONTENT);
+    }
+}

+ 36 - 0
src/main/java/com/znzn/project/dc/dtdata/controller/FileStoreController.java

@@ -0,0 +1,36 @@
+package com.znzn.project.dc.dtdata.controller;
+
+import com.znzn.project.dc.dtdata.common.R;
+import com.znzn.project.dc.dtdata.entity.FileStore;
+import com.znzn.project.dc.dtdata.service.IFileStoreService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 前端控制器
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-10
+ */
+@RestController
+@RequestMapping("/fileStore")
+@Tag(name = "存储配置", description = "存储配置相关接口")
+public class FileStoreController {
+
+    @Resource
+    private IFileStoreService fileStoreService;
+
+    @PostMapping("/getAllFileStore")
+    @Operation(summary = "获取所有存储配置")
+    public R<List<FileStore>> getAllFileStore() {
+        return R.ok(fileStoreService.list());
+    }
+}

+ 45 - 0
src/main/java/com/znzn/project/dc/dtdata/controller/WindFarmController.java

@@ -0,0 +1,45 @@
+package com.znzn.project.dc.dtdata.controller;
+
+import com.znzn.project.dc.dtdata.common.R;
+import com.znzn.project.dc.dtdata.entity.WindFarm;
+import com.znzn.project.dc.dtdata.service.IWindFarmService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotBlank;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 前端控制器
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-05
+ */
+@RestController
+@RequestMapping("/windFarm")
+@Tag(name = "风场", description = "风场相关接口")
+public class WindFarmController {
+
+    @Resource
+    private IWindFarmService windFarmService;
+
+    @PostMapping("/getAllWindFarm")
+    @Operation(summary = "获取所有风场")
+    public R<List<WindFarm>> getAllWindFarm() {
+        return R.ok(windFarmService.list());
+    }
+
+
+    @PostMapping("/getTypes")
+    @Operation(summary = "获取风场所有机型")
+    public R<List<String>> getTypes(@NotBlank(message = "风场不能为空") @Valid String windFarmId) {
+        return R.ok(windFarmService.getTypes(windFarmId));
+    }
+}

+ 20 - 0
src/main/java/com/znzn/project/dc/dtdata/controller/WindFarmTablesController.java

@@ -0,0 +1,20 @@
+package com.znzn.project.dc.dtdata.controller;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 前端控制器
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-12-01
+ */
+@RestController
+@RequestMapping("/windFarmTables")
+@Tag(name = "风场机型表名映射", description = "风场机型表名映射相关接口")
+public class WindFarmTablesController {
+
+}

+ 46 - 0
src/main/java/com/znzn/project/dc/dtdata/controller/WindPointsController.java

@@ -0,0 +1,46 @@
+package com.znzn.project.dc.dtdata.controller;
+
+import com.znzn.project.dc.dtdata.common.R;
+import com.znzn.project.dc.dtdata.entity.WindPoints;
+import com.znzn.project.dc.dtdata.inOutEntity.WindPointsInData;
+import com.znzn.project.dc.dtdata.service.IWindPointsService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+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.List;
+
+/**
+ * <p>
+ * 前端控制器
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-05
+ */
+@RestController
+@RequestMapping("/windPoints")
+@Tag(name = "测点", description = "测点相关接口")
+public class WindPointsController {
+
+    @Resource
+    private IWindPointsService windPointsService;
+
+    @PostMapping("/getWindPointsByParams")
+    @Operation(summary = "查询测点", description = "查询测点")
+    public R<List<WindPoints>> getWindPointsByParams(@RequestBody @Valid WindPointsInData inData) {
+        return R.ok(windPointsService.getByParams(inData));
+    }
+
+    @PostMapping("/getPointIdsWithLogic")
+    @Operation(summary = "整理逻辑测点", description = "整理逻辑测点")
+    public R<String> getPointIdsWithLogic(@RequestBody @Valid WindPointsInData inData) {
+        return R.ok(windPointsService.getPointIdsWithLogic(inData.getWindFarmId(), inData.getType()));
+    }
+
+}

+ 39 - 0
src/main/java/com/znzn/project/dc/dtdata/controller/WindTurbineController.java

@@ -0,0 +1,39 @@
+package com.znzn.project.dc.dtdata.controller;
+
+import com.znzn.project.dc.dtdata.common.R;
+import com.znzn.project.dc.dtdata.entity.WindTurbine;
+import com.znzn.project.dc.dtdata.inOutEntity.WindTurbineInData;
+import com.znzn.project.dc.dtdata.service.IWindTurbineService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+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.List;
+
+/**
+ * <p>
+ * 前端控制器
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-05
+ */
+@RestController
+@RequestMapping("/windTurbine")
+@Tag(name = "风机", description = "风机相关接口")
+public class WindTurbineController {
+
+    @Resource
+    private IWindTurbineService windTurbineService;
+
+    @PostMapping("/getWindTurbineByParams")
+    @Operation(summary = "查询风机", description = "查询风机")
+    public R<List<WindTurbine>> getWindTurbineByParams(@RequestBody @Valid WindTurbineInData inData) {
+        return R.ok(windTurbineService.getByParams(inData));
+    }
+}

+ 48 - 0
src/main/java/com/znzn/project/dc/dtdata/controller/WindTurbineDataController.java

@@ -0,0 +1,48 @@
+package com.znzn.project.dc.dtdata.controller;
+
+import com.znzn.project.dc.dtdata.common.R;
+import com.znzn.project.dc.dtdata.inOutEntity.CollectDataInData;
+import com.znzn.project.dc.dtdata.service.IDataCollectionService;
+import com.znzn.project.dc.dtdata.service.IWindTurbineDataService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.parameters.RequestBody;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 前端控制器
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-10
+ */
+@RestController
+@RequestMapping("/windTurbineData")
+@Tag(name = "风机数据", description = "风机数据相关接口")
+public class WindTurbineDataController {
+
+    @Resource
+    private IWindTurbineDataService windTurbineDataService;
+    @Resource
+    private IDataCollectionService dataCollectionService;
+
+//    @PostMapping("getEveryWindAndTypeData")
+//    @Operation(summary = "查询每个风场+机型的风机数据", description = "查询每个风场+机型的风机数据11")
+//    public R<String> getEveryWindAndTypeData() {
+//        windTurbineDataService.getEveryWindAndTypeData();
+//        return R.ok();
+//    }
+
+
+    @PostMapping("collectData")
+    @Operation(summary = "收集数据", description = "收集数据")
+    public R<String> collectData(@Valid @RequestBody CollectDataInData inData) {
+        dataCollectionService.collectData(inData);
+        return R.ok();
+    }
+}

+ 40 - 0
src/main/java/com/znzn/project/dc/dtdata/entity/ExecDataDate.java

@@ -0,0 +1,40 @@
+package com.znzn.project.dc.dtdata.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 执行数据日期
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-25
+ */
+@Getter
+@Setter
+@TableName("exec_data_date")
+@Schema(name = "ExecDataDate", description = "执行数据日期")
+public class ExecDataDate implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @Schema(description = "执行时间")
+    private LocalDateTime execDateTime;
+
+    @Schema(description = "创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "最近更新时间")
+    private LocalDateTime updateTime;
+}

+ 53 - 0
src/main/java/com/znzn/project/dc/dtdata/entity/ExecError.java

@@ -0,0 +1,53 @@
+package com.znzn.project.dc.dtdata.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-25
+ */
+@Getter
+@Setter
+@TableName("exec_error")
+@Schema(name = "ExecError", description = "")
+public class ExecError implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @Schema(description = "风机ID")
+    private String windTurbineId;
+
+    @Schema(description = "风机名称")
+    private String windTurbineName;
+
+    @Schema(description = "查询开始日期")
+    private LocalDateTime queryBegin;
+
+    @Schema(description = "查询结束日期")
+    private LocalDateTime queryEnd;
+
+    @Schema(description = "报错信息")
+    private String errorMsg;
+
+    @Schema(description = "创建时间")
+    private LocalDate createTime;
+
+    @Schema(description = "最近更新时间")
+    private LocalDate updateTime;
+}

+ 48 - 0
src/main/java/com/znzn/project/dc/dtdata/entity/FileStore.java

@@ -0,0 +1,48 @@
+package com.znzn.project.dc.dtdata.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.util.Date;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-10
+ */
+@Data
+@TableName("file_store")
+@Schema(description = "FileStore对象")
+public class FileStore implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Schema(description = "ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @Schema(description = "配置名称")
+    private String name;
+
+    @Schema(description = "nginx访问地址")
+    private String remoteUrl;
+
+    @Schema(description = "文件保存目录")
+    private String savaDir;
+
+    @Schema(description = "创建时间")
+    private LocalDate createTime;
+
+    @Schema(description = "最近更新时间")
+    private LocalDate updateTime;
+}

+ 48 - 0
src/main/java/com/znzn/project/dc/dtdata/entity/WindFarm.java

@@ -0,0 +1,48 @@
+package com.znzn.project.dc.dtdata.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.util.Date;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-05
+ */
+@Getter
+@Setter
+@TableName("wind_farm")
+@Schema(description = "WindFarm对象")
+public class WindFarm implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Schema(description = "风场MDMID")
+    private String id;
+
+    @Schema(description = "风场名称")
+    private String name;
+
+    @Schema(description = "地区")
+    private String area;
+
+    @Schema(description = "风机类型")
+    private String type;
+
+    @Schema(description = "文件存储配置ID")
+    private Integer storeId;
+
+    @Schema(description = "创建时间")
+    private LocalDate createTime;
+
+    @Schema(description = "最近更新时间")
+    private LocalDate updateTime;
+}

+ 46 - 0
src/main/java/com/znzn/project/dc/dtdata/entity/WindFarmTables.java

@@ -0,0 +1,46 @@
+package com.znzn.project.dc.dtdata.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDate;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-12-01
+ */
+@Getter
+@Setter
+@TableName("wind_farm_tables")
+@Schema(name = "WindFarmTables", description = "")
+public class WindFarmTables implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @Schema(description = "风场编号")
+    private String windFarmId;
+
+    @Schema(description = "风机类型")
+    private String type;
+
+    @Schema(description = "表名")
+    private String tableName;
+
+    @Schema(description = "创建时间")
+    private LocalDate createTime;
+
+    @Schema(description = "最近更新时间")
+    private LocalDate updateTime;
+}

+ 66 - 0
src/main/java/com/znzn/project/dc/dtdata/entity/WindPoints.java

@@ -0,0 +1,66 @@
+package com.znzn.project.dc.dtdata.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-05
+ */
+@Getter
+@Setter
+@TableName("wind_points")
+@Schema(description = "WindPoints对象")
+public class WindPoints implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Schema(description = "风场MDMID")
+    private String windFarmId;
+
+    @Schema(description = "机型")
+    private String windType;
+
+    @Schema(description = "风场名称")
+    private String windName;
+
+    @Schema(description = "测点名称(英文)")
+    private String pointNameEn;
+
+    @Schema(description = "测点名称(中文)")
+    private String pointNameCn;
+
+    @Schema(description = "标准化(英文)")
+    private String standerNameEn;
+
+    @Schema(description = "标准化(中文)")
+    private String standerNameCn;
+
+    @Schema(description = "单位")
+    private String units;
+
+    @Schema(description = "聚合方式")
+    private String timeAggMethods;
+
+    @Schema(description = "字段类型")
+    private String fieldType;
+
+    @Schema(description = "使用的聚合方式")
+    private String useTimeAggMethods;
+
+    @Schema(description = "创建时间")
+    private LocalDate createTime;
+
+    @Schema(description = "最近更新时间")
+    private LocalDate updateTime;
+
+}

+ 54 - 0
src/main/java/com/znzn/project/dc/dtdata/entity/WindTurbine.java

@@ -0,0 +1,54 @@
+package com.znzn.project.dc.dtdata.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.util.Date;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-05
+ */
+@Getter
+@Setter
+@TableName("wind_turbine")
+@Schema(description = "WindTurbine对象")
+public class WindTurbine implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Schema(description = "风机MDMID")
+    private String id;
+
+    @Schema(description = "ENOS中的编号,有空值")
+    private String code;
+
+    @Schema(description = "风机名称")
+    private String name;
+
+    @Schema(description = "风场ID")
+    private String windFarmId;
+
+    @Schema(description = "风机类型")
+    private String type;
+
+    @Schema(description = "机型厂商名称")
+    private String typeName;
+
+    @Schema(description = "主控版本")
+    private String plcVersion;
+
+    @Schema(description = "创建时间")
+    private LocalDate createTime;
+
+    @Schema(description = "最近更新时间")
+    private LocalDate updateTime;
+}

+ 56 - 0
src/main/java/com/znzn/project/dc/dtdata/entity/WindTurbineData.java

@@ -0,0 +1,56 @@
+package com.znzn.project.dc.dtdata.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.util.Date;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-10
+ */
+@Getter
+@Setter
+@TableName("wind_turbine_data")
+@Schema(name = "WindTurbineData", description = "")
+public class WindTurbineData implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @Schema(description = "风机编号")
+    private String windTurbineId;
+
+    @Schema(description = "风机名称")
+    private String windTurbineName;
+
+    @Schema(description = "日期")
+    private LocalDate dataTime;
+
+    @Schema(description = "文件存储配置ID")
+    private Integer fileStoreId;
+
+    @Schema(description = "读取url")
+    private String readUri;
+
+    @Schema(description = "当日数据数量")
+    private Integer dataCount;
+
+    @Schema(description = "创建时间")
+    private LocalDate createTime;
+
+    @Schema(description = "最近更新时间")
+    private LocalDate updateTime;
+}

+ 18 - 0
src/main/java/com/znzn/project/dc/dtdata/exception/BusinessException.java

@@ -0,0 +1,18 @@
+package com.znzn.project.dc.dtdata.exception;
+
+public class BusinessException extends RuntimeException {
+
+    private int code;
+
+    private String message;
+
+    public BusinessException(String message) {
+        super(message);
+        this.code = 500;
+    }
+
+    public BusinessException(int code, String message) {
+        this.code = code;
+        this.message = message;
+    }
+}

+ 57 - 0
src/main/java/com/znzn/project/dc/dtdata/exception/GloableException.java

@@ -0,0 +1,57 @@
+package com.znzn.project.dc.dtdata.exception;
+
+import com.znzn.project.dc.dtdata.common.R;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.FieldError;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+
+import java.util.List;
+
+@Slf4j
+@RestControllerAdvice
+public class GloableException {
+
+    @ExceptionHandler(BusinessException.class)
+    @ResponseBody
+    public R businessExdeption(BusinessException e) {
+        log.error("Exception", e);
+        return R.error(e.getMessage());
+    }
+
+    @ExceptionHandler(UserNotLoginExeption.class)
+    @ResponseBody
+    public R userNotLoginExeption(UserNotLoginExeption e) {
+        log.error("Exception", e);
+        return R.error(401, "Unauthorized");
+    }
+
+    @ExceptionHandler(MethodArgumentNotValidException.class)
+    @ResponseBody
+    public R methodArgumentNotValidException(MethodArgumentNotValidException e) {
+        List<FieldError> fieldErrors = e.getBindingResult().getFieldErrors();
+
+        // 这里你可以根据自己的需要来处理错误
+        // 例如,构建一个响应体,其中包含所有字段的错误信息
+        StringBuilder errorMessage = new StringBuilder();
+        for (FieldError fieldError : fieldErrors) {
+            errorMessage.append("\n - ")
+                    .append(fieldError.getField())
+                    .append(": ")
+                    .append(fieldError.getDefaultMessage());
+        }
+        log.error("Exception", e);
+        return R.error(errorMessage.toString());
+    }
+
+
+    @ExceptionHandler(Exception.class)
+    @ResponseBody
+    public R exception(Exception e) {
+        log.info("Exception: [{}]", e.getMessage());
+        log.error("Exception", e);
+        return R.error(e.getMessage());
+    }
+}

+ 5 - 0
src/main/java/com/znzn/project/dc/dtdata/exception/UserNotLoginExeption.java

@@ -0,0 +1,5 @@
+package com.znzn.project.dc.dtdata.exception;
+
+public class UserNotLoginExeption extends RuntimeException {
+
+}

+ 81 - 0
src/main/java/com/znzn/project/dc/dtdata/generate/CodeGenerateMain.java

@@ -0,0 +1,81 @@
+package com.znzn.project.dc.dtdata.generate;
+
+import com.baomidou.mybatisplus.generator.FastAutoGenerator;
+import com.baomidou.mybatisplus.generator.config.OutputFile;
+import com.baomidou.mybatisplus.generator.config.po.LikeTable;
+import com.baomidou.mybatisplus.generator.config.rules.DateType;
+import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
+import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
+
+import java.io.File;
+import java.io.IOException;
+import java.sql.Types;
+import java.util.Collections;
+
+import static com.baomidou.mybatisplus.core.enums.SqlLike.RIGHT;
+
+/**
+ * @author 魏志亮
+ */
+public class CodeGenerateMain {
+
+    static String host = "127.0.0.1";
+    static Integer port = 3306;
+    static String dbName = "datang";
+    static String username = "datang";
+    static String password = "admin123456";
+
+    static String url = String.format("jdbc:mysql://%s:%s/%s?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&allowPublicKeyRetrieval=true", host, port, dbName);
+
+    public static void main(String[] args) throws IOException {
+        //逗号分隔 ,all:查询全部  前缀_:匹配
+        String includTables = "wind_farm_tables";
+
+        boolean isFirst = true;
+        //去掉表前缀
+        String replaceTablePrefix = "";
+
+        File directory = new File("");
+        //项目路径-mgb
+        String sourcePath = String.join(File.separator, directory.getCanonicalPath(), "src", "main");
+        String javaPath = sourcePath + File.separator + "java";
+        String resouces = sourcePath + File.separator + "resources";
+        String xmlPahth = String.join(File.separator, resouces, "mapper");
+
+        FastAutoGenerator.create(url, username, password).
+                globalConfig(builder -> builder.author("魏志亮")
+                        .enableSwagger()
+                        .enableSpringdoc()
+                        .dateType(DateType.ONLY_DATE)
+                        .outputDir(javaPath))
+                .dataSourceConfig(builder -> builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> {
+                    int typeCode = metaInfo.getJdbcType().TYPE_CODE;
+                    if (typeCode == Types.TINYINT) {
+                        // 自定义类型转换
+                        return DbColumnType.INTEGER;
+                    }
+                    return typeRegistry.getColumnType(metaInfo);
+                })).
+                packageConfig(builder -> {
+                    builder.parent("com.znzn.project.dc.dtdata").pathInfo(Collections.singletonMap(OutputFile.xml, xmlPahth)); // 设置mapperXml生成路径
+                })
+                .strategyConfig(builder -> {
+                    builder.enableSkipView();
+                    builder.addTablePrefix(replaceTablePrefix);
+                    builder.disableSqlFilter();
+                    if ("all".equalsIgnoreCase(includTables)) {
+                        builder.likeTable(new LikeTable(""));
+                    } else if (includTables.endsWith("_")) {
+                        builder.likeTable(new LikeTable(includTables, RIGHT));
+                    } else {
+                        builder.addInclude(includTables);
+                    }
+                    builder.entityBuilder().enableLombok();
+//                    builder.entityBuilder().enableFileOverride();
+                    builder.controllerBuilder().enableRestStyle();
+                })
+                .templateEngine(new VelocityTemplateEngine())
+                .execute();
+
+    }
+}

+ 20 - 0
src/main/java/com/znzn/project/dc/dtdata/inOutEntity/CollectDataInData.java

@@ -0,0 +1,20 @@
+package com.znzn.project.dc.dtdata.inOutEntity;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@Schema
+public class CollectDataInData {
+
+    @Schema(description = "开始时间")
+    private LocalDateTime beginTime;
+
+    @Schema(description = "结束时间")
+    private LocalDateTime endTime = LocalDateTime.now();
+
+    @Schema(description = "时间间隔:分钟 30,60,1440", defaultValue = "1440")
+    private Integer minute = 1440;
+}

+ 21 - 0
src/main/java/com/znzn/project/dc/dtdata/inOutEntity/WindPointsInData.java

@@ -0,0 +1,21 @@
+package com.znzn.project.dc.dtdata.inOutEntity;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+
+@Schema
+@Data
+public class WindPointsInData {
+
+    @Schema(description = "测点名称")
+    private String name;
+
+    @Schema(description = "风场ID")
+    @NotBlank(message = "请选择风场")
+    private String windFarmId;
+
+    @Schema(description = "风机类型")
+    @NotBlank(message = "请选择机型")
+    private String type;
+}

+ 20 - 0
src/main/java/com/znzn/project/dc/dtdata/inOutEntity/WindTurbineInData.java

@@ -0,0 +1,20 @@
+package com.znzn.project.dc.dtdata.inOutEntity;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+
+@Schema
+@Data
+public class WindTurbineInData {
+
+    @Schema(description = "风机名称")
+    private String name;
+
+    @Schema(description = "风场ID")
+    @NotBlank(message = "请选择风场")
+    private String windFarmId;
+
+    @Schema(description = "风机类型")
+    private String type;
+}

+ 18 - 0
src/main/java/com/znzn/project/dc/dtdata/mapper/ExecDataDateMapper.java

@@ -0,0 +1,18 @@
+package com.znzn.project.dc.dtdata.mapper;
+
+import com.znzn.project.dc.dtdata.entity.ExecDataDate;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 执行数据日期 Mapper 接口
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-25
+ */
+@Mapper
+public interface ExecDataDateMapper extends BaseMapper<ExecDataDate> {
+
+}

+ 18 - 0
src/main/java/com/znzn/project/dc/dtdata/mapper/ExecErrorMapper.java

@@ -0,0 +1,18 @@
+package com.znzn.project.dc.dtdata.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.znzn.project.dc.dtdata.entity.ExecError;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * Mapper 接口
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-25
+ */
+@Mapper
+public interface ExecErrorMapper extends BaseMapper<ExecError> {
+
+}

+ 18 - 0
src/main/java/com/znzn/project/dc/dtdata/mapper/FileStoreMapper.java

@@ -0,0 +1,18 @@
+package com.znzn.project.dc.dtdata.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.znzn.project.dc.dtdata.entity.FileStore;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * Mapper 接口
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-10
+ */
+@Mapper
+public interface FileStoreMapper extends BaseMapper<FileStore> {
+
+}

+ 17 - 0
src/main/java/com/znzn/project/dc/dtdata/mapper/StandardizedDataMapper.java

@@ -0,0 +1,17 @@
+package com.znzn.project.dc.dtdata.mapper;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface StandardizedDataMapper extends BaseMapper<JSONObject> {
+
+    /**
+     * 批量插入方法
+     */
+    boolean batchInsert(@Param("tableName") String tableName, @Param("list") List<JSONObject> dataList);
+}

+ 18 - 0
src/main/java/com/znzn/project/dc/dtdata/mapper/WindFarmMapper.java

@@ -0,0 +1,18 @@
+package com.znzn.project.dc.dtdata.mapper;
+
+import com.znzn.project.dc.dtdata.entity.WindFarm;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-05
+ */
+@Mapper
+public interface WindFarmMapper extends BaseMapper<WindFarm> {
+
+}

+ 18 - 0
src/main/java/com/znzn/project/dc/dtdata/mapper/WindFarmTablesMapper.java

@@ -0,0 +1,18 @@
+package com.znzn.project.dc.dtdata.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.znzn.project.dc.dtdata.entity.WindFarmTables;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * Mapper 接口
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-12-01
+ */
+@Mapper
+public interface WindFarmTablesMapper extends BaseMapper<WindFarmTables> {
+
+}

+ 21 - 0
src/main/java/com/znzn/project/dc/dtdata/mapper/WindPointsMapper.java

@@ -0,0 +1,21 @@
+package com.znzn.project.dc.dtdata.mapper;
+
+import com.znzn.project.dc.dtdata.entity.WindPoints;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-05
+ */
+@Mapper
+public interface WindPointsMapper extends BaseMapper<WindPoints> {
+
+}

+ 18 - 0
src/main/java/com/znzn/project/dc/dtdata/mapper/WindTurbineDataMapper.java

@@ -0,0 +1,18 @@
+package com.znzn.project.dc.dtdata.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.znzn.project.dc.dtdata.entity.WindTurbineData;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * Mapper 接口
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-10
+ */
+@Mapper
+public interface WindTurbineDataMapper extends BaseMapper<WindTurbineData> {
+
+}

+ 30 - 0
src/main/java/com/znzn/project/dc/dtdata/mapper/WindTurbineMapper.java

@@ -0,0 +1,30 @@
+package com.znzn.project.dc.dtdata.mapper;
+
+import com.znzn.project.dc.dtdata.entity.WindTurbine;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Delete;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-05
+ */
+@Mapper
+public interface WindTurbineMapper extends BaseMapper<WindTurbine> {
+
+    @Select("SELECT a.* from wind_turbine a LEFT JOIN wind_farm b on a.wind_farm_id = b.id and a.type = b.type where b.store_id = #{fileStoreId}")
+    List<WindTurbine> getByFileStoreId(Integer fileStoreId);
+
+    @Select("SELECT t.wind_farm_id,t.type, max(t.id) as id from wind_turbine t GROUP BY t.wind_farm_id,t.type")
+    List<WindTurbine> getWindTurbineByGroupData();
+
+    @Delete("DELETE a FROM wind_turbine  a  LEFT JOIN wind_farm b ON a.wind_farm_id = b.id AND a.type = b.type  WHERE b.store_id =  #{fileStoreId}")
+    void deleteByFileStoreId(Integer fileStoreId);
+}

+ 8 - 0
src/main/java/com/znzn/project/dc/dtdata/service/IDataCollectionService.java

@@ -0,0 +1,8 @@
+package com.znzn.project.dc.dtdata.service;
+
+import com.znzn.project.dc.dtdata.inOutEntity.CollectDataInData;
+
+public interface IDataCollectionService {
+
+    void collectData(CollectDataInData inData);
+}

+ 19 - 0
src/main/java/com/znzn/project/dc/dtdata/service/IExecDataDateService.java

@@ -0,0 +1,19 @@
+package com.znzn.project.dc.dtdata.service;
+
+import com.znzn.project.dc.dtdata.entity.ExecDataDate;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 执行数据日期 服务类
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-25
+ */
+public interface IExecDataDateService extends IService<ExecDataDate> {
+
+    void finishAndAddNextTime(Integer id, LocalDateTime queryEndDate);
+}

+ 16 - 0
src/main/java/com/znzn/project/dc/dtdata/service/IExecErrorService.java

@@ -0,0 +1,16 @@
+package com.znzn.project.dc.dtdata.service;
+
+import com.znzn.project.dc.dtdata.entity.ExecError;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-25
+ */
+public interface IExecErrorService extends IService<ExecError> {
+
+}

+ 16 - 0
src/main/java/com/znzn/project/dc/dtdata/service/IFileStoreService.java

@@ -0,0 +1,16 @@
+package com.znzn.project.dc.dtdata.service;
+
+import com.znzn.project.dc.dtdata.entity.FileStore;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-10
+ */
+public interface IFileStoreService extends IService<FileStore> {
+
+}

+ 71 - 0
src/main/java/com/znzn/project/dc/dtdata/service/IRedisService.java

@@ -0,0 +1,71 @@
+package com.znzn.project.dc.dtdata.service;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Redis 服务接口 - 简化版
+ */
+public interface IRedisService {
+
+    /**
+     * 设置缓存
+     *
+     * @param key   键
+     * @param value 值
+     */
+    void set(String key, Object value);
+
+    /**
+     * 设置缓存并设置过期时间
+     *
+     * @param key      键
+     * @param value    值
+     * @param timeout  过期时间
+     * @param timeUnit 时间单位
+     */
+    void set(String key, Object value, long timeout, TimeUnit timeUnit);
+
+    /**
+     * 获取缓存
+     *
+     * @param key 键
+     * @return 值
+     */
+    Object get(String key);
+
+    /**
+     * 获取缓存并转换为指定类型
+     *
+     * @param key   键
+     * @param clazz 类型
+     * @param <T>   泛型
+     * @return 值
+     */
+    <T> T get(String key, Class<T> clazz);
+
+    /**
+     * 删除缓存
+     *
+     * @param key 键
+     * @return 是否删除成功
+     */
+    Boolean delete(String key);
+
+    /**
+     * 判断key是否存在
+     *
+     * @param key 键
+     * @return 是否存在
+     */
+    Boolean hasKey(String key);
+
+    /**
+     * 设置过期时间
+     *
+     * @param key      键
+     * @param timeout  过期时间
+     * @param timeUnit 时间单位
+     * @return 是否设置成功
+     */
+    Boolean expire(String key, long timeout, TimeUnit timeUnit);
+}

+ 21 - 0
src/main/java/com/znzn/project/dc/dtdata/service/IWindFarmService.java

@@ -0,0 +1,21 @@
+package com.znzn.project.dc.dtdata.service;
+
+import com.znzn.project.dc.dtdata.entity.WindFarm;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-05
+ */
+public interface IWindFarmService extends IService<WindFarm> {
+
+    List<String> getTypes(String windFarmId);
+
+    List<WindFarm> getByFileStoreId(Integer fileStoreId);
+}

+ 16 - 0
src/main/java/com/znzn/project/dc/dtdata/service/IWindFarmTablesService.java

@@ -0,0 +1,16 @@
+package com.znzn.project.dc.dtdata.service;
+
+import com.znzn.project.dc.dtdata.entity.WindFarmTables;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-12-01
+ */
+public interface IWindFarmTablesService extends IService<WindFarmTables> {
+
+}

+ 29 - 0
src/main/java/com/znzn/project/dc/dtdata/service/IWindPointsService.java

@@ -0,0 +1,29 @@
+package com.znzn.project.dc.dtdata.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.znzn.project.dc.dtdata.entity.WindPoints;
+import com.znzn.project.dc.dtdata.inOutEntity.WindPointsInData;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 服务类
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-05
+ */
+public interface IWindPointsService extends IService<WindPoints> {
+
+    List<WindPoints> getByParams(WindPointsInData inData);
+
+    /**
+     * @param windFarmId 风场ID
+     * @param windType   风场类型
+     * @return 带聚合逻辑的测点
+     */
+    String getPointIdsWithLogic(String windFarmId, String windType);
+
+
+}

+ 26 - 0
src/main/java/com/znzn/project/dc/dtdata/service/IWindTurbineDataService.java

@@ -0,0 +1,26 @@
+package com.znzn.project.dc.dtdata.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.znzn.project.dc.dtdata.entity.WindTurbineData;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ * 服务类
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-10
+ */
+public interface IWindTurbineDataService extends IService<WindTurbineData> {
+
+    /**
+     * 查询每个风场+机型的风机数据
+     */
+    void getEveryWindAndTypeData();
+
+    List<WindTurbineData> getByFileStoreIdAndDate(Integer fileStoreId, LocalDateTime queryBeginDate);
+}

+ 36 - 0
src/main/java/com/znzn/project/dc/dtdata/service/IWindTurbineService.java

@@ -0,0 +1,36 @@
+package com.znzn.project.dc.dtdata.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.znzn.project.dc.dtdata.entity.WindTurbine;
+import com.znzn.project.dc.dtdata.inOutEntity.WindTurbineInData;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 服务类
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-05
+ */
+public interface IWindTurbineService extends IService<WindTurbine> {
+
+    List<WindTurbine> getByParams(WindTurbineInData inData);
+
+    /**
+     * 通过 fileStoreId 查询风机
+     *
+     * @param fileStoreId 文件存储配置ID
+     * @return 风机
+     */
+    List<WindTurbine> getByFileStoreId(Integer fileStoreId);
+
+
+    List<WindTurbine> getWindTurbineByGroupData();
+
+    /**
+     * @param fileStoreId 文件存储配置ID
+     */
+    void deleteByFileStoreId(Integer fileStoreId);
+}

+ 312 - 0
src/main/java/com/znzn/project/dc/dtdata/service/impl/DataCollectionService.java

@@ -0,0 +1,312 @@
+package com.znzn.project.dc.dtdata.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.znzn.project.dc.dtdata.common.CommonData;
+import com.znzn.project.dc.dtdata.entity.*;
+import com.znzn.project.dc.dtdata.inOutEntity.CollectDataInData;
+import com.znzn.project.dc.dtdata.mapper.StandardizedDataMapper;
+import com.znzn.project.dc.dtdata.service.IDataCollectionService;
+import com.znzn.project.dc.dtdata.service.IExecDataDateService;
+import com.znzn.project.dc.dtdata.service.IExecErrorService;
+import com.znzn.project.dc.dtdata.service.IWindTurbineDataService;
+import com.znzn.project.dc.dtdata.utils.enos.EnosapiUtils;
+import com.znzn.project.dc.dtdata.utils.enos.JsonToParquetUtils;
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.TemporalAdjusters;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Service
+public class DataCollectionService implements IDataCollectionService {
+
+    // 日期格式化
+    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+    private static final DateTimeFormatter DATE_FORMATTER_WITH_NUMBER = DateTimeFormatter.ofPattern("yyyyMMdd");
+
+    private static final DateTimeFormatter DATE_FORMATTER_WITH_ZERO = DateTimeFormatter.ofPattern("yyyy-MM-dd 00:00:00");
+    private final ExecutorService executorService;
+
+    @Resource
+    private IExecErrorService execErrorService;
+    @Resource
+    private IExecDataDateService execDataDateService;
+    @Resource
+    private IWindTurbineDataService windTurbineDataService;
+    @Resource
+    private StandardizedDataMapper standardizedDataMapper;
+
+
+    public DataCollectionService() {
+        int coreCount = Runtime.getRuntime().availableProcessors();
+        int threadPoolCount = Math.min(coreCount * 2, 6);
+        this.executorService = Executors.newFixedThreadPool(threadPoolCount);
+        log.info("初始化数据收集服务,线程池大小: {}", threadPoolCount);
+    }
+
+    @Override
+    @Async
+    public void collectData(CollectDataInData inData) {
+
+        LocalDateTime end = inData.getEndTime();
+        FileStore fileStore = CommonData.FILE_STORE;
+        Integer id = fileStore.getId();
+
+        // 按日期循环处理
+        LocalDateTime date = getStartDate(id);
+        while (!date.isAfter(end)) {
+            LocalDateTime queryEndDate = date.plusMinutes(inData.getMinute());
+            log.info("{},开始时间{},结束时间{},时间跨度为{}分钟", fileStore.getName(), date, end, inData.getMinute());
+            processSingleDayData(date, queryEndDate, fileStore);
+            execDataDateService.finishAndAddNextTime(id, queryEndDate);
+            date = queryEndDate;
+        }
+    }
+
+    private LocalDateTime getStartDate(Integer id) {
+        ExecDataDate execDataDate = execDataDateService.getById(id);
+        LocalDateTime start;
+        if (null == execDataDate) {
+            LocalDateTime today = LocalDateTime.now();
+            LocalDateTime twoMonthsAgoFirstDay = today
+                    .minusMonths(2)
+                    .with(TemporalAdjusters.firstDayOfMonth())
+                    .toLocalDate()
+                    .atStartOfDay();
+            execDataDate = new ExecDataDate();
+            execDataDate.setId(id);
+            execDataDate.setExecDateTime(twoMonthsAgoFirstDay);
+            execDataDateService.save(execDataDate);
+            start = execDataDate.getExecDateTime();
+        } else {
+            start = execDataDate.getExecDateTime();
+        }
+        return start;
+    }
+
+    /**
+     * 处理单日数据
+     */
+    private void processSingleDayData(LocalDateTime queryBeginDate, LocalDateTime queryEndDate, FileStore fileStore) {
+        long logBegin = System.currentTimeMillis();
+        log.info("开始处理日期: {} 的数据", queryBeginDate);
+
+        List<CompletableFuture<Void>> futures = new ArrayList<>();
+
+        // 查询已执行的风机
+        List<String> existsWindturbineList = windTurbineDataService.getByFileStoreIdAndDate(fileStore.getId(), queryBeginDate)
+                .stream().map(WindTurbineData::getWindTurbineId).toList();
+
+        // 按风机分组处理
+        for (WindTurbine turbine : CommonData.NEED_RUN_TURBINE.values()) {
+            if (!existsWindturbineList.contains(turbine.getId())) {
+                String path = fileStore.getSavaDir() + File.separator + queryBeginDate.format(DATE_FORMATTER_WITH_NUMBER) + File.separator + turbine.getType() + File.separator + turbine.getWindFarmId() + File.separator + turbine.getId() + ".json";
+                if (!Files.exists(new File(path).toPath())) {
+                    log.debug(queryBeginDate.format(DATE_FORMATTER_WITH_ZERO) + "  " + path);
+                    CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
+                        try {
+                            String pointIdsWithLogic = CommonData.pointIdsWithLogicMap.get(String.format("%s%s", turbine.getWindFarmId(), turbine.getType()));
+                            if (StringUtils.isNotBlank(pointIdsWithLogic)) {
+                                processTurbineData(turbine, queryBeginDate, queryEndDate, pointIdsWithLogic, fileStore);
+                            } else {
+                                log.error("[{}]没有配置测点", turbine);
+                            }
+                        } catch (Exception e) {
+                            log.error("处理风机 {} 数据失败: {}", turbine.getId(), e.getMessage(), e);
+                        }
+                    }, executorService);
+                    futures.add(future);
+                }
+            }
+        }
+
+        // 等待所有任务完成
+        CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();
+        log.info("日期: {} 的数据处理完成, 耗时:{} 秒", queryBeginDate, (System.currentTimeMillis() - logBegin) / 1000);
+    }
+
+    /**
+     * 处理单个风机数据
+     */
+    private void processTurbineData(WindTurbine turbine, LocalDateTime queryStartDate, LocalDateTime queryEndDate, String
+            pointIdsWithLogic, FileStore fileStore) throws IOException {
+
+        // 查询历史数据
+        List<JSONObject> historicalData = null;
+        try {
+            historicalData = EnosapiUtils.queryHistoricalMeasurementPoint(turbine.getId(), queryStartDate.format(DATE_FORMATTER_WITH_ZERO), queryEndDate.format(DATE_FORMATTER_WITH_ZERO), pointIdsWithLogic, "1m", true);
+        } catch (Exception e) {
+            ExecError execError = new ExecError();
+            execError.setWindTurbineId(turbine.getId());
+            execError.setWindTurbineName(turbine.getName());
+            execError.setQueryBegin(LocalDateTime.from(queryStartDate));
+            execError.setQueryEnd(LocalDateTime.from(queryEndDate));
+            execError.setErrorMsg(e.getMessage());
+            execErrorService.save(execError);
+        }
+
+        if (historicalData != null && !historicalData.isEmpty()) {
+            // 标准化字段映射
+            String windFarmType = String.format("%s%s", turbine.getWindFarmId(), turbine.getType());
+            List<String> standerList = CommonData.standerMap.get(windFarmType).values().stream().toList();
+            List<JSONObject> standardizedData = standardizeData(historicalData, standerList, turbine.getId());
+            String tableName = CommonData.TABLE_MAP.get(windFarmType);
+
+
+//            if (StringUtils.isBlank(tableName)) {
+//                log.error("{}获取表名失败", turbine);
+//            } else {
+//                //TODO 保存到数据表
+//                standardizedDataMapper.batchInsert(tableName, standardizedData);
+//                updateWindTurbineDataTable(turbine, queryStartDate, standardizedData.size(),"");
+//            }
+//
+
+            // 构建文件路径 保存为文件
+            String filePath = buildFilePath(turbine, queryStartDate);
+            createDirectories(filePath);
+            JsonToParquetUtils.saveAsParquet(standardizedData, standerList, filePath);
+
+            updateWindTurbineDataTable(turbine, queryStartDate.toLocalDate(), standardizedData.size(),
+                    filePath.replace(fileStore.getSavaDir(), fileStore.getRemoteUrl()));
+
+        }
+//        else {
+//            ExecError execError = new ExecError();
+//            execError.setWindTurbineId(turbine.getId());
+//            execError.setWindTurbineName(turbine.getName());
+//            execError.setQueryBegin(LocalDateTime.from(queryStartDate));
+//            execError.setQueryEnd(LocalDateTime.from(queryEndDate));
+//            execError.setErrorMsg("没有获取到数据");
+//            execErrorService.save(execError);
+//            log.warn("风机 {} 在日期 {} 没有数据", turbine.getId(), queryStartDate);
+//        }
+    }
+
+    private void updateWindTurbineDataTable(WindTurbine turbine, LocalDate queryStartDate, Integer dataCount, String nginxPath) {
+        LambdaQueryWrapper<WindTurbineData> wrapper = Wrappers.lambdaQuery(WindTurbineData.class);
+        wrapper.eq(WindTurbineData::getWindTurbineId, turbine.getId())
+                .eq(WindTurbineData::getDataTime, queryStartDate);
+
+
+        WindTurbineData existsData = windTurbineDataService.getOne(wrapper);
+        if (null == existsData) {
+            WindTurbineData data = new WindTurbineData();
+            data.setWindTurbineId(turbine.getId());
+            data.setWindTurbineName(turbine.getName());
+            data.setDataTime(queryStartDate);
+            data.setFileStoreId(CommonData.FILE_STORE.getId());
+            data.setReadUri(nginxPath);
+            data.setDataCount(dataCount);
+            windTurbineDataService.save(data);
+        } else {
+            WindTurbineData updateData = new WindTurbineData();
+            updateData.setId(existsData.getId());
+            updateData.setDataCount(existsData.getDataCount() + dataCount);
+            windTurbineDataService.updateById(updateData);
+        }
+
+    }
+
+    /**
+     * 标准化数据字段映射
+     */
+    private List<JSONObject> standardizeData(List<JSONObject> originalData, List<String> standerList, String windTurbineId) {
+        List<JSONObject> standardizedData = new ArrayList<>();
+        for (JSONObject item : originalData) {
+            JSONObject standardizedItem = new JSONObject();
+
+            // 遍历原始数据的每个字段
+            for (Map.Entry<String, Object> entry : item.entrySet()) {
+                String originalKey = entry.getKey();
+                Object value = entry.getValue();
+
+                // 查找标准化映射
+                String standardizedKey = findStandardizedKey(originalKey);
+                if (standardizedKey != null) {
+                    standardizedItem.put(standardizedKey, value);
+                }
+//                else {
+//                    // 如果没有映射关系,保留原字段名
+//                    standardizedItem.put(originalKey, value);
+//                    log.warn("{}获取到无法映射字段{}", item.getOrDefault("mdmId", "未知"), originalKey);
+//                }
+            }
+
+            for (String key : standerList) {
+                if (!standardizedItem.containsKey(key)) {
+                    standardizedItem.put(key, "");
+                }
+            }
+            standardizedItem.put("wind_turbine_id", windTurbineId);
+            standardizedData.add(standardizedItem);
+        }
+
+        return standardizedData;
+    }
+
+    /**
+     * 查找标准化字段名
+     */
+    private String findStandardizedKey(String originalKey) {
+        // 遍历所有标准化映射字典
+        for (Map<String, String> mapping : CommonData.standerMap.values()) {
+            if (mapping.containsKey(originalKey)) {
+                return mapping.get(originalKey);
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 构建文件路径
+     */
+    private String buildFilePath(WindTurbine turbine, LocalDateTime date) {
+        String basePath = CommonData.FILE_STORE != null ? CommonData.FILE_STORE.getSavaDir() : "/data/wind-turbine";
+        return String.format("%s/%s/%s/%s/%s.parquet", basePath, turbine.getType(), turbine.getWindFarmId(), date.format(DATE_FORMATTER_WITH_NUMBER), turbine.getId());
+    }
+
+    /**
+     * 创建目录
+     */
+    private void createDirectories(String filePath) {
+        createDirectories(filePath, 1);
+    }
+
+    /**
+     * 创建目录
+     */
+    private void createDirectories(String filePath, int retryTimes) {
+        try {
+            File file = new File(filePath);
+            File parentDir = file.getParentFile();
+            if (!parentDir.exists()) {
+                Files.createDirectories(parentDir.toPath());
+            }
+        } catch (IOException e) {
+            log.error("创建目录失败: {}, 次数: {}", filePath, retryTimes, e);
+            if (retryTimes < 6) {
+                createDirectories(filePath, retryTimes + 1);
+                return;
+            }
+            throw new RuntimeException("目录创建失败", e);
+        }
+    }
+}

+ 33 - 0
src/main/java/com/znzn/project/dc/dtdata/service/impl/ExecDataDateServiceImpl.java

@@ -0,0 +1,33 @@
+package com.znzn.project.dc.dtdata.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.znzn.project.dc.dtdata.entity.ExecDataDate;
+import com.znzn.project.dc.dtdata.mapper.ExecDataDateMapper;
+import com.znzn.project.dc.dtdata.service.IExecDataDateService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 执行数据日期 服务实现类
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-25
+ */
+@Service
+public class ExecDataDateServiceImpl extends ServiceImpl<ExecDataDateMapper, ExecDataDate> implements IExecDataDateService {
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void finishAndAddNextTime(Integer id, LocalDateTime queryEndDate) {
+
+        ExecDataDate execDataDate = new ExecDataDate();
+        execDataDate.setId(id);
+        execDataDate.setExecDateTime(queryEndDate);
+        updateById(execDataDate);
+    }
+}

+ 20 - 0
src/main/java/com/znzn/project/dc/dtdata/service/impl/ExecErrorServiceImpl.java

@@ -0,0 +1,20 @@
+package com.znzn.project.dc.dtdata.service.impl;
+
+import com.znzn.project.dc.dtdata.entity.ExecError;
+import com.znzn.project.dc.dtdata.mapper.ExecErrorMapper;
+import com.znzn.project.dc.dtdata.service.IExecErrorService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-25
+ */
+@Service
+public class ExecErrorServiceImpl extends ServiceImpl<ExecErrorMapper, ExecError> implements IExecErrorService {
+
+}

+ 20 - 0
src/main/java/com/znzn/project/dc/dtdata/service/impl/FileStoreServiceImpl.java

@@ -0,0 +1,20 @@
+package com.znzn.project.dc.dtdata.service.impl;
+
+import com.znzn.project.dc.dtdata.entity.FileStore;
+import com.znzn.project.dc.dtdata.mapper.FileStoreMapper;
+import com.znzn.project.dc.dtdata.service.IFileStoreService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-10
+ */
+@Service
+public class FileStoreServiceImpl extends ServiceImpl<FileStoreMapper, FileStore> implements IFileStoreService {
+
+}

+ 54 - 0
src/main/java/com/znzn/project/dc/dtdata/service/impl/RedisServiceImpl.java

@@ -0,0 +1,54 @@
+package com.znzn.project.dc.dtdata.service.impl;
+
+import com.znzn.project.dc.dtdata.service.IRedisService;
+import jakarta.annotation.Resource;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+import java.util.concurrent.TimeUnit;
+
+@Service
+public class RedisServiceImpl implements IRedisService {
+
+    @Resource
+    private RedisTemplate<String, Object> redisTemplate;
+
+    @Override
+    public void set(String key, Object value) {
+        redisTemplate.opsForValue().set(key, value);
+    }
+
+    @Override
+    public void set(String key, Object value, long timeout, TimeUnit timeUnit) {
+        redisTemplate.opsForValue().set(key, value, timeout, timeUnit);
+    }
+
+    @Override
+    public Object get(String key) {
+        return redisTemplate.opsForValue().get(key);
+    }
+
+    @Override
+    public <T> T get(String key, Class<T> clazz) {
+        Object value = redisTemplate.opsForValue().get(key);
+        if (value != null && clazz.isInstance(value)) {
+            return clazz.cast(value);
+        }
+        return null;
+    }
+
+    @Override
+    public Boolean delete(String key) {
+        return redisTemplate.delete(key);
+    }
+
+    @Override
+    public Boolean hasKey(String key) {
+        return redisTemplate.hasKey(key);
+    }
+
+    @Override
+    public Boolean expire(String key, long timeout, TimeUnit timeUnit) {
+        return redisTemplate.expire(key, timeout, timeUnit);
+    }
+}

+ 37 - 0
src/main/java/com/znzn/project/dc/dtdata/service/impl/WindFarmServiceImpl.java

@@ -0,0 +1,37 @@
+package com.znzn.project.dc.dtdata.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.znzn.project.dc.dtdata.entity.WindFarm;
+import com.znzn.project.dc.dtdata.mapper.WindFarmMapper;
+import com.znzn.project.dc.dtdata.service.IWindFarmService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 服务实现类
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-05
+ */
+@Service
+public class WindFarmServiceImpl extends ServiceImpl<WindFarmMapper, WindFarm> implements IWindFarmService {
+
+    @Override
+    public List<String> getTypes(String windFarmId) {
+        LambdaQueryWrapper<WindFarm> wrapper = Wrappers.lambdaQuery(WindFarm.class);
+        wrapper.eq(WindFarm::getId, windFarmId);
+        return list(wrapper).stream().map(WindFarm::getType).toList();
+    }
+
+    @Override
+    public List<WindFarm> getByFileStoreId(Integer fileStoreId) {
+        LambdaQueryWrapper<WindFarm> wrapper = Wrappers.lambdaQuery(WindFarm.class);
+        wrapper.eq(WindFarm::getStoreId, fileStoreId);
+        return list(wrapper);
+    }
+}

+ 20 - 0
src/main/java/com/znzn/project/dc/dtdata/service/impl/WindFarmTablesServiceImpl.java

@@ -0,0 +1,20 @@
+package com.znzn.project.dc.dtdata.service.impl;
+
+import com.znzn.project.dc.dtdata.entity.WindFarmTables;
+import com.znzn.project.dc.dtdata.mapper.WindFarmTablesMapper;
+import com.znzn.project.dc.dtdata.service.IWindFarmTablesService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-12-01
+ */
+@Service
+public class WindFarmTablesServiceImpl extends ServiceImpl<WindFarmTablesMapper, WindFarmTables> implements IWindFarmTablesService {
+
+}

+ 50 - 0
src/main/java/com/znzn/project/dc/dtdata/service/impl/WindPointsServiceImpl.java

@@ -0,0 +1,50 @@
+package com.znzn.project.dc.dtdata.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.znzn.project.dc.dtdata.common.CommonData;
+import com.znzn.project.dc.dtdata.entity.WindPoints;
+import com.znzn.project.dc.dtdata.inOutEntity.WindPointsInData;
+import com.znzn.project.dc.dtdata.mapper.WindPointsMapper;
+import com.znzn.project.dc.dtdata.service.IWindPointsService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 服务实现类
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-05
+ */
+@Service
+public class WindPointsServiceImpl extends ServiceImpl<WindPointsMapper, WindPoints> implements IWindPointsService {
+
+    @Override
+    public List<WindPoints> getByParams(WindPointsInData inData) {
+
+        LambdaQueryWrapper<WindPoints> wrapper = Wrappers.lambdaQuery(WindPoints.class);
+
+        wrapper.eq(WindPoints::getWindFarmId, inData.getWindFarmId());
+        wrapper.eq(WindPoints::getWindType, inData.getType());
+        if (StringUtils.isNotBlank(inData.getName())) {
+            wrapper.and(i -> i.like(WindPoints::getStanderNameCn, inData.getName())
+                    .or().like(WindPoints::getStanderNameEn, inData.getName())
+                    .or().like(WindPoints::getPointNameCn, inData.getName())
+                    .or().like(WindPoints::getPointNameEn, inData.getName()));
+        }
+        return list(wrapper);
+    }
+
+
+    @Override
+    public String getPointIdsWithLogic(String windFarmId, String windType) {
+        String key = windFarmId + windType;
+        return CommonData.pointIdsWithLogicMap.get(key);
+    }
+
+}

+ 70 - 0
src/main/java/com/znzn/project/dc/dtdata/service/impl/WindTurbineDataServiceImpl.java

@@ -0,0 +1,70 @@
+package com.znzn.project.dc.dtdata.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.znzn.project.dc.dtdata.entity.WindTurbine;
+import com.znzn.project.dc.dtdata.entity.WindTurbineData;
+import com.znzn.project.dc.dtdata.mapper.WindTurbineDataMapper;
+import com.znzn.project.dc.dtdata.service.IWindPointsService;
+import com.znzn.project.dc.dtdata.service.IWindTurbineDataService;
+import com.znzn.project.dc.dtdata.service.IWindTurbineService;
+import com.znzn.project.dc.dtdata.utils.enos.EnosapiUtils;
+import jakarta.annotation.Resource;
+import lombok.SneakyThrows;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.nio.file.Files;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ * 服务实现类
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-10
+ */
+@Service
+public class WindTurbineDataServiceImpl extends ServiceImpl<WindTurbineDataMapper, WindTurbineData> implements IWindTurbineDataService {
+
+    @Resource
+    private IWindTurbineService windTurbineService;
+    @Resource
+    private IWindPointsService windPointsService;
+
+    @SneakyThrows
+    @Override
+    @Async
+    public void getEveryWindAndTypeData() {
+        List<WindTurbine> windTurbineList = windTurbineService.getWindTurbineByGroupData();
+        for (WindTurbine windTurbine : windTurbineList) {
+            String mdmId = windTurbine.getId();
+            String logicPoints = windPointsService.getPointIdsWithLogic(windTurbine.getWindFarmId(), windTurbine.getType());
+            List<JSONObject> datas = EnosapiUtils.queryHistoricalMeasurementPoint(mdmId, "2025-11-01 00:00:00", "2025-11-02 00:00:00", logicPoints, "1m", true);
+            System.out.println(mdmId + "  " + datas.size());
+            File file = new File("接口返回数据20251101" + File.separator + mdmId + ".json");
+            if (!file.getParentFile().exists()) {
+                Files.createFile(file.getParentFile().toPath());
+            }
+            FileWriter fileWriter = new FileWriter(file);
+            fileWriter.write(JSON.toJSONString(datas));
+            fileWriter.flush();
+            fileWriter.close();
+        }
+    }
+
+    @Override
+    public List<WindTurbineData> getByFileStoreIdAndDate(Integer fileStoreId, LocalDateTime queryBeginDate) {
+        LambdaQueryWrapper<WindTurbineData> queryWrapper = Wrappers.lambdaQuery(WindTurbineData.class);
+        queryWrapper.eq(WindTurbineData::getFileStoreId, fileStoreId).eq(WindTurbineData::getDataTime, queryBeginDate);
+        return list(queryWrapper);
+    }
+}

+ 64 - 0
src/main/java/com/znzn/project/dc/dtdata/service/impl/WindTurbineServiceImpl.java

@@ -0,0 +1,64 @@
+package com.znzn.project.dc.dtdata.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.znzn.project.dc.dtdata.entity.WindTurbine;
+import com.znzn.project.dc.dtdata.exception.BusinessException;
+import com.znzn.project.dc.dtdata.inOutEntity.WindTurbineInData;
+import com.znzn.project.dc.dtdata.mapper.WindTurbineMapper;
+import com.znzn.project.dc.dtdata.service.IWindTurbineService;
+import jakarta.annotation.Resource;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 服务实现类
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2025-11-05
+ */
+@Service
+public class WindTurbineServiceImpl extends ServiceImpl<WindTurbineMapper, WindTurbine> implements IWindTurbineService {
+
+    @Resource
+    private WindTurbineMapper windTurbineMapper;
+
+    @Override
+    public List<WindTurbine> getByParams(WindTurbineInData inData) {
+        LambdaQueryWrapper<WindTurbine> wrapper = Wrappers.lambdaQuery(WindTurbine.class);
+
+        wrapper.eq(WindTurbine::getWindFarmId, inData.getWindFarmId());
+        if (StringUtils.isNotBlank(inData.getName())) {
+            wrapper.like(WindTurbine::getName, inData.getName());
+        }
+        if (StringUtils.isNotBlank(inData.getType())) {
+            wrapper.eq(WindTurbine::getType, inData.getType());
+        }
+        wrapper.orderByAsc(WindTurbine::getCode);
+
+        return list(wrapper);
+    }
+
+    @Override
+    public List<WindTurbine> getByFileStoreId(Integer fileStoreId) {
+        if (null == fileStoreId) {
+            throw new BusinessException("沒有配置存储ID");
+        }
+        return windTurbineMapper.getByFileStoreId(fileStoreId);
+    }
+
+    @Override
+    public List<WindTurbine> getWindTurbineByGroupData() {
+        return windTurbineMapper.getWindTurbineByGroupData();
+    }
+
+    @Override
+    public void deleteByFileStoreId(Integer fileStoreId) {
+        windTurbineMapper.deleteByFileStoreId(fileStoreId);
+    }
+}

+ 238 - 0
src/main/java/com/znzn/project/dc/dtdata/utils/enos/EnosapiUtils.java

@@ -0,0 +1,238 @@
+package com.znzn.project.dc.dtdata.utils.enos;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.enosiot.apim.poseidon.config.PConfig;
+import com.enosiot.apim.poseidon.core.Poseidon;
+import com.znzn.project.dc.dtdata.utils.enos.entity.*;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.*;
+
+@Slf4j
+public class EnosapiUtils {
+
+    private static final String ak = "a6af2233-227e-4684-ab59-9e5f74e5718c";
+    private static final String sk = "56f24801-0429-486f-b4db-ba61a33a101c";
+    private static final String orgId = "o16021383932361";
+    private static final String api_gate = "http://ag-cdt1.eniot.io";
+
+    public static List<AccessibleAssetType> queryAccessibleAssetType() throws Exception {
+        String mdmTypesStr = Poseidon.config(PConfig.init().appKey(ak).appSecret(sk))
+                .url(api_gate + "/cds-asset-service/v1.0/accessible-asset-type?action=query")
+                .queryParam("orgId", orgId)
+                .method("GET")
+                .sync();
+
+        AccessibleAssetTypeResponse response = JSON.parseObject(mdmTypesStr, AccessibleAssetTypeResponse.class);
+
+        if (response.getCode() == 0) {
+            return response.getData();
+        } else {
+            throw new Exception(response.toString());
+        }
+    }
+
+
+    public static List<AccessibleAsset> queryAccessibleAsset(String mdmTypes) throws Exception {
+        String str = Poseidon.config(PConfig.init().appKey(ak).appSecret(sk))
+                .url(api_gate + "/cds-asset-service/v1.0/accessible-asset?action=query")
+                .queryParam("orgId", orgId)
+                .queryParam("mdmTypes", mdmTypes)
+                .queryParam("locale", "zh-CN")
+                .method("GET")
+                .sync();
+
+        AccessibleAssetResponse response = JSON.parseObject(str, AccessibleAssetResponse.class);
+        if (response.getCode() == 0) {
+            return response.getData();
+        } else {
+            throw new Exception(response.toString());
+        }
+    }
+
+
+    public static Map<String, AssetAttribute> queryAssetAttribute(List<String> mdmIds) throws Exception {
+
+        Map<String, AssetAttribute> map = new HashMap<>();
+        String mdmIdsStr = String.join(",", mdmIds);
+        String str = Poseidon.config(PConfig.init().appKey(ak).appSecret(sk))
+                .url(api_gate + "/cds-asset-service/v1.0/attribute?action=query")
+                .queryParam("orgId", orgId)
+                .queryParam("mdmIds", mdmIdsStr)
+                .queryParam("locale", "zh-CN")
+                .method("GET")
+                .sync();
+
+        System.out.println(str);
+        JSONObject object = JSON.parseObject(str);
+        if (object.getInteger("code") == 0) {
+            JSONObject mdmJson = object.getJSONObject("data");
+            for (String key : mdmJson.keySet()) {
+                map.put(key, mdmJson.getObject(key, AssetAttribute.class));
+            }
+            return map;
+        } else {
+            throw new Exception(object.toString());
+        }
+    }
+
+    public static Map<String, AssetAttribute> queryAssetTopology(List<String> mdmIds) throws Exception {
+
+        Map<String, AssetAttribute> map = new HashMap<>();
+        String mdmIdsStr = String.join(",", mdmIds);
+        String str = Poseidon.config(PConfig.init().appKey(ak).appSecret(sk))
+                .url(api_gate + "/cds-asset-service/v1.0/attribute?action=query")
+                .queryParam("orgId", orgId)
+                .queryParam("mdmIds", mdmIdsStr)
+                .queryParam("topologyRuleId", "Storage_app_tree")
+                .queryParam("locale", "zh-CN")
+                .method("GET")
+                .sync();
+
+        JSONObject object = JSON.parseObject(str);
+        log.debug(object.toString());
+        if (object.getInteger("code") == 0) {
+            JSONObject mdmJson = object.getJSONObject("data");
+            for (String key : mdmJson.keySet()) {
+                map.put(key, mdmJson.getObject(key, AssetAttribute.class));
+            }
+            return map;
+        } else {
+            throw new Exception(object.toString());
+        }
+    }
+
+
+    public static List<AssetTopologyRule> queryAssetTopologyRule() throws Exception {
+
+        List<AssetTopologyRule> list = new ArrayList<>();
+
+        String str = Poseidon.config(PConfig.init().appKey(ak).appSecret(sk))
+                .url(api_gate + "/cds-asset-service/v1.0/topology/rule?action=query")
+                .queryParam("orgId", orgId)
+                .queryParam("locale", "zh-CN")
+                .method("GET")
+                .sync();
+        JSONObject object = JSON.parseObject(str);
+        if (object.getInteger("code") == 0) {
+            JSONObject mdmJson = object.getJSONObject("data");
+            for (String key : mdmJson.keySet()) {
+                list.add(mdmJson.getObject(key, AssetTopologyRule.class));
+            }
+            return list;
+        } else {
+            throw new Exception(object.toString());
+        }
+    }
+
+
+    public static List<MetaMeasurementPoint> queryMetaMeasurementPoint(String mdmIds) throws Exception {
+        String str = Poseidon.config(PConfig.init().appKey(ak).appSecret(sk))
+                .url(api_gate + "/cds-meta-service/v1.0/measurement-point?action=query")
+                .queryParam("orgId", orgId)
+                .queryParam("mdmIds", mdmIds)
+                .queryParam("locale", "zh-CN")
+                .queryParam("applyDataFilter", String.valueOf(true))
+                .method("GET")
+                .sync();
+        MetaMeasurementPointResponse response = JSON.parseObject(str, MetaMeasurementPointResponse.class);
+        if (response.getCode() == 0) {
+            return null == response.getData() ? Collections.emptyList() : response.getData();
+        } else {
+            return Collections.emptyList();
+        }
+    }
+
+    public static List<JSONObject> queryHistoricalMeasurementPoint(
+            String mdmIds, String startTime, String endTime,
+            String pointIdsWithLogic, String interval, boolean autoInterpolate) throws Exception {
+        return queryHistoricalMeasurementPoint(mdmIds, startTime, endTime, pointIdsWithLogic, interval, autoInterpolate, 0);
+    }
+
+    public static List<JSONObject> queryHistoricalMeasurementPoint(
+            String mdmIds, String startTime, String endTime,
+            String pointIdsWithLogic, String interval, boolean autoInterpolate, int count) throws Exception {
+        String str = Poseidon.config(PConfig.init().appKey(ak).appSecret(sk))
+                .url(api_gate + "/cds-timeseries-service/v1.0/tsdb-detail?action=query")
+                .queryParam("orgId", orgId)
+                .queryParam("mdmIds", mdmIds)
+                .queryParam("pointIdsWithLogic", pointIdsWithLogic)
+                .queryParam("startTime", startTime)
+                .queryParam("endTime", endTime)
+                .queryParam("interval", interval)
+                .queryParam("autoInterpolate", String.valueOf(autoInterpolate))
+                .method("GET")
+                .sync();
+        log.debug("历史数据返回结果:{}", str);
+        HistoricalMeasurementPointResponse response = JSON.parseObject(str, HistoricalMeasurementPointResponse.class);
+        if (null == response || null == response.getData() || response.getCode() != 0 || response.getData().getItems().isEmpty()) {
+
+            String message = getMessage(response);
+
+            try {
+                Thread.sleep(100);
+            } catch (InterruptedException ignored) {
+            }
+            count = count + 1;
+            log.error(String.format("风机:[%s],时间:[%s][%s],第[%s]次返回[%s]", mdmIds, startTime, endTime, count, message));
+
+            if (count > 5) {
+                throw new Exception(message);
+            }
+            return queryHistoricalMeasurementPoint(mdmIds, startTime, endTime, pointIdsWithLogic, interval, autoInterpolate, count);
+        }
+
+        if (response.getCode() == 0) {
+            return response.getData().getItems();
+        } else {
+            throw new Exception(response.toString());
+        }
+    }
+
+    private static String getMessage(HistoricalMeasurementPointResponse response) {
+        String message = "";
+        if (null == response) {
+            message = "无正常返回结果";
+        } else {
+            if (response.getCode() != 0) {
+                message = response.getMsg();
+            } else {
+                if (null == response.getData()) {
+                    message = "有返回但是data为空";
+                } else {
+                    if (response.getData().getItems().isEmpty()) {
+                        message = "有返回但是items为空";
+                    }
+                }
+            }
+        }
+        return message;
+    }
+
+
+    public static void main(String[] args) throws Exception {
+//        Map<String, AssetAttribute> data = queryAssetTopology(Arrays.asList("0iffMVPY"));
+//        System.out.println(JSON.toJSONString(data));
+
+
+//        String logicPOints = "last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)";
+//        String mdmId = "Vg24xugq";
+//        List<JSONObject> datas = queryHistoricalMeasurementPoint(mdmId, "2025-11-19 17:30:00", "2025-11-19 17:50:00", logicPOints, "RAW", true);
+//        System.out.println(datas.size());
+//        FileWriter fileWriter = new FileWriter(mdmId + "1119-SECOND.json");
+//        fileWriter.write(JSON.toJSONString(datas));
+//        fileWriter.flush();
+//        fileWriter.close();
+
+        String mdmIdStr = "Vg24xugq";
+        List<String> mdmIds = Arrays.asList(mdmIdStr.split(","));
+        Map<String, AssetAttribute> data = queryAssetAttribute(mdmIds);
+        System.out.println(data);
+//        FileWriter fileWriter = new FileWriter("test.json");
+//        fileWriter.write(JSON.toJSONString(data));
+//        fileWriter.flush();
+//        fileWriter.close();
+    }
+
+}

+ 17 - 0
src/main/java/com/znzn/project/dc/dtdata/utils/enos/FileWriterUtils.java

@@ -0,0 +1,17 @@
+package com.znzn.project.dc.dtdata.utils.enos;
+
+import com.alibaba.fastjson.JSON;
+import lombok.SneakyThrows;
+
+import java.io.FileWriter;
+
+public class FileWriterUtils {
+
+    @SneakyThrows
+    public static void fileWriter(String fileName, Object object){
+        FileWriter fileWriter = new FileWriter(fileName);
+        fileWriter.write(JSON.toJSONString(object));
+        fileWriter.flush();
+        fileWriter.close();
+    }
+}

+ 103 - 0
src/main/java/com/znzn/project/dc/dtdata/utils/enos/JsonToParquetUtils.java

@@ -0,0 +1,103 @@
+package com.znzn.project.dc.dtdata.utils.enos;
+
+import com.alibaba.fastjson.JSONObject;
+import org.apache.avro.Schema;
+import org.apache.avro.generic.GenericData;
+import org.apache.avro.generic.GenericRecord;
+import org.apache.parquet.avro.AvroParquetWriter;
+import org.apache.parquet.hadoop.ParquetWriter;
+import org.apache.parquet.hadoop.metadata.CompressionCodecName;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.util.*;
+
+public class JsonToParquetUtils {
+
+    /**
+     * 将映射后的JSON数据保存为Parquet文件
+     */
+    public static void saveAsParquet(
+            List<JSONObject> mappedData,
+            List<String> standardKeys,
+            String outputPath) throws IOException {
+
+        if (mappedData == null || mappedData.isEmpty()) {
+            System.out.println("警告: 没有数据需要保存");
+            return;
+        }
+
+        // 如果文件存在则删除
+        File file = new File(outputPath);
+        Files.deleteIfExists(file.toPath());
+
+        // 创建Avro Schema
+        Schema schema = createAvroSchema(standardKeys);
+
+        // 创建Parquet写入器
+        try (ParquetWriter<GenericRecord> writer = AvroParquetWriter.<GenericRecord>builder(new org.apache.hadoop.fs.Path(outputPath))
+                .withSchema(schema)
+                .withCompressionCodec(CompressionCodecName.SNAPPY)
+                .build()) {
+
+            // 将JSON数据转换为Avro记录并写入
+            for (JSONObject jsonObj : mappedData) {
+                GenericRecord record = convertToAvroRecord(jsonObj, schema, standardKeys);
+                writer.write(record);
+            }
+
+            System.out.println("成功保存Parquet文件: " + outputPath);
+            System.out.println("总记录数: " + mappedData.size());
+        }
+    }
+
+    /**
+     * 根据标准key创建Avro Schema
+     */
+    private static Schema createAvroSchema(List<String> standardKeys) {
+        StringBuilder schemaBuilder = new StringBuilder();
+        schemaBuilder.append("{\n");
+        schemaBuilder.append("  \"type\": \"record\",\n");
+        schemaBuilder.append("  \"name\": \"StandardRecord\",\n");
+        schemaBuilder.append("  \"namespace\": \"com.example.parquet\",\n");
+        schemaBuilder.append("  \"fields\": [\n");
+
+        for (int i = 0; i < standardKeys.size(); i++) {
+            String fieldName = standardKeys.get(i);
+            schemaBuilder.append("    {\n");
+            schemaBuilder.append("      \"name\": \"").append(fieldName).append("\",\n");
+            schemaBuilder.append("      \"type\": [\"string\", \"null\"]\n"); // 所有字段都设为string类型,可为null
+            if (i < standardKeys.size() - 1) {
+                schemaBuilder.append("    },\n");
+            } else {
+                schemaBuilder.append("    }\n");
+            }
+        }
+
+        schemaBuilder.append("  ]\n");
+        schemaBuilder.append("}");
+
+        return new Schema.Parser().parse(schemaBuilder.toString());
+    }
+
+    /**
+     * 将JSONObject转换为Avro GenericRecord
+     */
+    private static GenericRecord convertToAvroRecord(JSONObject jsonObj, Schema schema, List<String> standardKeys) {
+        GenericRecord record = new GenericData.Record(schema);
+
+        for (String key : standardKeys) {
+            Object value = jsonObj.get(key);
+            if (value != null) {
+                // 将所有值转换为字符串
+                record.put(key, value.toString());
+            } else {
+                record.put(key, null);
+            }
+        }
+
+        return record;
+    }
+
+}

+ 12 - 0
src/main/java/com/znzn/project/dc/dtdata/utils/enos/entity/AccessibleAsset.java

@@ -0,0 +1,12 @@
+package com.znzn.project.dc.dtdata.utils.enos.entity;
+
+import lombok.Data;
+
+@Data
+public class AccessibleAsset {
+
+    private String mdmId;
+
+    private AssetAttribute attributes;
+}
+

+ 20 - 0
src/main/java/com/znzn/project/dc/dtdata/utils/enos/entity/AccessibleAssetResponse.java

@@ -0,0 +1,20 @@
+package com.znzn.project.dc.dtdata.utils.enos.entity;
+
+import lombok.Data;
+
+import java.util.Collections;
+import java.util.List;
+
+@Data
+public class AccessibleAssetResponse extends BaseResponse {
+
+
+    List<AccessibleAsset> data;
+
+    public List<AccessibleAsset> getData() {
+        if (null == data) {
+            return Collections.emptyList();
+        }
+        return data;
+    }
+}

+ 15 - 0
src/main/java/com/znzn/project/dc/dtdata/utils/enos/entity/AccessibleAssetType.java

@@ -0,0 +1,15 @@
+package com.znzn.project.dc.dtdata.utils.enos.entity;
+
+import lombok.Data;
+
+@Data
+public class AccessibleAssetType {
+    private String mdmType;
+    private String domain;
+    private String domainName;
+    private Boolean isSite;
+    private Boolean isDeviceGroup;
+    private String name;
+
+//    private List<Dimension> dimensions;
+}

+ 19 - 0
src/main/java/com/znzn/project/dc/dtdata/utils/enos/entity/AccessibleAssetTypeResponse.java

@@ -0,0 +1,19 @@
+package com.znzn.project.dc.dtdata.utils.enos.entity;
+
+import lombok.Data;
+
+import java.util.Collections;
+import java.util.List;
+
+@Data
+public class AccessibleAssetTypeResponse extends BaseResponse {
+
+    private List<AccessibleAssetType> data;
+
+    public List<AccessibleAssetType> getData() {
+        if (null == this.data) {
+            return Collections.emptyList();
+        }
+        return data;
+    }
+}

+ 205 - 0
src/main/java/com/znzn/project/dc/dtdata/utils/enos/entity/AssetAttribute.java

@@ -0,0 +1,205 @@
+package com.znzn.project.dc.dtdata.utils.enos.entity;
+
+import lombok.Data;
+
+import java.util.Map;
+
+@Data
+public class AssetAttribute {
+    /**
+     * 海拔高度
+     */
+    private Double altitude;
+    
+    /**
+     * 变压器间隔
+     */
+    private String TransformerBay;
+    
+    /**
+     * MDM类型
+     */
+    private String mdmType;
+    
+    /**
+     * 模型ID
+     */
+    private String modelId;
+    
+    /**
+     * 时区
+     */
+    private String timezone;
+
+    /**
+     * 经度
+     */
+    private Double longitude;
+    
+    /**
+     * 纬度
+     */
+    private Double latitude;
+    
+    /**
+     * 轮毂高度
+     */
+    private Double hubHeight;
+    
+    /**
+     * 上架状态
+     */
+    private Integer OnboardingState;
+
+    /**
+     * 切入风速
+     */
+    private Double cutInwindSpeed;
+    
+    /**
+     * 切出风速
+     */
+    private Double cutOutwindSpeed;
+    
+    /**
+     * 模型ID路径
+     */
+    private String modelIdPath;
+    
+    /**
+     * 制造商
+     */
+    private String manufacturer;
+    
+    /**
+     * 风机类型
+     */
+    private Integer turbineType;
+    
+    /**
+     * SCADA名称
+     */
+    private String scadaName;
+    
+    /**
+     * 根模型ID
+     */
+    private String rootModelId;
+    
+    /**
+     * 并网日期
+     */
+    private String ongridDate;
+    
+    /**
+     * MDM ID
+     */
+    private String mdmId;
+    
+    /**
+     * 额定功率
+     */
+    private Double ratedPower;
+    
+    /**
+     * 运行日期
+     */
+    private String operativeDate;
+    
+    /**
+     * 风机类型ID
+     */
+    private String turbineTypeID;
+    
+    /**
+     * 阶段ID
+     */
+    private String phaseID;
+    
+    /**
+     * MDM路径
+     */
+    private String mdmPath;
+    
+    /**
+     * 进线断路器间隔
+     */
+    private String BreakerBay_In;
+    
+    /**
+     * 出线断路器间隔
+     */
+    private String BreakerBay_Out;
+    
+    /**
+     * 父级ID
+     */
+    private String parentId;
+    
+    /**
+     * 项目状态
+     */
+    private Integer projectState;
+    
+    /**
+     * 标签
+     */
+    private Map<String, Object> tags;
+    
+    /**
+     * PLC版本
+     */
+    private String PLCVersion;
+    
+    /**
+     * 模型名称
+     */
+    private String modelName;
+    
+    /**
+     * 名称
+     */
+    private String name;
+    
+    /**
+     * 馈线ID
+     */
+    private String feedLineID;
+    
+//    // 实用方法
+//    public boolean isOperational() {
+//        return OnboardingState != null && OnboardingState == 1;
+//    }
+//
+//    public boolean isProjectActive() {
+//        return projectState != null && projectState == 1;
+//    }
+//
+//    /**
+//     * 获取地理位置坐标
+//     */
+//    public String getCoordinates() {
+//        return String.format("纬度: %s, 经度: %s", latitude, longitude);
+//    }
+//
+//    /**
+//     * 获取风速范围
+//     */
+//    public String getWindSpeedRange() {
+//        return String.format("%s - %s m/s", cutInwindSpeed, cutOutwindSpeed);
+//    }
+//
+//    /**
+//     * 检查是否包含地理位置信息
+//     */
+//    public boolean hasGeoLocation() {
+//        return latitude != null && longitude != null;
+//    }
+//
+//    /**
+//     * 获取功率信息(kW)
+//     */
+//    public Double getRatedPowerInKW() {
+//        return ratedPower != null ? ratedPower / 1000 : null;
+//    }
+}

+ 10 - 0
src/main/java/com/znzn/project/dc/dtdata/utils/enos/entity/AssetTopologyRule.java

@@ -0,0 +1,10 @@
+package com.znzn.project.dc.dtdata.utils.enos.entity;
+
+import lombok.Data;
+
+@Data
+public class AssetTopologyRule {
+    private String ruleId;
+    private String ruleName;
+    private I18n ruleNameI18n;
+}

+ 10 - 0
src/main/java/com/znzn/project/dc/dtdata/utils/enos/entity/BaseResponse.java

@@ -0,0 +1,10 @@
+package com.znzn.project.dc.dtdata.utils.enos.entity;
+
+import lombok.Data;
+
+@Data
+public class BaseResponse {
+    private Integer code;
+    private String msg;
+    private String traceId;
+}

+ 71 - 0
src/main/java/com/znzn/project/dc/dtdata/utils/enos/entity/Dimension.java

@@ -0,0 +1,71 @@
+package com.znzn.project.dc.dtdata.utils.enos.entity;
+
+import lombok.Data;
+
+import java.util.Map;
+
+@Data
+public class Dimension {
+    /**
+     * 请求语言中维度的名称
+     */
+    private String name;
+
+    /**
+     * 维度的层级。child 表示一对多,self 表示一对一
+     */
+    private String level;
+
+    /**
+     * 用来描述维度标识符的属性
+     */
+    private String attribute;
+
+    /**
+     * 用来描述维度名称的属性
+     */
+    private String nameAttribute;
+
+    /**
+     * 枚举量的来源信息
+     */
+    private String enumSource;
+
+    /**
+     * 静态枚举类型的枚举量
+     */
+    private String enumerate;
+
+    /**
+     * 枚举量关联的记录类型的标识符
+     */
+    private String recordType;
+
+    /**
+     * 枚举量关联的记录类型中的字段
+     */
+    private Map<String, String> recordMapping;
+
+    /**
+     * 维度支持的筛选方式
+     */
+    private String filters;
+
+    /**
+     * 维度对应的对象类型
+     */
+    private String mdmType;
+
+    // 实用方法
+    public boolean isChildLevel() {
+        return "child".equals(level);
+    }
+
+    public boolean isSelfLevel() {
+        return "self".equals(level);
+    }
+
+    public boolean hasRecordMapping() {
+        return recordMapping != null && !recordMapping.isEmpty();
+    }
+}

+ 19 - 0
src/main/java/com/znzn/project/dc/dtdata/utils/enos/entity/HistoricalData.java

@@ -0,0 +1,19 @@
+package com.znzn.project.dc.dtdata.utils.enos.entity;
+
+import com.alibaba.fastjson.JSONObject;
+import lombok.Data;
+
+import java.util.Collections;
+import java.util.List;
+
+@Data
+public class HistoricalData {
+    private List<JSONObject> items;
+
+    public List<JSONObject> getItems() {
+        if (null == this.items) {
+            return Collections.emptyList();
+        }
+        return items;
+    }
+}

+ 12 - 0
src/main/java/com/znzn/project/dc/dtdata/utils/enos/entity/HistoricalMeasurementPoint.java

@@ -0,0 +1,12 @@
+package com.znzn.project.dc.dtdata.utils.enos.entity;
+
+import lombok.Data;
+
+@Data
+public class HistoricalMeasurementPoint {
+    private String mdmId;
+    private Long timestamp;
+    private String localtime;
+    private Double windspeed;
+    private Double power;
+}

+ 8 - 0
src/main/java/com/znzn/project/dc/dtdata/utils/enos/entity/HistoricalMeasurementPointResponse.java

@@ -0,0 +1,8 @@
+package com.znzn.project.dc.dtdata.utils.enos.entity;
+
+import lombok.Data;
+
+@Data
+public class HistoricalMeasurementPointResponse extends BaseResponse{
+    private HistoricalData data;
+}

+ 12 - 0
src/main/java/com/znzn/project/dc/dtdata/utils/enos/entity/I18n.java

@@ -0,0 +1,12 @@
+package com.znzn.project.dc.dtdata.utils.enos.entity;
+
+import lombok.Data;
+
+@Data
+public class I18n {
+    private String defaultValue;
+    private String en_US;
+    private String zh_CN;
+    private String es_ES;
+    private String ja_JP;
+}

+ 18 - 0
src/main/java/com/znzn/project/dc/dtdata/utils/enos/entity/MetaMeasurementPoint.java

@@ -0,0 +1,18 @@
+package com.znzn.project.dc.dtdata.utils.enos.entity;
+
+import lombok.Data;
+
+@Data
+public class MetaMeasurementPoint {
+    private String mdmType;
+    private String modelId;
+    private String name;
+    private String units;
+    private String type;
+    private String measurementPoint;
+    private String timeAggMethods;
+    private String mdmAggMethods;
+    private String interval;
+    private Boolean accumulable;
+    private String signalType;
+}

+ 11 - 0
src/main/java/com/znzn/project/dc/dtdata/utils/enos/entity/MetaMeasurementPointResponse.java

@@ -0,0 +1,11 @@
+package com.znzn.project.dc.dtdata.utils.enos.entity;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class MetaMeasurementPointResponse extends BaseResponse {
+
+    private List<MetaMeasurementPoint> data;
+}

+ 46 - 0
src/main/resources/application.properties

@@ -0,0 +1,46 @@
+spring.application.name=DatangEnosData
+server.port=8101
+server.servlet.context-path=/
+# 日志相关
+logging.level.root=INFO
+logging.level.com.znzn.project.dc.dtdata.mapper=INFO
+logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} - %logger{36} - %msg%n
+logging.file.name=${user.home}/logs/application.log
+logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
+logging.logback.rollingpolicy.max-history=90
+logging.logback.rollingpolicy.max-file-size=30MB
+logging.logback.rollingpolicy.total-size-cap=3GB
+# MySQL
+spring.datasource.url=jdbc:mysql://10.172.12.213:4000/datang?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
+spring.datasource.username=root
+spring.datasource.password=admin123456
+spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
+# Redis
+spring.data.redis.host=localhost
+spring.data.redis.port=6379
+spring.data.redis.password=redis_123456
+spring.data.redis.database=0
+spring.data.redis.timeout=2000ms
+spring.data.redis.lettuce.pool.max-active=8
+spring.data.redis.lettuce.pool.max-wait=-1ms
+spring.data.redis.lettuce.pool.max-idle=8
+spring.data.redis.lettuce.pool.min-idle=0
+# SpringDoc OpenAPI
+springdoc.api-docs.path=/v3/api-docs
+springdoc.swagger-ui.path=/swagger-ui
+springdoc.swagger-ui.operations-sorter=alpha
+springdoc.swagger-ui.tags-sorter=alpha
+springdoc.swagger-ui.enabled=true
+# Knife4j
+knife4j.enable=true
+knife4j.setting.language=zh-CN
+knife4j.setting.enable-swagger-models=true
+knife4j.setting.enable-document-manage=true
+knife4j.setting.enable-version=true
+knife4j.basic.enable=true
+knife4j.basic.username=datang
+knife4j.basic.password=1234QWER
+
+FILE_STORE_ID=1
+
+NEED_RESTORE=0

+ 5 - 0
src/main/resources/mapper/ExecDataDateMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.znzn.project.dc.dtdata.mapper.ExecDataDateMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/ExecErrorMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.znzn.project.dc.dtdata.mapper.ExecErrorMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/FileStoreMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.znzn.project.dc.dtdata.mapper.FileStoreMapper">
+
+</mapper>

+ 18 - 0
src/main/resources/mapper/StandardizedDataMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.znzn.project.dc.dtdata.mapper.StandardizedDataMapper">
+
+    <insert id="batchInsert" parameterType="map">
+        INSERT INTO ${tableName}
+        <foreach collection="list[0].keySet()" item="key" open="(" separator="," close=")">
+            `${key}`
+        </foreach>
+        VALUES
+        <foreach collection="list" item="item" separator=",">
+            <foreach collection="item.keySet()" item="key" open="(" separator="," close=")">
+                #{item[${key}]}
+            </foreach>
+        </foreach>
+    </insert>
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/WindFarmMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.znzn.project.dc.dtdata.mapper.WindFarmMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/WindFarmTablesMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.znzn.project.dc.dtdata.mapper.WindFarmTablesMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/WindPointsMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.znzn.project.dc.dtdata.mapper.WindPointsMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/WindTurbineDataMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.znzn.project.dc.dtdata.mapper.WindTurbineDataMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/WindTurbineMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.znzn.project.dc.dtdata.mapper.WindTurbineMapper">
+
+</mapper>

+ 53 - 0
src/test/java/Test.java

@@ -0,0 +1,53 @@
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.temporal.TemporalAdjusters;
+
+public class Test {
+
+    public static int test(int begin, int resule) throws Exception {
+        return test(begin, resule, 0);
+    }
+
+
+    public static int test(int begin, int resule, int count) throws Exception {
+        begin = begin + 1;
+        if (begin < resule) {
+            count = count + 1;
+            if (count > 3) {
+                throw new Exception("失败超标了");
+            }
+            System.out.println(String.format("[%s]次,仍小于", count));
+            return test(begin, resule, count);
+        }
+        return begin;
+    }
+
+    public static void main(String[] args) throws Exception {
+
+        LocalDate start = LocalDate.now();
+        Thread.sleep(1000);
+        LocalDate end = LocalDate.now();
+        System.out.println(start + "   " + end);
+        System.out.println(end.isAfter(start));
+
+        System.out.println(test(11, 10));
+
+//        Map<String, String> userMap = System.getenv();
+//        for (Map.Entry<String, String> entry : userMap.entrySet()) {
+//            System.out.println(entry.getKey() + " : " + entry.getValue());
+//        }
+
+
+        LocalDateTime today = LocalDateTime.now();
+        LocalDateTime twoMonthsAgoFirstDay = today.minusMonths(2).withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
+        System.out.println(twoMonthsAgoFirstDay);
+
+
+        twoMonthsAgoFirstDay = LocalDateTime.now()
+                .minusMonths(2)
+                .with(TemporalAdjusters.firstDayOfMonth())
+                .toLocalDate()
+                .atStartOfDay();
+        System.out.println(twoMonthsAgoFirstDay);
+    }
+}

+ 13 - 0
src/test/java/com/znzn/project/dc/dtdata/DatangEnosDataApplicationTests.java

@@ -0,0 +1,13 @@
+package com.znzn.project.dc.dtdata;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class DatangEnosDataApplicationTests {
+
+    @Test
+    void contextLoads() {
+    }
+
+}

+ 607 - 0
src/test/java/com/znzn/project/dc/dtdata/TestFault.java

@@ -0,0 +1,607 @@
+package com.znzn.project.dc.dtdata;
+
+import com.alibaba.fastjson.JSONObject;
+import com.znzn.project.dc.dtdata.utils.enos.EnosapiUtils;
+import com.znzn.project.dc.dtdata.utils.enos.FileWriterUtils;
+import lombok.SneakyThrows;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class TestFault {
+
+    @SneakyThrows
+    public static void main(String[] args) {
+
+        String dataStr = """
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	bPz1Whl3	内蒙古唐兴风电场01号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	qVYfkRgE	内蒙古唐兴风电场02号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	WeqzUhog	内蒙古唐兴风电场03号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	d8SntMeK	内蒙古唐兴风电场04号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	fOSmvw3k	内蒙古唐兴风电场05号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	dlGyn2X6	内蒙古唐兴风电场06号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	MiB4zJJa	内蒙古唐兴风电场07号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	DfbPf7ft	内蒙古唐兴风电场08号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	1BnSUGPY	内蒙古唐兴风电场09号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	O20y4Zii	内蒙古唐兴风电场10号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	EzvIH5xO	内蒙古唐兴风电场11号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	0yL8448L	内蒙古唐兴风电场12号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	cqRlS6mq	内蒙古唐兴风电场13号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	bPrDZqmt	内蒙古唐兴风电场14号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	65f9DJIZ	内蒙古唐兴风电场15号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	LGCmDvNs	内蒙古唐兴风电场16号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	hhUm2WEV	内蒙古唐兴风电场17号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	3pzNXQiI	内蒙古唐兴风电场18号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	ReIdcQZZ	内蒙古唐兴风电场19号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	Sm24EZhD	内蒙古唐兴风电场20号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	5hzSvaPE	内蒙古唐兴风电场21号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	PwVWfEOz	内蒙古唐兴风电场22号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	chRm4U8h	内蒙古唐兴风电场23号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	BbC4j9cF	内蒙古唐兴风电场24号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	bBxrv1rY	内蒙古唐兴风电场25号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	rs0rSImQ	内蒙古唐兴风电场26号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	lRDxT1qo	内蒙古唐兴风电场27号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	5FCIQnSP	内蒙古唐兴风电场28号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	kRHzRlFN	内蒙古唐兴风电场29号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	LU303VC3	内蒙古唐兴风电场30号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	tzfy9Rsw	内蒙古唐兴风电场31号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	viXS223M	内蒙古唐兴风电场32号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	XGKxUCvx	内蒙古唐兴风电场33号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	gX0H075p	内蒙古唐兴风电场34号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	4bHdGRD2	内蒙古唐兴风电场35号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	GPLPXeNv	内蒙古唐兴风电场36号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	1XuuFD25	内蒙古唐兴风电场37号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	iCL5GiWD	内蒙古唐兴风电场38号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	7Q1iFkY8	内蒙古唐兴风电场39号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	CG5EBQxa	内蒙古唐兴风电场40号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	C5zsJBpo	内蒙古唐兴风电场41号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	4WjqoE8L	内蒙古唐兴风电场42号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	JpuvJgZD	内蒙古唐兴风电场43号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	AwlLPst0	内蒙古唐兴风电场44号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	5t9GUUey	内蒙古唐兴风电场45号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	VkzHFJ6j	内蒙古唐兴风电场46号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	5AQBhuGz	内蒙古唐兴风电场47号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	JPcVQUYx	内蒙古唐兴风电场48号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	flFE0oxf	内蒙古唐兴风电场49号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	yLfqjLyl	内蒙古唐兴风电场50号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	tsnhWzlQ	内蒙古唐兴风电场51号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	bhQXEsdY	内蒙古唐兴风电场52号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	VNlFc2fT	内蒙古唐兴风电场53号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	h51sq8Wt	内蒙古唐兴风电场54号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	vVq7fmJn	内蒙古唐兴风电场55号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	O4FLE9zm	内蒙古唐兴风电场56号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	oGgQhlUG	内蒙古唐兴风电场57号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	BwQWtLcJ	内蒙古唐兴风电场58号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	wKSkJWL7	内蒙古唐兴风电场59号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	60zGVUws	内蒙古唐兴风电场60号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	meCBV7H3	内蒙古唐兴风电场61号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	Qs7uPAso	内蒙古唐兴风电场62号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	tWA8aYMD	内蒙古唐兴风电场63号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	JdYs14Dd	内蒙古唐兴风电场64号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	5T9cYkoK	内蒙古唐兴风电场65号风机	last(WCNV.SLCNVAI025)
+                J1k1SKg7	内蒙唐兴风电场	SL1500-82	KFezI5CL	内蒙古唐兴风电场66号风机	last(WCNV.SLCNVAI025)
+                YgDkeKwF	内蒙扎鲁特风电场	SL1500-82	Mr1CxLlx	内蒙古扎鲁特风电场北沙拉05号风机	last(WCNV.SLCNVAI025)
+                YgDkeKwF	内蒙扎鲁特风电场	SL1500-82	Mr1CxLlx	内蒙古扎鲁特风电场北沙拉05号风机	last(WCNV.SLCNVAI025)
+                YgDkeKwF	内蒙扎鲁特风电场	SL1500-82	Mr1CxLlx	内蒙古扎鲁特风电场北沙拉05号风机	last(WCNV.SLCNVAI025)
+                YgDkeKwF	内蒙扎鲁特风电场	SL1500-82	omnJ4TAa	内蒙古扎鲁特风电场北沙拉15号风机	last(WCNV.SLCNVAI025)
+                YgDkeKwF	内蒙扎鲁特风电场	SL1500-82	omnJ4TAa	内蒙古扎鲁特风电场北沙拉15号风机	last(WCNV.SLCNVAI025)
+                YgDkeKwF	内蒙扎鲁特风电场	SL1500-82	omnJ4TAa	内蒙古扎鲁特风电场北沙拉15号风机	last(WCNV.SLCNVAI025)
+                YgDkeKwF	内蒙扎鲁特风电场	SL1500-82	ypcnfD96	内蒙古扎鲁特风电场北沙拉24号风机	last(WCNV.SLCNVAI025)
+                YgDkeKwF	内蒙扎鲁特风电场	SL1500-82	ypcnfD96	内蒙古扎鲁特风电场北沙拉24号风机	last(WCNV.SLCNVAI025)
+                YgDkeKwF	内蒙扎鲁特风电场	SL1500-82	ypcnfD96	内蒙古扎鲁特风电场北沙拉24号风机	last(WCNV.SLCNVAI025)
+                YgDkeKwF	内蒙扎鲁特风电场	SL1500-82	Huh3UwUV	内蒙古扎鲁特风电场北沙拉32号风机	last(WCNV.SLCNVAI025)
+                YgDkeKwF	内蒙扎鲁特风电场	SL1500-82	Huh3UwUV	内蒙古扎鲁特风电场北沙拉32号风机	last(WCNV.SLCNVAI025)
+                YgDkeKwF	内蒙扎鲁特风电场	SL1500-82	Huh3UwUV	内蒙古扎鲁特风电场北沙拉32号风机	last(WCNV.SLCNVAI025)
+                nTMWNLRl	辽宁南岛风电场	MY5.2se-166	ygWnLsUR	南岛风电场10号风机	last(WCNV.CNVAI363),last(WCNV.CNVAI127)
+                nTMWNLRl	辽宁南岛风电场	MY5.2se-166	lvTCZlY0	南岛风电场11号风机	last(WCNV.CNVAI363),last(WCNV.CNVAI127)
+                nTMWNLRl	辽宁南岛风电场	MY5.2se-166	ndmaqtDF	南岛风电场12号风机	last(WCNV.CNVAI363),last(WCNV.CNVAI127)
+                nTMWNLRl	辽宁南岛风电场	MY5.2se-166	G33avMFG	南岛风电场13号风机	last(WCNV.CNVAI363),last(WCNV.CNVAI127)
+                nTMWNLRl	辽宁南岛风电场	MY5.2se-166	HeXUJwM7	南岛风电场14号风机	last(WCNV.CNVAI363),last(WCNV.CNVAI127)
+                nTMWNLRl	辽宁南岛风电场	MY5.2se-166	yhaYHhis	南岛风电场15号风机	last(WCNV.CNVAI363),last(WCNV.CNVAI127)
+                nTMWNLRl	辽宁南岛风电场	MY5.2se-166	9PZ0F4Lj	南岛风电场16号风机	last(WCNV.CNVAI363),last(WCNV.CNVAI127)
+                nTMWNLRl	辽宁南岛风电场	MY5.2se-166	rAbrnBSV	南岛风电场17号风机	last(WCNV.CNVAI363),last(WCNV.CNVAI127)
+                nTMWNLRl	辽宁南岛风电场	MY5.2se-166	HlXwlJNr	南岛风电场18号风机	last(WCNV.CNVAI363),last(WCNV.CNVAI127)
+                nTMWNLRl	辽宁南岛风电场	MY5.2se-166	PRq86pNo	南岛风电场19号风机	last(WCNV.CNVAI363),last(WCNV.CNVAI127)
+                nTMWNLRl	辽宁南岛风电场	MY5.2se-166	LMMxYOJR	南岛风电场1号风机	last(WCNV.CNVAI363),last(WCNV.CNVAI127)
+                nTMWNLRl	辽宁南岛风电场	MY5.2se-166	MMVY4mKg	南岛风电场2号风机	last(WCNV.CNVAI363),last(WCNV.CNVAI127)
+                nTMWNLRl	辽宁南岛风电场	MY5.2se-166	A5AtrfBa	南岛风电场3号风机	last(WCNV.CNVAI363),last(WCNV.CNVAI127)
+                nTMWNLRl	辽宁南岛风电场	MY5.2se-166	rJO0QKNj	南岛风电场4号风机	last(WCNV.CNVAI363),last(WCNV.CNVAI127)
+                nTMWNLRl	辽宁南岛风电场	MY5.2se-166	By0AKkYd	南岛风电场5号风机	last(WCNV.CNVAI363),last(WCNV.CNVAI127)
+                nTMWNLRl	辽宁南岛风电场	MY5.2se-166	BhNnJ3kJ	南岛风电场6号风机	last(WCNV.CNVAI363),last(WCNV.CNVAI127)
+                nTMWNLRl	辽宁南岛风电场	MY5.2se-166	34kMf99o	南岛风电场7号风机	last(WCNV.CNVAI363),last(WCNV.CNVAI127)
+                nTMWNLRl	辽宁南岛风电场	MY5.2se-166	w5IsZWBS	南岛风电场8号风机	last(WCNV.CNVAI363),last(WCNV.CNVAI127)
+                nTMWNLRl	辽宁南岛风电场	MY5.2se-166	JwygLKZV	南岛风电场9号风机	last(WCNV.CNVAI363),last(WCNV.CNVAI127)
+                0M6OwnLd	山东东平风电场	SL1500-82	hNnIvam8	山东东平风电场A01号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	BALu02fy	山东东平风电场A02号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	i2CNMr6U	山东东平风电场A03号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	9dLLi8zt	山东东平风电场A04号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	G6QtkCvz	山东东平风电场A05号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	z47L7In2	山东东平风电场A06号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	NkEBWhFI	山东东平风电场A07号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	O6CROpLr	山东东平风电场A08号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	NwlQ8jrr	山东东平风电场A09号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	CVjbN70H	山东东平风电场A10号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	TtFfKHHx	山东东平风电场A11号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	uEtCoxTZ	山东东平风电场A12号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	1LgKjjfb	山东东平风电场A13号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	f06CSQV8	山东东平风电场A14号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	zcr3C2AQ	山东东平风电场A15号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	Aebp44vI	山东东平风电场A16号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	kzWwOByT	山东东平风电场A17号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	P7SYUVym	山东东平风电场A18号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	IWsWZCpr	山东东平风电场A19号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	Ef0gp4c2	山东东平风电场A20号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	lIUhhtK9	山东东平风电场A21号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	ywjlk5rC	山东东平风电场A22号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	MO3pTEnB	山东东平风电场A24号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	9jOrJk5F	山东东平风电场A25号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	StWxKTYC	山东东平风电场A26号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	pVhvSxOF	山东东平风电场A27号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	336qCDNk	山东东平风电场A28号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	sJfIG39n	山东东平风电场A29号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	LbySskFD	山东东平风电场A30号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	F8nkGPKq	山东东平风电场A31号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	4xsSUlGK	山东东平风电场A32号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                0M6OwnLd	山东东平风电场	SL1500-82	FPK4ya9c	山东东平风电场A33号风机	last(WCNV.SLCNVAI009),last(WCNV.SLCNVAI020)
+                pBftJKeJ	重庆莲花山风电场	GW191-5000	PyxGJzVt	重庆莲花山风电场01号风机	last(WCNV.GWCNVAI037)
+                pBftJKeJ	重庆莲花山风电场	GW191-5000	h6FpljkO	重庆莲花山风电场02号风机	last(WCNV.GWCNVAI037)
+                pBftJKeJ	重庆莲花山风电场	GW191-5000	RvjgwYU8	重庆莲花山风电场03号风机	last(WCNV.GWCNVAI037)
+                pBftJKeJ	重庆莲花山风电场	GW191-5000	Aiyakdvi	重庆莲花山风电场04号风机	last(WCNV.GWCNVAI037)
+                pBftJKeJ	重庆莲花山风电场	GW191-5000	q4SzM6ML	重庆莲花山风电场05号风机	last(WCNV.GWCNVAI037)
+                pBftJKeJ	重庆莲花山风电场	GW191-5000	TGSurNbB	重庆莲花山风电场06号风机	last(WCNV.GWCNVAI037)
+                pBftJKeJ	重庆莲花山风电场	GW191-5000	rejStJtr	重庆莲花山风电场07号风机	last(WCNV.GWCNVAI037)
+                pBftJKeJ	重庆莲花山风电场	GW191-5000	pf6460xw	重庆莲花山风电场08号风机	last(WCNV.GWCNVAI037)
+                pBftJKeJ	重庆莲花山风电场	GW191-5000	5My3yHDj	重庆莲花山风电场09号风机	last(WCNV.GWCNVAI037)
+                pBftJKeJ	重庆莲花山风电场	GW191-5000	hiZLhwUy	重庆莲花山风电场10号风机	last(WCNV.GWCNVAI037)
+                aBuq2wUD	陕西营盘风电场	MY3.0se-145	IQFvbZPY	陕西营盘风电场01号风机	last(WCNV.MYCNVAI308)
+                aBuq2wUD	陕西营盘风电场	MY3.0se-145	M3hP67p6	陕西营盘风电场02号风机	last(WCNV.MYCNVAI308)
+                aBuq2wUD	陕西营盘风电场	MY3.0se-145	HhqmSBn5	陕西营盘风电场03号风机	last(WCNV.MYCNVAI308)
+                aBuq2wUD	陕西营盘风电场	MY3.0se-145	kxpnvAAu	陕西营盘风电场04号风机	last(WCNV.MYCNVAI308)
+                aBuq2wUD	陕西营盘风电场	MY3.0se-145	wKFo9jbV	陕西营盘风电场05号风机	last(WCNV.MYCNVAI308)
+                aBuq2wUD	陕西营盘风电场	MY3.0se-145	nHYkA7Ms	陕西营盘风电场06号风机	last(WCNV.MYCNVAI308)
+                aBuq2wUD	陕西营盘风电场	MY3.0se-145	oRunNVd4	陕西营盘风电场07号风机	last(WCNV.MYCNVAI308)
+                aBuq2wUD	陕西营盘风电场	MY3.0se-145	H7ry33Yj	陕西营盘风电场08号风机	last(WCNV.MYCNVAI308)
+                aBuq2wUD	陕西营盘风电场	MY3.0se-145	XazAGRfg	陕西营盘风电场09号风机	last(WCNV.MYCNVAI308)
+                aBuq2wUD	陕西营盘风电场	MY3.0se-145	3aTQO6H2	陕西营盘风电场10号风机	last(WCNV.MYCNVAI308)
+                aBuq2wUD	陕西营盘风电场	MY3.0se-145	sF4kh2zD	陕西营盘风电场11号风机	last(WCNV.MYCNVAI308)
+                aBuq2wUD	陕西营盘风电场	MY3.0se-145	jEKj58BQ	陕西营盘风电场12号风机	last(WCNV.MYCNVAI308)
+                aBuq2wUD	陕西营盘风电场	MY3.0se-145	wVQnukSY	陕西营盘风电场13号风机	last(WCNV.MYCNVAI308)
+                aBuq2wUD	陕西营盘风电场	MY3.0se-145	Gl1ZP29Z	陕西营盘风电场14号风机	last(WCNV.MYCNVAI308)
+                aBuq2wUD	陕西营盘风电场	MY3.0se-145	saSEB8vM	陕西营盘风电场15号风机	last(WCNV.MYCNVAI308)
+                aBuq2wUD	陕西营盘风电场	MY3.0se-145	dDoQUiN1	陕西营盘风电场16号风机	last(WCNV.MYCNVAI308)
+                PNKFows2	黑龙江太平风电场	SL1500-82	n5fPny3q	黑龙江太平风电场34号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI13),last(WCNV.SLCNVAI11)
+                PNKFows2	黑龙江太平风电场	SL1500-82	UwflVxnV	黑龙江太平风电场35号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI13),last(WCNV.SLCNVAI11)
+                PNKFows2	黑龙江太平风电场	SL1500-82	wsOFYI1n	黑龙江太平风电场36号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI13),last(WCNV.SLCNVAI11)
+                PNKFows2	黑龙江太平风电场	SL1500-82	UK492PcD	黑龙江太平风电场41号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI13),last(WCNV.SLCNVAI11)
+                PNKFows2	黑龙江太平风电场	SL1500-82	pyXXuhrA	黑龙江太平风电场44号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI13),last(WCNV.SLCNVAI11)
+                PNKFows2	黑龙江太平风电场	SL1500-82	PefxOj6h	黑龙江太平风电场45号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI13),last(WCNV.SLCNVAI11)
+                PNKFows2	黑龙江太平风电场	SL1500-82	3E8KYtCF	黑龙江太平风电场46号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI13),last(WCNV.SLCNVAI11)
+                PNKFows2	黑龙江太平风电场	SL1500-82	41SlD2Cz	黑龙江太平风电场47号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI13),last(WCNV.SLCNVAI11)
+                PNKFows2	黑龙江太平风电场	SL1500-82	MTgjyBT9	黑龙江太平风电场48号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI13),last(WCNV.SLCNVAI11)
+                PNKFows2	黑龙江太平风电场	SL1500-82	CX92eV3u	黑龙江太平风电场49号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI13),last(WCNV.SLCNVAI11)
+                PNKFows2	黑龙江太平风电场	SL1500-82	52RjCfHy	黑龙江太平风电场50号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI13),last(WCNV.SLCNVAI11)
+                PNKFows2	黑龙江太平风电场	SL1500-82	s2UdsI32	黑龙江太平风电场53号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI13),last(WCNV.SLCNVAI11)
+                PNKFows2	黑龙江太平风电场	SL1500-82	bMEP5Tkj	黑龙江太平风电场54号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI13),last(WCNV.SLCNVAI11)
+                PNKFows2	黑龙江太平风电场	SL1500-82	Erm8sXPj	黑龙江太平风电场57号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI13),last(WCNV.SLCNVAI11)
+                PNKFows2	黑龙江太平风电场	SL1500-82	pznwWLCY	黑龙江太平风电场58号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI13),last(WCNV.SLCNVAI11)
+                PNKFows2	黑龙江太平风电场	SL1500-82	JMNfaWpH	黑龙江太平风电场60号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI13),last(WCNV.SLCNVAI11)
+                PNKFows2	黑龙江太平风电场	SL1500-82	HHidXSHk	黑龙江太平风电场61号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI13),last(WCNV.SLCNVAI11)
+                PNKFows2	黑龙江太平风电场	SL1500-82	Wk9I31RB	黑龙江太平风电场62号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI13),last(WCNV.SLCNVAI11)
+                PNKFows2	黑龙江太平风电场	SL1500-82	Ne8MPuBU	黑龙江太平风电场63号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI13),last(WCNV.SLCNVAI11)
+                PNKFows2	黑龙江太平风电场	SL1500-82	VM4MvEaf	黑龙江太平风电场64号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI13),last(WCNV.SLCNVAI11)
+                PNKFows2	黑龙江太平风电场	SL1500-82	eWFNmLTI	黑龙江太平风电场65号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI13),last(WCNV.SLCNVAI11)
+                PNKFows2	黑龙江太平风电场	SL1500-82	tlmoUo01	黑龙江太平风电场66号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI13),last(WCNV.SLCNVAI11)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	dJ1W64kF	黑龙江桦川风电场01号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	AHgrAbVE	黑龙江桦川风电场02号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	8Jdr6b65	黑龙江桦川风电场03号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	UtmzTJk9	黑龙江桦川风电场04号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	Vg24xugq	黑龙江桦川风电场05号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	nrpkGquA	黑龙江桦川风电场06号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	9pfoJ4ll	黑龙江桦川风电场07号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	vDMnD2RY	黑龙江桦川风电场08号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	dLDLX8tr	黑龙江桦川风电场09号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	lubIaKS6	黑龙江桦川风电场10号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	GZssTrFQ	黑龙江桦川风电场11号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	R0v0DUBG	黑龙江桦川风电场12号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	iEqfLXtT	黑龙江桦川风电场13号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	dW4DGIVf	黑龙江桦川风电场14号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	yAczNaFz	黑龙江桦川风电场15号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	fczxnGeu	黑龙江桦川风电场16号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	0iffMVPY	黑龙江桦川风电场17号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	hWCHJyV9	黑龙江桦川风电场18号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	n9gLizXN	黑龙江桦川风电场19号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	gbMwb74h	黑龙江桦川风电场20号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	btNqNtq2	黑龙江桦川风电场21号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	delUppby	黑龙江桦川风电场22号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	M72kx6v8	黑龙江桦川风电场23号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	OgdaaDFq	黑龙江桦川风电场24号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	qbU3qSau	黑龙江桦川风电场25号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	6vMnYGYI	黑龙江桦川风电场26号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	9KgVmruD	黑龙江桦川风电场27号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	hYvYu0Rg	黑龙江桦川风电场28号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	WuK1Cukw	黑龙江桦川风电场29号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	L94v6O0C	黑龙江桦川风电场30号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	HBLZUmwF	黑龙江桦川风电场31号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	DRfCDwTq	黑龙江桦川风电场32号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                6AfecpKP	黑龙江桦川风电场	SL1500-82	O6OotKCM	黑龙江桦川风电场33号风机	last(WCNV.SLCNVAI004),last(WCNV.SLCNVAI005)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	hubbAPbR	黑龙江碾子山风电场01号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	R7IpjkJs	黑龙江碾子山风电场02号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	1k7PibLt	黑龙江碾子山风电场03号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	RIpfas37	黑龙江碾子山风电场04号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	gSu4sGnr	黑龙江碾子山风电场05号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	6Kv9aQuY	黑龙江碾子山风电场06号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	YbZ9XwLA	黑龙江碾子山风电场07号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	SRIuCutZ	黑龙江碾子山风电场08号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	jRaRC4aV	黑龙江碾子山风电场09号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	NFjR59Iu	黑龙江碾子山风电场10号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	ajsHuTp6	黑龙江碾子山风电场11号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	k12bJJV4	黑龙江碾子山风电场12号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	LjGZY3uB	黑龙江碾子山风电场13号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	QXIk9YKP	黑龙江碾子山风电场14号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	dxKbOzeB	黑龙江碾子山风电场15号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	jbiHtmEn	黑龙江碾子山风电场16号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	JdbzrLUy	黑龙江碾子山风电场17号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	QL1z6phV	黑龙江碾子山风电场18号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	2U8z6DEL	黑龙江碾子山风电场19号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	fVROBgVJ	黑龙江碾子山风电场20号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	MGwbearE	黑龙江碾子山风电场21号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	bWZfv9ei	黑龙江碾子山风电场22号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	HElc61qT	黑龙江碾子山风电场23号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	sKQSJ1aS	黑龙江碾子山风电场24号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	EftmbzL9	黑龙江碾子山风电场25号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	5zAjX6Ee	黑龙江碾子山风电场26号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	SMHeJ0Gl	黑龙江碾子山风电场27号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	liqdtBL1	黑龙江碾子山风电场28号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	ZcKhe7kQ	黑龙江碾子山风电场29号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	OTOJoxUl	黑龙江碾子山风电场30号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	nl71gzKr	黑龙江碾子山风电场31号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	RUFA8Jfh	黑龙江碾子山风电场32号风机	last(WCNV.SLCNVAI10054)
+                UvhcydNX	黑龙江碾子山风电场	SL1500-82	2jBj8Vhz	黑龙江碾子山风电场33号风机	last(WCNV.SLCNVAI10054)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	bXzi2WJA	黑龙江虎峰岭风电场04号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	NAx6gRn1	黑龙江虎峰岭风电场05号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	OgSKw9dK	黑龙江虎峰岭风电场06号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	ufhu38T4	黑龙江虎峰岭风电场07号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	fkPkXgwm	黑龙江虎峰岭风电场08号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	yWvOMFu3	黑龙江虎峰岭风电场09号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	r6fT6cDs	黑龙江虎峰岭风电场10号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	4DfJg1uX	黑龙江虎峰岭风电场11号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	xGf6i02s	黑龙江虎峰岭风电场12号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	P8Lw77sk	黑龙江虎峰岭风电场13号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	hqPwIq8P	黑龙江虎峰岭风电场14号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	XvJW47LO	黑龙江虎峰岭风电场15号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	6OZGT8q6	黑龙江虎峰岭风电场16号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	lgAhWegb	黑龙江虎峰岭风电场17号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	wIP3UiTu	黑龙江虎峰岭风电场18号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	NPTyMe9O	黑龙江虎峰岭风电场19号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	uqd1Up8w	黑龙江虎峰岭风电场20号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	i1orud0N	黑龙江虎峰岭风电场21号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	YDNVMJqf	黑龙江虎峰岭风电场22号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	aAkK4LcR	黑龙江虎峰岭风电场23号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	XRKMfmFb	黑龙江虎峰岭风电场24号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	AmeaA1lg	黑龙江虎峰岭风电场25号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	9A4K05Si	黑龙江虎峰岭风电场26号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	lkH1r1Bf	黑龙江虎峰岭风电场27号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	iwGXnI0Y	黑龙江虎峰岭风电场28号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	yBoLUwFN	黑龙江虎峰岭风电场29号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	X77ScSmh	黑龙江虎峰岭风电场30号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	jPS2ZYtd	黑龙江虎峰岭风电场31号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	7pvUiAUx	黑龙江虎峰岭风电场32号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	CwffnA2K	黑龙江虎峰岭风电场33号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	64tKtsaT	黑龙江虎峰岭风电场34号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	8bpTtgi5	黑龙江虎峰岭风电场35号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	NZkC47bA	黑龙江虎峰岭风电场36号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	6cmpHMRx	黑龙江虎峰岭风电场37号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	CpN40FW9	黑龙江虎峰岭风电场38号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	8q4jJNss	黑龙江虎峰岭风电场39号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	HuN53P2k	黑龙江虎峰岭风电场40号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	a1VVNo3r	黑龙江虎峰岭风电场41号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	Lkt52B63	黑龙江虎峰岭风电场42号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	wRuwYMOh	黑龙江虎峰岭风电场43号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	rkcAKF8Y	黑龙江虎峰岭风电场44号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	DkKEIYSI	黑龙江虎峰岭风电场45号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	2gyMnvYY	黑龙江虎峰岭风电场46号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	X70Vhzp8	黑龙江虎峰岭风电场47号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	sLnlYnFZ	黑龙江虎峰岭风电场48号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	3NUxjHdX	黑龙江虎峰岭风电场49号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	cP6SXlpp	黑龙江虎峰岭风电场50号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	oGgr40EJ	黑龙江虎峰岭风电场51号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	9ga2nX0I	黑龙江虎峰岭风电场52号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	vsqDHE2k	黑龙江虎峰岭风电场53号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	HISQVWoJ	黑龙江虎峰岭风电场54号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	M9QlxGy1	黑龙江虎峰岭风电场55号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	dBwxvL49	黑龙江虎峰岭风电场56号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	TzFq87pe	黑龙江虎峰岭风电场57号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	a12HQ9b0	黑龙江虎峰岭风电场58号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	c6Twdft0	黑龙江虎峰岭风电场59号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	Tdq9IUoS	黑龙江虎峰岭风电场60号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	OmkPZyVK	黑龙江虎峰岭风电场61号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	1DklxUzZ	黑龙江虎峰岭风电场62号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                h3pdAW7k	黑龙江虎峰岭风电场	SL1500-82	mP9FaOG8	黑龙江虎峰岭风电场63号风机	last(WCNV.SLCNVAI005),last(WCNV.SLCNVAI004)
+                """;
+
+        String cedianCnStr = """
+                0M6OwnLd_SL1500-82_WCNV.SLCNVAI020	变频器故障
+                0M6OwnLd_SL1500-82_WCNV.SLCNVAI009	变流器故障代码状态
+                6AfecpKP_SL1500-82_WCNV.SLCNVAI004	变频器当前故障1
+                6AfecpKP_SL1500-82_WCNV.SLCNVAI005	变频器当前故障2
+                J1k1SKg7_SL1500-82_WCNV.SLCNVAI025	变频器故障时刻主控故障码
+                PNKFows2_SL1500-82_WCNV.SLCNVAI11	变频器主故障
+                PNKFows2_SL1500-82_WCNV.SLCNVAI13	变频器故障时刻主控故障码
+                PNKFows2_SL1500-82_WCNV.SLCNVAI004	变频器当前故障1
+                PNKFows2_SL1500-82_WCNV.SLCNVAI005	变频器当前故障2
+                UvhcydNX_SL1500-82_WCNV.SLCNVAI10054	变频器故障
+                YgDkeKwF_SL1500-82_WCNV.SLCNVAI025	变频器故障时刻主控故障码
+                aBuq2wUD_MY3.0se-145_WCNV.MYCNVAI308	变流器故障
+                h3pdAW7k_SL1500-82_WCNV.SLCNVAI004	变频器当前故障1
+                h3pdAW7k_SL1500-82_WCNV.SLCNVAI005	变频器当前故障2
+                nTMWNLRl_MY5.2se-166_WCNV.CNVAI127	变流器1故障
+                nTMWNLRl_MY5.2se-166_WCNV.CNVAI363	变流器2故障
+                pBftJKeJ_GW191-5000_WCNV.GWCNVAI037	变流器主故障
+                                                """;
+
+        String plcVersionStr = """
+                AHTG-YJNY01	zNY3z6N2,ZrpALKKs,Qn0CxFZZ,S1rfjfGf,SJPB1v7t,tkWNRA4F,UZrGIM0C,wMw892jj,XXhu08y8,7roZFkrp,9vmNX703,AbY5DS5k,AdPPd8OY,BNMZJ1Jf,FW4HsMBm,HpgQQq2h,ioUYNeLf,IQvDPssy,Kg1PXj1u
+                CQHS-YJNY01	EOJgqLL1,gIlQR5mV,gn4kYhHj,p06uRF8j,qV1263cq
+                CQLHS-JFKJ01	pf6460xw,PyxGJzVt,q4SzM6ML,rejStJtr,RvjgwYU8,TGSurNbB,h6FpljkO,hiZLhwUy,5My3yHDj,Aiyakdvi
+                DT-DF09	0C1NfwlT,3gS2HsLE,6C6s6ENR,8mWka2iN,8nGHiJXG,AF35JjD2,ahmuqHiE,aIzABQwZ,AQfD5NKd,bpIZonyF,qlYkBb6l,qxY1pXZX,rf4sp5uM,Rhy1S8fo,RK18D2hz,RkIiQ2PU,T5iUtDP6,T5SGT76A,tim736Sr,UoTankkT,UpXvyX8l,uTCIW3iq,VGp4kHJO,We2HT1Gh,wLchnN4X,Xo5uq6R8,xQZsVkKj,y6wxhjlh,G5XyRlZo,hBj4cbiI,Hf1gORK0,hPKUpcBY,hVFwdtDX,iN3id0eA,INzGrep2,JRzgo58L,jSLL86Gh,Kgag6T7U,lomLn9vx,LQHfL5D4
+                DT-DF17	f3Hmd3LH,fwRwsehR,grOteo99,IeZGJ4yv,mUfyfxsU,1TJA6V6F,5IJVM4Zw,A0PGc4lL,CpWmiiAS,czJLDPkC,de3Jesxe,dGcaDtqQ,YhyzGhCn,zAeIwKuw,P7SJ3pnc,qm3HTT31,Xjgdiyam
+                DT-DF25	ovPH4hMi,OZUenJh5,p4h3W5kd,t9mGs2JH,tw3Gd27n,UJcGKu7w,v4RnBOdh,W2BuS2vL,WcDBTBwd,xtqYfENH,0Jxx73DP,0OjAf73h,4hm1OSB8,50Jv8jcD,5nMo7lzm,94GnNe90,9ARGM3hC,AEi7a2ZL,bNg0kmWd,Cnnl4ovB,eiyJUFZF,Ejg1Uvhk,EMAFPVmE,fe0lto3b,gtVWUZ9q,If2M6l5r,izfjpAAH,J5GRLgIp,jDEL8dyo,jHO2WBWf,jm8kUL6Q,Kdcsm17B,Kj9BHITJ,kp0Gd5iq,lDBLmvlH,LElAULhl,lsuneqXj,MBMJIHHB,mPrrIIOS,MVRDQv9Y,nUj6jDgw,yuXdIuFo,zdspOX9z,ZKmb3Jzd
+                DT-DF29	YW84q8hg,0e3oUfRs,1vp8J247,2u1Uj4L4,2Xp98I6S,3g8XWuRY,APn2kjKB,bRYpgGdw,bv2Pg8uV,cFgPM93C,CVNNuWgE,DHcwqmRf,dr4rgngx,OkMK1YEZ,OxRnEisa,pq8eUMmr,qQPEwFoM,RilJ6xqQ,scD1NlUw,ucHxPHMq,v4gAZ1ac,yAK7gwxc,Flq6O3mV,GM0DbpfU,i1pISXFP,j9Fcizu8,jJhhiT49,JvVn7GGY,kSaUzD6G,ktjQKEmx,mFW1PSjj,nTDLBGPL,oCgMlAfp
+                DT-DF32	FVm3TXLa,huTCvovs,J1YJxD4N,k8Ik6LiA,2JisoSs2,8UD4YEDQ,9g4a3MIS,AQWZJG1k,p1z4HINU,PKhuehcc,PRACBf4w,rZvT9Gc8,ujniUp7u,wWnmtavo
+                DT-DF35	Ps07Hxtt,pw1a6hBG,PydSJ5dP,sijK9xbc,SxtpwLuE,tGBopa5x,tt0B0zT8,umsfeK54,WhNtuxqO,XtrihSyr,EWEn4KcX,eZFMX9j6,GtIfWZb3,HGXwZPB4,ISjEyBmE,KJEAi8SG,KnaqkGGV,MgbVZQVA,nBeOsqXn,Ny5ft1xg,O1n6aYea,O2eeTkHD,YnftdvVa,YyHx1w3f,zMAqL0lf,08bVXNaQ,0p39n9tZ,2T0ma9K2,72XJFakL,7dZpzIgh,AAJgWcVh,b7r0LA4X,d4uFPkda
+                DT-DF36	0OGEsZtX,1JqFTNfY,2cntKljE,3jsCElyg,3Yy3NXzB,436cyzkg,4rfWBTbK,6bYTeLLx,89PgMZyC,8oNbj3JF,8qrzvDzE,9OkEYuhf,9vnEz3OM,aNE9rRIx,b3eUU2HC,B6oAMEkg,B7FLrnCo,bdgQgBZo,BDJe6BaT,bl9VwPRP,bLsojeHZ,BTj9fGjN,BZxxFy14,cos7NpAO,CoWcEWwk,CqvVUjSz,cVZwUhRQ,cw3wvDC3,dBf37at7,EX9lFrWH,fChwGaMn,fXQD9owy,FZsjCu6r,g05vrBnP,G4IC4Uj7,g5bwieK4,gsesFnvK,gWaHxDAh,H97Y3TgP,hC5c9EEV,hF3hEOgv,HSWoAolD,hZcUNuE4,hZhEwQjs,IspPSEbQ,iXrRgpkD,iZaxC0FX,JQqJrMl2,KTpmbgf4,Lb3yDlIo,LyZDXPMP,Mf6g0UT7,Mv9Sl7DI,n2615Z9d,NOBo8SSq,NVwnQyES,OIqL8IrC,oR1D74lx,owNCrb7r,oxhYQkiR,oXUK1CiI,PaFZDcyN,pEJ49nww,PltZqvhC,psldSHXq,q1rSQUoU,Q2FrwHyK,qGREhbiF,Ql0tQWSk,QPgeT8op,QuCS0Z8o,RgEd2seR,rjxGQwdy,Rrk2q5li,s7sn52VK,SIFks4WA,TB5IJGrh,tnwKmrPQ,tP3hPaO3,uCFzcQoW,UjlQtd19,ulEGcDji,UoPnTpAj,VjRPGAPq,vx921y7x,waNDBCvA,WNvqAKdt,wY2iL7DD,x0PqO0uI,x9Lk6o89,xwoFTY1i,xxNY4Z5g,Y2uSsbVL,y5vAjt35,y7mO8gb0,yTgOgE94,yVszxHgF,zwNPLJrb,ZZwM0KsI
+                DT-DF37	FcvZjsRK,gzDhijGK,aMUOMbIK,d9qCDFpN,EdViPZ8Q,pglx5FKp,Tpd7L2Eh,TRIF6Civ
+                DT-DF42	ORUIpSVg,pabnhdET,qekm5gut,qKpV08v9,R3sMabg8,rGAnrBVL,sng7mJB9,u73LMUTe,uJTLHRtG,VmYgu0HA,vtlVKOZn,vYn6Z4Or,wt7FNhZR,YbDNyFAK,gbxDgGXz,hvTZ5WI9,kB3vRW2b,Kxo4pOH5,l4kqFDgU,LgMDaHQs,Lo2BosTT,MrGjjSdb,YPlHhUlm,Yrc3wDvp,ZZIA4rpK,04gjSg1b,0XL99rE8,24amXYMM,4pOr2Aq7,5MOX6dlm,72cCQLAm,7AlZQcb5,9EbqE7bp,aXvhD1MX,c0CZ5ZUw,c0J1HYBn,cd3MnLQr,DIuD7jBn
+                DT-DF44	2h1PAAqe,8BYWj4J9,a69J3JVM,ejpVjVhO,G3Sw5H5F,GI8LZHdm,GxsGuI5j,ie48Qwe0,K3FJsZN6,nE5Q2GKG,UBGQGTt7,wh593Ekc,whJuKJfc,yjxc0nxR
+                DT-DF47	zWhy9mJk,eynlCi1y,gzcuZtgY,lnebKx6x,nSSGjeUU,O5zPKu4P,0igcgwtC,4Qa36bPk,8Q6pl64c,aFeyBFLb,CObOdNdn,ebF3yfxu,RE2JVCCM,VkRBr17I
+                DT-DF49	ol1HGAw3,wtVWnPgx,2SUlbVEC
+                DT-GMS01	42TimJFx,4sAbpbif,67OQBYDA,6BfUdyFH,7HMgbiRM,8NstT58n,8zJq6nxl,a0nEeq0R,aLdylVh6,bcAINyza,CMxZaZwl,Dn3b6rqV,dq8TJpKN,FDvcobNA,fVZFIqXM,KBFVig5c,kdq5Sh2K,lqRiBqTV,mggqqiY1,mWYnDxlX,NDj7JgAa,yjnQcFSc,yVZN3TmB,pSvtLVv9,qsfsxiZU,rKZxXkb7,rSXn2ANE,tDayMFH9,TMVZTQEv,ttC5ZLhR,tv9j40zc,vN1VVZAv,Wo5MbWuI,x4YQx4aL,XS29xlXy,xWZL8QP2
+                DT-GW01	okEF3ceA,rHBTKi9j,THgMQzzA,TsYwrOkn,u4fSL3QF,Uje1jqxX,UVFaYy8Y,v5hOIx4I,vj8Ry2j8,Vjh6zJMy,W7tKBmZd,x3tADqwJ,xUGlekDA,EzrGKaeP,FChsiF8T,fYrwY5lL,GaSUkjAE,gCtzvq3X,GeDt1PTn,GsSN2jVe,Hk3YwcJ0,iZtDJ1ZP,M13kh0dK,OEX2h3wc,7NUpDYr3,8cmb6YLF,9mUxJqoY,A0N4iAEh,Ap788NeG,bb0mQBLZ,BKhGR6ob,bta8flwl,CNFbzax5,Ze1ww6uF
+                DT-GW02	g0klAclV,he956Bzh,JFbPT7Rv,kfAqeu8u,LP5JFEks,mCvdaVhy,MMZsFf24,nUT7k6b3,O9sZck56,PlOe31xQ,pvNY7wGD,QuLURQQp,UBPumPHy,vAjEooSG,vczPekFw,vNSUKe5a,YBBwULvX,0UXTBu0m,1Aa4trsq,1mPXRYqD,6N1KnXBG,8W9rCOta,azbT0RUs,bkbKalPg,Dfg3dcBG,EmhnQ40J
+                DT-GW04	2kJocz12,2RoszvOo,4IbrHxJY,6Akya7A5,CiNheL0J,DkiyBs0K,guvQwTp6,jq7L9aB0,jVGPwtdT,ka2317Na,KSktIiQ6,LgsJAdDm,LvUA2h3U,YUFsgQuP,qrUfM8Yr,S7is3ZuC,uv3K7Ul5,v6iVL87C,va2OqQdS,wIQEtVAw
+                DT-GW10	OoHITzGt,oWL6tP00,oZJNXKII,pEIF36MT,pg8qxV04,phE3xwqE,Q8OQJhEq,QA1G1FCN,qRwxDeSW,qwpEhQB7,qxTigd0x,ROeKFWDM,RU6a9v89,s0wGxHvs,s7EizCEU,ShQyvVwB,SKGsZRn9,SpDvWvhK,sypXN5Xk,t4sxhaDc,tZVm4Kbq,uoOeL3AB,Uq4yiZof,Ute2LNRk,uV5wCRm3,VQ6bsJP3,VzZAZ8Uu,XASY3a20,XcXETlS5,xH8s9Ils,XKnPK0km,xwll7MwO,YeJxeLfr,EWCU6i2u,EYLaracN,F5JQ2wS7,FdjudlP7,fUBWKKM1,G4QTBBye,GhKAndOI,gTu1kmX1,hfXRIEdS,hG6zk68x,HjrkTxtP,HWKX26CV,IjYZPFbD,Ikrn1BRk,iVBnSTJq,ix98gMEI,Jmp2B04z,jmRj5W9N,jnmXImlq,jsNdl6QM,jwb61g3P,k0JpsLID,Ka4UAc3N,kO1qhwRV,KOYdXFx5,KSd4sFZL,kW9yHdtc,lhMUpqh0,Lnt4nUmt,lQV84NO3,LSk2cojr,MBe77Txi,mMKMRJ3Z,mqsrCxDe,mz5Gc6ev,N4CqkumQ,NjGS3rgu,NR1EromA,NtLtjcuB,nycWZ8CP,o8pU06KP,OeXFh5WK,oHAi47CK,0LWxY7pj,0QSDacrk,0WyVbN3B,2elQ1Avx,2fkcmRxp,2p6sn1mR,34LmarhS,354ZPfgT,368CWN4P,37lvzTLR,3plPxoPy,46tPjgvh,5VVQroyg,7CtJndqe,7PztZUfr,AS6Vv1IO,AxKfV3ZR,B6xds0wM,BD9KZY0Z,BgvVYxBv,bnFrFdvA,BO6y1GsC,BQvvqZnp,BUM0Mwox,bvIrsaun,c5NeYYMz,cNz6Jc1X,CQoOlYKZ,CZboZ2NT,D8JwInGu,D9ljtTfX,DAiRSWOM,DkuS6Ykx,ymGZlAYG,Z8ubwL8V,zuPSNrXu
+                DT-GW23	FHTWkENh,GQEOHVCl,J8Zg0TZf,JGkYq9HE,klzAulMs,koVPMuPL,naFIQW4d,NeZu7j0l,r9atPb0t,rKld4Jgr,vAtCbkHF,2dTAZ2cT,2JBnqcde,5e5pS8UL,5IAnZiR1,9aJnlGaF,9kSvewOz,aAJELTwC,bsIF7HJD
+                DT-GW28	2AwQSd0N,3H5NlMOu,6450KFD6,ASdpLagd,BkBHH37R,BsGZw3LY,CbctHnlN,dKpmT5Ks,encGs8j7,FGV63ckj,gz8nS5f9,hnnj8T2F,IgH3ZPLR,MR3uOCRW,MrrzFAk7,z3ByFD6j,ZdREmtKM,u5xfFdl0,vehER1Ml,w5mW8LVh
+                DT-GW29	rj0Cll7B,rkud3gdb,VGjsD4ym,VIATpl7t,vUFQAiwt,XhStnWl3,fnemRbEK,Ik48rxjU,J5sBeD2O,jQxyRmm2,jZN2mgjm,kNrY0EZ9,lHB0Y8wF,lkUmbczj,Ms6Ti2hs,mtudBF6U,muc2npZd,n0Gcu19s,nIteFALy,NVlwqtSm,2vTgI3sg,3CFhCcHk,3HeWQ3TE,57q9NNnM,5SK8nhBQ,8koP8W7p,9RK2g3Vw,A49GMUdb,AsktV5F0,beK9THyM,D22xhtl7,Dewvdc7K,ehdhEJhP
+                DT-GW30	24bCvYRv,5gnXCIWV,8QJcQQxh,aCnqRXqq,aCp5DaFW,cd9H0oRy,cNIlj2Tc,DI4buroq,dpEpXCul,EHsLxxRX,FWsTnLcG,HBW2RItA,HF4SCXLP,JWAzyM3R,MoAxpyms,oH13raYL,P04jNWWD,PaKGMNvT,Re79s7pA,t3gntIhP,TEDkWdvN,tigat5kS,Tzq2vAGN,uzTwV3OF,VJRdErND,vRfh2vt6,wpUgZv0D,WQzleAN0,XU6HVnKd,zGgjQ8qZ
+                DT-GW32	Z6kQg7iT,fC7fMfmE,H822tYQz,hRCySqn1,JcSJ5C5w,JHKmV3r9,kK086QGu,KzuKBZWH,mktV26EO,NCdGtyFv,nhgRgboQ,nuBwynYF,o7qbm1Ow,1swUlWGj,4W8shqGd,6aUAhZkU,6b0NdCcz,6xuK3sCc,8tLGTT1E,A33BfgUS,B4ZvjwxO,BaNBYBIe,dKNWn7s9,DwOE8pgv,EBZcL7dT,qk69GbyM,quMQRJK8,qWP0zDyt,rdkplEZz,RHemvegQ,rqfrhLHd,sAJ6DL2v,ScXibKxA,tbkSCUNc,Tf8DzPsi,tWmqBYXV,uj1sgmY9,VofVaWA5,xV82L24K,xyBilYWB
+                DT-GW37	OM90SHva,owXlw1u7,p09D5jfh,P4ji3dXV,pbIak10g,PCCtzu9U,pEmbL5ur,PeP5kins,PoVNU7fX,poWzMlTU,pYUeLYsU,q1MsYhCN,QAYAk4UN,qjHq9DMZ,QoL9aM9U,r2UKBJLx,rofjDzVo,RpjJW6KD,RrPdXT16,rVKwvqpj,RXjfAGzs,SA6aPFaE,SHrgcxDQ,SqvLz1sX,SzIMA4MS,SzW7iQVb,TdWvMc8R,tECvGDzP,tIXLd9G6,tq6XVBVr,TtCqHI4G,TvgYBbPZ,UdFdzt1v,Unlym4lM,UQqKnYO4,UXHRohx5,V2xOJUXh,v6M1EsBp,Vae0aRD3,veJ7XETh,Vl0Y533h,Vqf7psEn,W8DDeZpT,WDNvEZSZ,wQMfRij8,x4jn94YE,xEA93A4a,xHjvzZL0,xJCckwKe,Xoc9P8sS,XrxRqWrD,xUgBA7Kq,Y1gho9Xw,ervV8tmB,EUwMGKUm,FCzsmtXS,FfkosheS,FgQC1JY7,fkTTMwgy,GBnPECNm,gebRLwYS,gGqTDCkw,GN7A4VsM,GpQ3feRp,GQoumH0g,gTUepINy,GzC2Diyp,hne5oL3Z,Hs8kuxaP,hUaEheVM,IfaN9BI7,ImQonVmE,IPfX64wY,jEz94YEo,jHNdBB3V,Jm2pAdKw,JUhzJgll,K0iOtbvN,kG2G16Qn,KoEfNedL,KYcUif2k,KZVslGc4,lcVmIDOD,LE19jSJ9,lf9ALiML,lkpUOY7k,lN4PiXJB,lVJaz4q8,LWyeOwzK,lYPeawNB,lYyVLUAi,m2c1KmQg,MDrnsdoc,mG9e7ET1,mIjqkeRs,mtddsCLK,MTOWroU4,MYLteEAJ,ng1icbN9,nh4NKXl0,OHxjAYN6,yZYeBGHx,ZQaSGJ2k,zxjM6Qs2,0mMDgi89,0or60qBG,3OvUsOGB,4t2UNNrq,4wFt3QjB,4ZwdJFjw,53ZXUJbG,5gnlQrc8,68FNVxfU,78JxvMy
+                DT-GW38	1h5yn1cf,1Mz0znvH,2DhYZUUI,2MwEJFcD,3J77lAVx,66p4LdCn,aQneeKVo,cK6MWjcU,drc8dSiL,e1nbP8WE,eFvAxGFu,FD3zaCPR,FipSNHg9,HawQUFfh,HqswCb2H,iM3nLpwz,j70FJEpX,KJK7MD8P,MMcs5Xmn,N87CWM3m,NJOAF2pl,OE9FGdW7,OOFfDYqc,PBrX1Hpa,qOx9nurx,QrC50tS7,Qs10oSjx,sDy3Dhh6,vDHozohz,VV1NKeQS,XBBV8KW6,z7qWG32z,ZdXtfSdV
+                DT-GW40	YLOfV8SR,YTjzh0LA,YvVuO9NY,zAoT0toy,zQCwILU5,ZV8h8FtM,ZxpUqfI5,epJ7FBqe,Epo03Prq,Epth5mYS,FMgpZFVR,FMZrpNOd,fXrTRTPD,gQq5WuYB,h0sSufHB,haCzr4J6,HCPwLGuj,hEL01McJ,HGghcwhy,HMANVyvU,hmbt9j77,HS9MaHxE,HU6PILjJ,HvWAu8m0,IbFlhdU2,IDcrCfBs,k6Qqlru3,kcdsRLWQ,KEkh29Pf,kwNnNuUb,kzlsEaTH,LANrD1fX,LarSEYX2,lbNhM48L,lFLA3LMk,lNrUdRBo,LwXNNJMc,mH8A8n3E,MLtQi7Tx,mSj6RF0Q,NldJF8Te,0NqSgqMB,0NuXt5Zw,2ac3jzNm,2Hi3yBb2,2wyNje9q,47OxO6ji,5MvpwDJZ,62srdnzY,7qT6cHW1,7rhkAYCg,82RrlY0C,8a8GqIXW,8aygIiUV,8cRhHk0G,8fi54tT8,8G47m4k3,8gJMolFy,8HjRMoDZ,8xLRbGgr,ABeFWS84,ABk4pzG5,AIdYbUbt,aKBHGtdz,Ap5XoBKb,AQLcyzOX,aT1lp3Rl,B5awdDus,BlMzZCG3,BO0wIA6k,BqzkfPCP,C6hRu7vT,CFSRne2R,cILKJQkg,ciPmXTKa,d2eupOhc,d6QsrsAg,d8q1A6wJ,daMa6vSA,DctFWk9R,dOp82bTV,DWUzhC3w,DxL0a6FX,E2VyJlLy,e6ZGkcM4,E88bGkka,EAFugQEX,ekEsi4Vl,oVGGP3z6,p0SJeuAD,p7NEX2lD,puwz1Fxo,pZrfpOp8,qCz1PTrf,QoSWbgN0,quPWA0Qr,r3cZImtu,RUlBy4nV,ryvTyGOI,s5rKGsp9,SfgNKRO1,sNMCrKiw,t2FGlEZb,TbkEB8jb,tg4PxzJG,th82J9so,Tn0VWfZL,TsmE4EKv,U1WGQve2,uhkd3ajf,UJHXQs5a,ujQLfCBM,uK0CIaZA,UOOH0f5
+                DT-HC07	PepRZY0W,qCRzjorF,QkZaEN0S,RzZu8s43,Se8HEB0i,SO7LNkgy,JoMGDxPX,laVKRq5h,meV0B5Dm,mUVqLL02,NIcd9vpZ,09pv3tnk,158VWqmr,4xEocvKh,6LEkaVuG,77N75vNV,9aZSQbRq,arkzVTOn,bRVOlURD,byoYa21L,Ea9D3wJo
+                DT-HC09	4q0L8GTj,4zZ6BPlD,7HawMMlJ,OTpEP9J0,OyDZ2Btc,R66Kt04z,rR02cDyU,SLxLCtWs,Vl2QiOMC,zB5zMiWr,zNsvAEhe,f3AAqIAe,HIjdn5qk,NKeavoas,OEZCMT0b,oH6Soa5s
+                DT-HC44	EPtGncLn,eQb1K468,EveKrdNG,EXNv9Ch7,f1hsuu6w,FAW8K2C9,FBcZCvLE,fCcJSDg3,FIkiJ3pD,fS6Qki6M,FWxUrO6B,FXIw91o3,gAimPZm8,GcHYsM4m,GDfmLWvp,Ge66wIPa,Ge86kkvp,gf06rr9i,GfhEHfGr,ghEowhgF,ghqTrhkD,GjyCAtZ4,gqcMllSI,grrmcfTJ,GwcGoFmY,gxpMk9zk,gxpoDeA5,ha5Mwxxe,HAzWnwXf,Hb3Wo7bd,HDooO2KF,HdwzroRO,HM1WBjjr,Hn9djY3M,HnuXuyZk,i3wmUUvp,iAZJnuVs,IBNS9qEt,IiK6IWUi,iscigydW,Itq0RkIQ,iuVfPRZI,iVQybm6W,J8Dh5yeQ,j9rKCME9,JAySAcDn,jbd8s5iU,jdYV1uCZ,jFLHzsyb,jjgchvC9,jjhvIVRQ,jO8IuKTT,JoPHJA9c,JQPZkaeD,JXZlzG4w,JY0CbgHh,JZjPgGk4,K2PVYfe7,k4qHTGAA,k6KqnMIW,kcTyw95X,KDWWVkY3,KknNpcXn,kpgnqgc2,kRliKW02,KwHFyOqG,l7nAzN6Z,lIHUw9Ty,LJ7iI3Om,LJghshhk,llYas8Cn,LvqlkILs,LYShOrgB,m8dL0QLV,MC9D9SB7,McQJ439y,mDwpxVf5,MmzMYOnU,NBXKDFPn,nCUO3pfx,NhyJW2w1,NKG6LQDM,NpEQwh7D,nqlSnn2F,NU6xPJnk,nxHpdawH,nz4SAMPz,o3fkauA2,obmt2f3g,oeIWeyeO,OMA1R04b,OmyW6SSu,Oqyt2mLP,p3ea2nyE,p4bFwnGc,PCxmE9jE,pjIp874x,Plctto6W,PlVeQEYt,PO0noFJf,PquCsvBg,pSNETpUx,PZFmU7KS,Q5wn53eN,QaSrkdfQ,QCgsRozA,QdTryZ6T,QEpbPqRG,QGgqkcAx,qGPMNoxU,qmAQQSEl,qT6VbOBV,qtPGJDvx,R0v0oLN
+                DT-HR32	ykJbsayF,ZJQP9nZ3,onwdZLfl,pSY91f7L,qeStveb2,sosBTQxQ,sXbQtUJh,USBvxbdt,wMYWmyTQ,HDZS5Enm,hFfZpAEo,Im9a7unv,mwVkHbCq,MxZ43G6h,nnIM334u,nUT19NCw,ObPyo0Ny,4ypn5JFt,6J5TOBwM,6T59Qhe5,7XWAGBYM,A1ulDYU2,aEEy5xDF,bvpmnffS,Cyi7W4Pd,DNRBXyfv
+                DT-HR33	2aIIRNqH,4fU2m6Qz,7ymFbSXt,9FezdoWi,9M5lckX9,dxCe6fPg,PZZ4Ve6z,qRmc8GDO,R8j4V9Jh,rPtrgtp3,RrFfsLYz,ts8ZeZ85,ubOHZMk7,VN7Xhhxs,xjkYRZns,XXV0slNY,ylJki7Db,yqBdSy7n,zGN2erHa,ZzpLbh0q,F06u37kA,hzdhiWDx,KtkYRcsu,l4q0WQW1,LjPYB9CN,lvQ1Fc9u,oh3F5sKK
+                DT-HR34	lLKhitYL
+                DT-HR35	GFVs8ZFr,HKNRLaZg,sKcxCr7N,XdTcsVG5,7SfI9K0v
+                DT-HR36	0SluX6S4,1EykGuGd,1lRZgalL,2p8xLmLF,4wlMKTB8,7Cul9Rdg,7hLez5ty,86i26lRm,8rzzM9tL,BfPISPGA,Bi1vAYKt,BVHtSRsu,CwtToyTX,DzyvZxBv,EJQSB5iX,P9jeYdMv,QxJqVM2K,rU8keGqY,sJe4T6Ut,TH6ksu02,vGEZ5Jg4,whdHIfko,y47Ke6Jw,f7ISZCNw,FpAIFjGI,GaEs64Ff,hwplWf98,KFirwmM3,kKDMWz94,o9oFxp5k,zOlmavVK,zs5lyA3Y
+                DT-HR37	YmwolVQm,YMXbPEjk,YVr9qiGs,z8A7lLtD,Z9NtG9pc,ZkHI4Fqk,zKJWZy9M,OP1c4gTb,OQ3fL8Kc,oQwnpY6c,OwR85wIf,OZYremL0,pBtlOk8t,PKi8roKq,PXYEsg65,Q4pbp9Qs,QS7AktHS,qSpXQMDd,rA1gQzyE,razAdy2A,rd4GSYyd,RxrXzQR4,s39c15KP,S7fYmsR0,SDS7EAvX,SfmrQvhm,sl5OOifH,ss87L0zW,sxHBMXSC,syogTJFE,t9ZICnYm,TcFIxlMB,tEYf1kli,TgOAIjr0,toZfKHrm,twPBZVVF,uaN7N43w,UZQ3V1YD,VBc7PMXt,vnsKYidD,VPnq2sjF,vVrIh0TF,W9fTqgjA,WCey8GSC,wIRvQoNC,wReQcEke,X3qupQH5,x9NqeY4l,Xm7Lej8Y,xmO2O6ke,XRxluWwS,YdPk6jne,YDu1JYQD,03LGkSzP,1mQDDxyw,1nwBV8RB,1sY5BUVi,1tqL46Xj,3NqIEkK4,3v66IpgV,49g1KmJB,4Rwb2BN1,5fvZVqMy,5hdDfxZk,5jBsg8x5,5OpiCf0R,6E8WpMdw,6Ls7zIbY,7DHSSP6b,87ZeQ8Cx,8c0VKViK,8tX4Hn1L,9CtYp6yR,9eC8MaSO,9O0gYyWv,9pWkiXXZ,a4oqBkFY,a6twckKm,A9l5dVrx,a9OhcZLZ,AaOXwuJH,AeMMo2Fz,AKeGrhtg,BCTlDTCk,BdDxzHWk,bNIsb5Cd,boZlbVs8,CfrkZpQM,cHuf7dkU,CpXNZ0xk,D6QixEay,DaPx24XS,DQbO3wND,dqiZXYEE,dr7hiOjq,e9dNuQNc,EnzWA3En,ex2GKV6U,eZuBXvfN,fGmaaRwv,FmH0SQjd,g1EYlyTz,gBC9WyGa,gmVKGlpm,gsoZashs,GUVofoP5,h4KqSEEb,HAfpIwbf,hDmJPlm5,HhtXqewo,hmIhUyfD,hR28XuAq,IIxZGz4o,ImteNZ6
+                DT-HR38	FEUet5KW,FiL07kUL,gHH6Lnvo,gNQTT9h9,HS8DITcZ,kVJhsgaW,KxeJoCIB,kyr7urbt,N3bs9NzK,n52ra8fW,Op9XthQ0,r5WkhqiO,rzjzOEZ1,szhbQqIo,TjU6g84A,tWJWpYaj,UgJeK7jU,V7LcwaiO,vxn4t9AH,0wA3CvlB,2QpnR3i0,4mNmTvEf,4szDzz1w,6rAXRXH2,91WujfJB,9Ozle2Ce,aEWdnhAK,AMZ32ajx,au0zqZvM,AznrXRjb,bbmWQyrk,BWyGmODi,DZApT3RJ
+                DT-HR39	0DxXz98l,292ItFKH,2ManCUCG,5gewDojj,7gZJlGO1,7hxstN1c,9gz17UYY,aKXnUczJ,B5OC0nHj,Bhd4cLyh,bowkZdSR,BPsxWZ2E,Cgy1G0pX,drjqOMoT,Ehlwv0o7,ei4q1hQ0,ekDTWnEr,EOBhjeJn,eop1mNmq,eSxGpB7W,Fc8A8YvK,fPQ3XCvV,GiPkzWVv,hPA6mNaC,hvTTEou6,IeR0X3Xk,IjcbNnen,iMbQKy9F,jJlIdswT,Jx0L8hQo,jYoGbMDz,JZryRBzM,k36SVPpF,kFzOJSze,KLeXXPzx,kxcKcq5d,kyB3cupn,L2RafQ69,LEm0Opah,LHd7Yhzc,lLHxu613,llpgGNnK,mLs6Htdh,mp5MvuB8,MyZPCxxP,Nb9vsS7m,NLwxG6WW,NsUu6oi1,NUP1a59F,NxPVZE0N,ODyq83sh,ZZpYyJfm,OpfK8ExA,QbwDeSAV,qtpQ0p8W,ro5SFnNX,rR8Eef00,RTiKJsqx,t1XELlBz,T5fhrURC,tfdrzjwR,Uyfjw230,vEOiOdsh,VQ9cqTE4,WMAN84b2,XGOpiknc,xuA5uwdp
+                DT-HR41	omnJ4TAa,Huh3UwUV,Mr1CxLlx,ypcnfD96
+                DT-HR46	zsjOYhLU,zx3bwZ4O,qbbk7OvO,REvMMPzF,uW8YPjVm,xWFGZRr8,Y4Ca4zYo,17Iyse5c,2940psyd,2xpU6Rba,33Yslmf1,4EjogHjZ,4IYBAyBY,6y6ppf57,7VkaJKQn,bEHD3sKw,bpEFpOwh,BPIpiyPa,cppwDLQy,dkPnkUof,EIfzvf3F,EnitSFuw,EWBhM3EO,GKBkZ7ru,ib05FlLS,IEwjTOJl,IRr0XnB4,lcXT3ZsE,LRmBFhFg,m3u4STjD,nMnMqiAY,npmMWaQv,o8OucsFL
+                DT-HR47	h8ZhwfNc,Iu2wD6vo,jQpFVJhJ,JYE8onr9,KdrYaOae,kvyqPodz,kwnJYylu,mdv4eqPf,mV3IwrkV,NpcEZw6d,oFjPGp4D,oRyIv7h8,RsoPBzO5,SvzaVHZM,t2EEPXpR,tvXkJVLC,vbeS7jBT,XOZymO51,yAwISRCP,YGULYHXn,07EXqE3I,3nmDDisG,4AuokYSl,6d4Wf4Df,8fOlQJIV,9UBycv1Z,As5tg4SP,bbkpvM2m,BBZZUNZE,C18eGB65,CRqL1ps7,CTUELrF2,DHb0752W
+                DT-MY25	4OlF4XiU,KYisFwWh
+                DT-MY27	In5LKSgn
+                DT-MY28	h0k6EQm2,hnXm0RRs,LdY8Xv1V,2ln1SDyp,53RDhfQR,5rwCabUv,bOe6ZvO7,cgihDGGE,oNALCTMg,p65sRNsk,pFIkrx2I,SJkhJ6hm,VRk3jzSc,XKcSlQpP
+                DT-MY32	oKAECjGj,paXi710y,pgTgZEYN,PnQHZ7vg,pZ1JKgzM,q9UpK34j,Qa6coZ2T,QF2qIhCY,QIFreD6u,qjgno3Ce,Qk5Fx849,R7ven4qx,RaHA5Udn,RnW6BOPq,rp6QYTfW,rtyXYFK4,ruonJVzu,Sa965m6y,SjOJU7MD,SlGtKZhh,so7rJZg9,SrehTITS,SwFK31wd,t4BLLUdr,Ta3Q73JX,tBPPLqfX,tJdHS9L3,TJX3MVbp,To5dCOv2,TxtIdp8n,TzLZR5gP,UbdMpqPC,Uw5PLYE4,UY9vG4pA,V7fPOzNa,VBdR2Q7f,vtlAbcSl,vzguFjgS,W45EXuXw,wejoFOUF,WK5swPV3,X0H6LPsD,x8WPLZtn,XG38wdGT,xtD4vkb0,y897e0RX,YEe9iYM7,0824VGLZ,0cdjFEWQ,0eJReX2r,0jWCz5Bg,0M0AfeZz,0tlZyh0e,2qSHPsl0,2sfJq9Ka,38E9jimP,3dfrICVI,3fM60moJ,3R2A2E4Q,4rO0ybVI,4TMeWoDU,4wjgoSc9,5B35rayl,5v4EdNBT,5yHg5VK0,6JrejmO9,6l1F8tKT,7I8YeVVM,7LoYrWEb,7vVEpUw6,87mDNqhD,8freiv8o,8hRzN2Kt,8ktDwaTl,9RukP11g,A9wRu4wh,aAJ0bYjn,AEgPUIsk,aeUkoANn,Am4L6VpD,AoArLeLH,AQjdpSBi,asiVuAsd,awFnXCTc,aXMursOY,beOugV9E,bhT2qH0b,bI81uhi0,BKjPPOUD,bkM91DKN,BTPWtX6f,c1ptmRhP,CDdPTMAi,CH73rKIo,CHyxzMe0,CKgmMKgw,CowytnHi,CvuAorSF,d4qlMYia,Dcar59hq,DCtso1cE,Dv0r0l15,Dy8vWHiw,E1qCi8ad,e34rLq5Q,E6Px5O4R,EBDbkhhJ,ebuULZrT,ElsPWDHB,En6YmcS1,FArX1g30,fca5lQ1f,fInwrDrC,GMANo8S
+                DT-MY35	3aTQO6H2,dDoQUiN1,oRunNVd4,saSEB8vM,sF4kh2zD,wKFo9jbV,wVQnukSY,XazAGRfg,Gl1ZP29Z,H7ry33Yj,HhqmSBn5,IQFvbZPY,jEKj58BQ,kxpnvAAu,M3hP67p6,nHYkA7Ms
+                DT-MY44	IEWRquPN,iqRcYfGt,jQ7ZclZp,kkzn3QMH,LuLAQQgb,MFKC1IEw,3z4WiROb,6L7mX2B1,8y6Dv5Ax,BI8RJ1HD,zFnQoBzm,p7rEQVDI,sZC6mxge,TaJ2AJBx,TyEf0CGF,Vy5Mj6vV,WguKfXh9,X0L5v1DO,xIY3trhs
+                DT-MY48	PUk1HKyc,y4JefgZP,9jYrlwM9,BuIL8SaB,GGr4UuhP,GiCUAgFM,HkABFkxF,hxpzimVC,IKeBZhFM,lBF8oQjE
+                DT-MY56	gQfd6Sd3,HWPmygO6,Hwz6zQK4,jPIFzmdR,nZWqYVDE,6ojpnNv4,BNnWQVUY,dWIKK7nm,pTWUQWnd,QyElUJEf,UUTJFKHz,WNfTe6FK,Z5iGqo2k
+                DT-MY57	GRjGegTo,J7M0D7to,lXSR4YgP,MB8tfNY4,QwId1z2f,R6XeScxl,RqqLECqa,ssQgEldZ,USnndomi,uTidSI6h
+                DT-MY59	19lyanYy,dIpVG0Zp,ePCk2mPS
+                DT-MY60	G33avMFG,HeXUJwM7,HlXwlJNr,JwygLKZV,LMMxYOJR,lvTCZlY0,MMVY4mKg,ndmaqtDF,PRq86pNo,rAbrnBSV,rJO0QKNj,w5IsZWBS,ygWnLsUR,yhaYHhis,34kMf99o,9PZ0F4Lj,A5AtrfBa,BhNnJ3kJ,By0AKkYd
+                DT-SD08	0NS3VofG,2S0iTa2o,caAhbfEU,DJWfnLgc,QeIFqJBb,u9KVEduv,Wg8Y6oXm,WiSdAY3Z,xvJqu1LO,EW9iFlIc,F1VQiB0w,fFJGzIKf,fr4vUFsY,IGq7cTD9,jbyrHewB,k6M4ASCc,KydJNdS3,lNOoBc6X,o87vsXy2,o8dJZFfB,z5gX7tyn
+                DT-SD17	q38gZbnh,QBS50AyF,SdMtgdR4,T9lr82jl,U8byobeM,UgFQgkZi,WDGusxXS,Wtij0uLI,XfP7oSu6,xVcZ0BsT,56n5oP7r,aF4XyTdn,Ap6vrT8p,GOKYBOIg,JchlNHnH,jvx1Jv1d,KaWsQB0D,lHwn5qyT,Lj8x9ZVB,naFY39mk
+                DT-SD25	fWM79l7D,FWZ0whhB,FYjT0f43,IbAwlyGn,KUjLbdaW,NZL0CNlf,OXrFa3Rn,PZyAjosJ,QwGr7jY8,qwiRgmhD,Ra0SUVUx,t8RSWDQU,TuRAupzs,UjTAglBI,Umdd3zb2,UrfZudOr,wzjFNA6a,X7s9BL0r,Zi3cUYhB,05Cn9c7r,2bRtNgwv,3d2rNtXh,73Z09eYv,84PMqoFA,9A3zCkGx,AqJESi1b,AUgZrIDP,cEdE48ih,CeSLZJrF,DsQRiLM9,dY0RIvrc,dyylrKZZ,EIfjwgqy
+                DT-SD33	01CUemZz,0sZM8ywr,0TNyIh3U,3LbGCuu7,49g89WVp,4t6mGyKz,4xkgawz1,88BR9SZS,a2CGTEpD,agJxutPb,bH98NvL0,BPkNQF8K,e0iSv0HO,oS6MsRoc,QAUyDYGU,Qb9v9Fvf,WuAl2aR2,ybC31Xvi,YfShnDHr,exwWGnFU,FjXsKSlE,FPspU6V8,gFclZXNe,gW74aBRE,HdkkRbO4,hMIdRjIG,IHS5Rtf1,ipwi9Nmj,Jap1k49v,jJuxvYZu,KeSbD0sF,kueprAFM,LRUdc3jJ,MIAXXVSB,NfIh3Jkl
+                DT-SD55	kaTm62Mg,NsEaAS3M,QvQrUfEk,UzDXIQri,yck97fAk,3t8K3Nwy,44PTlEBE,Z9Fy0gVU
+                DT-SD56	qDHEobSl,QPSxuiKV,SectUTe0,TATIOxdU,TlQhPUin,v5C6vSOt,x6Au1ve5,XuucAiTj,XVHp0dTh,xxSoawhI,fhm284u1,FWRk8xfH,gBmTuWYd,gRUvrvds,gYExvulD,jQQ9Furl,mVy39hPB,0eBMMtWt,1dBtcvcU,4e1NNin5,6GopEuUC,6hVC3MrD,7PxuTI37,7rakj2VD,8EHzXdA3,AY0OnXf7,BJjkzB2Q,btNMiBBL,cEtD4P50,Cq2joyWa,e58sZScS
+                DT-UP16	1ubO8OZh,efA5cwQ1,Efses3f2,thXn1HRP,tTWOqclF,XdCubKkx,Y5gs4fMz,yAlvdAdE,zLyhg5wQ,FGaetr96,k6vPxhAr,kKQlGAZo
+                DT-UP17	fH4HUZfW,GrbmrySi,JgmHtnVs,JGwzKC3k,oeIxJ0wE,rTaHwsqp,sWltAl5I,tVYs1iMR,uzjJ2EiI,v6wPkspc,vQ5alh97,wCwbnavH,WTgGMtEA,XWMbWtRe,1OFgkvjk,95oA641O,AkjggwKV,Aq8IFRbt,C1R5dgOz,eegEiYyP,EmEV2Svy
+                DT-UP20	1AZ171Ea,1d4JQo5A,1tGvDDRf,2ihNL0fk,6Xgrkuan,78DFoTak,bpuLmycD,bYvvywQg,cfBmBDGI,czIrr9NL,DBtwwA3J,dGKssps1,dQ8PChgQ,OSD81UNM,QbVcCfUD,tCO0P1JF,uD2l0Zjo,wHIFSj63,WmHTIz7P,f4nhiLbk,F5yqxujo,ghVTyJVM,lENjLD7M,nBZ4BClC,nExEBifw,O9G6IeJk,oJCSdPlp,Yk9fc1Ol,ZmOBo92V,ztyigbnV
+                DT-VS01	ZGjBDGHA,ZIZYF7Aa,ZMAKI69B,p4WYh4XG,pGrcweVv,QLlgP80k,rhjND1Uf,sL9pnj4Z,smCjkapZ,szxwD2vz,t3nVC2NP,T8j1AB7v,TINP55bt,TxmNmpqn,UmQMyq1a,VIgwcK2s,VwMGcgkd,wJ5WbO10,x6swQL5a,XIFBOvbc,xPE45QFr,yDNbjTjW,0OwtzoQP,1ECtyTZQ,1FLzkcoX,1ILHyJ2Q,1pDvhDkS,32N9oTwr,4ODEGiiG,6qebBQKu,8Zgv7oFy,aoQByZzP,beGYyZVp,BWPsaRI1,CoG6Ae9V,eOejycnW,eOvznzmT,FBoXSHKb,FHVDWtCG,gELJv9IS,Hhmo99jB,i97xU7WT,Kp9XFuOi,LKi6PKXx,oDT5Nleq
+                DT-VS02	ERVRxDKH,fcyYDPZJ,FlQkAVPS,Fp49NAXr,FT1Zjh5I,fy7JLpr1,FZFlWLbA,G5871BxU,gAlF7YW1,GfaVhX2B,HldVLN07,hOTeGfBz,icjlvRmA,ImI2IFQj,jFWoY79t,jQsF5RhR,KPfFABWg,lbIP1cke,LLptziDB,NOzzd5I0,nVzvuMzp,O721UXbx,OQdhtiqB,otF7rr61,PmMlDw9t,RpyVfnks,s8gLeTxZ,sFiIrLmm,sqUPGDQ3,sUXxou50,TdHdZ2QS,tfvMSW7g,uESZDYqP,UG1ZdCdP,UYFBpIVd,vq7ofWWv,w79bmcig,wqrR9DVA,XFgXFXoU,xfYqTraY,xLqHd0JY,xOZLqdTc,YQbYtytr,ZmSbupKs,zVrsXkDZ,08nu8rBn,6xLvzwPW,8CgxchJg,8HWEzrSn,8w6sw7Q4,8whktVwl,9Zzior8F,AQBWN49L,B8c7Qi70,bloGT7EV,ccDw5gF4,cv770Q8M,DpntDWF7
+                DT-VS03	04mSg8yw,0ONOASc7,0UQmhdL1,0Ut2X0o2,0W2JTHkx,0YYNQKc9,1C8MgaUm,1czYHrPJ,1QOXJkBa,229cjOUG,2bhXqVjc,2IsRDXRD,2itAWzxM,2mQ5lHTI,38z4MAKJ,3da30pgi,3iCZjDIP,4kNboTL3,51UXUzP2,5CnK2DcF,5sE2wbFH,5UwGb4U8,6AqXKuSW,6Qa3ZdoQ,6V3fpYJN,78fx6J6o,78Gvo4QL,7jrZctdb,7KZyXtbw,7LIQZVYV,8cV7tdgJ,9CsEGqxN,9etrFSOp,9LlUT4x6,9NBfCnGH,9OhkA0kh,A6VRUd8p,AbFghXqv,Aby5E2Pn,acTdSVXu,ADrkgzhz,AGzer7zK,azW0qdar,b23TzYrU,bHG0Va02,BMf5vXL7,BmvYT7F7,BTAVpOjs,BvMh6CEc,BwniuU5F,By6dxA85,c7IY2F72,CdTvgN4M,CflJidDX,cFxcDa6X,CPojmG0l,CR3bYp92,CrWOu6iJ,CtA21E27,Cu7TpWyK,cutepSPa,CxaJ84wC,d5LVLukb,D8gDtX3K,Da7lkI9A,DDtJzEuw,dFRD9s6l,DNtZ7NlL,e7lYiqSu,EbifmhxR,EEgCfdCj,efm2cnOi,EidJOxba,ojLjmkRs,okfCdhjN,onaHhOEH,onHVeni1,oZ38vgi8,P5ms2e9U,QSH5OHsq,QuQpwm8w,RA1wiIZj,rEpHu0CE,rfL7ipVe,rJEWzl7P,rn4cZkPR,rRuQAacP,RsQMGz7H,RyIrERoy,SbsxDJCX,SEgxjvip,siGZXZwx,snXarBN2,SrVSt6F9,tb9bwnDf,tlQBq3Gf,tReYR0cm,tRuW0cDy,tUiWNFod,UaVioETs,uDqSNhy2,uIRRCbQt,v76dDwf0,VdFXCB0m,vgjsApgl,vJf1BLpS,vKdkKWtj,vkF3Iyt1,vrf8URSN,vtrxHjXm,vXW4MNGF,vyHPrAgG,w40jV8Jt,WfMTGG6
+                DT-VS05	Yz6CYIxn,ZMFigsgB,zz2Js88R,oq69MWeK,OsvdFUdJ,oWx0ioQh,P7ZMBZCu,pAYC1xrJ,PBFgEz2Y,peWYAARZ,PFM3G6vx,pGA5hQS4,pKxtV6C1,PLtkOw9b,ppb0dGx7,pSZ2smU1,PZ8A0AdU,QecSgxpA,qQzajp1b,r5d7g9yt,r7Sacoxb,RCQFjKUK,Re49h1Pq,RP3VEgt7,rxKnLyIH,s1vJV9Oc,S4ILK6mI,SBAj2lsz,sq1mKnnZ,sQMarn71,sSoRZ9fe,sxVAqiMd,t3qmfpkS,t70ag5NE,tHiI3lwl,tnEbR3kb,tyPgzyS5,TYxf9cZe,ue8urj1G,Uxdkm2NO,v50SMNgJ,v5olQ7E1,vo2jUUph,VuAh0Ps3,VW0CLfd3,W0QOsVfj,W76FwVHy,wA76fBiC,wWKTb3Kn,WxLlNQhh,X1DqVMVq,XCpPzNq5,xDfdtcAM,xezXEsIx,08vsOw3h,0jsj2Sdf,0lkALqQz,1RTxyRG2,2a29pNsI,2jLSOQbP,2o1BnkRD,2qjO0Cs3,2SWx3gVZ,30slLXiq,3jaeMyIa,3U5MbJCH,4iIfGRxw,4jKFf6bX,4ybl80fF,50NL8dn2,5OFLNUla,5PrGL0Ot,6Bz4WTr3,6GAxPvCx,6xFbon3d,7FUy10XO,7ukTUcgp,84fsRGkJ,8gNYRpLs,8oVHPDjQ,91hb1yya,9cnpDq33,9s936byx,AHFAELC6,aoEULiV1,aQ55WZKx,b8GkoEIp,bhmxf4Ko,BMV5YFuF,bV9NhBXN,c6nlZKBF,cLQt97Fh,CQcWsuRS,ctHiLQWw,cvHDPnO5,dbDsoeeT,dCRbuWeg,dsM37hK8,eBSkYYVf,ECPmeHaa,ehQf06At,eQEm4lq9,ExObVuWf,eYnSCPkf,frVio4mD,fW6rheIn,gn1ZXltm,GQbdYvBB,h2eb7MEi,HcortAau,hKFev5A1,HptEWqfO,hSh5IXn2,i1ofQ3W
+                DT-VS06	EoOj2qHX,erNqofaG,EUP43buk,euSdfBBy,ev5fRcfz,eXdM5UgN,eYuxZQD4,Ez6xp8pZ,FBYNXau1,FCVUqCHa,fD9AbRbw,FEA57SVc,FlqA4bsE,fN2AwtQF,FwmagIaK,fYN5vcd7,G0JzxX8i,g1m5ruWC,g1soFFpn,G93IwTh9,G9okWLq4,gbxoalZh,GhHvlPaB,gj3DkQfr,gPZtuvo7,Gqy92hvZ,GtoaadFb,Gubrz321,gxOMuFcn,H9APFYmX,haFidOol,hEncNsQg,HKcZN6su,HMCLclRo,Hojsjka6,ht1zGsfj,I5TWIlby,idAyIPEb,iEcei0KH,ifEy4Dty,iHxKclu2,iovUyF9b,ItshQzdw,Iwng5NVu,iZFilaLS,j0d0DtNA,J0zb3O7t,JbNnOPOS,JdJW0ETZ,jJDOM1tB,jmVhp5DP,jQK0Sqtt,jYBup2BJ,K2YNrC2z,K6a5urS7,k98uyqvf,KdRjIs9i,KGoZalOG,KLHsl2Yr,KNwuzpSB,kPqKVb1z,l2RxQXd8,l5Do5d7J,l6MuL5QU,l8aSZV14,LbxO8re7,lcqDP3az,LGGZyzuk,Lhl2qO4E,lLwuQF6A,LPitDAoB,lq6Rn24w,lXbl7rMB,LXfzDix9,m0j5T1NS,McAkh6vv,mIbWqkAm,Ml6yMxlJ,mq40See2,mtqCCq7t,mw8JRWrk,n4RrqD9f,necO0YjO,Npy1fDlf,nsDTbthq,nymByTn9,O8p4ubVz,OAhdBQ3O,OF1fVXEb,oOGcLGDF,Ope7Sv6g,oqYKjbND,orTQxpbL,owjpxRpE,oxfHRYqv,oZP1b13D,P2xa17Zd,p4fLmo2N,PCDxW89j,PFdJZjNY,PJm5Crde,plOL3Hde,pQHAdIMb,pSWQjHyp,PwsCxoA5,pXevgWTJ,pxTfcIPH,q3PllyVn,Q5pBmOQH,qauDtujW,qSLVEnPE,RbVb7qf9,RcIgVxkt,RgjkOGS
+                DT-XD12	0Ln9C7uN,37HiVaUm,3JafuP3M,3ROnSxyd,4M3RMKoi,4Z0p0NnJ,61GDpWbp,A3d4ULnY,A9f9mwo0,BldOa8Fl,cT6cse2S,d0y8a4cp,d5avdL5t,Dec42Dds,dezcZGFf,DGgcEA2U,DmrAoJBT,pugDSvEn,PuzQgz0g,qIoPYYGJ,QJ5RsKAs,r4hfh9QN,RCVsbsb2,RdSbSUpO,RESUL99Y,Seh5fsPy,sxWISsa2,T7LIyFBv,tvVx0dy6,UngmLxL5,UVVSjBRt,vUmsR6MK,w6zj2Ld8,wI9jQ37L,wVEe3Djz,xR8utA4a,xUokYBPE,y5SVTvww,F57MINhr,flfrShmF,G03eIehO,GN1TFt7m,HiPD6WTc,HsN9nPjr,HW8TwbGS,Iagn103Y,IS9eqCxd,k5njUyZo,KdgLW1da,KKeZKlTJ,kyjex1mo,l5XVNKlX,LyD9AgFN,McFkgmNX,MdIjvlpD,meSWq1Z5,mGJWR3CX,MUHM6JyM,o7xMbpwc,ys3S2hzK
+                DT-XD18	yg0fQ8NR,ykFLUpHI,YRhEvPzq,ySyL4kiS,Zft08iSO,zky7z7ab,zkZJiFGs,zm0n9R4l,ZtXD0wR1,Oz5EEeNs,PJdxrn5i,PrMXNV0o,pSIecIGg,qa4E1iwZ,qihNGkts,rZ5JJigH,siY3FKnz,Tdj9eKE8,TUe14TwB,ucZi9R7h,unKfwA82,uqAkdbh7,V0il2M67,vUi8RyNm,w41pZ0KM,WbSycWYT,xpsZ5Mgn,XssTscAb,XwbkUCzi,YdmS3FYD,3blFAWJs,3xVsv8DT,3Y9VretB,4gMvq71C,50Df57Bh,5dyue7RT,5hPzj1J4,854s3ZAH,8JpSUGsG,bgequWUK,bk4sZIQ9,bS0JQf3T,BuudeY9I,bwSwinjW,CWEkf5jO,dbgGpASA,dGTiMEXo,dYa7Hkrw,echE7ASL,EUYzIOXh,F8qTVgKq,FXc3pOOr,Fy3sUacL,h5QfM7hd,HI93EMJ0,hR23ihqb,hrnoXU7W,I5vVZfDZ,i6t7WVD7,iaY6Reoc,iW8c0efF,JbNVE0w9,JZvTgQvh,lKYMw8up,lplUyHAF,lvFgXOEp,lvnYIGm1,M4wcLCAu,MbPaKlnd,MsChplwW,n5yUrepC,NBrPQrQ7
+                DT-XDFN01	M2lGPO16,mXlFB60Z,oau2euUw,PUg0nfYb,rSMYrYg6,VCcvcVwW,wevKb8QP,wuZEQdD3,1TQb2kCd,3QsdWy7X,5LtQytkC,7NajeKNv,bo3oFybC
+                DT-YJNY01	012tjIUT,6qXKviAv,91d3cZb0,9EnEZdUS,G8SVywTo,ntI24SKG,O6Ki0025,ykapI56q,SXDpZewO,t6z8Qw2S,va2NkaSu,wAl7BojH,WwsSjzvc,WX1aImAj,X0unpcQC
+                DT-YJNY04	oLbzIREF,ols31OIo,ot3Mooxk,PEgBAD72,QgkyfQII,QXigpCsp,SFRJursI,SKlkEnLO,smUuFC0m,t0QdGtxI,TfHVP6aW,tKjPVtx0,tTrPB4gl,UFzOaX3M,uV3ZUTHl,v6vJqWH0,vTc0sWFU,WHVSS52S,xmJxBCmQ,xYLuBbTH,Yb98z3DL,FoZTPOCN,FX3k65gh,fXh8Rq1L,g7IOpfut,gBhCckJZ,GQ4M42qO,H4uO3RMj,hA9vx2vQ,hPTCaayX,hWnE78EO,i4znPXpf,iGzZWpO0,IhTOoKmx,IHWKfwLx,IqTGKIV9,Jb40mMkr,Jx5yob2a,k1MTO8aP,Km5AGLWx,l9Rcc0Of,lCbVAJg7,LzZypQMG,MYG0fOQS,NCPSzKdA,nQwZYcHb,ob1OhacP,oEoBmvfk,0ImtszAd,0sSv5o8l,1VwHhKzx,22hGu1QY,2AjsnN3P,4sRwENqZ,58z9v0Es,8IMbHZUa,9PnEKXL2,9Sva4p9Z,AgvXLLOb,AKrCIvo8,aQUc4qRO,arpbQvXL,B1AcyjlC,C6UC7EBc,CjJ3hVXa,clW1cN6f,CQQD1Kqm,d4lgBUCB,e0xPwZ3S,EljGjQob,YW01kCgX,ZFvlmPAj
+                DT_GW63	Yj5xviM9,ZmvsXV9D,G4bbGwX1,gTqnCJyz,hmF6ceII,IkmcJ51z,JBCL3eTF,jbic8B0R,JT9sU2To,JUkgR8rD,KmCphdCe,kPXnAjPT,kVG399Y7,ldMqWirP,lfDDijNW,LUm19JOJ,lWGXTDk6,mHEhSPEy,MneHXKw0,mZwZQAek,PjnyyTDZ,QiVjE9Zu,QukvNQ1u,qWwhhOiN,RDuuoK1d,rX4klORS,sTViSeZ8,t7PQTfni,Tt9mHiKe,tvNxQub5,uBPuqdNy,uqwInMk4,W7QZBTXk,wF8o1rOX,x4rDZMpL,XKLlQFP3,2aepRPvQ,2i9WVpfi,2K0Vf2FS,2NHQNIkN,2Tf1NPma,30XJj6el,3gyUabbO,7fXqSzhT,8E2e7U5C,8HXebt3w,9hnidKs9,AErxDuIA,aVqL4w7D,b7Kywi8f,CrPfQBLn,cukGwOWl,dWKQNoyZ
+                FJXM-DFDQ01	dbElAoci,fDg18kSm,hE03wADY,hKU4sfgX,iddqdp9P,ipWsrQ5e,qHa8hYcl,s9Zby4FZ,sUThSRzQ,u0KqgUHD
+                FJXM-DFDQ02	hISQlPhJ
+                FJXM-MYZN01	nc4sLm4Q,OJbESahk,0rQJxE72,4LcOgutt,7UTZjdEu,RoiLKzfC,RQq0YrTQ,tPGBNBW7,TSZeMI6q,UbrNCmSb,UfJ0UHeO,vWMnBPVi,WPwu6vNs,WrbDCI0K,XyDYBAGS
+                GGGC-MYZN02	Q9FPiaEQ,rEW9AMZm,sspMs7Cv,SzTRhAle,tDoaJcdA,u3HctfTd,vZEiSWWb,WbMuznGa,wIjvylxr,G3P4guBp,GlR9gspx,jb70zgy8,jCuu94Su,KkO1BNF1,LHUOxIz3,Ls1EYBHV,Ng1eNi4x,o5BeCabB,ZJZ2vmPy,04iUXWau,3e3RmEDT,4z66OZLH,adXW5CPD,Dq0hc7d6,dybYFFH8
+                GGGJ-DFDQ01	0DdPWnck,3dORuyAV,3jyH154U,4dCWnzLK,7xKAWgZW,86n2qgiM,BCKL9lkw,CZbp7no4,I7EJ4nPt,L9XCm4u0,NSfopOW3,o23d6LBB,olFRqfSf,qAqnO0YH,RQov6gm3,SPlyMKa9
+                GGLT-MYZN01	paUCQ7EB,PQOdDSGq,tNEctoJb,UCHZnsLY,vPT7Ikq7,VrIR4HJq,vWMXNo6C,Xgje2Ie8,xrQseqUo,XswSa7sx,fVuVumqF,jGjdXX1M,jNMfii4X,K14xQlco,Kw4ONNaV,0Ne7q7bt,30mPIX3B,4E03Cibh,4Ixgb47U,76qb201Y,BeHXQBeD,bpIEEtOh,dEmsPJ4Y,duO58WF3,ztFAJP61
+                GGLZ-DFDQ01	zetBrkFY,zz90jxbD,H11QWvQX,hoZ1NkvS,KjNvWgDR,mfX0jBmI,omLeJ02y,pBRT37jI,qUVepfz4,QVccO3NX,TJ50kWZu,TZhPgizN,wHuCzsZj,wQtH5Awe,wSk3c6mb,XgNNhgwt,7ESgHVM7,ACBtsrSE,ay69vfrB
+                GGMW-MYZN01	0rlIjwXI,6rZruOW5,7ikdNSGP,7QfRZkU6,9pD0qDWP,aiaGsqeX,CgfDBz5h,CQ26nBUH,D8ACqzhb,DelMiDXW,DERsdHBD,EhvynmMT,eudT5Ept,ftuUMuyt,HPijcKvf,iQ3FHOA3,Ld4bTHRM,lxTiUQqJ,m389fSfB,ngLYG6qQ,NGSACkUK,YhlCSJCL,zI7EOIIg,OktuSDDK,oOA7dwNu,rIhCS95J,SOXoiqGz,sqfIZVzJ,tpJBFZy6,U8bU0fCs,u9XiF3Sv,uqVSxPqp,vD0oYiy2,VP7qyvXb,vslK0hG7,w1eSlzwu,w4gcchLw,WcCQmL8F,XSBOuXpF,y3xIoweg,YAzqY4wd,yEQP8wYq
+                GGMW-SHDQ01	PPpLBQk0,pY4bHXmB,qgY0K3Yy,QtC17kcS,R6vEiybd,rb8UEQDL,saoX9HP9,sN3SMOfu,SpRzZc3C,UihxtSG2,Uvs8KGqI,V1DaxXw9,WMVJeXZv,XIpJBirF,XkVf456r,XYDLc2fy,fOvWB9Nu,g6ZnfnRk,gavvVjEj,gKfNAeN6,goutV9dn,i2rvwdxq,iFi3ULlu,J3jB1R26,KNMfoWns,lCzQqs6M,M7FHH34l,23UOdm2F,3upXLZSk,3ZLYYbRQ,5r4Od7WV,9BKxGQls,aaN0L2W1,Aui411AD,aznezyAc,CBtz2Oht,cYXUTiUp,DfO0l81r,DyPk8ood,zbJsMEyw
+                GSQL-JFKJ01	yWQoYykr,ZiudgDjQ,fu87fUht,lCrd1Rus,m9WSOlqK,OocrOTWs,PCXf7DQf,w1lwWb2K,Xu6Agw8D,0c54e7DI,4GB7OWWU,6LdqU4Nx,82idZjDX,8ysXOb4h,acVKPcaj,ADAB10TW
+                GZBLS-DFDQ01	109BEwqr,19FNnlIg,29cz2PkC,2T2vShja,6fm9Z5k7,6vEDhInT,8cOpSU9W,9PWDwED5,bcaoAqBS,DtAQuuNC,EgAG20wm,fE635r5f,fUEFb8ah,gCqzgK34,Gv9vfsNG,HGnrgs3g,hHkvRcYJ,jgSMk49g,kkSEzBCC,l2Pw88t2,LfrwvS0L,LLkIsgDr,oZ45d7It,PjCvOZWd,QFgSIQEs,QKE5gP2N,qOywYrYc,rrD8RBBW,TbY57T25,tMAxxkry,TmHmoTYq,UtIMYQpD,VeGr3Nbq,wr3BKMM1,x0cDTnA6,xV27xVrK,YAB4BOtV,yb1zLdXa
+                GZDFP-SHDQ01	vswAvkf9
+                GZGL-SHDQ01	ok8gtiS0,ovX8hQh6,WLjP4nfh,5K6n0ykm,afcsLGxs,bjzlTpKK,Cy5jIhnm,e1ETVuAt,JuAUGgGz
+                GZGL-SHDQ02	I1upOi3J,LoVzNJ6d,OGLmsA35,RHfHP67x,sJe8Wry0,taFNfVSV,V0qpFNu1,W7PFEcYn
+                HBHSG-JFKJ01	sjD8rSo0,sw527VP1,Wd3KkWds,FoaQUgfd,LZ3qUIzC,Mqxm8k81,nwqL9hlS,zHxbbW0i,3RiMi2gz,4NOkggsZ,C9vD5NOq
+                HLJDA-SHDQ01	1YxC144t,2R59N1UV,4y90d1Zm,arV8KV73,bwpahvVr,CR60Pp3o,d6nUkvFn,DHypUn0R,DO0wVLdd,FSPMcmrv,Jq6m1fMa,KG7DRt8k,kV8rEY4N,L5aCJ0Zw,lrmbcVsh,m4jXTJZL,NviBx27X,NyyA88z0,o18SF60A,ochT92X8,RnbXW0yC,WKOGmZ1h,yrXdrUzf,zgYmIOpX,zRhpcdfr
+                HLJDA-SHDQ02	ytZwssW2,ZCTbUbgK,ZpyT2jcY,fcZ4HDfY,FMm2fv2Y,gZ4u9Sd9,o1D710NU,ODGcGgGm,1vmPF8pw,4fHkV7UT,4OtiapBW,6XFu0Mvg,6YIjmWnN,aI6fJDJ2,ctkGgokD,DObo7ePo,SarnketT,SK0jBgiT,Tjksi3cj,vaQOtX42,VkZ2ZCGh,wAbDbhcW,wzjNiAnG,x7wFt2fz,Xt8PzpOb
+                HLJHC-HRFD01	qbU3qSau,R0v0DUBG,UtmzTJk9,vDMnD2RY,Vg24xugq,WuK1Cukw,yAczNaFz,fczxnGeu,gbMwb74h,GZssTrFQ,HBLZUmwF,hWCHJyV9,hYvYu0Rg,iEqfLXtT,L94v6O0C,lubIaKS6,M72kx6v8,n9gLizXN,nrpkGquA,O6OotKCM,OgdaaDFq,0iffMVPY,6vMnYGYI,8Jdr6b65,9KgVmruD,9pfoJ4ll,AHgrAbVE,btNqNtq2,delUppby,dJ1W64kF,dLDLX8tr,DRfCDwTq,dW4DGIVf
+                HLJHFL-HRFD01	1DklxUzZ,2gyMnvYY,3NUxjHdX,64tKtsaT,6cmpHMRx,7pvUiAUx,8bpTtgi5,8q4jJNss,9ga2nX0I,a12HQ9b0,a1VVNo3r,c6Twdft0,cP6SXlpp,CpN40FW9,CwffnA2K,dBwxvL49,DkKEIYSI,OmkPZyVK,rkcAKF8Y,sLnlYnFZ,Tdq9IUoS,TzFq87pe,vsqDHE2k,wRuwYMOh,X70Vhzp8,HISQVWoJ,HuN53P2k,jPS2ZYtd,Lkt52B63,M9QlxGy1,mP9FaOG8,NZkC47bA,oGgr40EJ
+                HLJHFL-HRFD02	fkPkXgwm,hqPwIq8P,i1orud0N,iwGXnI0Y,lgAhWegb,lkH1r1Bf,NAx6gRn1,NPTyMe9O,OgSKw9dK,4DfJg1uX,6OZGT8q6,9A4K05Si,aAkK4LcR,AmeaA1lg,bXzi2WJA,yWvOMFu3,P8Lw77sk,r6fT6cDs,ufhu38T4,uqd1Up8w,wIP3UiTu,X77ScSmh,xGf6i02s,XRKMfmFb,XvJW47LO,yBoLUwFN,YDNVMJqf
+                HLJJC-SHDQ01	oLB5Tnrw,Td2Uo10y,U1DShWrT,uBopVOk0,wFFu2IHr,yF8k7EL4,1BX1nBWw,3Y9rgoig,49WUta2k,5rjtIdLz,9wNdrVrT,a3TKUlnN,FY0BUYLn,GbpgJTyI,GpKO5X7X,h6lstNby,hYcCFdvx,iDEc1plK,MHEX5Z0E,MHw1XrKv,MqlifN3K,NECDW6uo,YgEfPbG9,YpX9JK3g,zgpiXxtE
+                HLJNZS-HRFD01	ZcKhe7kQ,1k7PibLt,2jBj8Vhz,2U8z6DEL,5zAjX6Ee,6Kv9aQuY,ajsHuTp6,bWZfv9ei,dxKbOzeB,EftmbzL9,OTOJoxUl,QL1z6phV,QXIk9YKP,R7IpjkJs,RIpfas37,RUFA8Jfh,sKQSJ1aS,SMHeJ0Gl,SRIuCutZ,YbZ9XwLA,fVROBgVJ,gSu4sGnr,HElc61qT,hubbAPbR,jbiHtmEn,JdbzrLUy,jRaRC4aV,k12bJJV4,liqdtBL1,LjGZY3uB,MGwbearE,NFjR59Iu,nl71gzKr
+                HLJSL-JFKJ01	fK8YcgPm,H18jM2o2,H52ewQLb,jkXDGCm3,johT4PEH,k4mqPQDA,k7TEj5cz,KP3dzo9z,kSb9leWr,kYN0L5rP,lGEksVAN,lTyw1dZS,Mrn0Dz1w,My55543e,myUO5njL,n0pYDOQF,N84FBscA,1HN7sNu9,1Ui0NWNo,3BetdNN1,3ExTSLil,3ZalqT7o,3ZbypniV,4gNbXqjf,4k4rFCg1,4Lwz3fOl,6iTqGG2n,7opkABtw,83HAvgiU,8HthJAnW,9dSrMFfK,a3xW5Ynu,a7H0dKHx,Bu5wF5PD,ceFqe5m4,cv4L7vbU,cYmNJvmf,dHaSVTrj,dkDcxTmE,earUp4m5,ELZJqQlm,yiY5hLiK,yLhVhje5,YT4vDE5F,YzAa51O2,ZFOLHYeu,Ztf1q6Ri,zUgS6jx3,OXhUBBQN,OYT3VmHN,PmVn7Dbd,q32IsSbS,QcCYQ4eu,sEHunF1z,SGnVhHWr,sslOQwj0,swQNYuZm,TalyIBg4,uoPqE1y1,VNqIEn0a,wDR4enSR,Wiff0SNt,Wvzt2VkY,wWexppjB,x7EC9kxe,xOfttWgb
+                HLJTP-HRFD01	PefxOj6h,pyXXuhrA,pznwWLCY,s2UdsI32,VM4MvEaf,Erm8sXPj,n5fPny3q
+                HLJTP-HRFD02	eWFNmLTI,HHidXSHk,JMNfaWpH,MTgjyBT9,Ne8MPuBU,tlmoUo01,UK492PcD,UwflVxnV,Wk9I31RB,wsOFYI1n,3E8KYtCF,41SlD2Cz,52RjCfHy,bMEP5Tkj,CX92eV3u
+                HYYZS-XDFN01	41Ys7UaT,oub2XpTe,PF4TkQ0S,PyC3bQyf,qQKo0DE3,rS5EIRKY,sQzNH24c,t6RNRS3b,tq0pkvNb,u8jMFi7U,vjEiDhQe,VtL5PczS,VyVHcYnp,VyzGAERH,wMLOSMWL,xyLH0JSv,HPOnnN3X,n5qBeMXf,Yr6MawFU,zfx7szzx
+                HYYZS-XDFN02	OXyLBRTV,oZoLL5MP,pWkKeDYg,Scrw5AkC,SdKf2J02,skvHdYny,V8K4jD5N,Vz0EVSNR,wVpjMGO4,Y1ayYxH6,Y29v0WYT,0U3IBJoz,26q5BaJV,2svuaJt9,4gYfaNoS,50Q4BfE3,5WFeyKML,8kXdrKdX,a7XcdTk9,AV6ArIp7,aV7iSwwY,cnBqnUSG,CQ6DKJEQ,ECcJnJEZ,elJoPfox,ElWNoBv9,f2KFZ5Tp,FDSlE1Tx,GgchFAgA,hQimgkeZ,KdxLKwCd,lchKnq12,LCzTG4Jr,ld4icUbW,LwMWliV1,M4CzFbuW,MBjOOjtO,mlJpMd3M,MXljkV7v,NaFSlHgC
+                JJJFP-DFDQ01	gdaV4YzE,gj5ggdvf,h4UEF9TN,I9kUBkiT,KS6DhL5y,M1iiN7Nc,MnyiZpQm,oshkVcZ2,oTAPQV4y,pEWvJE1I,Q3eMd6iz,qmptu2CI,uXcs3ZKg,UYUbp62r,uyXq4cyQ,VLwImBFr,wcCaM1xl,wjNu47fo,x1iKitud,zskXlup5,1VQTqD3H,44TqpS9s,4v3oNdqU,5EdRcjsl,7ttmD2j3,8fZAt7Rp,aFco5DN8,At8etJ9q,C1aL0BnS,c9eONSQv,CAjGV2pA,Ce16PGtm
+                JJJSM-DFDQ01	03puSZ72,0a28QTfR,15ZOn8rQ,2unMWtKt,3uGHiE3r,41QZVhhE,4bjYlmRm,5FkcFWDu,5S2npnDO,5vPxoiT2,7JiPAVhN,83TKlDnc,8if0uymt,8kGj6gOZ,9akbopIc,9lnpYgJM,9W04XR3g,A61byv98,aHn9E8rR,bEDBxpJu,BIMQGB8G,bk1KI30Q,BQdi4SSM,D933k7br,duHZnwrN,dWMCMI5W,e683TPGC,e7ndHoeL,Ed5nh36h,ElZGyCK7,EMdJ6Qft,engaSjCH,ou0slgNL,OwwdIXku,phdwbt1S,PUXqJgwz,ql0i7hGW,QzK0Zedo,RDpk0T1o,rpbq6CFj,Sp5uZFZm,tkK85RDg,twa4MdYQ,u6GcMYmy,utrE9yj5,v2Mt7Wpo,v4zo3aQE,vNVLSkv5,w4cwS1AC,wEvcCELp,wF2p3gfw,wfABi5iG,WKgGmA8O,wKVVxOsN,WMBgcAC0,WXkioStA,Xctt8mwk,xHbLvJyJ,xhPd1gHB,eYMDApBF,fcqK4XhL,FvPPOP35,g7ctZWkp,GEO97KLB,GpuQNClh,gPxvseQw,h5T2EeTa,h6npH4wY,Hm2nIvXQ,i8lNAVQO,IgLVVK5b,K2OQ0poW,kQF4gOzC,LHS5OCiQ,m99tQZLO,MwnnleWh,NJBkOEQc,NuWLIme8,nvA4EXfx,NW9HPuPn,ny7IIMol,oBf00tpz,oIH9Q97f,z1yfVk4y,ZMRH6zq3
+                JJJSQ-JFKJ01	YLQ3V5q9,ZdUv8HWy,ZKPd33Fr,znLhReg4,oL9mQAC0,p0q5CdQK,p1C2wZMG,QBtne3wL,QISc3Rtc,SkK46off,u9g3u2P4,vcv4ahSo,VY0OJNLp,WD6lHXce,wUAk1Mb3,WZggOgnF,0JjLd7de,1WLMxIa4,1zUMOmG4,22nSN7NT,3qRzvJlP,3tAdgF5a,79eJCEfG,96KB1pyk,aKSM5XuX,B8nhMAD5,bKj92YUX,CYUTAnNQ,CZ8UvUXo,DDIunjVw,DNQNkT7A,eV2H45zZ,FSGj7gJK,FT2kxpb4,FvGh1yIg,GiCsUsX9,gJkVwUJ4,gQORBJpG,HUEef80g,icEiX1sr,iHXTWdGM,imVoUMeW,jqsKRgRX,Jrak6XSK,krO581R8,kS8JpcZr,L0nwcTNQ,LJS43AZs,lqDpBQef,mOaRmqud,NHPRIp0w,o6ZaUHpV
+                JJJWTG-MYZN01	fC5NXsq2,I8QfuE08,ifQ3QIWS,L3NHUgau,lIaHb6dc,LrbHM1n2,mkAg8lg2,pP690DNn,pUXhI7RT,rVgyQMkP,tuBUrQE6,uzeLqfnD,VoVRlGwz,Yko82bZB,yzkFX1Ri,1yzAYWJQ,3oSfV0oE,3UtIhW5x,49xvI6qI,7zcf6W7c,9K9rD6AW,ACZN1viq,CfwIg0Ei,dCszczJ4,DpdBoayw
+                JJJYLG-DFDQ01	0WY6YNkp,1FCDMoJr,2cyDRiJ5,2H2BqEEU,2r1crnWr,2rYeTWYQ,3QTtmwyC,45LEVWyj,4Kug6vm2,4NkySKfq,4sWv7lua,4XLzerCF,53qqBxzd,5nXKW1nK,5WeIQAQP,6GUJFpPP,6U59SJWP,7erFW6Mv,8aHte3mT,96UnGiIG,97ddylWf,aaDlzLcW,AQPrp0CZ,BS6LUEWz,c4BuFF7Q,cC2b4O6m,CFruiPMl,DZTCUXNU,E77QUyGU,Ebfvh2Zi,edBWcc0Z,pC73PoDI,PDDZAWlD,pMoh3Y3j,qc8JMU6j,QGLyJn5Y,QITFIV5L,QU2gXvQr,QUe6yOtl,qxazPZW6,QZPeU1jM,R7AwtkTv,RdUZVmrx,rhZd4soN,rOyFfX2h,sAP7TBgv,sgkGmHPg,sKnjwIiJ,sOxYDyUm,TabzcZJQ,TdvyJTAE,TkmHeKed,tXBx5C3M,uDoKOsbT,UgGND0vr,UmB4g6Wd,updJaFFH,UzHnCXCD,v945BIU5,Vj8dXnSb,VMeDnvB4,W0A70nMC,w2kbIkzo,WMv1tSrO,wqc2N1fT,wwWoQl7a,x5WgL8jw,x6I9rAQy,ENXgdZsU,eoniYK9T,f0OUCCU3,FCLJFeTJ,fF3PVhra,G8G3Jq0M,GfE4pxhL,GHy0Nxqj,gIV1oiDF,gPIWIo37,GqUiFwM2,HElKMx0s,hGGo4mPl,HHUHNbYP,HRywPMiY,Hvy6b8mo,i0hf46LW,iJ07tbDU,ijOAJfeO,JBFtAv9z,JUICZ4sf,jzMQGfj5,kbIz15ud,Kct7DIcm,KNkPJuG6,kQWFuJTi,KrB0aTHL,kRgsAcsX,lLGhxaqn,LyF7nSea,LygMb1Rz,m2KIRan3,MCtAXN2W,mQl71qsw,MWOef7Ps,MwYzEVjZ,NEgw7NdX,NKqwjCsk,nMvDUqoQ,nNZpoIJS,nzEr65vG,oDAEwE4X,Z1S9LAvr,z7yT61ue,ZckMNSBi,zehO5hK
+                JLAD-YJNY01	YY7gPWUR,UTYdfR7T,YDXj2Sua,0sp2c4s0,3fpUbdV4,3IJYHGQw,9NTEyPgX,ASvJMC5w,CWSOPPVe,e8zlAcOI,HeVtvPWG,hvdxB0Sk,jvjGhKHc,m88wIZsi,mGOQQh8O,nvoYvsJw
+                JLSL-JFKJ01	F5dbbZR1,GQZ5Sm2t,hsSuBKU2,i6DvT0b7,ImCGJiPA,JD59dRhV,Jw1OGVTx,M7IkHaFE,mjFpGTRV,o2McQZfV,oAtrqvBU,ovFW5CWf,PdUW8zRm,pehILarY,pJpsRPeR,ppqjfCxR,PzzJ4dl7,TEZn6yFt,uKoW0Qea,UsIT3W2S,vjuq5LwU,WRsyP2qJ,XGL0tSfh,YA2dwRzZ,Z2AXRhZD,ZF6pNEKC,ZYXwjjH5,0KSlI0a8,bsMwtV3e,dENewwB7,dpEAivNW,DsxgqoVc,eMwXjxDQ
+                JLTN-GMS01	0KCuKU9u,0z3nbzdm,1cotAGVi,3ujyRnev,4U7uBzbj,7jDZvW3W,89VILkuy,AIchzN4o,bK83dmxC,bOftLB5d,C5OkEbeh,DBLKwQqG,Dc84QWoh,DI6B8CSK,DVG20oRB,PF1PFTHk,pHzSftfp,pMNHOL40,pNwNsSiQ,PYpGEaaN,qMsNwVFu,RFxSRZ75,Vj2qbeqZ,wDN4cCnr,WgqJpkkV,wPopOczY,x7ClPgiB,XCXf8vvw,XDpD4iny,xjnrVeMU,XKsBkXKC,fFqmZ73I,FpomvzCq,GH6c1Oh6,GLdRocRE,h0uMt1ki,hEWyRUkC,hhPQpUyr,HjUyHgEA,i0CoWGRQ,Ig6V4u4d,JCKxQWdf,jei9TsZL,Jf2VeAjt,kdDTxZm7,kkTekxyn,KQv0Cx0Z,kR78ObTK,Kz3XWVGb,ljM8M6Xt,LlCyYMph,lUgdhxqC,MbFvm6qQ,mphDObx7,ygCaeJi4,YZoiSziI,ZAIdzZS4,zFJXfai0
+                JSBH-JFKJ01	zAZVcEFz,zesnsiW8,zQYRz0Mg,zv2JGTYS,oQlHlMaF,Pcnb8y3K,Pm2P2vV8,qiXUyhY9,QwRYM9qL,r8QfNtZg,rWv2hVz1,sSHM8Ifx,SysxNy0n,t0qmrMlQ,tAPOwpGx,tY4cxCK5,U7BzRNz5,UAXldUHR,VWHny8HO,xEVIDnqf,2CrHIkQS,31oui1lG,5HEaoQw3,6B8NMi4V,8kOPddq6,9fY5Obz6,9zGPSv8k,A9jd73TT,BYDFwXpI,cFDzIdkr,cnglMPyx,cnvHJScc,eGi6d89W,feFLFjHt,fWljuWF3,GUSKRvft,HIFYgj5T,hxlEMFfI,i6xML7cS,J77jbuKp,lORP8ELj,MIXXQwZ8,n2kFVbkv,N4EViuFK,nRQ7W8XP,ock9bw69
+                JSJH-EN01	GbMzLIkd,gMlNX7Zu,L1S5zYs3,wdOHOg2P,yq3pzfRS,Zope7U28,1dmkHFjv,B6A9EqNz,duyIZgXO
+                LNCJ-VSTS01	0xtCoZuR,28VDCT2Y,2oIHIll4,8wZoEjTc,ab4aXYXh,ByKzhtsG,cFxON7Bu,plFIKH5a,PuN6iB1h,rWoLMGGT,Uoqv8sqY,X1qVpAIV,i2NlrYp6,IefrFNI1,iEjOjlNx,IGgwb7v3,IjPjTDxu,ISfoU4hM,jYvVGDIx,ObFpgq0W,ohlh80CO,zgato7NV
+                LNFX-HRFD01	YUvLAITO,zYKrCmu2,oLrkzv2Z,ougUuMjV,p8uod45n,PTpZrLNC,PVzFkrAo,qxCtLifc,qY8Ihb8T,qZ6x1QIo,uhzWYWM0,VkOJ532m,vmeceEac,VNiZnB7F,vYXTEEXQ,WKDLBAxM,WkNi6mel,x9qUPuSq,1VdkhpdF,2lus6OiP,4oVT1seI,6jNFDW8f,6WKrSf9B,9eX8mf1a,ber6sKhO,cCWViPkT,e4pjpig6,F7dH7LWj,hUvtv8T6,IRtePhWx,KZ9u1YG3,nEEZV0PS,nLRXHFkC
+                LNGQ-VSTS01	Fe887FOs,gBLlYgZR,H8CFrCcp,kDNHyVBE,kUiJThqm,NoHfziEy,o826oBJ4,TcgnmVj0,TcLMZSGC,U0TUD3eM,UBda8Uen,UIZjzcLN,VsPrthrD,wT52rZ6t,xoeOdu04,xssx6zyU,YaOjCgLp,YCVZ0Fpm,1omMCuhc,3Av4nOVJ,4RlX3P3z,4VZ8lSUG,c6RIApqS,clG03PoG
+                LNHP-HRFD01	0oiyy8bJ,0rnpstVv,1yonkXXj,41awHEme,48azJgam,57ndMO4Z,5bf1znpK,5igQI340,5YtF0Znn,7ocb2mCI,7XLISc0u,8L3yftM5,8XscmsXI,9GGws7m7,9GHrbZhU,a7A6jCn2,ajRj68Nr,bASNYbmg,BbOKmf4x,BFKyBlRC,cdwZ9vOF,dNpXqIsx,e8y0OR4K,eNXxohdB,eU2ILZ8G,FJpMm8mY,HGC71iAr,i0cT9fMr,IVnDrd6g,iwU7vjAP,JsbWjViA,kK1rmalZ,kUNQo02w,lJVbMfAU,lmYdYMqk,MGzB8cCc,NcaP1arh,o5k8TqtY,Yr1xAm5L,yToPlwv0,Z2xV6tvE,oz2XeeX5,P0V1Qhp1,q2EGDrxK,qU2QwJup,qXphrwlG,rG1jshlB,S31X8Wc8,sf1PChNo,sQmLcbII,u2tk4i0H,UawVCii9,ub42ESiJ,v5IaAqiD,vdzwGJK1,vkrTUtEb,VlqsOlCc,VRvK3dAr,VzV6OFRB,w0fgBpB8,W3Kjb97z,WgzcabBa,whKU6scL,WrGXH8bH,xs54CmO6,xyWaS3tI
+                LNSJF-DFDQ01	qFhkftTW,rKvYigXc,S4xbHCSS,sma31z8a,uKopno3E,vr6MiBLE,Vz4ut8sE,W8kWbs6B,XBc2c6SI,yb8AvwgR,esaIdYDx,FH6Yl2wc,hcPi7J4Y,Hg0U0Ec0,HkYsZFQJ,HXZyZEGu,kI7p6zD0,KIjZHh62,nj3SPzML,nxedfLrg,NXUuwlD5,0CjX8PkR,6HQE3v92,8tBdlYLV,Aq3x4kLc,BG2VbxPg,Cp9IJuLi,DpA1Y3gk,EECZlikp,ehqJVOfT,YK99xFKx,yNIm3RNU,ZEE1s7l5
+                LNSJG-MYZN01	zKf5ny5r,fpopWWUc,hTnCIpJC,JBVFsn8L,jh9U5GYP,kxThfjff,LBwPzWQG,o5Lejb45,oPlFia79,p3vaRpd6,PTILm0Ep,QShOPTQf,SIPtBq3o,VxtX8E50,x4Dhjwzq,YAV36ozD,242cuItz,3C23dbfm,52uAzV9P,5p0c413l,5wF6z3xf,bCVOm8b0,cq37PhpC,dh1wpRLe,dvDmCOGG
+                LNSYZ-GMS01	096dtkpb,2ZaRqmfB,5WOzvIsE,6IXg9CYk,7NmqjL7j,8eEVHgVM,9bSRYNP9,Ak3YkC3Z,AWSNQRfl,bSd6CcZN,ciMEG8Cg,cSOdNoeg,dkk7qIwL,egJWEXJ9,fpr46xHr,g1Ar5PIE,hp752ke4,HSDqoc98,in6QeqJG,JIYsSQGu,jO8Z3iQZ,jOPklwfR,K0QIN9k7,K6BHEacx,kpQAe0YX,l34xMI8f,Leefm0Fz,lrE8X4z4,mijrVHkg,na1UgXeL,NXyTgIY6,YWkWWLFf,ZajM0Ra3,Zm7UiLbh,ZvlyuDp8,oxQCc80F,pDoH5XPy,pepIRlMS,pLVQTRQg,pUSlkZBb,QSPsR9f6,QyLsUAdN,r0f62FBF,R9FFcm4K,sNUrgovH,t1JNhX3a,tCMKaVlr,tm6DKHQz,TMzM20PT,u2F04vrL,veBNZM6b,VpoDfCw5,waY4QSpf,wvi7BoLo,XF9r27V1,XKLwJ3TI,yfjkPigv
+                LNTYS-HRFD01	qFjN5GJz,QhJaXfvl,tW4pq24E,GKvYikED,nMVZgM3g,O0hKW5L2
+                LNTYS-HRFD02	fgWDJpSG,OMC79PxS,p59qpAJy,pqL2OW8N,tYC7mT56,0cVP7cfd,5tUE04WC,BCmjQKeM,eahA3rQo
+                LNZSJ-JFKJ01	3U3cOjF3,6UsqWslw,DwbfU92O,q7kB7Unn,r04bCkWe,Sdc7zqEB,UiObeoNT,yC8U4jDC,EQyp3Sx4,fBvWb2Kx,GghEgSrs,j6U4Ggsv,JDKpWrun,JfUJrHYX,JrFoiadf,L0oDPybp,nzKj5C8g,yLisfTJk,zcCdQtI6,ZZS59J8d
+                NMHLS-YJNY01	YhPY1qj4,yjPFzgDD,zdR8V4b1,PDujWQMK,PttbyWHd,Qz43QV1a,S0Of4nHH,s4rW4PSs,s8LvS0dl,SKI8vWFu,SOFRrwKy,T54tEHN8,t72uB8qU,TKRgYr5s,U56dEOjA,UbAvZxeC,vOKuWAJe,vVGr74aK,vzQlu4zf,WM9S9QTz,Xegi08xp,xhmnIYT6,XYFQSt4p,1cyCdWwW,1hq0ZpKY,1I17YD6Z,1liK27VP,30MpvF6O,3rtzVild,3YMDrJQj,4INMKxa1,4wpykJt9,5seAFJCe,7GORbDVw,7WsiHQrG,9ZlypWTP,acfOZttg,agOeSuE2,Agxcg5W7,bGoWTFV6,bxNmMbxq,Cpv3HDnI,D5JAWjdx,dg8IwCwy,DQTtwzx7,DRKpaSIk,DVlWW0Er,DWVHjWS8,EYk9XpfT,fLrU1jeZ,FSPlYXXM,fyIqa7cu,gGsjN8MK,Gutx3CEh,h49m3h6F,j1eytYUu,JXYvbOK2,lD9Gi8rl,LHIypCFj,lMZoG8Hy,M7M6T4Hy,MY1NhVjT,Nj1RlyOI,nLXYsVtM
+                NMTBS-MYZN01	eseffgFB,ESkTstnh,FdPG1x3f,gFAdePGk,hqMTmEw8,kIFrZhVb,KJfFqRJr,leakr7YB,mgTiwQYp,MJGyTAxb,MxQkDu4l,nNX5UWNw,nQ0HarS0,OTbhhux0,OTO49l2O,oTx1K5VP,PiugcLTs,QT7UX1X5,SFPvnwjF,TbzDbVU6,TiQl0oU6,UbhrPglu,uQvjGbyG,uYw4ZsDn,vWqvPD9l,W8DWF37y,wMU4OwOX,WQy20XvM,Xcny2JnW,xudg2hok,Y5HGA2hc,ykzVAH5R,ZQWyqE7B,2sD8ZGvC,59iutO4V,5ZedHcOF,9bhMpurk,9pdoLMyn,9PmTrz3n,9TFCE3Vo,aPjHmz90,Bf4FRn0b,CPz0Dmir,CQOf0lKG,CsRnltu0,CWHeza2z,cYseTPe7,DyMlvfSW,EmchCoaj,Emk3oOp8
+                NMTBS-YJNY01	01pH8del,1EiT2yiT,5mLsn0l5,6VPEBBSy,9EJrnvNn,aGVnbe3D,akdcMDko,an81Qf6t,bBoRokeK,bM5OSiCf,BqcL1ii0,C49oWNeW,cfpU1xOr,CHdiXWfq,DP5tHRtO,dZ6NgqrK,EBa0zHDX,oUcJIBQE,P084fF2T,Px0Dwvrb,qYIuudF2,sJ4Phhbi,UCJraNzP,uEgPIx4k,UGcio6bZ,uHw2hnD4,uNiv23cd,VfhfhJOr,WgEm9mKg,WYGWAfAa,XEL02dSX,XJmU8srb,XnG6tCM4,Y0ubjawo,Y5ws7DNc,ybMo7E6h,FMxdR62k,g5qjwb2n,G6zrROMp,GiUePOVC,GPow0Q2X,HLU0aMZL,I0hfbrac,iAFCLTlV,iaWjBEsD,Il74mgBd,jzejnMlg,kpi0awTA,NP84umiR,YNDmeWrw,ZavVygrE,zXi0IlNQ
+                NMTX-HRFD01	yLfqjLyl,PwVWfEOz,Qs7uPAso,qVYfkRgE,ReIdcQZZ,rs0rSImQ,Sm24EZhD,tsnhWzlQ,tWA8aYMD,tzfy9Rsw,viXS223M,VkzHFJ6j,VNlFc2fT,vVq7fmJn,WeqzUhog,wKSkJWL7,XGKxUCvx,0yL8448L,1BnSUGPY,1XuuFD25,3pzNXQiI,4bHdGRD2,4WjqoE8L,5AQBhuGz,5FCIQnSP,5hzSvaPE,5T9cYkoK,5t9GUUey,60zGVUws,65f9DJIZ,7Q1iFkY8,AwlLPst0,BbC4j9cF,bBxrv1rY,bhQXEsdY,bPrDZqmt,bPz1Whl3,BwQWtLcJ,C5zsJBpo,CG5EBQxa,chRm4U8h,cqRlS6mq,d8SntMeK,DfbPf7ft,dlGyn2X6,EzvIH5xO,flFE0oxf,fOSmvw3k,GPLPXeNv,gX0H075p,h51sq8Wt,hhUm2WEV,iCL5GiWD,JdYs14Dd,JPcVQUYx,JpuvJgZD,KFezI5CL,kRHzRlFN,LGCmDvNs,lRDxT1qo,LU303VC3,meCBV7H3,MiB4zJJa,O20y4Zii,O4FLE9zm,oGgQhlUG
+                NXQTX-HCFN01	gZbcqmbU,NSfylBye,OEoTs2Hj,sATe6XlI,uZgoYOnP,vhgRAGze,wW9khdn4,WYubG8DF,xPwcuS3m,0ZY6nMbN,2TaZgkjk,5F77xX7K,6Gb4fBpk,8cKDQVtv,AIBQzkNH,DiwRW51S
+                NXTX-MYZN01	1L2dcfEF,3Zy7ZRVg,4nejNABD,6kP6m948,6ujlFWam,6YuJRLTU,71UHvRXb,7VXBQ1cY,8Pf5Idwq,90OhAj15,9pd9doRL,a5IeTXY2,AfdFsM0d,AXDTFU8f,C1zcgXwP,C6wUwsn6,C7KLXue4,dNeNPxvK,dwzysQ4V,G8NFXKiI,Ha7jegM8,hAEkgGW1,hfYoSTjB,IAfBMWq1,iQhNZOaQ,jKwRhqHj,kvJnb9NG,kvT1tU0r,l5DhJCuh,m7Ufsem2,mA1iEdTj,MG6PrOH9,miHuHh25,MuYMkyhn,YmY7rnht,zkfHfX12,zLqsIUR7,q8rusLmO,qi2IeBKF,QjjcgZA1,RA1GC4Kr,sbmN8vB3,sNvAosCy,U3JrWuvr,w4qxddXr,WmVe9cl2,X4QsirF9,XcrJuGSU,XEH6ObOJ,XUogL5gz
+                NXTYS-LHDL01	paXYaa64,rikwZv0H,rjF80Jx0,rMxgTzLB,s2jcWYiV,TlANWmFQ,tSlUhGI3,UsKlJ2i7,vOr864kl,VYAdRCPM,wPJbtBzj,XnZTnRu4,xRbSkeXy,ewHWxJ2T,ghLVCX3L,hJA0ydiD,hr8BvQ7Q,I1gEt7FF,K5XjKB09,kcHLOJCP,KTrUHCtt,M5Y7CbnQ,0tMAe8kZ,6nAEPdrS,7DemvO5O,9wOy5GtL,dV1gHRGZ,dWsoCiYC,dxAdpUEr,yH5KCNQb,Z7UE1J6M,z8XnCl3y,ZHy71yLy
+                NXXZJ-DFDQ01	YmSBwTLm,z4RzwqHJ,EnpQ67F0,f4zNMiCL,f5a4yISV,F6l7augZ,fkng4gBX,FnxL7yaV,g8ARg2vh,GErAAZjV,GGCsrcjS,GOSLoSdQ,hfEFzI7h,IZaPfyeO,JOrfe5mR,kF2F1IPF,L1SzSdeM,mgM3KMSx,mPELgbt6,ODnqgSmS,OHZvxinp,oj04tFHJ,oMbdXKUM,Opy31OCO,pUGgPDCK,qBWgshqj,S6H1ufaP,SYP3QMCk,t6FRntpY,TdV8fG1l,tvMaCOWg,UNB44MSN,uXpM8Ido,vw4Am1QS,vXukxQjP,wHW249UZ,wkwL0KZI,wuhLPvxN,X5NSEvXt,Xp7ZXtOk,1KoQaeo1,2vTsVYwQ,3lljV6FZ,5qNsw9mr,6CmrYVRr,7Lsgco5s,8dgywJuK,8HHyjfRW,A3rRJXpI,AWY6eKyE,B9cactGm,bJl73hEb,bsmREmoi,c8qZmFw2,coFTb6pY,DE2yFt2a,Dv9E8FC0,E6pIjnnB,eGJRV4UR,eMUBWAK7
+                PLC_ALL_Config_10663	0wS2SKM2,16nAgK2n,1Eh3sr6p,1Tk087DK,2zhjL931,3nkd3nfX,4tCH91wd,5RCvs1ol,6kUxBVFF,7zM5uGR2,8lZg6BcE,9AQADoFI,9MiYaBry,aAputk91,alcUbpyq,BtulTASy,C5J3VOhi,CCsYPABz,CmBgA3KE,dJn66KyV,dOyytYCk,DU8GMmJv,eQSfIOuZ,erZ64c1R,f9ltkLRS,fTDMHDbt,G11cD0ML,G4nmu0bT,GlbeZUnt,gSfTfF8n,H6gUz3j7,hAeSrA5o,II9PwMr5,Ik81yyag,ioT4xJ7A,IsmKMWmi,j6SH5X7l,jiX4VBGw,jThWQ9cA,JulMt7J5,K79LRFB0,kX4bo1S9,lBNwywNa,lFsHUi1x,lIWHM6DM,LRTJofKV,LxgIBfeu,LXYecsUb,MQ6EuxBf,MUDfp7zq,N42NiGqc,NNcx2rqR,NSnKSIU4,ZGWGRnjp,Zlz2kHnI,pH5fbMU9,PkI4KZFi,qG6rRF3N,qoLTngBm,QwMNNgXE,qwWAU4AQ,r2oQzMhm,tfiePUfd,TG2KLgBR,tK5HWSAG,tRzJcQ2d,tvqRlCgu,TVuxyu7B,TycDx9f7,UKc29M8p,UYBpcyOD,vOk9mU1X,VzXh8jvY,x7Ohus80,xlrpLGWg,xPWOf3TB
+                QHFL-YJNY01	Oo941EdI,oQxNF0cp,q71S6Nko,tlTEreLl,fCsd7zfZ,GgwNQsA9,Jz6mzP4B,mFVFxVyG,nStKVrBq,nWqAeUbC,ohXAMMX1,OI312MTR,4sgfwrrU,7Ya9mSVQ,9GZQGhA7,9W3vjP9h,BPUPR8Ms,c7WbZ76n,ZKtjjwgT
+                SCFYG-DFDQ02	yn3zZgfy,zghvUIB9,Ff2KmzBV,fUVFKpzZ,GhMLE3qE,h2ZARLoL,HPRhAMnn,iLT5xPvD,ivHMY81I,MpLYyTeR,nD0R2d8B,NHz3ipZQ,o13wZgSx,pozGJ7XS,q0oDkXIJ,sAi0ffNS,SRuzsdOw,teteESJG,UnPp69gf,W7mTgEWH,xALx3imA,xhbx1SBB,xPrNfH8x,0cDQOHVE,4mWXBBjc,4x2yEusW,59oXU2CT,5EUvcqAV,76lwbPRK,8QkFEJ8H,C4BF6CXW,D9OhArLF
+                SCMH-DFDQ01	0pvwD2i4,0VE7bkZh,4kzjQ1Ek,63O32ubg,74aHsRdo,9COjv7tK,9yTTTCsT,DgTqyWk7,I08PLzJz,iuQ4IojG,NfZP6jHh,NGRxU6yh,OnhszZVG,PGKEoSS6,QrNPbUbO,QyfSdNxG,RX6VynUA,t3hfM5wq,tEEmjHvp,tZcgxTco,w9kcsqFy
+                SCMTL-MYZN01	pBG7bXon,pfcCQNQH,Pqb257zT,Q3D1Q47K,RBC0LNin,rHtLKAwm,RLnXDQWA,sFS5sc4E,T7Rp3Qtn,tgRqXsoQ,u3BnGmoX,UdLGZwIM,vuTUlUjE,W71D3qgt,Wmuhi5gy,wVKvvNop,XZvp5fo9,1ye6zWFE,5c2sGvfV,5EKIrkAR,5Evm9PMN,7WHGzPC8,8VlGRZJl,A5r5g3KA,Aciy3KNM,aj7RvzWC,AJXOJPCa,b03M1Sn2,BXm8lDhz,C7szwwac,D7cMRKth,DOh1bT1u,dvOA2JWS,E3xH5xbn,ZVKPES54,GALqJcYO,HBWIZEXc,hdKDTcID,hTRcPRO1,iU3PG2mC,k116NbIY,K4KZCBqU,KcNT76Cx,kO7Hd4Oe,lOPtOesr,Lp23prkq,LXIWI9Dl,mZbvIjRi,NiMB1GG3,NnG8VBjd,nSPEPHtQ
+                SCZLR-DFDQ02	KFmtac0K,lKe0qC2g,ncv11Dzc,nPqtpiV0,ObAyqnYn,2WfMrgDb,9D6cx7wZ,cfWqAnrw,pmklzVuE,rxK5VrHN,s4Aqxy8N,sskBAnFx,vKlCuCSv,YSGGEX5R,YT21ossT,yuzuohSS
+                SDAC-LHDL01	3HILaowy,5fUo8Vds,AHZgX8cS,AMfsIsHe,ATp0E1a5,bThZBoKw,CZDMqwe7,DbXDsu6G,FkKpFBwB,ge9wOTUf,GpfPdZHL,IUV94Lx8,JNWSxRJw,leaxGVuE,Ls0fc42N,mA0V6fbz,mkhmSKAP,NFlemfj3,pCzd0v1V,pk8s2z4C,RKd8TSyC,RTii3JjM,RzA8xvq8,TbODMo6a,tqefliLW,uiVAtML0,Us4T94MY,vChEysc4,VunJ1Rd3,W4DiNemp,wdYf5wTY,XMMrBuXa,Y6ej1Xyv
+                SDBS-SHDQ01	p3zYNMMQ,QCeyaWrL,RvZBLUcP,Tgn6a6Uk,TNBYpiA4,TsGNN3SJ,UAG7RYrA,uLWa9iym,Uyfzl7gF,wazQBMuW,wuJphOUn,ww0i5oiQ,Xd706XFw,17qqieKJ,2iJKPaPT,2rf0Hjs5,3UhahH75,4ozHTJ03,5GiuNirv,5vDbMKh9,6MUub5hM,8Cro8AU0,ady912k9,ASIcIYJF,B2m1ErCN,bfScbjF9,Bkhk8Jqo,BLCTCu97,cCZGEyMQ,cfUjknq8,EFBrwGeW,EHKeAxeu,zOCpzlYM,EYFykgpQ,faDpUUOR,g1xJC0j6,GA3cKIXM,GA9UWcoH,gabe5x3D,gF9EdRky,gZCQldgj,iMdqkAem,Jb1FjlqO,kMfqPBhu,LHcr3sAt,LPNcsGM3,Lv2X2wud,mKoaurC7,MTbtmoad,oflj34BU
+                SDDP-HRFD01	f06CSQV8,F8nkGPKq,FPK4ya9c,G6QtkCvz,hNnIvam8,i2CNMr6U,IWsWZCpr,kzWwOByT,LbySskFD,lIUhhtK9,MO3pTEnB,NkEBWhFI,NwlQ8jrr,O6CROpLr,1LgKjjfb,336qCDNk,4xsSUlGK,9dLLi8zt,9jOrJk5F,Aebp44vI,BALu02fy,CVjbN70H,Ef0gp4c2,P7SYUVym,pVhvSxOF,sJfIG39n,StWxKTYC,TtFfKHHx,uEtCoxTZ,ywjlk5rC,z47L7In2,zcr3C2AQ
+                SDDY-DFDQ01	ZlqC9rzu,1tLSJHXN,70pKjOgT,CqK8XnER,d4QQzb5B,D7tnVn1E,DMKKrYSd,EewmWkpE,enVctzHH,eslbotd0,FAOw5G77,fhPNdo4T,G3ykyvbp,ge5gMjGV,gfeE53d4,h3Bd6U8j,jbgqoP3m,jDSyHsS2,KQX2IYOq,kYRuJNmD,mj3j8mav,oMAv6Nf0,PgYe59ep,rOORwaCG,rsCZopwq,TAR39QXE,tESJdNAZ,TNlGFPi1,tw3t40Z7,twEcYQS5,vh22TYHF,X4iPSLyJ,Y8wryGSi
+                SDHY-HCFN01	OoJNqKDu,ROljUSG9,TqUygBgx,TWewE2fM,Ua6YhLdP,vvA0mmrn,1FWOvbSm,4qmxWeo9,5jfV7RSB,5V1oWTYN,ajwdDxK3,b3DkKEGb,BBV1sY1m,bzTlfiDm,Ckrn6rZK,Ct38K8gm,Db56yvfG,dfxvSrYr,eC2X75Qx,yrrgdXjk,zoyONFJb,zrm7tS3N,EzsyVuGn,gqzNIekP,JO2FV3Yr,jTTwTgm4,Kof5yYzm,Kv5okIH7,l6BKwVia,lae7lp9W,lDDXlhuF,LxdRRIX2,N1djOBtW
+                SDJL-HCFN01	FEKeaRTg,fOcNXukN,hTh491LL,lzYKuK8F,MrMmzoei,NzyQJveh,2ljaCezs,2ZJehGsb,5FD0E2lh,76lImhaP,8LTIjrDg,9DK6HPXo,9J7XJKFy,9yOvLozb,AjXfyg0f,c1A074aU,CloOEWZa,D3ck0zjm,DB6AkcJc,dxfaIUIG,E2GqJLUH,PFf9mqRs,pP3bBg68,QDGoZh4G,qDii0b25,rp1yHgDi,tEta8QEz,vAgfs6Jb,vP6sGteQ,W8usFd6L,wb0yS2ZZ,WoRycCY8,WT2XxFDN
+                SDPY-LHDL01	ResNIFe6,RzQlHGbp,sVtSH41I,Td2YMNj9,w1nRimII,y1GMki2Q,0vsx8tEg,4IvzgZKU,4QaQyKcq,4Uv0k3Us,5jelbb70,7Hy2btmW,8HrGErYA,8PS90VBC,9UFhZ0Ux,9usWyNdZ,aplJVKMy,ATLtNqkR,axd0wa3l,bcLZT1Gr,d6e795xz,eg89FZF4,gcTAF4yC,Ho9R7dhP,HwUMh2ul,IKD0FmrK,j4YE5WF0,jmvhV0CK,kh96tmkA,LaGaaHI5,lLVIZ8gY,m2oWBfxd,nKmUyuik
+                SDSJ-HCFN01	ffenrgp7,fHVUyVOq,GJGMRBm8,GP8KIMAF,Gr0DKhxN,hoBgbHxP,hRNlEomf,IDR8OUZx,JwYWJY6v,Jxy9XkcT,ka3UrHua,kpLw2ShE,lbZ9YEkJ,5Y93oxFC,Bs8NdIu0,BWDJei9j,cu7NIdF7,DKArGd0S,DOPz4qfG,ok3sb0jd,ouq0JdM9,P6zZ7RhN,q0YcUDWX,qi2JWEy0,qSfT3OPx,rGI6HCMR,RSs0XSXX,thN9QCXy,thOPAdl7,Uea93Dwe,WDZioqN8,y0USOWcm,ZLHRnVzj
+                SDYD-HCFN01	YPPV6lSl,YWUje7XN,zKCujSuK,06abyJkd,250mHqxG,28XVNZpX,56syedUb,5HQKNXc0,7EPTf7GH,8f7iAOGk,8RxlQA11,8yyFekGV,8zx1n4ng,AYBlFupt,BD0EFenU,bic7dfbz,BxzpxcNJ,CokBZud2,cspoHrzW,cVUlihKZ,d5f64gb8,DtdrIc5f,DTvWSvZe,eOeH8hx8,EtEmifhr,F7tPYOc1,Fs5E6GZA,fvntMeCa,gNS0TPQW,gP6kX1aV,gtd8JN0n,HEmsMsJR,HGc3tBaH,hLuV42GP,HpaaQFDk,hXMYx9gz,i1wuTAki,ir5I5IV5,IUO0mBJj,ivV0zi4Y,J1iT3pfm,jIdNaSQe,kWZoemOh,L4cvnxPu,LCyOx49Y,LMl7XSPG,lStVUeUc,lWu1UOc0,lZKVDMav,MatcPbmd,mkYiZP6l,Ns9oxRyW,OPlaOjPm,Px3Q8p1d,Rcgen9fa,RUYFyHp7,spwm79HA,SUtrOrIX,SvcV9EUv,tTQlhZFz,V564HVxE,vHM2KVzI,wGi2MPGh,WTQBpc8e,Xn0GqrZm,XWppptfZ
+                SDYS-HCFN01	OVt7BfHC,reTSWG4y,sp2GK3T8,sZhAoVbN,Tb7ATmoK,tIj7s5VK,txSgzfsc,ViczDngy,y6SNif5p,366BZTBO,4v65a9ch,6cGArZG8,8ai8nTOj,A1EakeTq,alcGrcUQ,AnZFkFAf,BLAkVmc1,bnwLcem0,FKH5pqdp,fZRccHxP,GJbq61co,HPnwVsfS,jbRgqAqI,JUKVP0Xi,JyrQp4wT,kdUPjuZn,KUWgrykt,m5Gg5ziO,MNUPXOuq,nYDHEGrg
+                SDZK-HCFN01	EokZJIbY,hpPZyauv,Kr6pRz7T,LitGhiar,Lzx1MRG2,me6VMi3E,oiFdk2EZ,Pb6rJqa2,PMrGEh3G,pSFFa9VT,q7pMuBBx,tHkrRxe4,WkAj4wam,WQHGKMsy,XKoAwBRw,YwlTTLTr,zQkxoxbA,4W1lijIX,4WOaGQoK,5R6dIzAN,6LOIvFGx,6mBzm3sc,8fI2fjEt
+                SDZK-HCFN02	2kW2OY0N,3tPBGby0,8qJICBJK,BFaGaWPm,CXwSuioU,p1WZsXKH,tmRoD2DT,U1wS0dbQ,iBoTuCqN,LhQHUTsv
+                SDZK-HRFD01	HPGLc4HE,ig9eGmLd,jtniQD2Z,NJpTs5JN,obUqWr0B,p8dzQ8YX,pglBBSxk,pQKfHvOu,RtkqfvaV,s1drrUor,SaTLA9O3,sGy4IZ8j,SrDJHEVd,TB4lUQGj,VqhVahEd,vWEA9Xda,vWI1fwoU,Vwoba1BZ,w6B2zxsi,Xq21uABb,0qMB619a,4cOIPKNd,4zs9NAPC,5ti9EMON,8OaBVBNl,AJJd1eBQ,C5AGl9Lf,Ca1h9SVM,cHrEMdgh,d5v5UauL,djKV4sl0,EFP1bvEZ,ytDRc3Nh
+                SHC13	ZhSm4wZI,ZTlFAYX8,oy7VoJj0,p9l7cXoD,qLBAmeXu,qQVkDOzo,qs9bxsse,ryzTuNlG,Sa2T4PxI,tJAYZGRb,Tzh2qDBc,UQpxQ4UZ,VsjwHxK7,wetvdDol,WmUkJ0N9,WNkIcyCg,xMYXkyla,XNFTmEUF,ENovV4q6,FGxw4FTc,FRkRQ3Aa,HaVMHwk3,Hk8BbObw,Hn2wNvfl,iVfPk3hL,jgmXZ3XC,jQO0lG8A,JYalvaQj,KQlELi6R,LFfDhO2m,m53owutN,mlhaqJYl,MRikAjXe,oEG7fuDZ,0EdtIPa6,2oMGxAjO,3aEh8iXs,5cHd6gCC,7jOTGbzD,7ZHoELVp,8t5tsEHU,bv9Tdwt1,D5Z64C7r,DLVObDs3,DuDXPuNx
+                SHC22	6MxMNEHP,7dxRyvb2,872wn972,97Uq9qGQ,9pes86jY,Db0yjve8,DSXQVogx,qfpYwQVv,RM0Y5742,T126Co5T,uEJa1bYV,ufvO3PKo,uowyDJmM,W1MHchsE,WDEo9uDW,wxiOemE6,y4XAwVh1,y9S7PSwS,FFZStBcr,gENY1quD,HbSAVX4k,HEFfUhm8,iJr6qswU,iwXIe1uQ,KCKYwud8,kY43lfbT,LDkIGnVR,mdSztj0f,meGJrmus,mzWwYHXN,nCQfgnAe,nWUE6Pm0,OCxj4N42
+                SHC36	erOi1nOc,F8IgIO3C,fBsrvykm,fL91ex8u,ftLD5u06,FyTWccFc,GgNligPn,gHujqx2N,GPB8YRNc,Gq9QgQdf,GUzRW8Ag,H9YSgNGY,HT6jAvzS,huZw36tF,i2tZKulv,I487FnjM,IB2SSjeB,iC9iPsCb,IL0Vguy6,IlLjBY3f,inJOoNPs,ioXzp2B7,IsMgeCZf,J3FSxzI7,J4dmLVoM,jBdaEfvQ,jKLwnh1a,JSLdHIDU,jx6HVrFC,K9wbhB1I,KFCAlaPd,KWjWUOn8,LHGXeaTR,lPdltcmB,m9dAXKcP,MC2kTMq0,merTWMFx,mJsbt2nQ,MLg4H2ii,MlYP8SmY,mWBbACHx,n9bpDvOn,NAE6q21J,Nfh53RxS,NXuLFlmQ,0OJrzl3K,0X94bple,0zKdLbRX,32CQqII8,3CI2Bxf6,3qp7GgVR,46vUsVCv,4MBh1Q36,4T2iHhex,66QgRiXY,69WkYFhk,7i2ml78A,8Ay5Uqo5,8BYtTqbk,8xEeOg31,8YHHQ1kw,97Rl6oyH,9kdJAVb7,9qanBzSP,9ScWsmay,aPzlgcAI,aX5aAsSM,B2SoqJhh,B5aFM4Pu,cBtBDGbV,cCT421DT,cIIy0xPb,cMd7OZ4m,cnVXAXQy,ctPgVX9G,CWfs96ga,cY4dfE79,CYSRCVaK,D0USmdXl,dnUn6PwV,dxtPlM95,E0XvJztA,e4mHkII2,yleo6CoT,Yyfv4enj,Z17mXArq,zDvGOlZ7,zF4gekHX,opWfKIgp,otkMNH7E,oTpcz3ya,oXY8Cl4c,P3z7PtRk,PJkbEZ9O,pnVSkaOS,PrLPEJTI,PWzqw5Z2,R3zqiVEp,R82PoiUE,R8xqXfHT,rboTWnWO,RHQVIInC,rQSH4ktQ,SdvwTzZx,sF10QuZK,SO452uf6,SpH6zkGv,tuNVLDsY,U3ib0dXX,UJmns7ZR,UkmmcZfc,uWyBAuVL,Uyh2mscQ,vfdxXoL
+                SMY15	s3LKk5ck,ufaAjtVy,0itKf5lE,0R8Hl5o0,2J72xzNo,2VXjcx1D,482vZVyj,5OicLn7U,64t5cpnD,aUHweNmv,cPW1pk8g,Dydr2gzA,esDFMKOA,eXyI6HlB,EZuHEcjk,f57izEbh,gecR55dO,HJXjokzt,hoHS4zYQ,KbWhnsy7,MkPiBTih,mLshMpqh,NCEklZfl,nduFe4J9,ymJpf4Yg
+                SXCM-DFDQ01	ZMsXEcrt,0vfGTHnI,16yW0ESW,20yKRKtq,2mIvhfE8,6nmlGcZh,6t71A1MF,7EsFpql4,7hlfhCtD,a94nQ6Xc,aHipuCt3,aydR2fZm,c4sSG1BJ,CaC5C9sm,cDbjVFf8,cS0RBfwK,cVzMQgKg,DsiGelms,eJy6PMwh,OjHBUMqE,ot1qkwkT,Qy4g1JXe,rLDwKdf7,tBxZInns,tUDzkmjq,u1nrnzHR,vHngSiJz,vMPO4VDP,WRjwT6vQ,fea9Rxbi,IQDkXqxP,Lcw7LqO6,ML9xiXpb
+                SXCM-SHDQ01	G5vPveDm,Gw1zcSRK,nklbyUI6,O6ACwFEN,0qxnSeam,34HVk3NG,7Dcjjia1,aOcQJMoU,P2nz4rpY,rVtMhkdG,vVy4RROy,wYkmKfxz,XjJRBXjv,XOpL06fH
+                SXD22	OZYrlnva,rbolDV2t,rK9R7Hia,t091708b,uh4SezFf,UXmImriP,v1zwOCkd,VtXGCyFR,lyKSx5x3,mJ6a51w3,z2Cue8IN,3Q1dvr2Q,6zekawwD,9meLqg1k,drqjZ4t4,ekJdAKZt
+                XJLFK-DFDQ01	94hxT8wr,GyD6qNE8,Hlb5sBOS,hOH5rgPN,hSo2kuXk,Inl4WVhv,m5A9iMi7,MrfZ7FgF,OSbjQuZZ,PCBVRbys,wfD5Bjcc,za6lTlPi
+                XJSSS-HCFN01	eX26imWq,ixttD6hr,lsYsCXIK,3iqBK9Jo,4BCHOr9V,rhyShsUO
+                YNJLS-MYZN01	oK9fXEjp,pT1iXbm9,PVHPlgyz,rTsLT7rM,SRFcW217,tgAYUjA1,Y6JvTu0u,gojITaWi,hLulkGgh,iGeYixAf,4gNrsKMu,d7gyAKKJ,DQzBXzqa
+                YNLMS-LHDL01	0WnVWRBL,34QSWedQ,9mBao1MR,9uLz1QRT,ARdEBsUo,B7h6avNI,BgRzspY2,Db4rlxJt,dXPMxHzT,QnnIcqYk,QPzuKlIF,tBSVWRSe,UoFXlXk4,wayw1kFV,XmRy5uIo,F69KmE16,fdKkj0NZ,h9gkxMtJ,lfVMboKa,NP0d8iEV,o0pDAdnk
+                YNLMS-LHDL02	jjuUNWN3,m6oFwmH7,NZQiERkA,1BZgDyIZ,1BZrSKvJ,a1qL4EZG,CrjzL6hH,zoCnat30,PQptg4df,qKctOXEA,RUhKzL5A,Tkc6dlPp
+                YNMFS-MYZN01	oNtU7paw,PErQS7pO,QDdVbzUU,qeBvE9Wa,RHimG2TS,rJTi2E8u,sCzCrVjD,SkTYNPsA,t2t7viFz,TOmkUBxG,TP0zOHXx,tXztRmlm,Vwga1nfk,wbeHyxaC,WFnbwiQQ,X7gG8eyX,0s0JzxKL,0vSiA4xe,11uU1mqr,1qte3xiN,378L9VFB,3HYge0oq,58DUR0iq,5zHGEoLS,6XZ3rNMU,7JxFCmOe,7usZdsKW,7xORQxec,885etrFh,8hnjfYku,8R0hmyym,bMdMBP4Y,C3B3rBsd,dlYIAavP,G50QBNWs,G65jpZdb,Ha1XuXBK,HQjPBcG0,ikHFFv2Y,Io7KqISv,IrIQLtkY,JR4VQmkT,jZY7gOb1,kg7RNqlq,kUPMDz1k,LHzzRw3u,lMBswqcr,MEJFpigi,mGV6AGxO,MoBGdNXY,mpp1nQ7D,n6ISBk9K,NE502TT8,NPXVZCDA,Yl3vqwjW,zjGzLtwf,zondYJlv
+                YNSD-MYZN01	Z18zK1OC,ZwVMnFWz,PyPpWweA,QGcIi41D,qSk35Kbc,R5zqdoUJ,RclvjtqM,RqMlrM00,s0C8MdUU,swIe44SK,Td9SDhXR,tfKPsJm1,tMlfsbwC,tZaMUpou,Vm2gSFUU,WfBOrSQ4,WXpNOgIs,xh6Zxct6,XKdutTuG,eVdK14j1,fAmgggWu,fLgKfCg1,G4TuTADz,GfMkmheK,gkUVVnp3,GPD51RPU,gW3JAJVe,H98kcTrD,hUV5ML2C,hW2u0Zps,I77KQZYb,iMX9FVRk,Kmccv3LT,krDPBV7s,lizXR65s,lMvZEiwr,lNAzRBo3,LW84DbCk,MUucp4gE,nNNKirtR,NwkdcPnZ,0maWhoFG,4NkcP08l,4VYKvjNd,68dxyeZ2,A8vYuFNM,AeQtJhUt,aQfNKnKU,axt1x3SX,BcAjAVOo,cyZopRNl,e2MbtTiP
+                """;
+
+        Map<String, String> plcVersionMap = new HashMap<>();
+
+        for (String line : plcVersionStr.split("\n")) {
+            plcVersionMap.put(line.split("\t")[1], line.split("\t")[0]);
+        }
+
+
+        Map<String, String> cedianCnMap = new HashMap<>();
+        for (String line : cedianCnStr.split("\n")) {
+            String[] datas = line.split("\\t");
+            cedianCnMap.put(datas[0], datas[1]);
+        }
+
+        String[] datas = dataStr.split("\n");
+        Map<String, Map<String, String>> maps = new HashMap<>();
+        Map<String, String> windNameMap = new HashMap<>();
+        for (String data : datas) {
+            String[] das = data.split(("\t"));
+            String windFarm = das[0] + "_" + das[1] + "_" + das[2];
+            if (maps.containsKey(windFarm)) {
+                if (!maps.get(windFarm).containsKey(das[5])) {
+                    maps.get(windFarm).put(das[5], das[3]);
+                } else {
+                    maps.get(windFarm).put(das[5], maps.get(windFarm).get(das[5]) + "," + das[3]);
+                }
+            } else {
+                Map<String, String> mm = new HashMap<>();
+                mm.put(das[5], das[3]);
+                maps.put(windFarm, mm);
+            }
+            windNameMap.put(das[3], das[4]);
+        }
+
+
+        for (Map.Entry<String, Map<String, String>> allMapeEntity : maps.entrySet()) {
+            String windName = allMapeEntity.getKey();
+            for (Map.Entry<String, String> pointEntiry : allMapeEntity.getValue().entrySet()) {
+                List<JSONObject> allData = new ArrayList<>();
+
+                String points = pointEntiry.getKey();
+                String mdmIds = pointEntiry.getValue();
+
+                System.out.println(windName);
+                System.out.println(points);
+                System.out.println(mdmIds);
+
+                List<JSONObject> faultDatas = EnosapiUtils.queryHistoricalMeasurementPoint(mdmIds, "2025-11-05 00:00:00", "2025-11-08 00:00:00", points, "RAW", false);
+
+                for (JSONObject object : faultDatas) {
+                    JSONObject jsonObject = object.clone();
+                    String mdmId = jsonObject.getString("mdmId");
+                    jsonObject.put("风场", windName);
+                    jsonObject.put("风机名称", windNameMap.get(mdmId));
+                    for (String key : object.keySet()) {
+                        if (key.contains("(")) {
+                            if (object.getFloatValue(key) > 0) {
+                                String point = key.split("\\(")[1].split("\\)")[0];
+                                jsonObject.put(point, cedianCnMap.get(windName.split("_")[0] + "_" + windName.split("_")[2] + "_" + point));
+                            } else {
+                                jsonObject.remove(key);
+                            }
+                        }
+                    }
+
+                    for (Map.Entry<String, String> entry : plcVersionMap.entrySet()) {
+                        String mdmIdsStr = entry.getKey();
+                        String plcVersion = entry.getValue();
+                        if (mdmIdsStr.contains(jsonObject.getString("mdmId"))) {
+                            jsonObject.put("主控版本", plcVersion);
+                        }
+                    }
+
+                    if (String.join("", jsonObject.keySet()).contains("(")) {
+                        allData.add(jsonObject);
+                    }
+                }
+                FileWriterUtils.fileWriter(windName + "_故障报警.json", allData);
+            }
+        }
+    }
+}
+
+//@Data
+//@NoArgsConstructor
+//@AllArgsConstructor
+//class PointData {
+//
+//    private String windFarmId;
+//
+//    private String windFarmName;
+//
+//    private String type;
+//
+//    private String mdmId;
+//
+//    private String mdmName;
+//
+//    private String points;
+//
+//}

+ 136 - 0
src/test/java/com/znzn/project/dc/dtdata/TestStatus.java

@@ -0,0 +1,136 @@
+package com.znzn.project.dc.dtdata;
+
+import com.alibaba.fastjson.JSONObject;
+import com.znzn.project.dc.dtdata.utils.enos.EnosapiUtils;
+import com.znzn.project.dc.dtdata.utils.enos.FileWriterUtils;
+import lombok.SneakyThrows;
+
+import java.util.List;
+
+public class TestStatus {
+
+    @SneakyThrows
+    public static void main(String[] args) {
+
+        String dataStr = """
+                1LgKjjfb,336qCDNk,4xsSUlGK,9dLLi8zt,9jOrJk5F,Aebp44vI,BALu02fy,CVjbN70H,Ef0gp4c2,f06CSQV8,F8nkGPKq,FPK4ya9c,G6QtkCvz,hNnIvam8,i2CNMr6U,IWsWZCpr,kzWwOByT,LbySskFD,lIUhhtK9,MO3pTEnB,NkEBWhFI,NwlQ8jrr,O6CROpLr,P7SYUVym,pVhvSxOF,sJfIG39n,StWxKTYC,TtFfKHHx,uEtCoxTZ,ywjlk5rC,z47L7In2,zcr3C2AQ
+                last(WCNV.SLCNVAI009)
+                0vfGTHnI,16yW0ESW,20yKRKtq,2mIvhfE8,6nmlGcZh,6t71A1MF,7EsFpql4,7hlfhCtD,a94nQ6Xc,aHipuCt3,aydR2fZm,c4sSG1BJ,CaC5C9sm,cDbjVFf8,cS0RBfwK,cVzMQgKg,DsiGelms,eJy6PMwh,fea9Rxbi,IQDkXqxP,Lcw7LqO6,ML9xiXpb,OjHBUMqE,ot1qkwkT,Qy4g1JXe,rLDwKdf7,tBxZInns,tUDzkmjq,u1nrnzHR,vHngSiJz,vMPO4VDP,WRjwT6vQ,ZMsXEcrt
+                last(WTUR.DECTURAI027)
+                0JjLd7de,1WLMxIa4,22nSN7NT,3tAdgF5a,79eJCEfG,96KB1pyk,bKj92YUX,CYUTAnNQ,CZ8UvUXo,DDIunjVw,eV2H45zZ,FSGj7gJK,gQORBJpG,HUEef80g,imVoUMeW,jqsKRgRX,Jrak6XSK,LJS43AZs,lqDpBQef,mOaRmqud,oL9mQAC0,p1C2wZMG,QBtne3wL,QISc3Rtc,SkK46off,u9g3u2P4,vcv4ahSo,VY0OJNLp,WD6lHXce,WZggOgnF,YLQ3V5q9,ZdUv8HWy,znLhReg4
+                last(WTUR.GWTURAI001)
+                1zUMOmG4,3qRzvJlP,aKSM5XuX,B8nhMAD5,DNQNkT7A,FT2kxpb4,FvGh1yIg,GiCsUsX9,gJkVwUJ4,icEiX1sr,iHXTWdGM,krO581R8,kS8JpcZr,L0nwcTNQ,NHPRIp0w,o6ZaUHpV,p0q5CdQK,wUAk1Mb3,ZKPd33Fr
+                last(WTUR.GWTURAI001)
+                2aepRPvQ,2i9WVpfi,2K0Vf2FS,2NHQNIkN,2Tf1NPma,30XJj6el,3gyUabbO,7fXqSzhT,8E2e7U5C,8HXebt3w,9hnidKs9,AErxDuIA,aVqL4w7D,b7Kywi8f,CrPfQBLn,cukGwOWl,dWKQNoyZ,G4bbGwX1,gTqnCJyz,hmF6ceII,IkmcJ51z,JBCL3eTF,jbic8B0R,JT9sU2To,JUkgR8rD,KmCphdCe,kPXnAjPT,kVG399Y7,ldMqWirP,lfDDijNW,LUm19JOJ,lWGXTDk6,mHEhSPEy,MneHXKw0,mZwZQAek,PjnyyTDZ,QiVjE9Zu,QukvNQ1u,qWwhhOiN,RDuuoK1d,rX4klORS,sTViSeZ8,t7PQTfni,Tt9mHiKe,tvNxQub5,uBPuqdNy,uqwInMk4,W7QZBTXk,wF8o1rOX,x4rDZMpL,XKLlQFP3,Yj5xviM9,ZmvsXV9D
+                last(WTUR.GWTURAI041),last(WTUR.GWTURAI043),last(WTUR.GWTURAI010)
+                0iffMVPY,6vMnYGYI,8Jdr6b65,9KgVmruD,9pfoJ4ll,AHgrAbVE,btNqNtq2,delUppby,dJ1W64kF,dLDLX8tr,DRfCDwTq,dW4DGIVf,fczxnGeu,gbMwb74h,GZssTrFQ,HBLZUmwF,hWCHJyV9,hYvYu0Rg,iEqfLXtT,L94v6O0C,lubIaKS6,M72kx6v8,n9gLizXN,nrpkGquA,O6OotKCM,OgdaaDFq,qbU3qSau,R0v0DUBG,UtmzTJk9,vDMnD2RY,Vg24xugq,WuK1Cukw,yAczNaFz
+                last(WYAW.SLYAWAI002),last(WCNV.SLCNVAI012),last(WTUR.SLTURAI10051),last(WTUR.SLTURAI038)
+                19lyanYy,dIpVG0Zp,ePCk2mPS
+                last(WTUR.MYTurAI001),last(WTUR.MYTurAI089),last(WTUR.MYTurAI090)
+                0WY6YNkp,2H2BqEEU,2r1crnWr,2rYeTWYQ,3QTtmwyC,4Kug6vm2,4sWv7lua,53qqBxzd,5nXKW1nK,5WeIQAQP,6GUJFpPP,6U59SJWP,7erFW6Mv,8aHte3mT,97ddylWf,aaDlzLcW,BS6LUEWz,c4BuFF7Q,cC2b4O6m,CFruiPMl,DZTCUXNU,Ebfvh2Zi,edBWcc0Z,ENXgdZsU,f0OUCCU3,FCLJFeTJ,fF3PVhra,GHy0Nxqj,gPIWIo37,GqUiFwM2,HElKMx0s,hGGo4mPl,HHUHNbYP,Hvy6b8mo,ijOAJfeO,JBFtAv9z,JUICZ4sf,kbIz15ud,Kct7DIcm,KNkPJuG6,kRgsAcsX,LyF7nSea,LygMb1Rz,MCtAXN2W,oDAEwE4X,PDDZAWlD,qc8JMU6j,qxazPZW6,QZPeU1jM,R7AwtkTv,RdUZVmrx,rhZd4soN,rOyFfX2h,sAP7TBgv,sgkGmHPg,sKnjwIiJ,sOxYDyUm,TabzcZJQ,TdvyJTAE,TkmHeKed,tXBx5C3M,uDoKOsbT,UgGND0vr,updJaFFH,UzHnCXCD,v945BIU5,W0A70nMC,w2kbIkzo,wwWoQl7a,x5WgL8jw,x6I9rAQy,Z1S9LAvr,z7yT61ue,ZckMNSBi,zehO5hKG,ZvqzPr3c
+                last(WTUR.DECTURAI017)
+                0LWxY7pj,46tPjgvh,DkuS6Ykx,G4QTBBye,GhKAndOI,hfXRIEdS,HWKX26CV,IjYZPFbD,Ka4UAc3N,Lnt4nUmt,oWL6tP00,Q8OQJhEq,s0wGxHvs,sypXN5Xk,tZVm4Kbq,ymGZlAYG
+                last(WTUR.GWTURAI2586)
+                56n5oP7r,aF4XyTdn,Ap6vrT8p,GOKYBOIg,JchlNHnH,jvx1Jv1d,KaWsQB0D,lHwn5qyT,Lj8x9ZVB,naFY39mk,q38gZbnh,QBS50AyF,SdMtgdR4,T9lr82jl,U8byobeM,UgFQgkZi,WDGusxXS,Wtij0uLI,XfP7oSu6,xVcZ0BsT
+                first(WYAW.YawLevel)
+                0OwtzoQP,1ECtyTZQ,1FLzkcoX,1ILHyJ2Q,1pDvhDkS,32N9oTwr,4ODEGiiG,6qebBQKu,8Zgv7oFy,aoQByZzP,beGYyZVp,BWPsaRI1,CoG6Ae9V,eOejycnW,eOvznzmT,FBoXSHKb,FHVDWtCG,gELJv9IS,Hhmo99jB,i97xU7WT,Kp9XFuOi,LKi6PKXx,oDT5Nleq,p4WYh4XG,pGrcweVv,QLlgP80k,rhjND1Uf,sL9pnj4Z,smCjkapZ,szxwD2vz,t3nVC2NP,T8j1AB7v,TINP55bt,TxmNmpqn,UmQMyq1a,VIgwcK2s,VwMGcgkd,wJ5WbO10,x6swQL5a,XIFBOvbc,xPE45QFr,yDNbjTjW,ZGjBDGHA,ZIZYF7Aa,ZMAKI69B
+                last(WYAW.VSYAWAI77),last(WYAW.VSYAWAI78),last(WTUR.VSTURAI68)
+                1VQTqD3H,44TqpS9s,4v3oNdqU,5EdRcjsl,7ttmD2j3,8fZAt7Rp,aFco5DN8,At8etJ9q,C1aL0BnS,c9eONSQv,CAjGV2pA,Ce16PGtm,gdaV4YzE,gj5ggdvf,h4UEF9TN,I9kUBkiT,KS6DhL5y,M1iiN7Nc,MnyiZpQm,oshkVcZ2,oTAPQV4y,pEWvJE1I,Q3eMd6iz,qmptu2CI,uXcs3ZKg,UYUbp62r,uyXq4cyQ,VLwImBFr,wcCaM1xl,wjNu47fo,x1iKitud,zskXlup5
+                last(WTUR.DECTURAI017)
+                0pvwD2i4,0VE7bkZh,4kzjQ1Ek,63O32ubg,74aHsRdo,9COjv7tK,9yTTTCsT,DgTqyWk7,I08PLzJz,iuQ4IojG,NfZP6jHh,NGRxU6yh,OnhszZVG,PGKEoSS6,QrNPbUbO,QyfSdNxG,RX6VynUA,t3hfM5wq,tEEmjHvp,tZcgxTco,w9kcsqFy
+                last(WTUR.DECTURAI062)
+                1BX1nBWw,3Y9rgoig,49WUta2k,5rjtIdLz,9wNdrVrT,a3TKUlnN,FY0BUYLn,GbpgJTyI,GpKO5X7X,h6lstNby,hYcCFdvx,iDEc1plK,MHEX5Z0E,MHw1XrKv,MqlifN3K,NECDW6uo,oLB5Tnrw,Td2Uo10y,U1DShWrT,uBopVOk0,wFFu2IHr,yF8k7EL4,YgEfPbG9,YpX9JK3g,zgpiXxtE
+                last(WTUR.SDTURAI10014),last(WTUR.SDTURAI10008)
+                0yL8448L,1BnSUGPY,1XuuFD25,3pzNXQiI,4bHdGRD2,4WjqoE8L,5AQBhuGz,5FCIQnSP,5hzSvaPE,5T9cYkoK,5t9GUUey,60zGVUws,65f9DJIZ,7Q1iFkY8,AwlLPst0,BbC4j9cF,bBxrv1rY,bhQXEsdY,bPrDZqmt,bPz1Whl3,BwQWtLcJ,C5zsJBpo,CG5EBQxa,chRm4U8h,cqRlS6mq,d8SntMeK,DfbPf7ft,dlGyn2X6,EzvIH5xO,flFE0oxf,fOSmvw3k,GPLPXeNv,gX0H075p,h51sq8Wt,hhUm2WEV,iCL5GiWD,JdYs14Dd,JPcVQUYx,JpuvJgZD,KFezI5CL,kRHzRlFN,LGCmDvNs,lRDxT1qo,LU303VC3,meCBV7H3,MiB4zJJa,O20y4Zii,O4FLE9zm,oGgQhlUG,PwVWfEOz,Qs7uPAso,qVYfkRgE,ReIdcQZZ,rs0rSImQ,Sm24EZhD,tsnhWzlQ,tWA8aYMD,tzfy9Rsw,viXS223M,VkzHFJ6j,VNlFc2fT,vVq7fmJn,WeqzUhog,wKSkJWL7,XGKxUCvx,yLfqjLyl
+                last(WCNV.SLCNVAI034)
+                0ImtszAd,0sSv5o8l,1VwHhKzx,22hGu1QY,2AjsnN3P,4sRwENqZ,58z9v0Es,8IMbHZUa,9PnEKXL2,9Sva4p9Z,AgvXLLOb,AKrCIvo8,aQUc4qRO,arpbQvXL,B1AcyjlC,C6UC7EBc,CjJ3hVXa,clW1cN6f,CQQD1Kqm,d4lgBUCB,e0xPwZ3S,EljGjQob,FoZTPOCN,FX3k65gh,fXh8Rq1L,g7IOpfut,gBhCckJZ,GQ4M42qO,H4uO3RMj,hA9vx2vQ,hPTCaayX,hWnE78EO,i4znPXpf,iGzZWpO0,IhTOoKmx,IHWKfwLx,IqTGKIV9,Jb40mMkr,Jx5yob2a,k1MTO8aP,Km5AGLWx,l9Rcc0Of,lCbVAJg7,LzZypQMG,MYG0fOQS,NCPSzKdA,nQwZYcHb,ob1OhacP,oEoBmvfk,oLbzIREF,ols31OIo,ot3Mooxk,PEgBAD72,QgkyfQII,QXigpCsp,SFRJursI,SKlkEnLO,smUuFC0m,t0QdGtxI,TfHVP6aW,tKjPVtx0,tTrPB4gl,UFzOaX3M,uV3ZUTHl,v6vJqWH0,vTc0sWFU,WHVSS52S,xmJxBCmQ,xYLuBbTH,Yb98z3DL,YW01kCgX,ZFvlmPAj
+                first(WYAW.YawLevel)
+                0KCuKU9u,0z3nbzdm,1cotAGVi,3ujyRnev,4U7uBzbj,7jDZvW3W,89VILkuy,AIchzN4o,bK83dmxC,bOftLB5d,C5OkEbeh,DBLKwQqG,Dc84QWoh,DI6B8CSK,DVG20oRB,fFqmZ73I,FpomvzCq,GH6c1Oh6,GLdRocRE,h0uMt1ki,hEWyRUkC,hhPQpUyr,HjUyHgEA,i0CoWGRQ,Ig6V4u4d,JCKxQWdf,jei9TsZL,Jf2VeAjt,kdDTxZm7,kkTekxyn,KQv0Cx0Z,kR78ObTK,Kz3XWVGb,ljM8M6Xt,LlCyYMph,lUgdhxqC,MbFvm6qQ,mphDObx7,PF1PFTHk,pHzSftfp,pMNHOL40,pNwNsSiQ,PYpGEaaN,qMsNwVFu,RFxSRZ75,Vj2qbeqZ,wDN4cCnr,WgqJpkkV,wPopOczY,x7ClPgiB,XCXf8vvw,XDpD4iny,xjnrVeMU,XKsBkXKC,ygCaeJi4,YZoiSziI,ZAIdzZS4,zFJXfai0
+                last(WTUR.GMSTURAI042)
+                3E8KYtCF,41SlD2Cz,52RjCfHy,bMEP5Tkj,CX92eV3u,Erm8sXPj,eWFNmLTI,HHidXSHk,JMNfaWpH,MTgjyBT9,n5fPny3q,Ne8MPuBU,PefxOj6h,pyXXuhrA,pznwWLCY,s2UdsI32,tlmoUo01,UK492PcD,UwflVxnV,VM4MvEaf,Wk9I31RB,wsOFYI1n
+                last(WYAW.SLYAWAI002),last(WCNV.SLCNVAI012),last(WTRM.SLGBoxAI16),last(WTUR.SLTURAI10051),last(WTUR.SLTURAI038)
+                2h1PAAqe,8BYWj4J9,a69J3JVM,ejpVjVhO,G3Sw5H5F,GI8LZHdm,GxsGuI5j,ie48Qwe0,K3FJsZN6,nE5Q2GKG,UBGQGTt7,wh593Ekc,whJuKJfc,yjxc0nxR
+                last(WTUR.DEWAI0004)
+                01CUemZz,0sZM8ywr,0TNyIh3U,3LbGCuu7,49g89WVp,4t6mGyKz,4xkgawz1,88BR9SZS,a2CGTEpD,agJxutPb,bH98NvL0,BPkNQF8K,e0iSv0HO,exwWGnFU,FjXsKSlE,FPspU6V8,gFclZXNe,gW74aBRE,HdkkRbO4,hMIdRjIG,IHS5Rtf1,ipwi9Nmj,Jap1k49v,jJuxvYZu,KeSbD0sF,kueprAFM,LRUdc3jJ,MIAXXVSB,NfIh3Jkl,oS6MsRoc,QAUyDYGU,Qb9v9Fvf,WuAl2aR2,ybC31Xvi,YfShnDHr
+                last(WYAW.SEYAWAI002)
+                3blFAWJs,4gMvq71C,5dyue7RT,bgequWUK,dGTiMEXo,echE7ASL,EUYzIOXh,F8qTVgKq,i6t7WVD7,JZvTgQvh,lplUyHAF,lvFgXOEp,lvnYIGm1,M4wcLCAu,NBrPQrQ7,pSIecIGg,rZ5JJigH,vUi8RyNm,w41pZ0KM,xpsZ5Mgn,XssTscAb,YdmS3FYD,YRhEvPzq,Zft08iSO
+                last(WYAW.YawLevel)
+                1k7PibLt,2jBj8Vhz,2U8z6DEL,5zAjX6Ee,6Kv9aQuY,ajsHuTp6,bWZfv9ei,dxKbOzeB,EftmbzL9,fVROBgVJ,gSu4sGnr,HElc61qT,hubbAPbR,jbiHtmEn,JdbzrLUy,jRaRC4aV,k12bJJV4,liqdtBL1,LjGZY3uB,MGwbearE,NFjR59Iu,nl71gzKr,OTOJoxUl,QL1z6phV,QXIk9YKP,R7IpjkJs,RIpfas37,RUFA8Jfh,sKQSJ1aS,SMHeJ0Gl,SRIuCutZ,YbZ9XwLA,ZcKhe7kQ
+                last(WYAW.SLYAWAI002),last(WTUR.SLTURAI10051),last(WTUR.SLTURAI038)
+                2dTAZ2cT,2JBnqcde,5e5pS8UL,5IAnZiR1,9aJnlGaF,9kSvewOz,aAJELTwC,bsIF7HJD,FHTWkENh,GQEOHVCl,J8Zg0TZf,JGkYq9HE,klzAulMs,koVPMuPL,naFIQW4d,NeZu7j0l,r9atPb0t,rKld4Jgr,vAtCbkHF
+                last(WTUR.GWTURAI001)
+                0c54e7DI,4GB7OWWU,6LdqU4Nx,82idZjDX,8ysXOb4h,acVKPcaj,ADAB10TW,fu87fUht,lCrd1Rus,m9WSOlqK,OocrOTWs,PCXf7DQf,w1lwWb2K,Xu6Agw8D,yWQoYykr,ZiudgDjQ
+                last(WTUR.GWTURAI027)
+                Huh3UwUV,Mr1CxLlx,omnJ4TAa,ypcnfD96
+                last(WCNV.SLCNVAI034),last(WTUR.SLTURAI051)
+                0igcgwtC,4Qa36bPk,8Q6pl64c,aFeyBFLb,CObOdNdn,ebF3yfxu,eynlCi1y,gzcuZtgY,lnebKx6x,nSSGjeUU,O5zPKu4P,RE2JVCCM,VkRBr17I,zWhy9mJk
+                last(WTUR.DFTURAI008),last(WTUR.DFTURAI039),last(WTUR.DFTURAI041)
+                3aTQO6H2,dDoQUiN1,Gl1ZP29Z,H7ry33Yj,HhqmSBn5,IQFvbZPY,jEKj58BQ,kxpnvAAu,M3hP67p6,nHYkA7Ms,oRunNVd4,saSEB8vM,sF4kh2zD,wKFo9jbV,wVQnukSY,XazAGRfg
+                last(WTUR.MYTURAI361)
+                42TimJFx,4sAbpbif,67OQBYDA,6BfUdyFH,7HMgbiRM,8NstT58n,8zJq6nxl,a0nEeq0R,aLdylVh6,bcAINyza,CMxZaZwl,Dn3b6rqV,dq8TJpKN,FDvcobNA,fVZFIqXM,KBFVig5c,kdq5Sh2K,lqRiBqTV,mggqqiY1,mWYnDxlX,NDj7JgAa,pSvtLVv9,qsfsxiZU,rKZxXkb7,rSXn2ANE,tDayMFH9,TMVZTQEv,ttC5ZLhR,tv9j40zc,vN1VVZAv,Wo5MbWuI,x4YQx4aL,XS29xlXy,xWZL8QP2,yjnQcFSc,yVZN3TmB
+                last(WTUR.GMSTURAI10041)
+                1TQb2kCd,3QsdWy7X,5LtQytkC,7NajeKNv,bo3oFybC,M2lGPO16,mXlFB60Z,oau2euUw,PUg0nfYb,rSMYrYg6,VCcvcVwW,wevKb8QP,wuZEQdD3
+                last(WYAW.YawLevel),last(WTUR.XDTURAI10009),last(WTUR.XDTURAI10001)
+                4sgfwrrU,7Ya9mSVQ,9GZQGhA7,9W3vjP9h,BPUPR8Ms,c7WbZ76n,fCsd7zfZ,GgwNQsA9,Jz6mzP4B,mFVFxVyG,nStKVrBq,nWqAeUbC,ohXAMMX1,OI312MTR,Oo941EdI,oQxNF0cp,q71S6Nko,tlTEreLl,ZKtjjwgT
+                first(WYAW.YawLevel),last(WTUR.PCurveSts)
+                17qqieKJ,2iJKPaPT,2rf0Hjs5,3UhahH75,4ozHTJ03,5GiuNirv,5vDbMKh9,6MUub5hM,8Cro8AU0,ady912k9,ASIcIYJF,B2m1ErCN,bfScbjF9,Bkhk8Jqo,BLCTCu97,cCZGEyMQ,cfUjknq8,EFBrwGeW,EHKeAxeu,EYFykgpQ,faDpUUOR,g1xJC0j6,GA3cKIXM,GA9UWcoH,gabe5x3D,gF9EdRky,gZCQldgj,iMdqkAem,Jb1FjlqO,kMfqPBhu,LHcr3sAt,LPNcsGM3,Lv2X2wud,mKoaurC7,MTbtmoad,oflj34BU,p3zYNMMQ,QCeyaWrL,RvZBLUcP,Tgn6a6Uk,TNBYpiA4,TsGNN3SJ,UAG7RYrA,uLWa9iym,Uyfzl7gF,wazQBMuW,wuJphOUn,ww0i5oiQ,Xd706XFw,zOCpzlYM
+                last(WTUR.SHDQTURAI004)
+                012tjIUT,6qXKviAv,91d3cZb0,9EnEZdUS,G8SVywTo,ntI24SKG,O6Ki0025,SXDpZewO,t6z8Qw2S,va2NkaSu,wAl7BojH,WwsSjzvc,WX1aImAj,X0unpcQC,ykapI56q
+                last(WTUR.YJTURAI051),last(WTUR.YJTURAI055)
+                2ljaCezs,2ZJehGsb,5FD0E2lh,76lImhaP,8LTIjrDg,9DK6HPXo,9J7XJKFy,9yOvLozb,AjXfyg0f,c1A074aU,CloOEWZa,D3ck0zjm,DB6AkcJc,dxfaIUIG,E2GqJLUH,FEKeaRTg,fOcNXukN,hTh491LL,lzYKuK8F,MrMmzoei,NzyQJveh,PFf9mqRs,pP3bBg68,QDGoZh4G,qDii0b25,rp1yHgDi,tEta8QEz,vAgfs6Jb,vP6sGteQ,W8usFd6L,wb0yS2ZZ,WoRycCY8,WT2XxFDN
+                last(WYAW.CCWEYAWAI001)
+                1DklxUzZ,2gyMnvYY,3NUxjHdX,4DfJg1uX,64tKtsaT,6cmpHMRx,6OZGT8q6,7pvUiAUx,8bpTtgi5,8q4jJNss,9A4K05Si,9ga2nX0I,a12HQ9b0,a1VVNo3r,aAkK4LcR,AmeaA1lg,bXzi2WJA,c6Twdft0,cP6SXlpp,CpN40FW9,CwffnA2K,dBwxvL49,DkKEIYSI,fkPkXgwm,HISQVWoJ,hqPwIq8P,HuN53P2k,i1orud0N,iwGXnI0Y,jPS2ZYtd,lgAhWegb,lkH1r1Bf,Lkt52B63,M9QlxGy1,mP9FaOG8,NAx6gRn1,NPTyMe9O,NZkC47bA,oGgr40EJ,OgSKw9dK,OmkPZyVK,P8Lw77sk,r6fT6cDs,rkcAKF8Y,sLnlYnFZ,Tdq9IUoS,TzFq87pe,ufhu38T4,uqd1Up8w,vsqDHE2k,wIP3UiTu,wRuwYMOh,X70Vhzp8,X77ScSmh,xGf6i02s,XRKMfmFb,XvJW47LO,yBoLUwFN,YDNVMJqf,yWvOMFu3
+                last(WYAW.SLYAWAI002),last(WCNV.SLCNVAI012),last(WTUR.SLTURAI10051),last(WTUR.SLTURAI038)
+                2WfMrgDb,9D6cx7wZ,cfWqAnrw,KFmtac0K,lKe0qC2g,ncv11Dzc,nPqtpiV0,ObAyqnYn,pmklzVuE,rxK5VrHN,s4Aqxy8N,sskBAnFx,vKlCuCSv,YSGGEX5R,YT21ossT,yuzuohSS
+                last(WTUR.DQTURAI063)
+                0Ln9C7uN,37HiVaUm,3JafuP3M,3ROnSxyd,4M3RMKoi,4Z0p0NnJ,61GDpWbp,A3d4ULnY,A9f9mwo0,BldOa8Fl,cT6cse2S,d0y8a4cp,d5avdL5t,Dec42Dds,dezcZGFf,DGgcEA2U,DmrAoJBT,F57MINhr,flfrShmF,G03eIehO,GN1TFt7m,HiPD6WTc,HsN9nPjr,HW8TwbGS,Iagn103Y,IS9eqCxd,k5njUyZo,KdgLW1da,KKeZKlTJ,kyjex1mo,l5XVNKlX,LyD9AgFN,McFkgmNX,MdIjvlpD,meSWq1Z5,mGJWR3CX,MUHM6JyM,o7xMbpwc,pugDSvEn,PuzQgz0g,qIoPYYGJ,QJ5RsKAs,r4hfh9QN,RCVsbsb2,RdSbSUpO,RESUL99Y,Seh5fsPy,sxWISsa2,T7LIyFBv,tvVx0dy6,UngmLxL5,UVVSjBRt,vUmsR6MK,w6zj2Ld8,wI9jQ37L,wVEe3Djz,xR8utA4a,xUokYBPE,y5SVTvww,ys3S2hzK
+                last(WYAW.YawLevel)
+                0WyVbN3B,2fkcmRxp,37lvzTLR,3plPxoPy,AS6Vv1IO,AxKfV3ZR,BO6y1GsC,BUM0Mwox,CQoOlYKZ,EYLaracN,F5JQ2wS7,FdjudlP7,gTu1kmX1,HjrkTxtP,iVBnSTJq,Jmp2B04z,jmRj5W9N,jnmXImlq,kO1qhwRV,KOYdXFx5,lhMUpqh0,LSk2cojr,mqsrCxDe,NjGS3rgu,NtLtjcuB,nycWZ8CP,o8pU06KP,OeXFh5WK,oHAi47CK,phE3xwqE,qxTigd0x,ROeKFWDM,SKGsZRn9,t4sxhaDc,XASY3a20,xwll7MwO
+                last(WTUR.MYTURAI0)
+                366BZTBO,4v65a9ch,6cGArZG8,8ai8nTOj,A1EakeTq,alcGrcUQ,AnZFkFAf,BLAkVmc1,bnwLcem0,FKH5pqdp,fZRccHxP,GJbq61co,HPnwVsfS,jbRgqAqI,JUKVP0Xi,JyrQp4wT,kdUPjuZn,KUWgrykt,m5Gg5ziO,MNUPXOuq,nYDHEGrg,OVt7BfHC,reTSWG4y,sp2GK3T8,sZhAoVbN,Tb7ATmoK,tIj7s5VK,txSgzfsc,ViczDngy,y6SNif5p
+                last(WYAW.CCWEYAWAI001)
+                0xtCoZuR,28VDCT2Y,2oIHIll4,8wZoEjTc,ab4aXYXh,ByKzhtsG,cFxON7Bu,i2NlrYp6,IefrFNI1,iEjOjlNx,IGgwb7v3,IjPjTDxu,ISfoU4hM,jYvVGDIx,ObFpgq0W,ohlh80CO,plFIKH5a,PuN6iB1h,rWoLMGGT,Uoqv8sqY,X1qVpAIV,zgato7NV
+                last(WTUR.VSTURAI77)
+                5hPzj1J4,bk4sZIQ9,BuudeY9I,bwSwinjW,CWEkf5jO,FXc3pOOr,Fy3sUacL,hR23ihqb,hrnoXU7W,I5vVZfDZ,iW8c0efF,JbNVE0w9,MsChplwW,PJdxrn5i,PrMXNV0o,qa4E1iwZ,TUe14TwB,ucZi9R7h,uqAkdbh7,V0il2M67,yg0fQ8NR,ySyL4kiS,zm0n9R4l,ZtXD0wR1
+                last(WYAW.YawLevel)
+                3xVsv8DT,3Y9VretB,50Df57Bh,854s3ZAH,8JpSUGsG,bS0JQf3T,dbgGpASA,dYa7Hkrw,h5QfM7hd,HI93EMJ0,iaY6Reoc,lKYMw8up,MbPaKlnd,n5yUrepC,Oz5EEeNs,qihNGkts,siY3FKnz,Tdj9eKE8,unKfwA82,WbSycWYT,XwbkUCzi,ykFLUpHI,zky7z7ab,zkZJiFGs
+                last(WYAW.YawLevel)
+                1vmPF8pw,1YxC144t,2R59N1UV,4fHkV7UT,4OtiapBW,4y90d1Zm,6XFu0Mvg,6YIjmWnN,aI6fJDJ2,arV8KV73,bwpahvVr,CR60Pp3o,ctkGgokD,d6nUkvFn,DHypUn0R,DO0wVLdd,DObo7ePo,fcZ4HDfY,FMm2fv2Y,FSPMcmrv,gZ4u9Sd9,Jq6m1fMa,KG7DRt8k,kV8rEY4N,L5aCJ0Zw,lrmbcVsh,m4jXTJZL,NviBx27X,NyyA88z0,o18SF60A,o1D710NU,ochT92X8,ODGcGgGm,RnbXW0yC,SarnketT,SK0jBgiT,Tjksi3cj,vaQOtX42,VkZ2ZCGh,wAbDbhcW,WKOGmZ1h,wzjNiAnG,x7wFt2fz,Xt8PzpOb,yrXdrUzf,ytZwssW2,ZCTbUbgK,zgYmIOpX,ZpyT2jcY,zRhpcdfr
+                last(WTUR.SDTURAI44),last(WTUR.SDTURAI120)
+                04gjSg1b,0XL99rE8,24amXYMM,4pOr2Aq7,5MOX6dlm,72cCQLAm,7AlZQcb5,9EbqE7bp,aXvhD1MX,c0CZ5ZUw,c0J1HYBn,cd3MnLQr,DIuD7jBn,gbxDgGXz,hvTZ5WI9,kB3vRW2b,Kxo4pOH5,l4kqFDgU,LgMDaHQs,Lo2BosTT,MrGjjSdb,ORUIpSVg,pabnhdET,qekm5gut,qKpV08v9,R3sMabg8,rGAnrBVL,sng7mJB9,u73LMUTe,uJTLHRtG,VmYgu0HA,vtlVKOZn,vYn6Z4Or,wt7FNhZR,YbDNyFAK,YPlHhUlm,Yrc3wDvp,ZZIA4rpK
+                last(WTUR.DECTURAI020),last(WTUR.DECTURAI021)
+                5My3yHDj,Aiyakdvi,h6FpljkO,hiZLhwUy,pf6460xw,PyxGJzVt,q4SzM6ML,rejStJtr,RvjgwYU8,TGSurNbB
+                last(WTUR.GWTURAI001)
+                7roZFkrp,9vmNX703,AbY5DS5k,AdPPd8OY,BNMZJ1Jf,FW4HsMBm,HpgQQq2h,ioUYNeLf,IQvDPssy,Kg1PXj1u,Qn0CxFZZ,S1rfjfGf,SJPB1v7t,tkWNRA4F,UZrGIM0C,wMw892jj,XXhu08y8,zNY3z6N2,ZrpALKKs
+                last(WTUR.PCurveSts)
+                1ye6zWFE,5c2sGvfV,5EKIrkAR,5Evm9PMN,7WHGzPC8,8VlGRZJl,A5r5g3KA,Aciy3KNM,aj7RvzWC,AJXOJPCa,b03M1Sn2,BXm8lDhz,C7szwwac,D7cMRKth,DOh1bT1u,dvOA2JWS,E3xH5xbn,GALqJcYO,HBWIZEXc,hdKDTcID,hTRcPRO1,iU3PG2mC,k116NbIY,K4KZCBqU,KcNT76Cx,kO7Hd4Oe,lOPtOesr,Lp23prkq,LXIWI9Dl,mZbvIjRi,NiMB1GG3,NnG8VBjd,nSPEPHtQ,pBG7bXon,pfcCQNQH,Pqb257zT,Q3D1Q47K,RBC0LNin,rHtLKAwm,RLnXDQWA,sFS5sc4E,T7Rp3Qtn,tgRqXsoQ,u3BnGmoX,UdLGZwIM,vuTUlUjE,W71D3qgt,Wmuhi5gy,wVKvvNop,XZvp5fo9,ZVKPES54
+                last(WTUR.MYTURAI053),last(WTUR.MYTURAI054)
+                2SUlbVEC,ol1HGAw3,wtVWnPgx
+                last(WNAC.DFNACAI007)
+                0U3IBJoz,26q5BaJV,2svuaJt9,41Ys7UaT,4gYfaNoS,50Q4BfE3,5WFeyKML,8kXdrKdX,a7XcdTk9,AV6ArIp7,aV7iSwwY,cnBqnUSG,CQ6DKJEQ,ECcJnJEZ,elJoPfox,ElWNoBv9,f2KFZ5Tp,FDSlE1Tx,GgchFAgA,HPOnnN3X,hQimgkeZ,KdxLKwCd,lchKnq12,LCzTG4Jr,ld4icUbW,LwMWliV1,M4CzFbuW,MBjOOjtO,mlJpMd3M,MXljkV7v,n5qBeMXf,NaFSlHgC,oub2XpTe,OXyLBRTV,oZoLL5MP,PF4TkQ0S,pWkKeDYg,PyC3bQyf,qQKo0DE3,rS5EIRKY,Scrw5AkC,SdKf2J02,skvHdYny,sQzNH24c,t6RNRS3b,tq0pkvNb,u8jMFi7U,V8K4jD5N,vjEiDhQe,VtL5PczS,VyVHcYnp,VyzGAERH,Vz0EVSNR,wMLOSMWL,wVpjMGO4,xyLH0JSv,Y1ayYxH6,Y29v0WYT,Yr6MawFU,zfx7szzx
+                last(WYAW.YawLevel)
+                15ZOn8rQ,2unMWtKt,3uGHiE3r,41QZVhhE,5S2npnDO,9akbopIc,bEDBxpJu,BQdi4SSM,D933k7br,duHZnwrN,Ed5nh36h,EMdJ6Qft,FvPPOP35,GEO97KLB,Hm2nIvXQ,i8lNAVQO,K2OQ0poW,LHS5OCiQ,m99tQZLO,NuWLIme8,nvA4EXfx,NW9HPuPn,ny7IIMol,oBf00tpz,OwwdIXku,phdwbt1S,PUXqJgwz,ql0i7hGW,QzK0Zedo,RDpk0T1o,u6GcMYmy,v2Mt7Wpo,vNVLSkv5,w4cwS1AC,wEvcCELp,wF2p3gfw,wfABi5iG,WKgGmA8O,wKVVxOsN,WXkioStA,Xctt8mwk,xHbLvJyJ,z1yfVk4y,ZMRH6zq3
+                last(WTUR.DECTURAI017)
+                """;
+
+//        List<JSONObject> allDatas = new ArrayList<>();
+        String[] datas = dataStr.split("\n");
+        for (int i = 0; i < datas.length; i = i + 2) {
+            System.out.println(String.format("总共%s个,现在%s", datas.length, i));
+            String mdmIds = datas[i];
+            String points = datas[i + 1];
+            List<JSONObject> statusDatas = null;
+            try {
+                statusDatas = EnosapiUtils.queryHistoricalMeasurementPoint(mdmIds, "2025-11-05 00:00:00", "2025-11-08 00:00:00", points, "RAW", false);
+//            allDatas.addAll(statusDatas);
+            } catch (Exception e) {
+                System.out.println(mdmIds);
+                System.out.println(points);
+            }
+            if (null != statusDatas && !statusDatas.isEmpty()) {
+                FileWriterUtils.fileWriter("状态结果" + i + ".json", statusDatas);
+            }
+        }
+
+    }
+}