Browse Source

第一次提交

xiaozun 1 year ago
parent
commit
06673127f6
44 changed files with 3418 additions and 0 deletions
  1. 33 0
      .gitignore
  2. BIN
      .mvn/wrapper/maven-wrapper.jar
  3. 2 0
      .mvn/wrapper/maven-wrapper.properties
  4. 308 0
      mvnw
  5. 205 0
      mvnw.cmd
  6. 63 0
      pom.xml
  7. 15 0
      src/main/java/com/github/jfcloud/sims/SimsApplication.java
  8. 37 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/base/SimsBase.java
  9. 36 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/controller/SSeController.java
  10. 294 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/controller/SimsDataIndexController.java
  11. 1166 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/doc/sims可视化.md
  12. 23 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/dto/AutomaticEquipmentEarlyWarningInfo.java
  13. 22 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/dto/DeviceSpaceUtilizationInfo.java
  14. 31 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/dto/EquipmentProductivityInfo.java
  15. 32 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/dto/EquipmentTotalInfo.java
  16. 27 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/dto/EquipmentTypeInfo.java
  17. 32 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/dto/SampleBankMonitoringInfo.java
  18. 52 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/dto/SampleDatabaseDataOverviewInfo.java
  19. 35 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/dto/SampleOutboundRelatedIndicatorsInfo.java
  20. 35 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/dto/SampleProcessingProgressInfo.java
  21. 40 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/dto/SampleTubesInBaseInfo.java
  22. 22 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/dto/SampleTypeInfo.java
  23. 43 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/dto/SampleWarehousingRelatedIndicatorsInfo.java
  24. 32 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/dto/StatisticsOfSamplesInAndOutTheWarehouseInfo.java
  25. 106 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/service/SimsDatavIndexService.java
  26. 197 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/service/impl/SimsDatavIndexServiceImpl.java
  27. 22 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/utils/MyUtils.java
  28. 21 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/vo/AutomaticEquipmentEarlyWarningVo.java
  29. 21 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/vo/DeviceSpaceUtilizationVo.java
  30. 40 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/vo/EarlyWaringVo.java
  31. 41 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/vo/EquipmentProductivityVo.java
  32. 31 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/vo/EquipmentTotalVo.java
  33. 21 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/vo/EquipmentTypeVo.java
  34. 31 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/vo/SampleBankMonitoringVo.java
  35. 51 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/vo/SampleDatabaseDataOverviewVo.java
  36. 42 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/vo/SampleOutboundRelatedIndicatorsVo.java
  37. 29 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/vo/SampleProcessingProgressVo.java
  38. 39 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/vo/SampleTubesInBaseVo.java
  39. 21 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/vo/SampleTypeVo.java
  40. 42 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/vo/SampleWarehousingRelatedIndicatorsVo.java
  41. 18 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/vo/SimsBaseVo.java
  42. 31 0
      src/main/java/com/github/jfcloud/sims/sample/automatic/datav/vo/StatisticsOfSamplesInAndOutTheWarehouseVo.java
  43. 4 0
      src/main/resources/application.yml
  44. 25 0
      src/main/resources/dfs.properties

+ 33 - 0
.gitignore

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

BIN
.mvn/wrapper/maven-wrapper.jar


+ 2 - 0
.mvn/wrapper/maven-wrapper.properties

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

+ 308 - 0
mvnw

@@ -0,0 +1,308 @@
+#!/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
+#
+#    https://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.2.0
+#
+# Required ENV vars:
+# ------------------
+#   JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
+#     e.g. to debug Maven itself, use
+#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# ----------------------------------------------------------------------------
+
+if [ -z "$MAVEN_SKIP_RC" ] ; then
+
+  if [ -f /usr/local/etc/mavenrc ] ; then
+    . /usr/local/etc/mavenrc
+  fi
+
+  if [ -f /etc/mavenrc ] ; then
+    . /etc/mavenrc
+  fi
+
+  if [ -f "$HOME/.mavenrc" ] ; then
+    . "$HOME/.mavenrc"
+  fi
+
+fi
+
+# OS specific support.  $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+mingw=false
+case "$(uname)" in
+  CYGWIN*) cygwin=true ;;
+  MINGW*) mingw=true;;
+  Darwin*) darwin=true
+    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
+    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
+    if [ -z "$JAVA_HOME" ]; then
+      if [ -x "/usr/libexec/java_home" ]; then
+        JAVA_HOME="$(/usr/libexec/java_home)"; export JAVA_HOME
+      else
+        JAVA_HOME="/Library/Java/Home"; export JAVA_HOME
+      fi
+    fi
+    ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+  if [ -r /etc/gentoo-release ] ; then
+    JAVA_HOME=$(java-config --jre-home)
+  fi
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=$(cygpath --unix "$JAVA_HOME")
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=$(cygpath --path --unix "$CLASSPATH")
+fi
+
+# For Mingw, ensure paths are in UNIX format before anything is touched
+if $mingw ; then
+  [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] &&
+    JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); pwd)"
+fi
+
+if [ -z "$JAVA_HOME" ]; then
+  javaExecutable="$(which javac)"
+  if [ -n "$javaExecutable" ] && ! [ "$(expr "\"$javaExecutable\"" : '\([^ ]*\)')" = "no" ]; then
+    # readlink(1) is not available as standard on Solaris 10.
+    readLink=$(which readlink)
+    if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then
+      if $darwin ; then
+        javaHome="$(dirname "\"$javaExecutable\"")"
+        javaExecutable="$(cd "\"$javaHome\"" && pwd -P)/javac"
+      else
+        javaExecutable="$(readlink -f "\"$javaExecutable\"")"
+      fi
+      javaHome="$(dirname "\"$javaExecutable\"")"
+      javaHome=$(expr "$javaHome" : '\(.*\)/bin')
+      JAVA_HOME="$javaHome"
+      export JAVA_HOME
+    fi
+  fi
+fi
+
+if [ -z "$JAVACMD" ] ; then
+  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"
+    else
+      JAVACMD="$JAVA_HOME/bin/java"
+    fi
+  else
+    JAVACMD="$(\unset -f command 2>/dev/null; \command -v java)"
+  fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+  echo "Error: JAVA_HOME is not defined correctly." >&2
+  echo "  We cannot execute $JAVACMD" >&2
+  exit 1
+fi
+
+if [ -z "$JAVA_HOME" ] ; then
+  echo "Warning: JAVA_HOME environment variable is not set."
+fi
+
+# traverses directory structure from process work directory to filesystem root
+# first directory with .mvn subdirectory is considered project base directory
+find_maven_basedir() {
+  if [ -z "$1" ]
+  then
+    echo "Path not specified to find_maven_basedir"
+    return 1
+  fi
+
+  basedir="$1"
+  wdir="$1"
+  while [ "$wdir" != '/' ] ; do
+    if [ -d "$wdir"/.mvn ] ; then
+      basedir=$wdir
+      break
+    fi
+    # workaround for JBEAP-8937 (on Solaris 10/Sparc)
+    if [ -d "${wdir}" ]; then
+      wdir=$(cd "$wdir/.." || exit 1; pwd)
+    fi
+    # end of workaround
+  done
+  printf '%s' "$(cd "$basedir" || exit 1; pwd)"
+}
+
+# concatenates all lines of a file
+concat_lines() {
+  if [ -f "$1" ]; then
+    # Remove \r in case we run on Windows within Git Bash
+    # and check out the repository with auto CRLF management
+    # enabled. Otherwise, we may read lines that are delimited with
+    # \r\n and produce $'-Xarg\r' rather than -Xarg due to word
+    # splitting rules.
+    tr -s '\r\n' ' ' < "$1"
+  fi
+}
+
+log() {
+  if [ "$MVNW_VERBOSE" = true ]; then
+    printf '%s\n' "$1"
+  fi
+}
+
+BASE_DIR=$(find_maven_basedir "$(dirname "$0")")
+if [ -z "$BASE_DIR" ]; then
+  exit 1;
+fi
+
+MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR
+log "$MAVEN_PROJECTBASEDIR"
+
+##########################################################################################
+# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+# This allows using the maven wrapper in projects that prohibit checking in binary data.
+##########################################################################################
+wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar"
+if [ -r "$wrapperJarPath" ]; then
+    log "Found $wrapperJarPath"
+else
+    log "Couldn't find $wrapperJarPath, downloading it ..."
+
+    if [ -n "$MVNW_REPOURL" ]; then
+      wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
+    else
+      wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
+    fi
+    while IFS="=" read -r key value; do
+      # Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' )
+      safeValue=$(echo "$value" | tr -d '\r')
+      case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;;
+      esac
+    done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
+    log "Downloading from: $wrapperUrl"
+
+    if $cygwin; then
+      wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath")
+    fi
+
+    if command -v wget > /dev/null; then
+        log "Found wget ... using wget"
+        [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet"
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+            wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
+        else
+            wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
+        fi
+    elif command -v curl > /dev/null; then
+        log "Found curl ... using curl"
+        [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent"
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+            curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
+        else
+            curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
+        fi
+    else
+        log "Falling back to using Java to download"
+        javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java"
+        javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class"
+        # For Cygwin, switch paths to Windows format before running javac
+        if $cygwin; then
+          javaSource=$(cygpath --path --windows "$javaSource")
+          javaClass=$(cygpath --path --windows "$javaClass")
+        fi
+        if [ -e "$javaSource" ]; then
+            if [ ! -e "$javaClass" ]; then
+                log " - Compiling MavenWrapperDownloader.java ..."
+                ("$JAVA_HOME/bin/javac" "$javaSource")
+            fi
+            if [ -e "$javaClass" ]; then
+                log " - Running MavenWrapperDownloader.java ..."
+                ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath"
+            fi
+        fi
+    fi
+fi
+##########################################################################################
+# End of extension
+##########################################################################################
+
+# If specified, validate the SHA-256 sum of the Maven wrapper jar file
+wrapperSha256Sum=""
+while IFS="=" read -r key value; do
+  case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;;
+  esac
+done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
+if [ -n "$wrapperSha256Sum" ]; then
+  wrapperSha256Result=false
+  if command -v sha256sum > /dev/null; then
+    if echo "$wrapperSha256Sum  $wrapperJarPath" | sha256sum -c > /dev/null 2>&1; then
+      wrapperSha256Result=true
+    fi
+  elif command -v shasum > /dev/null; then
+    if echo "$wrapperSha256Sum  $wrapperJarPath" | shasum -a 256 -c > /dev/null 2>&1; then
+      wrapperSha256Result=true
+    fi
+  else
+    echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available."
+    echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties."
+    exit 1
+  fi
+  if [ $wrapperSha256Result = false ]; then
+    echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2
+    echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2
+    echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2
+    exit 1
+  fi
+fi
+
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME")
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=$(cygpath --path --windows "$CLASSPATH")
+  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
+    MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR")
+fi
+
+# Provide a "standardized" way to retrieve the CLI args that will
+# work with both Windows and non-Windows executions.
+MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*"
+export MAVEN_CMD_LINE_ARGS
+
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+# shellcheck disable=SC2086 # safe args
+exec "$JAVACMD" \
+  $MAVEN_OPTS \
+  $MAVEN_DEBUG_OPTS \
+  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
+  "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"

+ 205 - 0
mvnw.cmd

@@ -0,0 +1,205 @@
+@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    https://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.2.0
+@REM
+@REM Required ENV vars:
+@REM JAVA_HOME - location of a JDK home dir
+@REM
+@REM Optional ENV vars
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
+@REM     e.g. to debug Maven itself, use
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM ----------------------------------------------------------------------------
+
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
+@echo off
+@REM set title of command window
+title %0
+@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
+@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
+
+@REM set %HOME% to equivalent of $HOME
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
+
+@REM Execute a user defined script before this one
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
+if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
+if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %*
+:skipRcPre
+
+@setlocal
+
+set ERROR_CODE=0
+
+@REM To isolate internal variables from possible post scripts, we use another setlocal
+@setlocal
+
+@REM ==== START VALIDATION ====
+if not "%JAVA_HOME%" == "" goto OkJHome
+
+echo.
+echo Error: JAVA_HOME not found in your environment. >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+:OkJHome
+if exist "%JAVA_HOME%\bin\java.exe" goto init
+
+echo.
+echo Error: JAVA_HOME is set to an invalid directory. >&2
+echo JAVA_HOME = "%JAVA_HOME%" >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+@REM ==== END VALIDATION ====
+
+:init
+
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
+@REM Fallback to current working directory if not found.
+
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set EXEC_DIR=%CD%
+set WDIR=%EXEC_DIR%
+:findBaseDir
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
+cd ..
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
+set WDIR=%CD%
+goto findBaseDir
+
+:baseDirFound
+set MAVEN_PROJECTBASEDIR=%WDIR%
+cd "%EXEC_DIR%"
+goto endDetectBaseDir
+
+:baseDirNotFound
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
+cd "%EXEC_DIR%"
+
+:endDetectBaseDir
+
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
+
+@setlocal EnableExtensions EnableDelayedExpansion
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
+
+:endReadAdditionalConfig
+
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
+set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
+
+FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
+    IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B
+)
+
+@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
+if exist %WRAPPER_JAR% (
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Found %WRAPPER_JAR%
+    )
+) else (
+    if not "%MVNW_REPOURL%" == "" (
+        SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
+    )
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Couldn't find %WRAPPER_JAR%, downloading it ...
+        echo Downloading from: %WRAPPER_URL%
+    )
+
+    powershell -Command "&{"^
+		"$webclient = new-object System.Net.WebClient;"^
+		"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
+		"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
+		"}"^
+		"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^
+		"}"
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Finished downloading %WRAPPER_JAR%
+    )
+)
+@REM End of extension
+
+@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file
+SET WRAPPER_SHA_256_SUM=""
+FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
+    IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B
+)
+IF NOT %WRAPPER_SHA_256_SUM%=="" (
+    powershell -Command "&{"^
+       "$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^
+       "If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^
+       "  Write-Output 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^
+       "  Write-Output 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^
+       "  Write-Output 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^
+       "  exit 1;"^
+       "}"^
+       "}"
+    if ERRORLEVEL 1 goto error
+)
+
+@REM Provide a "standardized" way to retrieve the CLI args that will
+@REM work with both Windows and non-Windows executions.
+set MAVEN_CMD_LINE_ARGS=%*
+
+%MAVEN_JAVA_EXE% ^
+  %JVM_CONFIG_MAVEN_PROPS% ^
+  %MAVEN_OPTS% ^
+  %MAVEN_DEBUG_OPTS% ^
+  -classpath %WRAPPER_JAR% ^
+  "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^
+  %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+set ERROR_CODE=1
+
+:end
+@endlocal & set ERROR_CODE=%ERROR_CODE%
+
+if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
+if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat"
+if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd"
+:skipRcPost
+
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
+if "%MAVEN_BATCH_PAUSE%"=="on" pause
+
+if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE%
+
+cmd /C exit /B %ERROR_CODE%

+ 63 - 0
pom.xml

@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.springframework.boot</groupId>
+		<artifactId>spring-boot-starter-parent</artifactId>
+		<version>2.7.15</version>
+		<relativePath/> <!-- lookup parent from repository -->
+	</parent>
+	<groupId>com.github.jfcloud</groupId>
+	<artifactId>Sims</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+	<name>Sims</name>
+	<description>Sims</description>
+	<properties>
+		<java.version>1.8</java.version>
+	</properties>
+	<dependencies>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-test</artifactId>
+			<scope>test</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-web</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>org.projectlombok</groupId>
+			<artifactId>lombok</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>com.github.jfcloud</groupId>
+			<artifactId>jfcloud-boot-starter-sse</artifactId>
+			<version>K6.6.5</version>
+		</dependency>
+
+<!--		<dependency>-->
+<!--			<groupId>com.jfcloud</groupId>-->
+<!--			<artifactId>dfs-jfcloud-spring-boot-starter</artifactId>-->
+<!--			<version>K6.6.5</version>-->
+<!--		</dependency>-->
+	</dependencies>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.springframework.boot</groupId>
+				<artifactId>spring-boot-maven-plugin</artifactId>
+			</plugin>
+		</plugins>
+	</build>
+
+</project>

+ 15 - 0
src/main/java/com/github/jfcloud/sims/SimsApplication.java

@@ -0,0 +1,15 @@
+package com.github.jfcloud.sims;
+
+import com.github.jfcloud.sse.EnableJfcloudSSE;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+@EnableJfcloudSSE
+public class SimsApplication {
+
+	public static void main(String[] args) {
+		SpringApplication.run(SimsApplication.class, args);
+	}
+
+}

+ 37 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/base/SimsBase.java

@@ -0,0 +1,37 @@
+package com.github.jfcloud.sims.sample.automatic.datav.base;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description 抽象接口参数
+ * @date 2024/5/14 09:02:48
+ */
+
+@Data
+public class SimsBase implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 起始时间
+     */
+    private Date startDate;
+    /**
+     * 截至时间
+     */
+    private Date endDate;
+
+    /**
+     * 第几周
+     */
+    private Integer numWeek;
+
+    /**
+     * 页码
+     */
+    private Integer pageInfo;
+}

+ 36 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/controller/SSeController.java

@@ -0,0 +1,36 @@
+package com.github.jfcloud.sims.sample.automatic.datav.controller;
+
+import com.github.jfcloud.sse.controller.JfcloudBaseSseController;
+import com.github.jfcloud.sse.message.SseMessage;
+import com.github.jfcloud.sse.message.SseMessageContent;
+import com.github.jfcloud.sse.service.JfcloudDefaultSseService;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author xiaozun
+ * @version 1.0
+ * @project
+ * @description
+ * @date 2024/05/14/17:43
+ */
+
+@RestController
+@RequestMapping("/sse")
+public class SSeController extends JfcloudBaseSseController {
+    private JfcloudDefaultSseService service;
+    public SSeController(JfcloudDefaultSseService jfcloudDefaultSseService) {
+        super(jfcloudDefaultSseService);
+        service=jfcloudDefaultSseService;
+    }
+
+    @GetMapping
+    public String index(){
+        SseMessageContent<String> stringSseMessageContent = new SseMessageContent<>("sdfsdfsdfsdfsdfsdf2412312", 1, "message");
+        SseMessage<String> stringSseMessage = new SseMessage<String>("1",stringSseMessageContent);
+        service.pushData(stringSseMessage);
+        return "sdfsd";
+    }
+
+}

+ 294 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/controller/SimsDataIndexController.java

@@ -0,0 +1,294 @@
+package com.github.jfcloud.sims.sample.automatic.datav.controller;
+
+import com.github.jfcloud.sims.sample.automatic.datav.dto.*;
+import com.github.jfcloud.sims.sample.automatic.datav.service.SimsDatavIndexService;
+import com.github.jfcloud.sims.sample.automatic.datav.vo.*;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.*;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description sims首页统计假数据接口
+ * @date 2024/5/14 09:05:20
+ */
+@RequestMapping("/simsIndex")
+@RestController
+public class SimsDataIndexController {
+
+    @Resource
+    SimsDatavIndexService simsDatavIndexService;
+
+    /**
+     * 样本处理进度
+     */
+    @GetMapping("/sampleProcessingProgress")
+    public SampleProcessingProgressInfo sampleProcessingProgress(SampleProcessingProgressVo sampleProcessingProgressVo) {
+        sampleProcessingProgressVo.setEndDate(new Date());
+        sampleProcessingProgressVo.setPendingSampleCount(100);
+        sampleProcessingProgressVo.setProcessingSampleCount(128);
+        sampleProcessingProgressVo.setDoneSampleCount(98);
+        sampleProcessingProgressVo.setPageInfo(1);
+        SampleProcessingProgressInfo sampleProcessingProgressInfo = simsDatavIndexService.sampleProcessingProgress(sampleProcessingProgressVo);
+        return sampleProcessingProgressInfo;
+    }
+
+    /**
+     *设备工作效率
+     */
+    @GetMapping("/equipmentProductivity")
+    public EquipmentProductivityInfo equipmentProductivity(EquipmentProductivityVo equipmentProductivityVo){
+        equipmentProductivityVo.setEndDate(new Date());
+        Map<String,String> statusMap = new HashMap<>();
+        statusMap.put("设备冰箱1","NORMAL");
+        statusMap.put("设备冰箱2","RUNNING");
+        statusMap.put("设备冰箱3","FAULT");
+        statusMap.put("设备冰箱4","STOPPED");
+
+        Map<String,Date> startDateMap = new HashMap<>();
+        startDateMap.put("sam-1",new Date(2024 - 1900,5 - 1,14,15,30));
+        startDateMap.put("sam-2",new Date(2024 - 1900,5 - 1,14,15,20));
+        Map<String,Date> endDateMap = new HashMap<>();
+        endDateMap.put("sam-1",new Date());
+        endDateMap.put("sam-2",new Date());
+
+        equipmentProductivityVo.setEquipmentOperationalStatusMap(statusMap);
+        equipmentProductivityVo.setStartDateMap(startDateMap);
+        equipmentProductivityVo.setEndDateMap(endDateMap);
+        equipmentProductivityVo.setDailyProcessingCapacity(100);
+        equipmentProductivityVo.setUtilNowProcessingCapacity(endDateMap.size());
+        equipmentProductivityVo.setPageInfo(1);
+        EquipmentProductivityInfo equipmentProductivityInfo = simsDatavIndexService.equipmentProductivity(equipmentProductivityVo);
+        return equipmentProductivityInfo;
+    }
+
+    /**
+     * 样本出入销库统计
+     */
+    @GetMapping("/statisticsOfSamplesInAndOutTheWarehouse")
+    public StatisticsOfSamplesInAndOutTheWarehouseInfo statisticsOfSamplesInAndOutTheWarehouse(StatisticsOfSamplesInAndOutTheWarehouseVo statisticsOfSamplesInAndOutTheWarehouseVo){
+        statisticsOfSamplesInAndOutTheWarehouseVo.setNumWeek(1);
+        Map<String,Integer> storageMap = new HashMap<>();
+        storageMap.put("4.16",1);
+        storageMap.put("4.17",2);
+        Map<String,Integer> fetchedMap = new HashMap<>();
+        fetchedMap.put("4.16",3);
+        fetchedMap.put("4.17",4);
+        Map<String,Integer> sellOutMap = new HashMap<>();
+        sellOutMap.put("4.16",5);
+        sellOutMap.put("4.17",6);
+        statisticsOfSamplesInAndOutTheWarehouseVo.setStorageCountOfWeekMap(storageMap);
+        statisticsOfSamplesInAndOutTheWarehouseVo.setFetchedCountOfWeekMap(fetchedMap);
+        statisticsOfSamplesInAndOutTheWarehouseVo.setSellOutCountOfWeekMap(sellOutMap);
+        statisticsOfSamplesInAndOutTheWarehouseVo.setPageInfo(1);
+        StatisticsOfSamplesInAndOutTheWarehouseInfo statisticsOfSamplesInAndOutTheWarehouseInfo = simsDatavIndexService.statisticsOfSamplesInAndOutTheWarehouse(statisticsOfSamplesInAndOutTheWarehouseVo);
+        return statisticsOfSamplesInAndOutTheWarehouseInfo;
+    }
+
+    /**
+     * 样本入库相关指标
+     */
+    @GetMapping("/sampleWarehousingRelatedIndicators")
+    public SampleWarehousingRelatedIndicatorsInfo sampleWarehousingRelatedIndicators(SampleWarehousingRelatedIndicatorsVo sampleWarehousingRelatedIndicatorsVo){
+        Date date = new Date();
+        date.setHours(15);
+        date.setMinutes(0);
+        date.setSeconds(0);
+        sampleWarehousingRelatedIndicatorsVo.setStorageStartTime(date);
+        sampleWarehousingRelatedIndicatorsVo.setRobotOperationalStatus("125.9");
+        Map<String,String> locationMap = new HashMap<>();
+        locationMap.put("实验室1号楼1D-3c","状态1");
+        sampleWarehousingRelatedIndicatorsVo.setStorageLocationMap(locationMap);
+        sampleWarehousingRelatedIndicatorsVo.setStorageCount(116);
+        sampleWarehousingRelatedIndicatorsVo.setNeedStorageCount(200);
+        sampleWarehousingRelatedIndicatorsVo.setPageInfo(1);
+        SampleWarehousingRelatedIndicatorsInfo sampleWarehousingRelatedIndicatorsInfo = simsDatavIndexService.sampleWarehousingRelatedIndicators(sampleWarehousingRelatedIndicatorsVo);
+        return sampleWarehousingRelatedIndicatorsInfo;
+    }
+
+    /**
+     * 样本出库相关指标
+     */
+    @GetMapping("/sampleOutboundRelatedIndicators")
+    public SampleOutboundRelatedIndicatorsInfo sampleOutboundRelatedIndicators(SampleOutboundRelatedIndicatorsVo sampleOutboundRelatedIndicatorsVo){
+        Map<String, Date> fetchedDateMap = new HashMap<>();
+        fetchedDateMap.put("sam-1",new Date(2024 - 1900,5 - 1,14,15,30));
+        fetchedDateMap.put("sam-2",new Date(2024 - 1900,5 - 1,14,10,30));
+        sampleOutboundRelatedIndicatorsVo.setFetchedDateMap(fetchedDateMap);
+        Map<String, Date> unFetchedDateMap = new HashMap<>();
+        unFetchedDateMap.put("sam-1",new Date());
+        unFetchedDateMap.put("sam-2",new Date());
+        sampleOutboundRelatedIndicatorsVo.setUnFechedDateMap(unFetchedDateMap);
+        sampleOutboundRelatedIndicatorsVo.setFetchedCount(116);
+        sampleOutboundRelatedIndicatorsVo.setUrgentFetchedCount(36);
+        sampleOutboundRelatedIndicatorsVo.setFetchedLocation("实验室1号楼1D-3c");
+        sampleOutboundRelatedIndicatorsVo.setPageInfo(1);
+        SampleOutboundRelatedIndicatorsInfo sampleOutboundRelatedIndicatorsInfo = simsDatavIndexService.sampleOutboundRelatedIndicators(sampleOutboundRelatedIndicatorsVo);
+        return sampleOutboundRelatedIndicatorsInfo;
+    }
+
+    /**
+     * 设备自动化预警
+     */
+    @GetMapping("/automaticEquipmentEarlyWarning")
+    public AutomaticEquipmentEarlyWarningInfo automaticEquipmentEarlyWarning(AutomaticEquipmentEarlyWarningVo automaticEquipmentEarlyWarningVo){
+        EarlyWaringVo earlyWaringVo1 = new EarlyWaringVo();
+        earlyWaringVo1.setEarlyWarningDate(new Date());
+        earlyWaringVo1.setEquipmentName("XXX");
+        earlyWaringVo1.setEquipmentPriority("高");
+        earlyWaringVo1.setEquipmentDescription("XXXXXXXXX");
+        EarlyWaringVo earlyWaringVo2 = new EarlyWaringVo();
+        earlyWaringVo2.setEarlyWarningDate(new Date());
+        earlyWaringVo2.setEquipmentName("XXS");
+        earlyWaringVo2.setEquipmentPriority("高");
+        earlyWaringVo2.setEquipmentDescription("XXXXXXXXXSSS");
+        List<EarlyWaringVo> earlyWaringVoList = new ArrayList<>();
+        earlyWaringVoList.add(earlyWaringVo1);
+        earlyWaringVoList.add(earlyWaringVo2);
+        automaticEquipmentEarlyWarningVo.setEarlyWaringVoList(earlyWaringVoList);
+        automaticEquipmentEarlyWarningVo.setPageInfo(1);
+        AutomaticEquipmentEarlyWarningInfo automaticEquipmentEarlyWarningInfo = simsDatavIndexService.automaticEquipmentEarlyWarning(automaticEquipmentEarlyWarningVo);
+        return automaticEquipmentEarlyWarningInfo;
+    }
+
+    /**
+     * 样本库监测
+     */
+    @GetMapping("/sampleBankMonitoring")
+    public SampleBankMonitoringInfo sampleBankMonitoring(SampleBankMonitoringVo sampleBankMonitoringVo){
+        sampleBankMonitoringVo.setSampleCountTotal(168);
+        Map<String,Integer> temperatureMap = new HashMap<>();
+        temperatureMap.put("自动化库1",-80);
+        temperatureMap.put("自动化库2",-80);
+        temperatureMap.put("自动化库3",-80);
+        temperatureMap.put("自动化库4",-80);
+        Map<String,Double> humidityMap = new HashMap<>();
+        humidityMap.put("自动化库1",0.36);
+        humidityMap.put("自动化库2",0.36);
+        humidityMap.put("自动化库3",0.36);
+        humidityMap.put("自动化库4",0.36);
+        sampleBankMonitoringVo.setHumidityMap(humidityMap);
+        sampleBankMonitoringVo.setTemperatureMap(temperatureMap);
+        sampleBankMonitoringVo.setPageInfo(1);
+        SampleBankMonitoringInfo sampleBankMonitoringInfo = simsDatavIndexService.sampleBankMonitoring(sampleBankMonitoringVo);
+        return sampleBankMonitoringInfo;
+    }
+
+    /**
+     * 样本库数据总览
+     */
+    @GetMapping("/sampleDatabaseDataOverview")
+    public SampleDatabaseDataOverviewInfo sampleDatabaseDataOverview(SampleDatabaseDataOverviewVo sampleDatabaseDataOverviewVo){
+        sampleDatabaseDataOverviewVo.setEquipmentCountTotal(12);
+        sampleDatabaseDataOverviewVo.setInventoryCount(102);
+        sampleDatabaseDataOverviewVo.setInventorySpaceUtilization(0.5);
+        sampleDatabaseDataOverviewVo.setSampleExpirationDateMonitoring(1);
+        Map<String,Long> storageTotalMap = new HashMap<>();
+        storageTotalMap.put("1月",200L);
+        storageTotalMap.put("2月",400L);
+        storageTotalMap.put("3月",600L);
+        Map<String,Long> fetchTotalMap = new HashMap<>();
+        fetchTotalMap.put("1月",100L);
+        fetchTotalMap.put("2月",200L);
+        fetchTotalMap.put("3月",300L);
+        Map<String,Long> sellOutTotalMap = new HashMap<>();
+        sellOutTotalMap.put("1月",100L);
+        sellOutTotalMap.put("2月",300L);
+        sellOutTotalMap.put("3月",500L);
+        sampleDatabaseDataOverviewVo.setStorageTotalMap(storageTotalMap);
+        sampleDatabaseDataOverviewVo.setFetchTotalMap(fetchTotalMap);
+        sampleDatabaseDataOverviewVo.setSellOutTotalMap(sellOutTotalMap);
+        sampleDatabaseDataOverviewVo.setPageInfo(1);
+        SampleDatabaseDataOverviewInfo sampleDatabaseDataOverviewInfo = simsDatavIndexService.sampleDatabaseDataOverview(sampleDatabaseDataOverviewVo);
+        return sampleDatabaseDataOverviewInfo;
+    }
+
+    /**
+     * 设备类型
+     */
+    @GetMapping("/equipmentType")
+    public EquipmentTypeInfo equipmentType(EquipmentTypeVo equipmentTypeVo){
+        equipmentTypeVo.setPageInfo(2);
+        Map<String,Integer> equipmentCountMap = new HashMap<>();
+        equipmentCountMap.put("冰箱",20);
+        equipmentCountMap.put("液氮罐",4);
+        equipmentCountMap.put("AGV",4);
+        equipmentTypeVo.setEquipmentCountMap(equipmentCountMap);
+        EquipmentTypeInfo equipmentTypeInfo = simsDatavIndexService.equipmentType(equipmentTypeVo);
+        return equipmentTypeInfo;
+    }
+
+    /**
+     * 样本类型
+     */
+    @GetMapping("/sampleType")
+    public SampleTypeInfo sampleType(SampleTypeVo sampleTypeVo){
+        sampleTypeVo.setPageInfo(2);
+        Map<String,Integer> sampleCountMap = new HashMap<>();
+        sampleCountMap.put("DNA",164);
+        sampleCountMap.put("植物细胞",217);
+        sampleCountMap.put("原核细胞",80);
+        sampleCountMap.put("真核细胞",100);
+        sampleTypeVo.setSampleCountMap(sampleCountMap);
+        SampleTypeInfo sampleTypeInfo = simsDatavIndexService.sampleType(sampleTypeVo);
+        return sampleTypeInfo;
+    }
+
+    /**
+     * 设备汇总
+     */
+    @GetMapping("/equipmentTotal")
+    public EquipmentTotalInfo equipmentTotal(EquipmentTotalVo equipmentTotalVo){
+        equipmentTotalVo.setPageInfo(2);
+        Map<String,Integer> temperatureMap = new HashMap<>();
+        temperatureMap.put("设备1",25);
+        temperatureMap.put("设备2",25);
+        temperatureMap.put("设备3",25);
+        Map<String,Double> humidityMap = new HashMap<>();
+        humidityMap.put("设备1",0.25);
+        humidityMap.put("设备2",0.25);
+        humidityMap.put("设备3",0.25);
+        Map<String,String> statusMap = new HashMap<>();
+        statusMap.put("设备1","正常");
+        statusMap.put("设备2","运行");
+        statusMap.put("设备3","断电");
+        equipmentTotalVo.setStatusMap(statusMap);
+        equipmentTotalVo.setHumidityMap(humidityMap);
+        equipmentTotalVo.setTemperatureMap(temperatureMap);
+        EquipmentTotalInfo equipmentTotalInfo = simsDatavIndexService.equipmentTotal(equipmentTotalVo);
+        return equipmentTotalInfo;
+    }
+
+    /**
+     * 样本小管出入库
+     */
+    @GetMapping("/sampleTubesInBase")
+    public SampleTubesInBaseInfo sampleTubesInBase(SampleTubesInBaseVo sampleTubesInBaseVo){
+        sampleTubesInBaseVo.setPageInfo(2);
+        sampleTubesInBaseVo.setSampleCount(7610);
+        sampleTubesInBaseVo.setSampleTubesCount(23410);
+        sampleTubesInBaseVo.setSampleBoxCount(1861);
+        sampleTubesInBaseVo.setFetchCount(200);
+        sampleTubesInBaseVo.setStorageCount(400);
+        SampleTubesInBaseInfo sampleTubesInBaseInfo = simsDatavIndexService.sampleTubesInBase(sampleTubesInBaseVo);
+        return sampleTubesInBaseInfo;
+    }
+
+    /**
+     * 设备空间利用率
+     */
+    @GetMapping("/deviceSpaceUtilization")
+    public DeviceSpaceUtilizationInfo deviceSpaceUtilization(DeviceSpaceUtilizationVo deviceSpaceUtilizationVo){
+        deviceSpaceUtilizationVo.setPageInfo(2);
+        Map<String,Double> deviceSpaceMap = new HashMap<>();
+        deviceSpaceMap.put("1",0.23);
+        deviceSpaceMap.put("2",0.45);
+        deviceSpaceMap.put("3",0.61);
+        deviceSpaceUtilizationVo.setDeviceSpacemap(deviceSpaceMap);
+        DeviceSpaceUtilizationInfo deviceSpaceUtilizationInfo = simsDatavIndexService.deviceSpaceUtilization(deviceSpaceUtilizationVo);
+        return deviceSpaceUtilizationInfo;
+    }
+}

+ 1166 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/doc/sims可视化.md

@@ -0,0 +1,1166 @@
+---
+title: sims可视化
+language_tabs:
+  - shell: Shell
+  - http: HTTP
+  - javascript: JavaScript
+  - ruby: Ruby
+  - python: Python
+  - php: PHP
+  - java: Java
+  - go: Go
+toc_footers: []
+includes: []
+search: true
+code_clipboard: true
+highlight_theme: darkula
+headingLevel: 2
+generator: "@tarslib/widdershins v4.0.23"
+
+---
+
+# sims可视化
+
+Base URLs:
+
+# Authentication
+
+# sims
+
+## GET 样本处理进度
+
+GET /simsIndex/sampleProcessingProgress
+
+> Body 请求参数
+
+```json
+{
+  "startDate": "1999-12-28",
+  "endDate": "2013-01-17",
+  "numWeek": 38,
+  "pendingSampleCount": 13,
+  "processingSampleCount": 62,
+  "doneSampleCount": 20,
+  "pageInfo": 33
+}
+```
+
+### 请求参数
+
+|名称|位置|类型|必选|中文名|说明|
+|---|---|---|---|---|---|
+|Authorization|header|string| 是 ||none|
+|body|body|object| 否 ||none|
+|» startDate|body|string| 否 | 样本开始处理时间|none|
+|» endDate|body|string| 是 | 样本结束处理时间|结束处理时间即为显示时间|
+|» numWeek|body|integer| 否 | 周数|none|
+|» pendingSampleCount|body|integer| 是 | 待处理样本数|none|
+|» processingSampleCount|body|integer| 是 | 处理中样本数|none|
+|» doneSampleCount|body|integer| 是 | 已完成样本数|none|
+|» pageInfo|body|integer| 是 | 所在页码|none|
+
+> 返回示例
+
+> 成功
+
+```json
+{
+  "startDate": "2013-12-15",
+  "endDate": "1999-03-03",
+  "numWeek": 95,
+  "progress": 53,
+  "pendingSampleCount": 10,
+  "processingSampleCount": 9,
+  "doneSampleCount": 46,
+  "pageInfo": 1
+}
+```
+
+### 返回结果
+
+|状态码|状态码含义|说明|数据模型|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline|
+
+### 返回数据结构
+
+状态码 **200**
+
+|名称|类型|必选|约束|中文名|说明|
+|---|---|---|---|---|---|
+|» startDate|string|true|none|样本开始处理时间|none|
+|» endDate|string|true|none|样本结束处理时间|none|
+|» numWeek|integer|true|none|周数|none|
+|» progress|number|true|none|已处理占比|none|
+|» pendingSampleCount|integer|true|none|待处理样本数|none|
+|» processingSampleCount|integer|true|none|处理中样本数|none|
+|» doneSampleCount|integer|true|none|已完成样本数|none|
+|» pageInfo|integer|true|none|所在页码|none|
+
+## GET 设备工作效率
+
+GET /simsIndex/equipmentProductivity
+
+> Body 请求参数
+
+```json
+{
+  "startDate": "1990-03-23",
+  "endDate": "2002-07-03",
+  "numWeek": 37,
+  "equipmentOperationalStatusMap": {
+    "设备冰箱1": "in proident",
+    "设备冰箱2": "cillum",
+    "设备冰箱3": "dolor laborum",
+    "设备冰箱4": "laboris ad aliquip non"
+  },
+  "dailyProcessingCapacity": 60,
+  "utilNowProcessingCapacity": 30,
+  "startDateMap": {
+    "sam-1": "labore non nisi magna",
+    "sam-2": "tempor quis ut proident"
+  },
+  "endDateMap": {
+    "sam-1": "consequat Duis ex",
+    "sam-2": "cupidatat dolor esse"
+  }
+}
+```
+
+### 请求参数
+
+|名称|位置|类型|必选|中文名|说明|
+|---|---|---|---|---|---|
+|Authorization|header|string| 是 ||none|
+|body|body|object| 否 ||none|
+|» startDate|body|string| 否 | 样本开始处理时间|none|
+|» endDate|body|string| 是 | 样本结束处理时间|none|
+|» numWeek|body|integer| 否 | 当前周数|none|
+|» equipmentOperationalStatusMap|body|object| 是 | 设备运行状态|<设备名,状态>|
+|»» 设备冰箱1|body|string| 否 ||none|
+|»» 设备冰箱2|body|string| 否 ||none|
+|»» 设备冰箱3|body|string| 否 ||none|
+|»» 设备冰箱4|body|string| 否 ||none|
+|» dailyProcessingCapacity|body|integer| 是 | 日处理上线|none|
+|» utilNowProcessingCapacity|body|integer| 是 | 当前处理个数|none|
+|» startDateMap|body|object| 是 | 开始处理时间集合|<样本名,时间>|
+|»» sam-1|body|string| 否 ||none|
+|»» sam-2|body|string| 否 ||none|
+|» endDateMap|body|object| 是 | 结束处理时间集合|<样本名,时间>|
+|»» sam-1|body|string| 否 ||none|
+|»» sam-2|body|string| 否 ||none|
+|» pageInfo|body|integer| 是 | 所在页码|none|
+
+> 返回示例
+
+> 成功
+
+```json
+{
+  "startDate": null,
+  "endDate": "2024-05-15T08:38:42.848+00:00",
+  "numWeek": null,
+  "sampleProcessingTimeAvg": 1513,
+  "dailyProcessingCapacity": 100,
+  "equipmentOperationalStatusMap": {
+    "设备冰箱1": "NORMAL",
+    "设备冰箱4": "STOPPED",
+    "设备冰箱2": "RUNNING",
+    "设备冰箱3": "FAULT",
+    "pageInfo": 1
+  }
+}
+```
+
+### 返回结果
+
+|状态码|状态码含义|说明|数据模型|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline|
+
+### 返回数据结构
+
+状态码 **200**
+
+|名称|类型|必选|约束|中文名|说明|
+|---|---|---|---|---|---|
+|» startDate|string|false|none||none|
+|» endDate|string|true|none||none|
+|» numWeek|integer|false|none||none|
+|» sampleProcessingTimeAvg|integer|true|none|样本平均处理时间|none|
+|» dailyProcessingCapacity|integer|true|none|日处理上限|none|
+|» equipmentOperationalStatusMap|object|true|none|设备运行状态集合|<设备名,设备状态>|
+|»» 设备冰箱1|string|false|none||none|
+|»» 设备冰箱4|string|false|none||none|
+|»» 设备冰箱2|string|false|none||none|
+|»» 设备冰箱3|string|false|none||none|
+|» pageInfo|integer|true|none|所在页码|none|
+
+## GET 设备空间利用率
+
+GET /simsIndex/deviceSpaceUtilization
+
+> Body 请求参数
+
+```json
+{
+  "startDate": "string",
+  "endDate": "string",
+  "numWeek": 0,
+  "pageInfo": 0,
+  "deviceSpacemap": {
+    "1": 0,
+    "2": 0,
+    "3": 0
+  }
+}
+```
+
+### 请求参数
+
+|名称|位置|类型|必选|中文名|说明|
+|---|---|---|---|---|---|
+|Authorization|header|string| 是 ||none|
+|body|body|object| 否 ||none|
+|» startDate|body|string| 否 ||none|
+|» endDate|body|string| 否 ||none|
+|» numWeek|body|integer| 否 ||none|
+|» pageInfo|body|integer| 是 | 所在页码|none|
+|» deviceSpacemap|body|object| 是 | 空间利用率集合|<时间,利用率>|
+|»» 1|body|number| 否 ||none|
+|»» 2|body|number| 否 ||none|
+|»» 3|body|number| 否 ||none|
+
+> 返回示例
+
+> 成功
+
+```json
+{
+  "startDate": null,
+  "endDate": null,
+  "numWeek": null,
+  "pageInfo": 2,
+  "deviceSpaceMap": {
+    "1": 0.23,
+    "2": 0.45,
+    "3": 0.61
+  }
+}
+```
+
+### 返回结果
+
+|状态码|状态码含义|说明|数据模型|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline|
+
+### 返回数据结构
+
+状态码 **200**
+
+|名称|类型|必选|约束|中文名|说明|
+|---|---|---|---|---|---|
+|» startDate|string|false|none||none|
+|» endDate|string|false|none||none|
+|» numWeek|integer|false|none||none|
+|» pageInfo|integer|true|none|所在页码|none|
+|» deviceSpaceMap|object|true|none|空间利用率集合|<时间,利用率>|
+|»» 1|number|false|none||none|
+|»» 2|number|false|none||none|
+|»» 3|number|false|none||none|
+
+## GET 样本出入销库统计
+
+GET /simsIndex/statisticsOfSamplesInAndOutTheWarehouse
+
+> Body 请求参数
+
+```json
+{
+  "startDate": "1990-03-23",
+  "endDate": "2002-07-03",
+  "numWeek": 37,
+  "storageCountOfWeekMap": {
+    "4.16": "1",
+    "4.17": "2"
+  },
+  "fetchedCountOfWeekMap": {
+    "4.16": "3",
+    "4.17": "4"
+  },
+  "sellOutCountOfWeekMap": {
+    "4.16": "5",
+    "4.17": "6"
+  }
+}
+```
+
+### 请求参数
+
+|名称|位置|类型|必选|中文名|说明|
+|---|---|---|---|---|---|
+|Authorization|header|string| 是 ||none|
+|body|body|object| 否 ||none|
+|» startDate|body|string| 否 ||none|
+|» endDate|body|string| 否 ||none|
+|» numWeek|body|integer| 是 | 当前周数|none|
+|» storageCountOfWeekMap|body|object| 是 | 每日入库数量|<日期,数量>|
+|»» 4.16|body|integer| 否 ||none|
+|»» 4.17|body|integer| 否 ||none|
+|» fetchedCountOfWeekMap|body|object| 是 | 每日出库数量|<日期,数量>|
+|»» 4.16|body|integer| 否 ||none|
+|»» 4.17|body|integer| 否 ||none|
+|» sellOutCountOfWeekMap|body|object| 是 | 每日销库数量|<日期,数量>|
+|»» 4.16|body|integer| 否 ||none|
+|»» 4.17|body|integer| 否 ||none|
+|» pageInfo|body|integer| 是 | 所在页码|none|
+
+> 返回示例
+
+> 成功
+
+```json
+{
+  "startDate": null,
+  "endDate": null,
+  "numWeek": 1,
+  "storageCountOfWeekMap": {
+    "4.16": 1,
+    "4.17": 2
+  },
+  "fetchedCountOfWeekMap": {
+    "4.16": 3,
+    "4.17": 4
+  },
+  "sellOutCountOfWeekMap": {
+    "4.16": 5,
+    "4.17": 6
+  },
+  "pageInfo": 1
+}
+```
+
+### 返回结果
+
+|状态码|状态码含义|说明|数据模型|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline|
+
+### 返回数据结构
+
+状态码 **200**
+
+|名称|类型|必选|约束|中文名|说明|
+|---|---|---|---|---|---|
+|» startDate|string|false|none||none|
+|» endDate|string|false|none||none|
+|» numWeek|integer|true|none|当前周数|none|
+|» storageCountOfWeekMap|object|true|none|每日入库数量|<日期,数量>|
+|»» 4.16|integer|false|none||none|
+|»» 4.17|integer|false|none||none|
+|» fetchedCountOfWeekMap|object|true|none|每日出库数量|<日期,数量>|
+|»» 4.16|integer|false|none||none|
+|»» 4.17|integer|false|none||none|
+|» sellOutCountOfWeekMap|object|true|none|每日销库数量|<日期,数量>|
+|»» 4.16|integer|false|none||none|
+|»» 4.17|integer|false|none||none|
+|» pageInfo|integer|true|none|所在页码|none|
+
+## GET 样本入库相关指标
+
+GET /simsIndex/sampleWarehousingRelatedIndicators
+
+> Body 请求参数
+
+```json
+{
+  "startDate": "1990-03-23",
+  "endDate": "2002-07-03",
+  "numWeek": 37,
+  "storageCount": 116,
+  "needStorageCount": 200,
+  "storageStartTime": "2002-07-03",
+  "robotOperationalStatus": "正常",
+  "storageLocationMap": {
+    "实验室1号楼1D-3c": "状态1"
+  }
+}
+```
+
+### 请求参数
+
+|名称|位置|类型|必选|中文名|说明|
+|---|---|---|---|---|---|
+|Authorization|header|string| 是 ||none|
+|body|body|object| 否 ||none|
+|» startDate|body|string| 否 ||none|
+|» endDate|body|string| 否 ||none|
+|» numWeek|body|integer| 否 ||none|
+|» storageCount|body|integer| 是 | 已入库样本数|none|
+|» needStorageCount|body|integer| 是 | 申请入库样本总数|none|
+|» storageStartTime|body|string| 是 | 入库等待时间|none|
+|» robotOperationalStatus|body|string| 是 | 机器人运行状态|none|
+|» storageLocationMap|body|object| 是 | 入库样本跟追集合|<跟追地,状态>|
+|»» 实验室1号楼1D-3c|body|string| 否 ||none|
+|» pageInfo|body|integer| 是 | 所在页码|none|
+
+> 返回示例
+
+> 成功
+
+```json
+{
+  "startDate": null,
+  "endDate": null,
+  "numWeek": null,
+  "storageCount": 116,
+  "storageCapacity": 0.58,
+  "storageStartTime": "2024-05-15T07:00:00.888+00:00",
+  "robotOperationalStatus": "125.9",
+  "storageLocationMap": {
+    "实验室1号楼1D-3c": "状态1"
+  },
+  "pageInfo": 1
+}
+```
+
+### 返回结果
+
+|状态码|状态码含义|说明|数据模型|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline|
+
+### 返回数据结构
+
+状态码 **200**
+
+|名称|类型|必选|约束|中文名|说明|
+|---|---|---|---|---|---|
+|» startDate|string|false|none||none|
+|» endDate|string|false|none||none|
+|» numWeek|integer|false|none||none|
+|» storageCount|integer|true|none|已入库样本数|none|
+|» storageCapacity|number|true|none|申请入库样本总数|none|
+|» storageStartTime|string|true|none|入库等待时间|none|
+|» robotOperationalStatus|string|true|none|机器人运行状态|none|
+|» storageLocationMap|object|true|none|入库样本跟追集合|<跟追地,状态>|
+|»» 实验室1号楼1D-3c|string|false|none||none|
+|» pageInfo|integer|true|none|所在页码|none|
+
+## GET 样本出库相关指标
+
+GET /simsIndex/sampleOutboundRelatedIndicators
+
+> Body 请求参数
+
+```json
+{
+  "startDate": "2008-03-14",
+  "endDate": "1995-01-05",
+  "numWeek": 94,
+  "fetchedCount": 66,
+  "urgentFetchedCount": 71,
+  "fetchedLocation": "qui id",
+  "fetchedDateMap": {
+    "sam-1": "culpa mollit",
+    "sam-2": "enim"
+  }
+}
+```
+
+### 请求参数
+
+|名称|位置|类型|必选|中文名|说明|
+|---|---|---|---|---|---|
+|Authorization|header|string| 是 ||none|
+|body|body|object| 否 ||none|
+|» startDate|body|string| 否 ||none|
+|» endDate|body|string| 否 ||none|
+|» numWeek|body|integer| 否 ||none|
+|» fetchedCount|body|integer| 是 | 出库样本总数|none|
+|» urgentFetchedCount|body|integer| 是 | 紧急出库请求数|none|
+|» fetchedLocation|body|string| 是 | 样本目的地|none|
+|» fetchedDateMap|body|object| 是 | 今日样本出库时间集合|<样本编号,出库时间>|
+|»» sam-1|body|string| 否 ||none|
+|»» sam-2|body|string| 否 ||none|
+|» pageInfo|body|integer| 是 | 所在页码|none|
+
+> 返回示例
+
+> 成功
+
+```json
+{
+  "startDate": null,
+  "endDate": null,
+  "numWeek": null,
+  "fetchedCount": 116,
+  "urgentFetchedCount": 36,
+  "fetchedLocation": "实验室1号楼1D-3c",
+  "fetchedTime": "55小时34分",
+  "pageInfo": 1
+}
+```
+
+### 返回结果
+
+|状态码|状态码含义|说明|数据模型|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline|
+
+### 返回数据结构
+
+状态码 **200**
+
+|名称|类型|必选|约束|中文名|说明|
+|---|---|---|---|---|---|
+|» startDate|string|false|none||none|
+|» endDate|string|false|none||none|
+|» numWeek|integer|false|none||none|
+|» fetchedCount|integer|true|none|出库样本总数|none|
+|» urgentFetchedCount|integer|true|none|紧急出库请求数|none|
+|» fetchedLocation|string|true|none|样本目的地|none|
+|» fetchedTime|string|true|none|出库处理时间总时长|none|
+|» pageInfo|integer|true|none|所在页码|none|
+
+## GET 设备自动化预警
+
+GET /simsIndex/automaticEquipmentEarlyWarning
+
+> Body 请求参数
+
+```json
+{
+  "startDate": "1978-04-22",
+  "endDate": "2012-08-07",
+  "numWeek": 13,
+  "earlyWaringVoList": [
+    {
+      "earlyWarningDate": "1996-01-26",
+      "equipmentName": "资基省达精求",
+      "equipmentPriority": "Duis anim commodo enim culpa",
+      "equipmentDescription": "et anim velit labore incididunt"
+    }
+  ]
+}
+```
+
+### 请求参数
+
+|名称|位置|类型|必选|中文名|说明|
+|---|---|---|---|---|---|
+|Authorization|header|string| 是 ||none|
+|body|body|object| 否 ||none|
+|» startDate|body|string| 否 ||none|
+|» endDate|body|string| 否 ||none|
+|» numWeek|body|integer| 否 ||none|
+|» earlyWaringVoList|body|[object]| 是 | 预警对象列表|<预警对象>|
+|»» earlyWarningDate|body|string| 是 | 预警时间|none|
+|»» equipmentName|body|string| 是 | 设备名称|none|
+|»» equipmentPriority|body|string| 是 | 优先级|none|
+|»» equipmentDescription|body|string| 是 | 预警描述|none|
+|» pageInfo|body|integer| 是 | 所在页码|none|
+
+> 返回示例
+
+> 成功
+
+```json
+{
+  "startDate": null,
+  "endDate": null,
+  "numWeek": null,
+  "earlyWaringVoList": [
+    {
+      "earlyWarningDate": "2024-05-15T08:51:01.573+00:00",
+      "equipmentName": "XXX",
+      "equipmentPriority": "高",
+      "equipmentDescription": "XXXXXXXXX"
+    },
+    {
+      "earlyWarningDate": "2024-05-15T08:51:01.573+00:00",
+      "equipmentName": "XXS",
+      "equipmentPriority": "高",
+      "equipmentDescription": "XXXXXXXXXSSS"
+    }
+  ],
+  "pageInfo": 1
+}
+```
+
+### 返回结果
+
+|状态码|状态码含义|说明|数据模型|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline|
+
+### 返回数据结构
+
+状态码 **200**
+
+|名称|类型|必选|约束|中文名|说明|
+|---|---|---|---|---|---|
+|» startDate|string|false|none||none|
+|» endDate|string|false|none||none|
+|» numWeek|integer|false|none||none|
+|» earlyWaringVoList|[object]|true|none|预警对象列表|<预警对象>|
+|»» earlyWarningDate|string|true|none|预警时间|none|
+|»» equipmentName|string|true|none|设备名称|none|
+|»» equipmentPriority|string|true|none|优先级|none|
+|»» equipmentDescription|string|true|none|预警描述|none|
+|» pageInfo|integer|true|none|所在页码|none|
+
+## GET 样本库监测
+
+GET /simsIndex/sampleBankMonitoring
+
+> Body 请求参数
+
+```json
+{
+  "startDate": "2011-08-21",
+  "endDate": "2021-06-13",
+  "sampleCountTotal": 76,
+  "temperatureMap": {
+    "样本库1": "tempor sint nisi incididunt",
+    "样本库2": "voluptate ut sit dolor",
+    "样本库3": "ut fugiat Duis",
+    "样本库4": "irure"
+  },
+  "humidityMap": {
+    "样本库1": "aliqua",
+    "样本库2": "Duis ut sed fugiat est",
+    "样本库3": "Ut",
+    "样本库4": "non incididunt sit enim"
+  }
+}
+```
+
+### 请求参数
+
+|名称|位置|类型|必选|中文名|说明|
+|---|---|---|---|---|---|
+|Authorization|header|string| 是 ||none|
+|body|body|object| 否 ||none|
+|» startDate|body|string| 否 ||none|
+|» endDate|body|string| 否 ||none|
+|» numWeek|body|integer| 否 ||none|
+|» sampleCountTotal|body|integer| 是 | 样本总数|none|
+|» temperatureMap|body|object| 是 | 样本库温度集合|<样本库名,温度>|
+|»» 样本库1|body|integer| 否 ||none|
+|»» 样本库2|body|integer| 否 ||none|
+|»» 样本库3|body|integer| 否 ||none|
+|»» 样本库4|body|integer| 否 ||none|
+|» humidityMap|body|object| 是 | 样本库湿度集合|<样本库名,湿度>|
+|»» 样本库1|body|number| 否 ||none|
+|»» 样本库2|body|number| 否 ||none|
+|»» 样本库3|body|number| 否 ||none|
+|»» 样本库4|body|number| 否 ||none|
+|» pageInfo|body|integer| 是 | 所在页码|none|
+
+> 返回示例
+
+> 成功
+
+```json
+{
+  "startDate": null,
+  "endDate": null,
+  "numWeek": null,
+  "sampleCountTotal": 168,
+  "temperatureMap": {
+    "自动化库4": -80,
+    "自动化库3": -80,
+    "自动化库2": -80,
+    "自动化库1": -80
+  },
+  "humidityMap": {
+    "自动化库4": 0.36,
+    "自动化库3": 0.36,
+    "自动化库2": 0.36,
+    "自动化库1": 0.36
+  },
+  "pageInfo": 1
+}
+```
+
+### 返回结果
+
+|状态码|状态码含义|说明|数据模型|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline|
+
+### 返回数据结构
+
+状态码 **200**
+
+|名称|类型|必选|约束|中文名|说明|
+|---|---|---|---|---|---|
+|» startDate|string|false|none||none|
+|» endDate|string|false|none||none|
+|» numWeek|integer|false|none||none|
+|» sampleCountTotal|integer|true|none|样本总数|none|
+|» temperatureMap|object|true|none|样本库温度集合|<样本库名,温度>|
+|»» 自动化库4|integer|false|none||none|
+|»» 自动化库3|integer|false|none||none|
+|»» 自动化库2|integer|false|none||none|
+|»» 自动化库1|integer|false|none||none|
+|» humidityMap|object|true|none|样本库湿度集合|<样本库名,湿度>|
+|»» 自动化库4|number|false|none||none|
+|»» 自动化库3|number|false|none||none|
+|»» 自动化库2|number|false|none||none|
+|»» 自动化库1|number|false|none||none|
+|» pageInfo|integer|true|none|所在页码|none|
+
+## GET 样本库数据总览
+
+GET /simsIndex/sampleDatabaseDataOverview
+
+> Body 请求参数
+
+```json
+{
+  "startDate": "2010-08-23",
+  "endDate": "2002-12-01",
+  "numWeek": 59,
+  "equipmentCountTotal": 27,
+  "inventoryCount": 48,
+  "inventorySpaceUtilization": 15,
+  "sampleExpirationDateMonitoring": 88,
+  "storageTotalMap": {
+    "一月": "incididunt amet ullamco et officia"
+  },
+  "fetchTotalMap": {
+    "一月": "minim dolore"
+  },
+  "sellOutTotalMap": {
+    "一月": "Duis nulla adipisicing et consequat"
+  }
+}
+```
+
+### 请求参数
+
+|名称|位置|类型|必选|中文名|说明|
+|---|---|---|---|---|---|
+|Authorization|header|string| 是 ||none|
+|body|body|object| 否 ||none|
+|» startDate|body|string| 否 ||none|
+|» endDate|body|string| 否 ||none|
+|» numWeek|body|integer| 否 ||none|
+|» equipmentCountTotal|body|integer| 是 | 设备数量|none|
+|» inventoryCount|body|integer| 是 | 实时库存量|none|
+|» inventorySpaceUtilization|body|number| 是 | 库存空间利用率|none|
+|» sampleExpirationDateMonitoring|body|integer| 是 | 样本有效期监控数量|none|
+|» storageTotalMap|body|object| 是 | 入库总数集合|<月份,数量>|
+|»» 一月|body|integer| 否 ||none|
+|» fetchTotalMap|body|object| 是 | 出库总数集合|<月份,数量>|
+|»» 一月|body|integer| 否 ||none|
+|» sellOutTotalMap|body|object| 是 | 销库总数集合|<月份,数量>|
+|»» 一月|body|integer| 否 ||none|
+|» pageInfo|body|integer| 是 | 所在页码|none|
+
+> 返回示例
+
+> 成功
+
+```json
+{
+  "startDate": null,
+  "endDate": null,
+  "numWeek": null,
+  "equipmentCountTotal": 12,
+  "inventoryCount": 102,
+  "inventorySpaceUtilization": 0.5,
+  "sampleExpirationDateMonitoring": 1,
+  "storageTotalMap": {
+    "3月": 600,
+    "2月": 400,
+    "1月": 200
+  },
+  "fetchTotalMap": {
+    "3月": 300,
+    "2月": 200,
+    "1月": 100
+  },
+  "sellOutTotalMap": {
+    "3月": 500,
+    "2月": 300,
+    "1月": 100
+  },
+  "pageInfo": 1
+}
+```
+
+### 返回结果
+
+|状态码|状态码含义|说明|数据模型|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline|
+
+### 返回数据结构
+
+状态码 **200**
+
+|名称|类型|必选|约束|中文名|说明|
+|---|---|---|---|---|---|
+|» startDate|string|false|none||none|
+|» endDate|string|false|none||none|
+|» numWeek|integer|false|none||none|
+|» equipmentCountTotal|integer|true|none|设备数量|none|
+|» inventoryCount|integer|true|none|实时库存量|none|
+|» inventorySpaceUtilization|number|true|none|库存空间利用率|none|
+|» sampleExpirationDateMonitoring|integer|true|none|样本有效期监控数量|none|
+|» storageTotalMap|object|true|none|入库总数集合|<月份,数量>|
+|»» 3月|integer|false|none||none|
+|»» 2月|integer|false|none||none|
+|»» 1月|integer|false|none||none|
+|» fetchTotalMap|object|true|none|出库总数集合|<月份,数量>|
+|»» 3月|integer|false|none||none|
+|»» 2月|integer|false|none||none|
+|»» 1月|integer|false|none||none|
+|» sellOutTotalMap|object|true|none|销库总数集合|<月份,数量>|
+|»» 3月|integer|false|none||none|
+|»» 2月|integer|false|none||none|
+|»» 1月|integer|false|none||none|
+|» pageInfo|integer|true|none|所在页码|none|
+
+## GET 设备类型
+
+GET /simsIndex/equipmentType
+
+> Body 请求参数
+
+```json
+{
+  "startDate": "1980-06-14",
+  "endDate": "1972-06-25",
+  "numWeek": 19,
+  "pageInfo": 78,
+  "equipmentCountMap": {
+    "冰箱": "ad occaecat nostrud proident",
+    "液氮罐": "sunt aliqua Excepteur",
+    "AGV": "Ut reprehenderit id"
+  }
+}
+```
+
+### 请求参数
+
+|名称|位置|类型|必选|中文名|说明|
+|---|---|---|---|---|---|
+|Authorization|header|string| 是 ||none|
+|body|body|object| 否 ||none|
+|» startDate|body|string| 否 ||none|
+|» endDate|body|string| 否 ||none|
+|» numWeek|body|integer| 否 ||none|
+|» pageInfo|body|integer| 是 | 所在页码|none|
+|» equipmentCountMap|body|object| 是 | 设备数量集合|<设备名,设备数量>|
+|»» 冰箱|body|integer| 否 ||none|
+|»» 液氮罐|body|integer| 否 ||none|
+|»» AGV|body|integer| 否 ||none|
+
+> 返回示例
+
+> 成功
+
+```json
+{
+  "startDate": null,
+  "endDate": null,
+  "numWeek": null,
+  "pageInfo": 2,
+  "allEquipmentTotal": 28,
+  "equipmentCountMap": {
+    "AGV": 4,
+    "冰箱": 20,
+    "液氮罐": 4
+  }
+}
+```
+
+### 返回结果
+
+|状态码|状态码含义|说明|数据模型|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline|
+
+### 返回数据结构
+
+状态码 **200**
+
+|名称|类型|必选|约束|中文名|说明|
+|---|---|---|---|---|---|
+|» startDate|string|false|none||none|
+|» endDate|string|false|none||none|
+|» numWeek|integer|false|none||none|
+|» pageInfo|integer|true|none|所在页码|none|
+|» allEquipmentTotal|integer|true|none|所有设备总数|none|
+|» equipmentCountMap|object|true|none|设备数量集合|<设备名,设备数量>|
+|»» AGV|integer|true|none||none|
+|»» 冰箱|integer|true|none||none|
+|»» 液氮罐|integer|true|none||none|
+
+## GET 样本类型
+
+GET /simsIndex/sampleType
+
+> Body 请求参数
+
+```json
+{
+  "startDate": "2005-04-30",
+  "endDate": "2022-10-13",
+  "numWeek": 30,
+  "pageInfo": 57,
+  "sampleCountMap": {
+    "DNA": "veniam dolor",
+    "植物细胞": "tempor",
+    "原核细胞": "labore ut in est Duis",
+    "真核细胞": "dolore"
+  }
+}
+```
+
+### 请求参数
+
+|名称|位置|类型|必选|中文名|说明|
+|---|---|---|---|---|---|
+|Authorization|header|string| 是 ||none|
+|body|body|object| 否 ||none|
+|» startDate|body|string| 否 ||none|
+|» endDate|body|string| 否 ||none|
+|» numWeek|body|integer| 否 ||none|
+|» pageInfo|body|integer| 是 | 所在页码|none|
+|» sampleCountMap|body|object| 是 | 样本数量集合|<样本名,样本数>|
+|»» DNA|body|integer| 否 ||none|
+|»» 植物细胞|body|integer| 否 ||none|
+|»» 原核细胞|body|integer| 否 ||none|
+|»» 真核细胞|body|integer| 否 ||none|
+
+> 返回示例
+
+> 成功
+
+```json
+{
+  "startDate": null,
+  "endDate": null,
+  "numWeek": null,
+  "pageInfo": 2,
+  "sampleCountMap": {
+    "DNA": 164,
+    "植物细胞": 217,
+    "原核细胞": 80,
+    "真核细胞": 100
+  }
+}
+```
+
+### 返回结果
+
+|状态码|状态码含义|说明|数据模型|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline|
+
+### 返回数据结构
+
+状态码 **200**
+
+|名称|类型|必选|约束|中文名|说明|
+|---|---|---|---|---|---|
+|» startDate|string|false|none||none|
+|» endDate|string|false|none||none|
+|» numWeek|integer|false|none||none|
+|» pageInfo|integer|true|none|所在页码|none|
+|» sampleCountMap|object|true|none|样本数量集合|<样本名,样本数>|
+|»» DNA|integer|false|none||none|
+|»» 植物细胞|integer|false|none||none|
+|»» 原核细胞|integer|false|none||none|
+|»» 真核细胞|integer|false|none||none|
+
+## GET 设备汇总
+
+GET /simsIndex/equipmentTotal
+
+> Body 请求参数
+
+```json
+{
+  "startDate": "1996-04-01",
+  "endDate": "1981-03-14",
+  "numWeek": 17,
+  "pageInfo": 42,
+  "temperatureMap": {
+    "设备1": 54,
+    "设备2": 33,
+    "设备3": 91
+  },
+  "humidityMap": {
+    "设备1": 98,
+    "设备2": 46,
+    "设备3": 94
+  },
+  "statusMap": {
+    "设备1": "minim aliquip amet",
+    "设备2": "aliqua",
+    "设备3": "aliquip ut minim dolore"
+  }
+}
+```
+
+### 请求参数
+
+|名称|位置|类型|必选|中文名|说明|
+|---|---|---|---|---|---|
+|Authorization|header|string| 是 ||none|
+|body|body|object| 否 ||none|
+|» startDate|body|string| 否 ||none|
+|» endDate|body|string| 否 ||none|
+|» numWeek|body|integer| 否 ||none|
+|» pageInfo|body|integer| 是 | 所在页码|none|
+|» temperatureMap|body|object| 是 | 设备温度集合|<设备名,温度>|
+|»» 设备1|body|integer| 否 ||none|
+|»» 设备2|body|integer| 否 ||none|
+|»» 设备3|body|integer| 否 ||none|
+|» humidityMap|body|object| 是 | 设备湿度集合|<设备名,湿度>|
+|»» 设备1|body|number| 否 ||none|
+|»» 设备2|body|number| 否 ||none|
+|»» 设备3|body|number| 否 ||none|
+|» statusMap|body|object| 是 | 设备状态集合|<设备名,状态>|
+|»» 设备1|body|string| 是 ||none|
+|»» 设备2|body|string| 是 ||none|
+|»» 设备3|body|string| 是 ||none|
+
+> 返回示例
+
+> 成功
+
+```json
+{
+  "startDate": null,
+  "endDate": null,
+  "numWeek": null,
+  "pageInfo": 2,
+  "temperatureMap": {
+    "设备3": 25,
+    "设备2": 25,
+    "设备1": 25
+  },
+  "humidityMap": {
+    "设备3": 0.25,
+    "设备2": 0.25,
+    "设备1": 0.25
+  },
+  "statusMap": {
+    "设备3": "断电",
+    "设备2": "运行",
+    "设备1": "正常"
+  }
+}
+```
+
+### 返回结果
+
+|状态码|状态码含义|说明|数据模型|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline|
+
+### 返回数据结构
+
+状态码 **200**
+
+|名称|类型|必选|约束|中文名|说明|
+|---|---|---|---|---|---|
+|» startDate|string|false|none||none|
+|» endDate|string|false|none||none|
+|» numWeek|integer|false|none||none|
+|» pageInfo|integer|true|none|所在页码|none|
+|» temperatureMap|object|true|none|设备温度集合|<设备名,温度>|
+|»» 设备3|integer|true|none||none|
+|»» 设备2|integer|true|none||none|
+|»» 设备1|integer|true|none||none|
+|» humidityMap|object|true|none|设备湿度集合|<设备名,湿度>|
+|»» 设备3|number|true|none||none|
+|»» 设备2|number|true|none||none|
+|»» 设备1|number|true|none||none|
+|» statusMap|object|true|none|设备状态集合|<设备名,状态>|
+|»» 设备3|string|true|none||none|
+|»» 设备2|string|true|none||none|
+|»» 设备1|string|true|none||none|
+
+## GET 样本小管出入库
+
+GET /simsIndex/sampleTubesInBase
+
+> Body 请求参数
+
+```json
+{
+  "startDate": "1983-10-18",
+  "endDate": "1977-01-11",
+  "numWeek": 21,
+  "sampleBoxCount": 95,
+  "sampleTubesCount": 97,
+  "sampleCount": 74,
+  "fetchCount": 76,
+  "storageCount": 35
+}
+```
+
+### 请求参数
+
+|名称|位置|类型|必选|中文名|说明|
+|---|---|---|---|---|---|
+|Authorization|header|string| 是 ||none|
+|body|body|object| 否 ||none|
+|» startDate|body|string| 否 ||none|
+|» endDate|body|string| 否 ||none|
+|» numWeek|body|integer| 否 ||none|
+|» pageInfo|body|integer| 是 | 所在页码|none|
+|» sampleBoxCount|body|integer| 是 | 样本盒总数|none|
+|» sampleTubesCount|body|integer| 是 | 样本小管数量|none|
+|» sampleCount|body|integer| 是 | 样本总数|none|
+|» fetchCount|body|integer| 是 | 出库数|none|
+|» storageCount|body|integer| 是 | 入库数|none|
+
+> 返回示例
+
+> 成功
+
+```json
+{
+  "startDate": null,
+  "endDate": null,
+  "numWeek": null,
+  "pageInfo": 2,
+  "sampleBoxCount": 1861,
+  "sampleTubesCount": 23410,
+  "sampleCount": 7610,
+  "fetchCount": 200,
+  "storageCount": 400
+}
+```
+
+### 返回结果
+
+|状态码|状态码含义|说明|数据模型|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|Inline|
+
+### 返回数据结构
+
+状态码 **200**
+
+|名称|类型|必选|约束|中文名|说明|
+|---|---|---|---|---|---|
+|» startDate|string|false|none||none|
+|» endDate|string|false|none||none|
+|» numWeek|integer|false|none||none|
+|» pageInfo|integer|true|none|所在页码|none|
+|» sampleBoxCount|integer|true|none|样本盒总数|none|
+|» sampleTubesCount|integer|true|none|样本小管数量|none|
+|» sampleCount|integer|true|none|样本总数|none|
+|» fetchCount|integer|true|none|出库数|none|
+|» storageCount|integer|true|none|入库数|none|

+ 23 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/dto/AutomaticEquipmentEarlyWarningInfo.java

@@ -0,0 +1,23 @@
+package com.github.jfcloud.sims.sample.automatic.datav.dto;
+
+import com.github.jfcloud.sims.sample.automatic.datav.base.SimsBase;
+import com.github.jfcloud.sims.sample.automatic.datav.vo.EarlyWaringVo;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author xiaozun
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description 自动化设备预警dto
+ * @date 2024/05/14/10:02
+ */
+
+@Data
+public class AutomaticEquipmentEarlyWarningInfo extends SimsBase {
+    /**
+     * 预警对象列表<预警对象>
+     */
+    private List<EarlyWaringVo> earlyWaringVoList;
+}

+ 22 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/dto/DeviceSpaceUtilizationInfo.java

@@ -0,0 +1,22 @@
+package com.github.jfcloud.sims.sample.automatic.datav.dto;
+
+import com.github.jfcloud.sims.sample.automatic.datav.base.SimsBase;
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * @author xiaozun
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description 设备空间利用率dto
+ * @date 2024/05/15/17:41
+ */
+
+@Data
+public class DeviceSpaceUtilizationInfo extends SimsBase {
+    /**
+     * 空间利用率集合<时间,利用率>
+     */
+    private Map<String,Double> deviceSpaceMap;
+}

+ 31 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/dto/EquipmentProductivityInfo.java

@@ -0,0 +1,31 @@
+package com.github.jfcloud.sims.sample.automatic.datav.dto;
+
+import com.github.jfcloud.sims.sample.automatic.datav.base.SimsBase;
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * @author xiaozun
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description 设备工作效率dto
+ * @date 2024/05/14/10:01
+ */
+@Data
+public class EquipmentProductivityInfo extends SimsBase {
+    /**
+     * 样本平均处理时间
+     */
+    private Long sampleProcessingTimeAvg;
+
+    /**
+     * 日处理上限
+     */
+    private Integer dailyProcessingCapacity;
+
+    /**
+     * 设备运行状态集合<设备名,设备状态>
+     */
+    private Map<String,String> equipmentOperationalStatusMap;
+}

+ 32 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/dto/EquipmentTotalInfo.java

@@ -0,0 +1,32 @@
+package com.github.jfcloud.sims.sample.automatic.datav.dto;
+
+import com.github.jfcloud.sims.sample.automatic.datav.base.SimsBase;
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * @author xiaozun
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description 设备汇总dto
+ * @date 2024/05/15/17:38
+ */
+
+@Data
+public class EquipmentTotalInfo extends SimsBase {
+    /**
+     * 设备温度集合<设备名,温度>
+     */
+    private Map<String,Integer> temperatureMap;
+
+    /**
+     * 设备湿度集合<设备名,湿度>
+     */
+    private Map<String,Double> humidityMap;
+
+    /**
+     * 设备状态集合<设备名,状态>
+     */
+    private Map<String,String> statusMap;
+}

+ 27 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/dto/EquipmentTypeInfo.java

@@ -0,0 +1,27 @@
+package com.github.jfcloud.sims.sample.automatic.datav.dto;
+
+import com.github.jfcloud.sims.sample.automatic.datav.base.SimsBase;
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * @author xiaozun
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description 设备类型dto
+ * @date 2024/05/15/17:37
+ */
+
+@Data
+public class EquipmentTypeInfo extends SimsBase {
+    /**
+     * 所有设备总数
+     */
+    private Integer allEquipmentTotal;
+
+    /**
+     * 设备数量集合<设备名,设备数量>
+     */
+    private Map<String,Integer> equipmentCountMap;
+}

+ 32 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/dto/SampleBankMonitoringInfo.java

@@ -0,0 +1,32 @@
+package com.github.jfcloud.sims.sample.automatic.datav.dto;
+
+import com.github.jfcloud.sims.sample.automatic.datav.base.SimsBase;
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * @author xiaozun
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description 样本库监测dto
+ * @date 2024/05/14/10:02
+ */
+
+@Data
+public class SampleBankMonitoringInfo extends SimsBase {
+    /**
+     * 样本总数
+     */
+    private Integer sampleCountTotal;
+
+    /**
+     * 温度集合<样本库名,温度>
+     */
+    private Map<String,Integer> temperatureMap;
+
+    /**
+     * 湿度集合<样本库名,湿度>
+     */
+    private Map<String,Double> humidityMap;
+}

+ 52 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/dto/SampleDatabaseDataOverviewInfo.java

@@ -0,0 +1,52 @@
+package com.github.jfcloud.sims.sample.automatic.datav.dto;
+
+import com.github.jfcloud.sims.sample.automatic.datav.base.SimsBase;
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * @author xiaozun
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description 样本库数据总览dto
+ * @date 2024/05/14/10:02
+ */
+
+@Data
+public class SampleDatabaseDataOverviewInfo extends SimsBase {
+    /**
+     * 设备数量
+     */
+    private Integer equipmentCountTotal;
+
+    /**
+     * 实时库存量
+     */
+    private Integer inventoryCount;
+
+    /**
+     * 库存空间利用率
+     */
+    private Double inventorySpaceUtilization;
+
+    /**
+     * 样本有效期监控
+     */
+    private Integer sampleExpirationDateMonitoring;
+
+    /**
+     * 入库总数集合<月份,数量>
+     */
+    private Map<String,Long> storageTotalMap;
+
+    /**
+     * 出库总数集合<月份,数量>
+     */
+    private Map<String,Long> fetchTotalMap;
+
+    /**
+     * 销库总数集合<月份,数量>
+     */
+    private Map<String,Long> sellOutTotalMap;
+}

+ 35 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/dto/SampleOutboundRelatedIndicatorsInfo.java

@@ -0,0 +1,35 @@
+package com.github.jfcloud.sims.sample.automatic.datav.dto;
+
+import com.github.jfcloud.sims.sample.automatic.datav.base.SimsBase;
+import lombok.Data;
+
+/**
+ * @author xiaozun
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description 样本库出库相关指标dto
+ * @date 2024/05/14/10:01
+ */
+
+@Data
+public class SampleOutboundRelatedIndicatorsInfo extends SimsBase {
+    /**
+     * 出库样本数
+     */
+    private Integer fetchedCount;
+
+    /**
+     * 紧急出库请求
+     */
+    private Integer urgentFetchedCount;
+
+    /**
+     * 出库样本目的地
+     */
+    private String fetchedLocation;
+
+    /**
+     * 出库处理时间
+     */
+    private String fetchedTime;
+}

+ 35 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/dto/SampleProcessingProgressInfo.java

@@ -0,0 +1,35 @@
+package com.github.jfcloud.sims.sample.automatic.datav.dto;
+
+import com.github.jfcloud.sims.sample.automatic.datav.base.SimsBase;
+import lombok.Data;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description 样本处理进度dto
+ * @date 2024/5/14 08:54:59
+ */
+
+@Data
+public class SampleProcessingProgressInfo extends SimsBase {
+    /**
+     * 已处理占比
+     */
+    private Double progress;
+
+    /**
+     * 待处理样本数
+     */
+    private Integer pendingSampleCount;
+
+    /**
+     * 处理中样本数
+     */
+    private Integer processingSampleCount;
+
+    /**
+     * 已完成样本数
+     */
+    private Integer doneSampleCount;
+}

+ 40 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/dto/SampleTubesInBaseInfo.java

@@ -0,0 +1,40 @@
+package com.github.jfcloud.sims.sample.automatic.datav.dto;
+
+import com.github.jfcloud.sims.sample.automatic.datav.base.SimsBase;
+import lombok.Data;
+
+/**
+ * @author xiaozun
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description 样本小管入库dto
+ * @date 2024/05/15/17:40
+ */
+
+@Data
+public class SampleTubesInBaseInfo extends SimsBase {
+    /**
+     * 样本盒总数
+     */
+    private Integer sampleBoxCount;
+
+    /**
+     * 样本小管
+     */
+    private Integer sampleTubesCount;
+
+    /**
+     * 样本总数
+     */
+    private Integer sampleCount;
+
+    /**
+     * 出库数
+     */
+    private Integer fetchCount;
+
+    /**
+     * 入库数
+     */
+    private Integer storageCount;
+}

+ 22 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/dto/SampleTypeInfo.java

@@ -0,0 +1,22 @@
+package com.github.jfcloud.sims.sample.automatic.datav.dto;
+
+import com.github.jfcloud.sims.sample.automatic.datav.base.SimsBase;
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * @author xiaozun
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description 样本类型dto
+ * @date 2024/05/15/17:37
+ */
+
+@Data
+public class SampleTypeInfo extends SimsBase {
+    /**
+     * 样本数量集合<样本名,样本数>
+     */
+    private Map<String,Integer> sampleCountMap;
+}

+ 43 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/dto/SampleWarehousingRelatedIndicatorsInfo.java

@@ -0,0 +1,43 @@
+package com.github.jfcloud.sims.sample.automatic.datav.dto;
+
+import com.github.jfcloud.sims.sample.automatic.datav.base.SimsBase;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * @author xiaozun
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description 样本入库相关指标dto
+ * @date 2024/05/14/10:01
+ */
+
+@Data
+public class SampleWarehousingRelatedIndicatorsInfo extends SimsBase {
+    /**
+     * 入库样本数
+     */
+    private Integer storageCount;
+
+    /**
+     * 入库成功率
+     */
+    private Double storageCapacity;
+
+    /**
+     * 入库等待时间
+     */
+    private Date storageStartTime;
+
+    /**
+     * 机器人运行状态
+     */
+    private String robotOperationalStatus;
+
+    /**
+     * 入库样本跟追集合<跟追地,状态>
+     */
+    private Map<String,String> storageLocationMap;
+}

+ 32 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/dto/StatisticsOfSamplesInAndOutTheWarehouseInfo.java

@@ -0,0 +1,32 @@
+package com.github.jfcloud.sims.sample.automatic.datav.dto;
+
+import com.github.jfcloud.sims.sample.automatic.datav.base.SimsBase;
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * @author xiaozun
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description 样本出入销库统计dto
+ * @date 2024/05/14/10:01
+ */
+
+@Data
+public class StatisticsOfSamplesInAndOutTheWarehouseInfo extends SimsBase {
+    /**
+     * 入库数量集合<样本库名,数量>
+     */
+    private Map<String,Integer> storageCountOfWeekMap;
+
+    /**
+     * 出库数量集合<样本库名,数量>
+     */
+    private Map<String,Integer> fetchedCountOfWeekMap;
+
+    /**
+     * 销库数量集合<样本库名,数量>
+     */
+    private Map<String,Integer> sellOutCountOfWeekMap;
+}

+ 106 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/service/SimsDatavIndexService.java

@@ -0,0 +1,106 @@
+package com.github.jfcloud.sims.sample.automatic.datav.service;
+
+import com.github.jfcloud.sims.sample.automatic.datav.dto.*;
+import com.github.jfcloud.sims.sample.automatic.datav.vo.*;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description SIMS统计首页服务
+ * @date 2024/5/14 08:52:08
+ */
+public interface SimsDatavIndexService {
+
+    /**
+     * 样本处理进度
+     * @param sampleProcessingProgressVo
+     * @return
+     */
+    public SampleProcessingProgressInfo sampleProcessingProgress(SampleProcessingProgressVo sampleProcessingProgressVo);
+
+    /**
+     *设备工作效率
+     * @param equipmentProductivityVo
+     * @return
+     */
+    public EquipmentProductivityInfo equipmentProductivity(EquipmentProductivityVo equipmentProductivityVo);
+
+    /**
+     * 样本出入销库统计
+     * @param statisticsOfSamplesInAndOutTheWarehouseVo
+     * @return
+     */
+    public StatisticsOfSamplesInAndOutTheWarehouseInfo statisticsOfSamplesInAndOutTheWarehouse(StatisticsOfSamplesInAndOutTheWarehouseVo statisticsOfSamplesInAndOutTheWarehouseVo);
+
+    /**
+     * 样本入库相关指标
+     * @param sampleWarehousingRelatedIndicatorsVo
+     * @return
+     */
+    public SampleWarehousingRelatedIndicatorsInfo sampleWarehousingRelatedIndicators(SampleWarehousingRelatedIndicatorsVo sampleWarehousingRelatedIndicatorsVo);
+
+    /**
+     * 样本出库相关指标
+     *
+     * @param sampleOutboundRelatedIndicatorsVo
+     * @return
+     */
+    public SampleOutboundRelatedIndicatorsInfo sampleOutboundRelatedIndicators(SampleOutboundRelatedIndicatorsVo sampleOutboundRelatedIndicatorsVo);
+
+    /**
+     * 设备自动化预警
+     * @param automaticEquipmentEarlyWarningVo
+     * @return
+     */
+    public AutomaticEquipmentEarlyWarningInfo automaticEquipmentEarlyWarning(AutomaticEquipmentEarlyWarningVo automaticEquipmentEarlyWarningVo);
+
+    /**
+     * 样本库监测
+     * @param sampleBankMonitoringVo
+     * @return
+     */
+    public SampleBankMonitoringInfo sampleBankMonitoring(SampleBankMonitoringVo sampleBankMonitoringVo);
+
+    /**
+     * 样本库数据总览
+     * @param sampleDatabaseDataOverviewVo
+     * @return
+     */
+    public SampleDatabaseDataOverviewInfo sampleDatabaseDataOverview(SampleDatabaseDataOverviewVo sampleDatabaseDataOverviewVo);
+
+    /**
+     * 设备类型
+     * @param equipmentTypeVo
+     * @return
+     */
+    public EquipmentTypeInfo equipmentType(EquipmentTypeVo equipmentTypeVo);
+
+    /**
+     * 样本类型
+     * @param sampleTypeVo
+     * @return
+     */
+    public SampleTypeInfo sampleType(SampleTypeVo sampleTypeVo);
+
+    /**
+     * 设备汇总
+     * @param equipmentTotalVo
+     * @return
+     */
+    public EquipmentTotalInfo equipmentTotal(EquipmentTotalVo equipmentTotalVo);
+
+    /**
+     * 样本小管出入库
+     * @param sampleTubesInBaseVo
+     * @return
+     */
+    public SampleTubesInBaseInfo sampleTubesInBase(SampleTubesInBaseVo sampleTubesInBaseVo);
+
+    /**
+     * 设备空间利用率
+     * @param deviceSpaceUtilizationVo
+     * @return
+     */
+    public DeviceSpaceUtilizationInfo deviceSpaceUtilization(DeviceSpaceUtilizationVo deviceSpaceUtilizationVo);
+}

+ 197 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/service/impl/SimsDatavIndexServiceImpl.java

@@ -0,0 +1,197 @@
+package com.github.jfcloud.sims.sample.automatic.datav.service.impl;
+
+import com.github.jfcloud.sims.sample.automatic.datav.dto.*;
+import com.github.jfcloud.sims.sample.automatic.datav.service.SimsDatavIndexService;
+import com.github.jfcloud.sims.sample.automatic.datav.utils.MyUtils;
+import com.github.jfcloud.sims.sample.automatic.datav.vo.*;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description
+ * @date 2024/5/14 08:52:42
+ */
+
+@Service
+public class SimsDatavIndexServiceImpl implements SimsDatavIndexService {
+    @Override
+    public SampleProcessingProgressInfo sampleProcessingProgress(SampleProcessingProgressVo sampleProcessingProgressVo) {
+        SampleProcessingProgressInfo sampleProcessingProgressInfo = new SampleProcessingProgressInfo();
+        Integer preSample = sampleProcessingProgressVo.getPendingSampleCount();
+        Integer ingSample = sampleProcessingProgressVo.getProcessingSampleCount();
+        Integer doneSample = sampleProcessingProgressVo.getDoneSampleCount();
+        Double progress = doneSample.doubleValue() / (preSample + ingSample);
+        sampleProcessingProgressInfo.setProgress(progress);
+        sampleProcessingProgressInfo.setProcessingSampleCount(ingSample);
+        sampleProcessingProgressInfo.setDoneSampleCount(doneSample);
+        sampleProcessingProgressInfo.setPendingSampleCount(preSample);
+        sampleProcessingProgressInfo.setEndDate(sampleProcessingProgressVo.getEndDate());
+        sampleProcessingProgressInfo.setPageInfo(sampleProcessingProgressVo.getPageInfo());
+        return sampleProcessingProgressInfo;
+    }
+
+    @Override
+    public EquipmentProductivityInfo equipmentProductivity(EquipmentProductivityVo equipmentProductivityVo) {
+        Integer capacityCount = equipmentProductivityVo.getUtilNowProcessingCapacity();
+        Map<String, Date> startDateMap = equipmentProductivityVo.getStartDateMap();
+        Map<String, Date> endDateMap = equipmentProductivityVo.getEndDateMap();
+        Long timeDiff = getaTimeDiff(endDateMap, startDateMap);
+
+        EquipmentProductivityInfo equipmentProductivityInfo = new EquipmentProductivityInfo();
+        equipmentProductivityInfo.setEndDate(new Date());
+        equipmentProductivityInfo.setEquipmentOperationalStatusMap(equipmentProductivityVo.getEquipmentOperationalStatusMap());
+        equipmentProductivityInfo.setSampleProcessingTimeAvg(timeDiff/capacityCount);
+        equipmentProductivityInfo.setDailyProcessingCapacity(equipmentProductivityVo.getDailyProcessingCapacity());
+        equipmentProductivityInfo.setPageInfo(equipmentProductivityVo.getPageInfo());
+        return equipmentProductivityInfo;
+    }
+
+    @Override
+    public StatisticsOfSamplesInAndOutTheWarehouseInfo statisticsOfSamplesInAndOutTheWarehouse(StatisticsOfSamplesInAndOutTheWarehouseVo statisticsOfSamplesInAndOutTheWarehouseVo) {
+        StatisticsOfSamplesInAndOutTheWarehouseInfo statisticsOfSamplesInAndOutTheWarehouseInfo = new StatisticsOfSamplesInAndOutTheWarehouseInfo();
+        statisticsOfSamplesInAndOutTheWarehouseInfo.setNumWeek(statisticsOfSamplesInAndOutTheWarehouseVo.getNumWeek());
+        statisticsOfSamplesInAndOutTheWarehouseInfo.setStorageCountOfWeekMap(statisticsOfSamplesInAndOutTheWarehouseVo.getStorageCountOfWeekMap());
+        statisticsOfSamplesInAndOutTheWarehouseInfo.setFetchedCountOfWeekMap(statisticsOfSamplesInAndOutTheWarehouseVo.getFetchedCountOfWeekMap());
+        statisticsOfSamplesInAndOutTheWarehouseInfo.setSellOutCountOfWeekMap(statisticsOfSamplesInAndOutTheWarehouseVo.getSellOutCountOfWeekMap());
+        statisticsOfSamplesInAndOutTheWarehouseInfo.setPageInfo(statisticsOfSamplesInAndOutTheWarehouseVo.getPageInfo());
+        return statisticsOfSamplesInAndOutTheWarehouseInfo;
+    }
+
+    @Override
+    public SampleWarehousingRelatedIndicatorsInfo sampleWarehousingRelatedIndicators(SampleWarehousingRelatedIndicatorsVo sampleWarehousingRelatedIndicatorsVo) {
+        SampleWarehousingRelatedIndicatorsInfo sampleWarehousingRelatedIndicatorsInfo = new SampleWarehousingRelatedIndicatorsInfo();
+        Integer storageCount = sampleWarehousingRelatedIndicatorsVo.getStorageCount();
+        sampleWarehousingRelatedIndicatorsInfo.setStorageCount(storageCount);
+        sampleWarehousingRelatedIndicatorsInfo.setStorageStartTime(sampleWarehousingRelatedIndicatorsVo.getStorageStartTime());
+        sampleWarehousingRelatedIndicatorsInfo.setRobotOperationalStatus(sampleWarehousingRelatedIndicatorsVo.getRobotOperationalStatus());
+        sampleWarehousingRelatedIndicatorsInfo.setStorageLocationMap(sampleWarehousingRelatedIndicatorsVo.getStorageLocationMap());
+        Integer needStorageCount = sampleWarehousingRelatedIndicatorsVo.getNeedStorageCount();
+        sampleWarehousingRelatedIndicatorsInfo.setStorageCapacity(storageCount.doubleValue()/needStorageCount.doubleValue());
+        sampleWarehousingRelatedIndicatorsInfo.setPageInfo(sampleWarehousingRelatedIndicatorsVo.getPageInfo());
+        return sampleWarehousingRelatedIndicatorsInfo;
+    }
+
+    @Override
+    public SampleOutboundRelatedIndicatorsInfo sampleOutboundRelatedIndicators(SampleOutboundRelatedIndicatorsVo sampleOutboundRelatedIndicatorsVo) {
+        SampleOutboundRelatedIndicatorsInfo sampleOutboundRelatedIndicatorsInfo = new SampleOutboundRelatedIndicatorsInfo();
+        sampleOutboundRelatedIndicatorsInfo.setFetchedCount(sampleOutboundRelatedIndicatorsVo.getFetchedCount());
+        sampleOutboundRelatedIndicatorsInfo.setUrgentFetchedCount(sampleOutboundRelatedIndicatorsVo.getUrgentFetchedCount());
+        sampleOutboundRelatedIndicatorsInfo.setFetchedLocation(sampleOutboundRelatedIndicatorsVo.getFetchedLocation());
+        Map<String, Date> fetchedDateMap = sampleOutboundRelatedIndicatorsVo.getFetchedDateMap();
+        Map<String, Date> unFechedDateMap = sampleOutboundRelatedIndicatorsVo.getUnFechedDateMap();
+        Long timeDiff = getaTimeDiff(unFechedDateMap, fetchedDateMap);
+        String fetchedTime = timeDiff / 60 + "小时" + timeDiff % 60 + "分";
+        sampleOutboundRelatedIndicatorsInfo.setFetchedTime(fetchedTime);
+        sampleOutboundRelatedIndicatorsInfo.setPageInfo(sampleOutboundRelatedIndicatorsVo.getPageInfo());
+        return sampleOutboundRelatedIndicatorsInfo;
+    }
+
+    @Override
+    public AutomaticEquipmentEarlyWarningInfo automaticEquipmentEarlyWarning(AutomaticEquipmentEarlyWarningVo automaticEquipmentEarlyWarningVo) {
+        AutomaticEquipmentEarlyWarningInfo automaticEquipmentEarlyWarningInfo = new AutomaticEquipmentEarlyWarningInfo();
+        automaticEquipmentEarlyWarningInfo.setEarlyWaringVoList(automaticEquipmentEarlyWarningVo.getEarlyWaringVoList());
+        automaticEquipmentEarlyWarningInfo.setPageInfo(automaticEquipmentEarlyWarningVo.getPageInfo());
+        return automaticEquipmentEarlyWarningInfo;
+    }
+
+    @Override
+    public SampleBankMonitoringInfo sampleBankMonitoring(SampleBankMonitoringVo sampleBankMonitoringVo) {
+        SampleBankMonitoringInfo sampleBankMonitoringInfo = new SampleBankMonitoringInfo();
+        sampleBankMonitoringInfo.setEndDate(sampleBankMonitoringVo.getEndDate());
+        sampleBankMonitoringInfo.setSampleCountTotal(sampleBankMonitoringVo.getSampleCountTotal());
+        sampleBankMonitoringInfo.setTemperatureMap(sampleBankMonitoringVo.getTemperatureMap());
+        sampleBankMonitoringInfo.setHumidityMap(sampleBankMonitoringVo.getHumidityMap());
+        sampleBankMonitoringInfo.setPageInfo(sampleBankMonitoringVo.getPageInfo());
+        return sampleBankMonitoringInfo;
+    }
+
+    @Override
+    public SampleDatabaseDataOverviewInfo sampleDatabaseDataOverview(SampleDatabaseDataOverviewVo sampleDatabaseDataOverviewVo) {
+        SampleDatabaseDataOverviewInfo sampleDatabaseDataOverviewInfo = new SampleDatabaseDataOverviewInfo();
+        sampleDatabaseDataOverviewInfo.setEndDate(sampleDatabaseDataOverviewVo.getEndDate());
+        sampleDatabaseDataOverviewInfo.setEquipmentCountTotal(sampleDatabaseDataOverviewVo.getEquipmentCountTotal());
+        sampleDatabaseDataOverviewInfo.setInventoryCount(sampleDatabaseDataOverviewVo.getInventoryCount());
+        sampleDatabaseDataOverviewInfo.setInventorySpaceUtilization(sampleDatabaseDataOverviewVo.getInventorySpaceUtilization());
+        sampleDatabaseDataOverviewInfo.setSampleExpirationDateMonitoring(sampleDatabaseDataOverviewVo.getSampleExpirationDateMonitoring());
+        sampleDatabaseDataOverviewInfo.setFetchTotalMap(sampleDatabaseDataOverviewVo.getFetchTotalMap());
+        sampleDatabaseDataOverviewInfo.setStorageTotalMap(sampleDatabaseDataOverviewVo.getStorageTotalMap());
+        sampleDatabaseDataOverviewInfo.setSellOutTotalMap(sampleDatabaseDataOverviewVo.getSellOutTotalMap());
+        sampleDatabaseDataOverviewInfo.setPageInfo(sampleDatabaseDataOverviewVo.getPageInfo());
+        return sampleDatabaseDataOverviewInfo;
+    }
+
+    @Override
+    public EquipmentTypeInfo equipmentType(EquipmentTypeVo equipmentTypeVo) {
+        EquipmentTypeInfo equipmentTypeInfo = new EquipmentTypeInfo();
+        Map<String, Integer> equipmentCountMap = equipmentTypeVo.getEquipmentCountMap();
+        equipmentTypeInfo.setEquipmentCountMap(equipmentCountMap);
+        equipmentTypeInfo.setPageInfo(equipmentTypeVo.getPageInfo());
+        equipmentTypeInfo.setAllEquipmentTotal(getAllEquipmentTotal(equipmentCountMap));
+        return equipmentTypeInfo;
+    }
+
+    @Override
+    public SampleTypeInfo sampleType(SampleTypeVo sampleTypeVo) {
+        SampleTypeInfo sampleTypeInfo = new SampleTypeInfo();
+        sampleTypeInfo.setPageInfo(sampleTypeVo.getPageInfo());
+        sampleTypeInfo.setSampleCountMap(sampleTypeVo.getSampleCountMap());
+        return sampleTypeInfo;
+    }
+
+    @Override
+    public EquipmentTotalInfo equipmentTotal(EquipmentTotalVo equipmentTotalVo) {
+        EquipmentTotalInfo equipmentTotalInfo = new EquipmentTotalInfo();
+        equipmentTotalInfo.setPageInfo(equipmentTotalVo.getPageInfo());
+        equipmentTotalInfo.setStatusMap(equipmentTotalVo.getStatusMap());
+        equipmentTotalInfo.setTemperatureMap(equipmentTotalVo.getTemperatureMap());
+        equipmentTotalInfo.setHumidityMap(equipmentTotalVo.getHumidityMap());
+        return equipmentTotalInfo;
+    }
+
+    @Override
+    public SampleTubesInBaseInfo sampleTubesInBase(SampleTubesInBaseVo sampleTubesInBaseVo) {
+        SampleTubesInBaseInfo sampleTubesInBaseInfo = new SampleTubesInBaseInfo();
+        sampleTubesInBaseInfo.setPageInfo(sampleTubesInBaseVo.getPageInfo());
+        sampleTubesInBaseInfo.setSampleCount(sampleTubesInBaseVo.getSampleCount());
+        sampleTubesInBaseInfo.setSampleTubesCount(sampleTubesInBaseVo.getSampleTubesCount());
+        sampleTubesInBaseInfo.setSampleBoxCount(sampleTubesInBaseVo.getSampleBoxCount());
+        sampleTubesInBaseInfo.setStorageCount(sampleTubesInBaseVo.getStorageCount());
+        sampleTubesInBaseInfo.setFetchCount(sampleTubesInBaseVo.getFetchCount());
+        return sampleTubesInBaseInfo;
+    }
+
+    @Override
+    public DeviceSpaceUtilizationInfo deviceSpaceUtilization(DeviceSpaceUtilizationVo deviceSpaceUtilizationVo) {
+        DeviceSpaceUtilizationInfo deviceSpaceUtilizationInfo = new DeviceSpaceUtilizationInfo();
+        deviceSpaceUtilizationInfo.setPageInfo(deviceSpaceUtilizationVo.getPageInfo());
+        deviceSpaceUtilizationInfo.setDeviceSpaceMap(deviceSpaceUtilizationVo.getDeviceSpacemap());
+        return deviceSpaceUtilizationInfo;
+    }
+
+    private static Integer getAllEquipmentTotal(Map<String, Integer> equipmentCountMap) {
+        Integer allEquipmentTotal = 0;
+        for (String key : equipmentCountMap.keySet()) {
+            allEquipmentTotal += equipmentCountMap.get(key);
+        }
+        return allEquipmentTotal;
+    }
+
+    private static Long getaTimeDiff(Map<String, Date> unFechedDateMap, Map<String, Date> fetchedDateMap) {
+        Long timeDiff = 0L;
+        for (String key : unFechedDateMap.keySet()) {
+            Date fetchDate = fetchedDateMap.get(key);
+            Date unFetchdate = unFechedDateMap.get(key);
+            try {
+                timeDiff += MyUtils.getTimeDiff(fetchDate, unFetchdate);
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        }
+        return timeDiff;
+    }
+}

+ 22 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/utils/MyUtils.java

@@ -0,0 +1,22 @@
+package com.github.jfcloud.sims.sample.automatic.datav.utils;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * @author xiaozun
+ * @version 1.0
+ * @project
+ * @description
+ * @date 2024/05/14/18:52
+ */
+public class MyUtils {
+    public static Long getTimeDiff(Date d1, Date d2) throws Exception{
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        long newTime =sdf.parse(sdf.format(d2)).getTime();
+        //从对象中拿到时间
+        long oldTime = sdf.parse(sdf.format(d1)).getTime();
+        long diff=(newTime-oldTime)/1000/60;
+        return diff;
+    }
+}

+ 21 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/vo/AutomaticEquipmentEarlyWarningVo.java

@@ -0,0 +1,21 @@
+package com.github.jfcloud.sims.sample.automatic.datav.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author xiaozun
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description 自动化设备预警vo
+ * @date 2024/05/14/10:00
+ */
+
+@Data
+public class AutomaticEquipmentEarlyWarningVo extends SimsBaseVo{
+    /**
+     * 预警对象列表<预警对象>
+     */
+    private List<EarlyWaringVo> earlyWaringVoList;
+}

+ 21 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/vo/DeviceSpaceUtilizationVo.java

@@ -0,0 +1,21 @@
+package com.github.jfcloud.sims.sample.automatic.datav.vo;
+
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * @author xiaozun
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description 设备空间利用率vo
+ * @date 2024/05/15/19:40
+ */
+
+@Data
+public class DeviceSpaceUtilizationVo extends SimsBaseVo{
+    /**
+     * 空间利用率集合<时间,利用率>
+     */
+    private Map<String,Double> deviceSpacemap;
+}

+ 40 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/vo/EarlyWaringVo.java

@@ -0,0 +1,40 @@
+package com.github.jfcloud.sims.sample.automatic.datav.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+/**
+ * @author xiaozun
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description 设备预警对象
+ * @date 2024/05/14/10:50
+ */
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class EarlyWaringVo{
+    /**
+     * 预警时间
+     */
+    private Date earlyWarningDate;
+
+    /**
+     * 设备名称
+     */
+    private String equipmentName;
+
+    /**
+     * 优先级
+     */
+    private String equipmentPriority;
+
+    /**
+     * 预警描述
+     */
+    private String equipmentDescription;
+}

+ 41 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/vo/EquipmentProductivityVo.java

@@ -0,0 +1,41 @@
+package com.github.jfcloud.sims.sample.automatic.datav.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * @author xiaozun
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description 设备工作效率vo
+ * @date 2024/05/14/9:58
+ */
+@Data
+public class EquipmentProductivityVo extends SimsBaseVo{
+    /**
+     * 设备运行状态
+     */
+    private Map<String,String> equipmentOperationalStatusMap;
+
+    /**
+     * 日处理上限
+     */
+    private Integer dailyProcessingCapacity;
+
+    /**
+     * 当前处理个数
+     */
+    private Integer utilNowProcessingCapacity;
+
+    /**
+     * 开始处理时间集合<样本编号,开始时间>
+     */
+    private Map<String,Date> startDateMap;
+
+    /**
+     * 结束处理时间集合<样本编号,结束时间>
+     */
+    private Map<String,Date> endDateMap;
+}

+ 31 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/vo/EquipmentTotalVo.java

@@ -0,0 +1,31 @@
+package com.github.jfcloud.sims.sample.automatic.datav.vo;
+
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * @author xiaozun
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description 设备汇总vo
+ * @date 2024/05/15/19:27
+ */
+
+@Data
+public class EquipmentTotalVo extends SimsBaseVo{
+    /**
+     * 设备温度集合<设备名,温度>
+     */
+    private Map<String,Integer> temperatureMap;
+
+    /**
+     * 设备湿度集合<设备名,湿度>
+     */
+    private Map<String,Double> humidityMap;
+
+    /**
+     * 设备状态集合<设备名,状态>
+     */
+    private Map<String,String> statusMap;
+}

+ 21 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/vo/EquipmentTypeVo.java

@@ -0,0 +1,21 @@
+package com.github.jfcloud.sims.sample.automatic.datav.vo;
+
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * @author xiaozun
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description 设备类型vo
+ * @date 2024/05/15/18:52
+ */
+
+@Data
+public class EquipmentTypeVo extends SimsBaseVo{
+    /**
+     * 设备数量集合<设备名,设备数量>
+     */
+    private Map<String,Integer> equipmentCountMap;
+}

+ 31 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/vo/SampleBankMonitoringVo.java

@@ -0,0 +1,31 @@
+package com.github.jfcloud.sims.sample.automatic.datav.vo;
+
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * @author xiaozun
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description 样本库监测vo
+ * @date 2024/05/14/10:00
+ */
+
+@Data
+public class SampleBankMonitoringVo extends SimsBaseVo{
+    /**
+     * 样本总数
+     */
+    private Integer sampleCountTotal;
+
+    /**
+     * 温度集合<样本库名,温度>
+     */
+    private Map<String,Integer> temperatureMap;
+
+    /**
+     * 湿度集合<样本库名,湿度>
+     */
+    private Map<String,Double> humidityMap;
+}

+ 51 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/vo/SampleDatabaseDataOverviewVo.java

@@ -0,0 +1,51 @@
+package com.github.jfcloud.sims.sample.automatic.datav.vo;
+
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * @author xiaozun
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description 样本库数据总览vo
+ * @date 2024/05/14/10:00
+ */
+
+@Data
+public class SampleDatabaseDataOverviewVo extends SimsBaseVo{
+    /**
+     * 设备数量
+     */
+    private Integer equipmentCountTotal;
+
+    /**
+     * 实时库存量
+     */
+    private Integer inventoryCount;
+
+    /**
+     * 库存空间利用率
+     */
+    private Double inventorySpaceUtilization;
+
+    /**
+     * 样本有效期监控
+     */
+    private Integer sampleExpirationDateMonitoring;
+
+    /**
+     * 入库总数集合<月份,数量>
+     */
+    private Map<String,Long> storageTotalMap;
+
+    /**
+     * 出库总数集合<月份,数量>
+     */
+    private Map<String,Long> fetchTotalMap;
+
+    /**
+     * 销库总数集合<月份,数量>
+     */
+    private Map<String,Long> sellOutTotalMap;
+}

+ 42 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/vo/SampleOutboundRelatedIndicatorsVo.java

@@ -0,0 +1,42 @@
+package com.github.jfcloud.sims.sample.automatic.datav.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * @author xiaozun
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description 样本库出库相关指标vo
+ * @date 2024/05/14/10:00
+ */
+
+@Data
+public class SampleOutboundRelatedIndicatorsVo extends SimsBaseVo{
+    /**
+     * 出库样本数
+     */
+    private Integer fetchedCount;
+
+    /**
+     * 紧急出库请求
+     */
+    private Integer urgentFetchedCount;
+
+    /**
+     * 出库样本目的地
+     */
+    private String fetchedLocation;
+
+    /**
+     * 今日样本出库时间集合<样本编号,出库时间>
+     */
+    Map<String, Date> fetchedDateMap;
+
+    /**
+     * 今日样本结束出库时间集合<样本编号,结束出库时间>
+     */
+    Map<String, Date> unFechedDateMap;
+}

+ 29 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/vo/SampleProcessingProgressVo.java

@@ -0,0 +1,29 @@
+package com.github.jfcloud.sims.sample.automatic.datav.vo;
+
+import lombok.Data;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description 样本处理进度vo
+ * @date 2024/5/14 08:55:10
+ */
+
+@Data
+public class SampleProcessingProgressVo extends SimsBaseVo {
+    /**
+     * 待处理样本数
+     */
+    private Integer pendingSampleCount;
+
+    /**
+     * 处理中样本数
+     */
+    private Integer processingSampleCount;
+
+    /**
+     * 已完成样本数
+     */
+    private Integer doneSampleCount;
+}

+ 39 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/vo/SampleTubesInBaseVo.java

@@ -0,0 +1,39 @@
+package com.github.jfcloud.sims.sample.automatic.datav.vo;
+
+import lombok.Data;
+
+/**
+ * @author xiaozun
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description 样本小管入库vo
+ * @date 2024/05/15/19:34
+ */
+
+@Data
+public class SampleTubesInBaseVo extends SimsBaseVo{
+    /**
+     * 样本盒总数
+     */
+    private Integer sampleBoxCount;
+
+    /**
+     * 样本小管数量
+     */
+    private Integer sampleTubesCount;
+
+    /**
+     * 样本总数
+     */
+    private Integer sampleCount;
+
+    /**
+     * 出库数
+     */
+    private Integer fetchCount;
+
+    /**
+     * 入库数
+     */
+    private Integer storageCount;
+}

+ 21 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/vo/SampleTypeVo.java

@@ -0,0 +1,21 @@
+package com.github.jfcloud.sims.sample.automatic.datav.vo;
+
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * @author xiaozun
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description 样本类型vo
+ * @date 2024/05/15/19:19
+ */
+
+@Data
+public class SampleTypeVo extends SimsBaseVo{
+    /**
+     * 样本数量集合<样本名,样本数>
+     */
+    private Map<String,Integer> sampleCountMap;
+}

+ 42 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/vo/SampleWarehousingRelatedIndicatorsVo.java

@@ -0,0 +1,42 @@
+package com.github.jfcloud.sims.sample.automatic.datav.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * @author xiaozun
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description 样本入库相关指标vo
+ * @date 2024/05/14/9:59
+ */
+
+@Data
+public class SampleWarehousingRelatedIndicatorsVo extends SimsBaseVo{
+    /**
+     * 入库样本数
+     */
+    private Integer storageCount;
+
+    /**
+     * 申请入库样本数
+     */
+    private Integer needStorageCount;
+
+    /**
+     * 入库等待时间
+     */
+    private Date storageStartTime;
+
+    /**
+     * 机器人运行状态
+     */
+    private String robotOperationalStatus;
+
+    /**
+     * 入库样本跟追集合<跟追地,状态>
+     */
+    private Map<String,String> storageLocationMap;
+}

+ 18 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/vo/SimsBaseVo.java

@@ -0,0 +1,18 @@
+package com.github.jfcloud.sims.sample.automatic.datav.vo;
+
+import com.github.jfcloud.sims.sample.automatic.datav.base.SimsBase;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description 抽象接口参数
+ * @date 2024/5/14 08:56:02
+ */
+@Data
+
+public class SimsBaseVo extends SimsBase {
+}

+ 31 - 0
src/main/java/com/github/jfcloud/sims/sample/automatic/datav/vo/StatisticsOfSamplesInAndOutTheWarehouseVo.java

@@ -0,0 +1,31 @@
+package com.github.jfcloud.sims.sample.automatic.datav.vo;
+
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * @author xiaozun
+ * @version 1.0
+ * @project jfcloud-sims-cqjk
+ * @description 样本出入销库统计vo
+ * @date 2024/05/14/9:59
+ */
+
+@Data
+public class StatisticsOfSamplesInAndOutTheWarehouseVo extends SimsBaseVo{
+    /**
+     * 入库数量集合<样本库名,数量>
+     */
+    private Map<String,Integer> storageCountOfWeekMap;
+
+    /**
+     * 出库数量集合<样本库名,数量>
+     */
+    private Map<String,Integer> fetchedCountOfWeekMap;
+
+    /**
+     * 销库数量集合<样本库名,数量>
+     */
+    private Map<String,Integer> sellOutCountOfWeekMap;
+}

+ 4 - 0
src/main/resources/application.yml

@@ -0,0 +1,4 @@
+spring:
+  data:
+    mongodb:
+      uri: mongodb://gimi:Gimi!2021@10.0.1.200:27017/srpm-dfs?authSource=admin&retryWrites=true&retryReads=true&heartbeatFrequencyMS=20000&connectTimeoutMS=30000&socketTimeoutMS=60000&maxIdleTimeMS=100&minPoolSize=20

+ 25 - 0
src/main/resources/dfs.properties

@@ -0,0 +1,25 @@
+dfs.module_name=DFS\u8868\u5355\u7BA1\u7406
+dfs.version=1.0.0
+dfs.i18n=false
+dfs.lang=cn_ZH
+dfs.table_header=false
+dfs.table_right=false
+
+# \u6587\u4EF6\u4E0A\u4F20\u5B58\u50A8\u8DEF\u5F84  \u9ED8\u8BA4\u4F7F\u7528\u5BF9\u8C61\u5B58\u50A8
+dfs.storage_type=2
+
+# \u5BF9\u8C61\u5B58\u50A8\u914D\u7F6E
+dfs.endpoint=http://jfcloud-k6-oss:9090
+dfs.access_key=jfcloud
+dfs.secret_key=jfcloudjfcloud
+dfs.bucket_name=simsfiles
+
+# \u672C\u5730\u6587\u4EF6\u8DEF\u5F84
+dfs.file_path=D://test//
+
+dfs.custom-upload-url=
+
+dfs.custom-download-url=
+
+dfs.menus=form_add,form_design,form_update,form_copy,form_attribute_group,form_del,form_group_add,form_group_update
+