From 34fe52caba63e6a6337cb9c3e6bd0d4707fd6a99 Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期五, 06 三月 2026 10:17:05 +0800
Subject: [PATCH] 解决冲突

---
 server/system_service/src/main/java/com/doumee/core/utils/Constants.java                                 |   67 +++
 server/visits/dmvisit_admin/src/main/resources/bootstrap-dev.yml                                         |    3 
 admin/src/views/login.vue                                                                                |    3 
 admin/src/views/business/admissionStatistics.vue                                                         |  552 ++++++++++++++--------------
 server/visits/device_service/pom.xml                                                                     |    7 
 admin/public/template/member.xlsx                                                                        |    0 
 admin/src/views/business/carStatistics.vue                                                               |    8 
 admin/.env.production                                                                                    |    1 
 admin/vue.config.js                                                                                      |    2 
 admin/src/store/index.js                                                                                 |   23 
 admin/src/views/index.vue                                                                                |    2 
 server/startsh/启动脚本和日志处理脚本说明.txt                                                                         |    6 
 admin/src/api/workbench/index.js                                                                         |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java               |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningRuleDetail.java         |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java |   49 +
 admin/src/components/common/CommonHeader.vue                                                             |  231 ++---------
 admin/public/index.html                                                                                  |   10 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Device.java                    |    4 
 admin/.env.development                                                                                   |    9 
 admin/src/main.js                                                                                        |  120 +++---
 21 files changed, 522 insertions(+), 582 deletions(-)

diff --git a/admin/.env.development b/admin/.env.development
index 9ab2336..7c60d0e 100644
--- a/admin/.env.development
+++ b/admin/.env.development
@@ -1,14 +1,9 @@
 # 寮�鍙戠幆澧冮厤缃�
 NODE_ENV = 'development'
 
-# VUE_APP_API_URL  = 'https://atwl.ahzyssl.com/zhyq_interface'
+VUE_APP_SCREEN_URL_PREFIX  = 'http://192.168.0.7/screen/#/'
 
-#VUE_APP_API_URL  = 'http://192.168.1.82:10010'
-
+#VUE_APP_API_URL  = 'http://localhost:10010'
 VUE_APP_API_URL  = 'http://192.168.0.7/system_gateway'
 
-VUE_APP_API_URL  = 'http://localhost:10010'
-
-#key锛�045542fc5f436b75e6c911c5c84ff8cd
-#瀵嗛挜锛�8bd38497f9aee2b75e7a888a4dfd1e6c
 VUE_APP_AMAP_KEY='045542fc5f436b75e6c911c5c84ff8cd'
diff --git a/admin/.env.production b/admin/.env.production
index 054babc..4df6ba5 100644
--- a/admin/.env.production
+++ b/admin/.env.production
@@ -7,4 +7,3 @@
 
 VUE_APP_SCREEN_URL_PREFIX  =  'http://192.168.0.7/screen/#/'
 
-
diff --git a/admin/public/index.html b/admin/public/index.html
index 942ca7d..8ed5c0a 100644
--- a/admin/public/index.html
+++ b/admin/public/index.html
@@ -5,14 +5,12 @@
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width,initial-scale=1.0">
     <link rel="icon" href="<%= BASE_URL %>favicon.ico">
-    <title>
-        title: process.env.VUE_APP_TITLE,</title>
+    <title>鏅烘収鍥尯瀹夋秷涓�浣撳寲绯荤粺</title>
   </head>
   <body>
-    <noscript>
-      <strong>We're sorry but 鑺滄箹鐑熻崏鏅烘収瀹夋秷瀹夊叏闃茶寖绯荤粺 doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
-    </noscript>
+<noscript>
+    <strong>We're sorry but 鏅烘収鍥尯瀹夋秷涓�浣撳寲绯荤粺 doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
+</noscript>
     <div id="app"></div>
-    <!-- built files will be auto injected -->
   </body>
 </html>
diff --git a/admin/public/template/member.xlsx b/admin/public/template/member.xlsx
index 04cd838..b2f83b7 100644
--- a/admin/public/template/member.xlsx
+++ b/admin/public/template/member.xlsx
Binary files differ
diff --git a/admin/src/api/workbench/index.js b/admin/src/api/workbench/index.js
index 2340d64..c0b3f7e 100644
--- a/admin/src/api/workbench/index.js
+++ b/admin/src/api/workbench/index.js
@@ -30,7 +30,5 @@
 }
 // pc宸ヤ綔鍙�
 export function getWorkbenchData (data) {
-  return request.get('/visitsAdmin/cloudService/business/staging/pCWorkPlatformData', {
-    params: {...data  }
-  })
+  return request.get('/visitsAdmin/cloudService/business/staging/pCWorkPlatformData', data)
 }
diff --git a/admin/src/components/common/CommonHeader.vue b/admin/src/components/common/CommonHeader.vue
index 8773c62..2857921 100644
--- a/admin/src/components/common/CommonHeader.vue
+++ b/admin/src/components/common/CommonHeader.vue
@@ -2,7 +2,7 @@
   <div class="common-header">
     <div class="header">
       <div class="logo">
-        <div class="title"> <img src="@/assets/system.png" alt="" />{{sysConfig.subtitle || title }}</div>
+        <div class="title">{{ title }}</div>
         <div class="list">
             <div  :class="index==currentIndex?'item active':'item'" v-for="(item,index) in topMenuList.list" :key="item.id"  @click="getHeaderNav(item,index)" :index="index">{{item.label}}
               <div v-if="index==currentIndex" class="linellae"></div>
@@ -10,48 +10,18 @@
         </div>
       </div>
       <div class="user">
-          <div class="user-search">
-              <div class="user-search-left">
-                <span>鍏ㄩ儴</span>
-                  <img src="@/assets/icons/xl.png" alt="">
-              </div>
-              <div class="user-search-right">
-                  <input type="text" placeholder="璇疯緭鍏�" />
-                  <img src="@/assets/icons/sousuo.png" alt="">
-              </div>
-          </div>
-          <div class="user-images">
-<!--              <img src="@/assets/icons/ic_1.jpg" alt="">-->
-<!--              <img src="@/assets/icons/ic_2.png" alt="">-->
-              <img src="@/assets/icons/ic_3.jpg" alt="">
-              <img src="@/assets/icons/ic_4.jpg" alt="">
-              <img src="@/assets/icons/ic_5.jpg" alt="">
-<!--              <img src="@/assets/icons/ic_6.jpg" alt="">-->
-              <img src="@/assets/icons/ic_7.jpg" alt="">
-<!--              <img src="@/assets/icons/ic_8.jpg" alt="">-->
-          </div>
-          <el-dropdown v-if="isLogined" trigger="click">
-            <span class="el-dropdown-link" style="cursor: pointer; color: rgba(255,255,255,.56);">
-              {{ userInfo | displayName }}
-              <i class="el-icon-arrow-down el-icon--right"></i>
-            </span>
-            <el-dropdown-menu slot="dropdown">
-              <el-dropdown-item @click.native="changePwd">淇敼瀵嗙爜</el-dropdown-item>
-              <el-dropdown-item @click.native="logout">閫�鍑虹櫥褰�</el-dropdown-item>
-            </el-dropdown-menu>
-          </el-dropdown>
-<!--        <el-dropdown v-if="isLogined" trigger="click">-->
-<!--          <span class="el-dropdown-link">-->
-<!--            &lt;!&ndash; <img v-if="userInfo != null" :src="userInfo.avatar == null ? `${require('@/assets/avatar/man.png')}` : userInfo.avatar" alt="">{{userInfo | displayName}}<i class="el-icon-arrow-down el-icon&#45;&#45;right"></i> &ndash;&gt;-->
-<!--            <img v-if="userInfo != null" style="width: 30px !important" src="@/assets/avatar/man.png" alt="" />{{-->
-<!--              userInfo | displayName-->
-<!--            }}<i class="el-icon-arrow-down el-icon&#45;&#45;right"></i>-->
-<!--          </span>-->
-<!--          <el-dropdown-menu slot="dropdown">-->
-<!--            <el-dropdown-item @click.native="changePwd">淇敼瀵嗙爜</el-dropdown-item>-->
-<!--            <el-dropdown-item @click.native="logout">閫�鍑虹櫥褰�</el-dropdown-item>-->
-<!--          </el-dropdown-menu>-->
-<!--        </el-dropdown>-->
+        <el-dropdown v-if="isLogined" trigger="click">
+          <span class="el-dropdown-link">
+            <!-- <img v-if="userInfo != null" :src="userInfo.avatar == null ? `${require('@/assets/avatar/man.png')}` : userInfo.avatar" alt="">{{userInfo | displayName}}<i class="el-icon-arrow-down el-icon--right"></i> -->
+            <img v-if="userInfo != null" style="width: 30px !important" src="@/assets/avatar/man.png" alt="" />{{
+              userInfo | displayName
+            }}<i class="el-icon-arrow-down el-icon--right"></i>
+          </span>
+          <el-dropdown-menu slot="dropdown">
+            <el-dropdown-item @click.native="changePwd">淇敼瀵嗙爜</el-dropdown-item>
+            <el-dropdown-item @click.native="logout">閫�鍑虹櫥褰�</el-dropdown-item>
+          </el-dropdown-menu>
+        </el-dropdown>
       </div>
     </div>
     <!-- 淇敼瀵嗙爜 -->
@@ -65,7 +35,7 @@
             show-password></el-input>
         </el-form-item>
         <el-form-item label="鏂板瘑鐮�" prop="newPwd" required>
-          <el-input v-model="changePwdData.form.newPwd" type="password" placeholder="璇疯緭鍏ユ柊瀵嗙爜锛岃嚦灏戝寘鎷暟瀛椼�佸ぇ鍐欏瓧姣嶃�佸皬鍐欏瓧姣嶃�佺壒娈婂瓧绗︿腑鐨勪笁绉嶅瓧绗︼紝涓旇嚦灏�8浣嶆暟"
+          <el-input v-model="changePwdData.form.newPwd" type="password" placeholder="璇疯緭鍏ユ柊瀵嗙爜锛屽瘑鐮侀渶鍖呭惈瀛楁瘝銆佹暟瀛楀強鐗规畩瀛楃涓殑鑷冲皯涓ょ"
             maxlength="20" show-password></el-input>
         </el-form-item>
         <!-- <div style="font-size: 12px;color:#999999">瀵嗙爜闇�鍖呭惈瀛楁瘝銆佹暟瀛楀強鐗规畩瀛楃涓殑鑷冲皯涓ょ</div> -->
@@ -81,7 +51,7 @@
 <script>
 import { mapState, mapMutations } from 'vuex'
 import GlobalAlertWindow from './GlobalAlertWindow'
-import { getSystemConfig, logout, updatePwd } from '@/api/system/common'
+import { logout, updatePwd } from '@/api/system/common'
 import { getAppHeaderNav } from '@/api'
 export default {
   name: 'CommonHeader',
@@ -96,6 +66,7 @@
     return {
       title: process.env.VUE_APP_TITLE,
       headerNavData: {},
+      currentIndex: 0,
       visible: {
         // 淇敼瀵嗙爜
         changePwd: false
@@ -128,13 +99,13 @@
     }
   },
   computed: {
-    ...mapState(['menuData', 'userInfo', 'topMenuList', 'currentIndex', 'sysConfig'])
+    ...mapState(['menuData', 'userInfo', 'topMenuList'])
     // title () {
     //   return this.$route.meta.title
     // }
   },
   created () {
-    this.getSystemConfig()
+
   },
   mounted () {
     // needChangePwd 0 : 榛樿瀵嗙爜闇�瑕佷慨鏀癸紝1 涓嶉渶瑕�
@@ -155,7 +126,7 @@
     }
   },
   methods: {
-    ...mapMutations(['setUserInfo', 'switchCollapseMenu', 'clearUserInfo', 'setTopMenuCurrent', 'setCurrentIndex', 'setSysconfig']),
+    ...mapMutations(['setUserInfo', 'switchCollapseMenu', 'clearUserInfo', 'setTopMenuCurrent']),
     // 淇敼瀵嗙爜
     changePwd () {
       this.visible.changePwd = true
@@ -163,68 +134,41 @@
         this.$refs.changePwdDataForm.resetFields()
       })
     },
-    getSystemConfig () {
-      if (!this.sysConfig.subTitle) {
-        getSystemConfig()
-          .then((res) => {
-            if (res && res.subtitle) {
-              this.setSysconfig(res)
-            }
-          })
-      }
-    },
     validatePassword (rule, value, callback) {
       if (!value) {
         callback(new Error('璇疯緭鍏ュ瘑鐮�'))
       } else {
-        // const lengthValid = /^.{6,20}$/.test(value)
-        // const hasLetter = /[a-zA-Z]/.test(value)
-        // const hasNumber = /[0-9]/.test(value)
-        // const hasSpecial = /[!@#$%^&*(),.?":{}|<>]/.test(value)
-        //
-        // const typesCount = [hasLetter, hasNumber, hasSpecial].filter(Boolean).length
-        //
-        // if (!lengthValid) {
-        //   callback(new Error('瀵嗙爜闀垮害闇�涓�6鍒�20涓瓧绗�'))
-        // } else if (typesCount < 2) {
-        //   callback(new Error('瀵嗙爜闇�鍖呭惈瀛楁瘝銆佹暟瀛楀強鐗规畩瀛楃涓殑鑷冲皯涓ょ'))
-        // } else {
-        //   callback() // 楠岃瘉閫氳繃
-        // }
-        let typeCount = 0
-        if (/[a-z]/.test(value)) typeCount++ // 灏忓啓瀛楁瘝
-        if (/[A-Z]/.test(value)) typeCount++ // 澶у啓瀛楁瘝
-        if (/\d/.test(value)) typeCount++ // 鏁板瓧
-        if (/[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/.test(value)) typeCount++ // 鐗规畩瀛楃
-        if (typeCount >= 3) {
-          callback()
+        const lengthValid = /^.{6,20}$/.test(value)
+        const hasLetter = /[a-zA-Z]/.test(value)
+        const hasNumber = /[0-9]/.test(value)
+        const hasSpecial = /[!@#$%^&*(),.?":{}|<>]/.test(value)
+
+        const typesCount = [hasLetter, hasNumber, hasSpecial].filter(Boolean).length
+
+        if (!lengthValid) {
+          callback(new Error('瀵嗙爜闀垮害闇�涓�6鍒�20涓瓧绗�'))
+        } else if (typesCount < 2) {
+          callback(new Error('瀵嗙爜闇�鍖呭惈瀛楁瘝銆佹暟瀛楀強鐗规畩瀛楃涓殑鑷冲皯涓ょ'))
         } else {
-          callback(new Error('鑷冲皯鍖呮嫭鏁板瓧銆佸ぇ鍐欏瓧姣嶃�佸皬鍐欏瓧姣嶃�佺壒娈婂瓧绗︿腑鐨勪笁绉嶅瓧绗︼紝涓旇嚦灏�8浣嶆暟'))
+          callback() // 楠岃瘉閫氳繃
         }
       }
     },
-    getHeaderNav (item, index) {
-      this.setCurrentIndex(index)
-      if (item.linkType === 0) {
+    getHeaderNav (item,index) {
+      this.currentIndex = index
+      if(item.linkType === 0){
         this.setTopMenuCurrent(item)
-      } else {
+      }else{
         if (item.url && item.url === 'goHKAF' && item.params != null) {
-          this.getHKAFHeaderNav(item.params, item.label)
+          this.getHKAFHeaderNav(item.params)
         } else if (item.url && item.url.indexOf('http') === 0) {
           window.open(item.url, '_blank')
         }
       }
     },
-    getHKAFHeaderNav (type, label) {
+    getHKAFHeaderNav (type) {
       getAppHeaderNav(type).then(res => {
-        if (label === '瀹夐槻涓績') {
-          const openWindow = window.open(res, '_blank')
-          // setTimeout(() => {
-          //   openWindow.close()
-          // }, 7 * 1000)
-        } else {
-          window.open(res, '_blank')
-        }
+        window.open(res, '_blank')
       })
     },
     handleTest () {
@@ -310,9 +254,8 @@
           newPwd: this.changePwdData.form.newPwd
         })
           .then(() => {
-            console.log('淇敼鎴愬姛')
             this.$tip.apiSuccess('淇敼鎴愬姛')
-            // this.$store.commit('setUserInfo', { needChangePwd: 1 })
+            this.$store.commit('setUserInfo', { needChangePwd: 1 })
             this.visible.changePwd = false
           })
           .catch(e => {
@@ -344,7 +287,7 @@
 @import "@/assets/style/variables.scss";
 
 .common-header {
-  background-color: #1E7FFF;
+  background-color: #2080f7;
 }
 
 .list {
@@ -354,14 +297,14 @@
     display: flex;
     align-items: center;
     .item {
-      margin-right: 24px;
+      margin-right: 40px;
       font-size: 16px;
       font-weight: 400;
       display: flex;
       flex-direction: column;
       align-items: center;
       justify-content: flex-start;
-      height: 49px;
+      height: 40px;
       cursor: pointer;
 
       .linellae {
@@ -389,7 +332,7 @@
     box-sizing: border-box;
     min-width: 360px;
     height: 56px;
-    padding: 10px 12px;
+    padding: 10px 30px;
     // flex-shrink: 0;
     line-height: 36px;
     font-size: 22px;
@@ -399,18 +342,8 @@
     align-items: center;
 
     .title {
-      display: flex;
-      color: rgb(255, 255, 255);
       font-size: 18px;
-      font-weight: 700;
-      font-family: "Microsoft Yahei", "sans-serif", "segoe UI", "PingFang SC", arial, Helvetica;
-      //font-size: 18px;
-      //width: 320px;
-      img{
-        width:auto ;
-        height: 32px;
-        margin-right: 5px;
-      }
+      width: 320px;
     }
 
     // display: inline;
@@ -422,83 +355,15 @@
   }
 
   .user {
-    /*width: 152px;*/
+    width: 152px;
     box-sizing: border-box;
     height: 56px;
     padding-right: 25px;
-    /*background: url("../../assets/images/top_ic_bolang@2x.png") no-repeat;*/
+    background: url("../../assets/images/top_ic_bolang@2x.png") no-repeat;
     flex-shrink: 0;
     text-align: right;
-    display: flex;
-    align-items: center;
-    .user-search {
-        width: 346px;
-        height: 32px;
-        border-radius: 30px;
-        border: 1px solid rgba(255,255,255,.56);
-        margin-right: 15px;
-        display: flex;
-        align-items: center;
-        .user-search-left {
-            flex-shrink: 0;
-            width: 106px;
-            height: 100%;
-            display: flex;
-            align-items: center;
-            justify-content: center;
-            span {
-                font-size: 14px;
-                font-weight: 400;
-                color: rgba(255,255,255,.56);
-                margin-right: 10px;
-            }
-            img {
-                top: 0;
-                margin: 0;
-                width: 20px;
-                height: 16px;
-            }
-        }
-        .user-search-right {
-            flex: 1;
-            height: 100%;
-            display: flex;
-            align-items: center;
-            justify-content: center;
-            padding-right: 10px;
-            box-sizing: border-box;
-            input {
-                flex: 1;
-                height: 100%;
-                font-size: 14px;
-                font-weight: 400;
-                color: rgba(255,255,255,.56);
-                border: none;
-                outline: none;
-                background-color: rgba(0,0,0,0);
-                &::placeholder {
-                    color: rgba(255,255,255,.56);
-                }
-            }
-            img {
-                top: 0;
-                margin: 0;
-                width: 20px;
-                height: 20px;
-            }
-        }
-    }
-    .user-images {
-        height: 100%;
-        display: flex;
-        align-items: center;
-        img {
-            top: 0 !important;
-            width: 18px;
-            height: 18px;
-            margin-right: 12px;
-        }
-    }
+    cursor: pointer;
+
     .el-dropdown {
       top: 2px;
       color: #fff;
diff --git a/admin/src/main.js b/admin/src/main.js
index bc32466..d04334f 100644
--- a/admin/src/main.js
+++ b/admin/src/main.js
@@ -38,7 +38,7 @@
   router,
   store,
   computed: {
-    ...mapState(['userInfo', 'homePage','topMenuCurrent','menuData'])
+    ...mapState(['userInfo', 'homePage', 'topMenuCurrent', 'menuData'])
   },
   watch: {
     async userInfo () {
@@ -55,7 +55,7 @@
     }
   },
   methods: {
-    ...mapMutations(['switchCollapseMenu', 'setCurrentIndex', 'setHomePage', 'setTopMenuCurrent', 'setTopMenuCurrent','cleartagsview']),
+    ...mapMutations(['switchCollapseMenu', 'setCurrentIndex', 'setHomePage', 'setTopMenuCurrent', 'setTopMenuCurrent', 'cleartagsview']),
     // 鍒濆鍖栨湰鍦伴厤缃�
     initLocalConfig () {
       // 鑿滃崟鐘舵�侀厤缃�
@@ -79,66 +79,66 @@
         this.setHomePage(storeMenus[0])
       }
       await fetchMenuTree()
-          .then(allmenus => {
-            // 娣诲姞鑿滃崟
-            var topList = allmenus.filter(item => {
-              return item.type === 1
-            })
-            storeTopMenus.push.apply(storeTopMenus, topList)
-            var topCurrent = null
-            var tlist =[]
-            topList.forEach(item => {
-              if (item.linkType === 0 ) {
-                if (topCurrent == null) {
-                  topCurrent = item
-                }
-                tlist.push(...item.children)
+        .then(allmenus => {
+          // 娣诲姞鑿滃崟
+          var topList = allmenus.filter(item => {
+            return item.type === 1
+          })
+          storeTopMenus.push.apply(storeTopMenus, topList)
+          var topCurrent = null
+          var tlist = []
+          topList.forEach(item => {
+            if (item.linkType === 0) {
+              if (topCurrent == null) {
+                topCurrent = item
               }
-            })
-            if (this.$route.query && this.$route.query.menuparams) {
-              let menu = topList.filter(item => item.params === this.$route.query.menuparams)
-              this.setTopMenuCurrent(menu[0])
-              this.setCurrentIndex(topList.findIndex(obj => obj.params === this.$route.query.menuparams))
-            } else {
-              this.setTopMenuCurrent(topCurrent)
-              this.setCurrentIndex(0)
-            }
-            // console.log(topList)
-            // var menus = []
-            // topList.forEach(item => {
-            //   console.log(topCurrent.id, item.id)
-            //   if (item.id == this.topMenuCurrent.id) {
-            //     menus = item.children
-            //   }
-            // })
-            console.log('menus', this.menuData.list)
-            storeMenus.push.apply(storeMenus, this.menuData.list)
-            // 娣诲姞璺敱
-            this.__addRouters(tlist)
-            // 404
-            router.addRoute({
-              path: '*',
-              redirect: '/not-found'
-            })
-            // 棣栭〉
-            router.addRoute({
-              name: 'index',
-              path: '/',
-              redirect: this.homePage.url
-            })
-            // 璺敱鍔犺浇瀹屾垚鍚庯紝濡傛灉璁块棶鐨勬槸/锛岃烦杞嚦鍔ㄦ�佽瘑鍒殑棣栭〉
-            if (this.$route.query && this.$route.query.menuparams) {
-              this.$router.push(topList.filter(item => item.params === this.$route.query.menuparams)[0].homeUrl)
-            } else if (this.$route.path === '/') {
-              this.$router.push(this.homePage.url)
+              tlist.push(...item.children)
             }
           })
-          .catch(e => {
-            throw e
+          if (this.$route.query && this.$route.query.menuparams) {
+            const menu = topList.filter(item => item.params === this.$route.query.menuparams)
+            this.setTopMenuCurrent(menu[0])
+            this.setCurrentIndex(topList.findIndex(obj => obj.params === this.$route.query.menuparams))
+          } else {
+            this.setTopMenuCurrent(topCurrent)
+            this.setCurrentIndex(0)
+          }
+          // console.log(topList)
+          // var menus = []
+          // topList.forEach(item => {
+          //   console.log(topCurrent.id, item.id)
+          //   if (item.id == this.topMenuCurrent.id) {
+          //     menus = item.children
+          //   }
+          // })
+          console.log('menus', this.menuData.list)
+          storeMenus.push.apply(storeMenus, this.menuData.list)
+          // 娣诲姞璺敱
+          this.__addRouters(tlist)
+          // 404
+          router.addRoute({
+            path: '*',
+            redirect: '/not-found'
           })
-          .finally(() => {
-            this.loading = false
+          // 棣栭〉
+          router.addRoute({
+            name: 'index',
+            path: '/',
+            redirect: this.homePage.url
           })
+          // 璺敱鍔犺浇瀹屾垚鍚庯紝濡傛灉璁块棶鐨勬槸/锛岃烦杞嚦鍔ㄦ�佽瘑鍒殑棣栭〉
+          if (this.$route.query && this.$route.query.menuparams) {
+            this.$router.push(topList.filter(item => item.params === this.$route.query.menuparams)[0].homeUrl)
+          } else if (this.$route.path === '/') {
+            this.$router.push(this.homePage.url)
+          }
+        })
+        .catch(e => {
+          throw e
+        })
+        .finally(() => {
+          this.loading = false
+        })
     },
     async chagneRoutes () {
       // 閲嶇疆鑿滃崟
@@ -146,8 +146,8 @@
       console.log('menus', this.menuData.list)
       // 娣诲姞璺敱
       // this.__addRouters(this.menuData.list)
-      if(this.topMenuCurrent.homeUrl){
-        await this.$router.push({path: this.topMenuCurrent.homeUrl, query: {}})
+      if (this.topMenuCurrent.homeUrl) {
+        await this.$router.push({ path: this.topMenuCurrent.homeUrl, query: {} })
       }
     },
     // 鏂板缓璺敱
@@ -188,7 +188,7 @@
       return
     }
     await this.initRoutes()
-        .catch(() => {})
+      .catch(() => {})
   },
   mounted () {
     this.initLocalConfig()
diff --git a/admin/src/store/index.js b/admin/src/store/index.js
index f2fb2f1..f76eee9 100644
--- a/admin/src/store/index.js
+++ b/admin/src/store/index.js
@@ -1,13 +1,11 @@
 import Vue from 'vue'
 import Vuex from 'vuex'
-import router from '../router'
 Vue.use(Vuex)
 
 const state = {
   // 鐧诲綍鐢ㄦ埛淇℃伅
   userInfo: null,
   tableHeightNew: 300,
-  sysConfig: { title: '', subtitle: '' },
   primaryColor: '#2080f7',
   // 棣栭〉
   homePage: null,
@@ -29,21 +27,10 @@
   // tags鏁扮粍
   tags: [],
   // tagsview鏍囩鏄剧ず闅愯棌
-  isCollapse: false,
-  // 椤堕儴鑿滃崟绱㈠紩
-  currentIndex: 0
+  isCollapse: false
 }
 
 const mutations = {
-  // 璁剧疆椤堕儴鑿滃崟绱㈠紩
-  setCurrentIndex (state, index) {
-    console.log('璁剧疆椤堕儴鑿滃崟绱㈠紩', index)
-    state.currentIndex = index
-  },
-  setSysconfig (state, config) {
-    state.sysConfig = { title: config.title || '', subtitle: config.subtitle || '' }
-    document.title =  state.sysConfig.title+ state.sysConfig.subtitle
-  },
   // 鍒囨崲鑿滃崟鐘舵��
   switchCollapseMenu (state, value) {
     if (value != null) {
@@ -73,8 +60,8 @@
   },
   // 璁剧疆棣栭〉璺敱淇℃伅
   setTopMenuCurrent (state, current) {
-    console.log('setTopMenuCurrent', current)
-    if (current.id !== state.topMenuCurrent.id) {
+    console.log("setTopMenuCurrent",current)
+    if(current.id !== state.topMenuCurrent.id){
       state.topMenuList.list.forEach(item => {
         console.log(item.id, item.id)
         if (current.id == item.id) {
@@ -86,7 +73,7 @@
   },
   // 閲嶇疆鑿滃崟
   resetMenus: (state) => {
-    state.topMenuId = null
+    state.topMenuId=null;
     state.menuData.list = []
   },
   //  tags
@@ -95,7 +82,7 @@
     // findindex鎵捐鏍囷紝寰幆鍒ゆ柇涓�涓嬶紝濡傛灉绛変簬閭d箞灏变唬琛ㄦ湁鐩稿悓鐨勶紝灏变笉蹇呮坊鍔狅紝濡傛灉鎵句笉鍒伴偅灏辨槸-1.灏辨坊鍔�
     // state.tags = [{ ...val, keepAlive: false }]
     const result = state.tags.findIndex(item => item.index === val.index)
-    if (result === -1) {
+      if (result === -1) {
       state.tags.push({ ...val, keepAlive: false })
     } else {
       state.tags[result] = { ...val, keepAlive: false }
diff --git a/admin/src/views/business/admissionStatistics.vue b/admin/src/views/business/admissionStatistics.vue
index 06da26a..72a9752 100644
--- a/admin/src/views/business/admissionStatistics.vue
+++ b/admin/src/views/business/admissionStatistics.vue
@@ -114,316 +114,313 @@
 </template>
 
 <script>
-  import * as echarts from 'echarts'
-  import { getInParkUserData, getRataList, getReportList, reportExportExcel } from '@/api/business'
-  export default {
-    data() {
-      return {
-        info: null,
-        isGroupBy: 0,
-        radio: 'month',
-        value: '',
-        dateType: 'month',
-        date: '',
-        date1: '',
+import * as echarts from 'echarts'
+import { getInParkUserData, getRataList, getReportList, reportExportExcel } from '@/api/business'
+export default {
+  data () {
+    return {
+      info: null,
+      isGroupBy: 0,
+      radio: 'month',
+      value: '',
+      dateType: 'month',
+      date: '',
+      date1: '',
 
-        listZB: [],
-        column: [],
-        list: []
-      }
-    },
-    mounted() {
-      var now = new Date();
-      var year = now.getFullYear();
-      var month = now.getMonth() + 1 > 9 ? now.getMonth() + 1 : `0${now.getMonth() + 1}`;
-      this.value = `${year}-${month}`
-      this.date1 = `${year}-${month}`
+      listZB: [],
+      column: [],
+      list: []
+    }
+  },
+  mounted () {
+    var now = new Date()
+    var year = now.getFullYear()
+    var month = now.getMonth() + 1 > 9 ? now.getMonth() + 1 : `0${now.getMonth() + 1}`
+    this.value = `${year}-${month}`
+    this.date1 = `${year}-${month}`
 
     this.getData()
     this.getRataLists()
     this.getReportLists()
+  },
+  methods: {
+    // 瀵煎嚭
+    daochu () {
+      reportExportExcel({ dateStr: this.date1, isGroupBy: this.isGroupBy, type: 1 }).then(res => {
+        this.download(res)
+      })
     },
-    methods: {
-      // 瀵煎嚭
-      daochu() {
-        reportExportExcel({ dateStr: this.date1, isGroupBy: this.isGroupBy, type: 1 }).then(res => {
-          this.download(res)
+    changeBB () {
+      if (this.radio === 'month') {
+        const now = new Date()
+        const year = now.getFullYear()
+        const month = now.getMonth() + 1 > 9 ? now.getMonth() + 1 : `0${now.getMonth() + 1}`
+        this.date1 = `${year}-${month}`
+      } else {
+        const now = new Date()
+        const year = now.getFullYear()
+        this.date1 = `${year}`
+      }
+      this.getReportLists()
+    },
+    // 鍏ュ洯杞﹁締缁熻琛�
+    getReportLists () {
+      getReportList({ dateStr: this.date1, isGroupBy: this.isGroupBy, type: 1 })
+        .then(res => {
+          if (!res || res.length === 0) {
+            this.column = []
+            this.list = []
+            return
+          }
+          this.column = res[0]
+          this.list = res.slice(1).map(row => {
+            const obj = {}
+            this.column.forEach((header, index) => {
+              obj[header] = row[index]
+            })
+            return obj
+          })
+          // if (res.length === 0) {
+          //   this.column = []
+          //   this.list = []
+          //   return
+          // }
+          //
+          // this.column = res[0]
+          // this.list = res.slice(1, res.length);
         })
-      },
-      changeBB() {
-        if (this.radio === 'month') {
-          let now = new Date();
-          let year = now.getFullYear();
-          let month = now.getMonth() + 1 > 9 ? now.getMonth() + 1 : `0${now.getMonth() + 1}`;
-          this.date1 = `${year}-${month}`
-        } else {
-          let now = new Date();
-          let year = now.getFullYear();
-          this.date1 = `${year}`
-        }
-        this.getReportLists()
-      },
-      // 鍏ュ洯杞﹁締缁熻琛�
-      getReportLists() {
-        getReportList({ dateStr: this.date1, isGroupBy: this.isGroupBy, type: 1 })
-          .then(res => {
-            if (res.length === 0) {
-              this.column = []
-              this.list = []
-              return
-            }
-
-            this.column = res[0]
-
-            this.list = res.slice(1).map(row => {
-              const obj = {};
-              this.column.forEach((header, index) => {
-                obj[header] = row[index];
-              });
-              return obj;
-            });
-
-            // if (res.length === 0) {
-            //   this.column = []
-            //   this.list = []
-            //   return
-            // }
-            //
-            // this.column = res[0]
-            // this.list = res.slice(1, res.length);
-          })
-      },
-      changeDateType() {
-        if (this.dateType === 'month') {
-          let now = new Date();
-          let year = now.getFullYear();
-          let month = now.getMonth() + 1 > 9 ? now.getMonth() + 1 : `0${now.getMonth() + 1}`;
-          this.value = `${year}-${month}`
-        } else {
-          let now = new Date();
-          let year = now.getFullYear();
-          this.value = `${year}`
-        }
-        this.getRataLists()
-      },
-      // 杞﹁締鍒嗙被缁熻
-      getRataLists() {
-        getRataList({ dateStr: this.value, isGroupBy: this.isGroupBy, type: 1 })
-          .then(res => {
-            this.listZB = res
-            // this.$nextTick(() => {
-            //   this.initDept()
-            // })
-            setTimeout(() => {
-              this.initDept()
-            }, 1000)
-          })
-      },
-      // 鍩虹鏁版嵁
-      getData() {
-        getInParkUserData({ isGroupBy: this.isGroupBy, type: 1 }).then(res => {
-          this.info = res
+    },
+    changeDateType () {
+      if (this.dateType === 'month') {
+        const now = new Date()
+        const year = now.getFullYear()
+        const month = now.getMonth() + 1 > 9 ? now.getMonth() + 1 : `0${now.getMonth() + 1}`
+        this.value = `${year}-${month}`
+      } else {
+        const now = new Date()
+        const year = now.getFullYear()
+        this.value = `${year}`
+      }
+      this.getRataLists()
+    },
+    // 杞﹁締鍒嗙被缁熻
+    getRataLists () {
+      getRataList({ dateStr: this.value, isGroupBy: this.isGroupBy, type: 1 })
+        .then(res => {
+          this.listZB = res
           // this.$nextTick(() => {
-          //   this.initType()
+          //   this.initDept()
           // })
           setTimeout(() => {
-            this.initType()
+            this.initDept()
           }, 1000)
         })
-      },
-      // 鍏ㄥ勾鍏ュ洯杞﹁締瓒嬪娍
-      initType() {
-        if (!this.info.cumulativeDataList) return
+    },
+    // 鍩虹鏁版嵁
+    getData () {
+      getInParkUserData({ isGroupBy: this.isGroupBy, type: 1 }).then(res => {
+        this.info = res
+        // this.$nextTick(() => {
+        //   this.initType()
+        // })
+        setTimeout(() => {
+          this.initType()
+        }, 1000)
+      })
+    },
+    // 鍏ㄥ勾鍏ュ洯杞﹁締瓒嬪娍
+    initType () {
+      if (!this.info.cumulativeDataList) return
 
-        const myChart = echarts.init(document.querySelector('.echart1'))
+      const myChart = echarts.init(document.querySelector('.echart1'))
 
-        let names = this.info.cumulativeDataList.map(item => item.name)
-        let datas = this.info.cumulativeDataList.map(item => item.total)
+      const names = this.info.cumulativeDataList.map(item => item.name)
+      const datas = this.info.cumulativeDataList.map(item => item.total)
 
-        let option = {
-          grid: {
-            left: '0%',
-            right: '5%',
-            bottom: '10%',
-            top: '10%',
-            containLabel: true
+      const option = {
+        grid: {
+          left: '0%',
+          right: '5%',
+          bottom: '10%',
+          top: '10%',
+          containLabel: true
+        },
+        tooltip: {
+          trigger: 'axis',
+          axisPointer: {
+            type: 'line'
+          }
+        },
+        xAxis: {
+          type: 'category',
+          data: names
+        },
+        yAxis: {
+          type: 'value',
+          axisLine: {
+            show: true
           },
-          tooltip: {
-            trigger: 'axis',
-            axisPointer: {
-              type: 'line'
+          axisLabel: {
+            formatter: function (value) {
+              // 鍥涜垗浜斿叆鍒版渶杩戠殑鏁存暟
+              return Math.round(value)
             }
-          },
-          xAxis: {
-            type: 'category',
-            data: names
-          },
-          yAxis: {
-            type: 'value',
-            axisLine: {
-              show: true
-            },
-            axisLabel: {
-              formatter: function (value) {
-                // 鍥涜垗浜斿叆鍒版渶杩戠殑鏁存暟
-                return Math.round(value);
+          }
+        },
+        graphic: {
+          elements: [
+            {
+              type: 'text',
+              left: 'left',
+              top: 'top',
+              style: {
+                text: '浜哄憳鏁�',
+                textAlign: 'center',
+                fill: '#333'
               }
             }
-          },
-          graphic: {
-            elements: [
-              {
-                  type: 'text',
-                  left: 'left',
-                  top: 'top',
-                  style: {
-                    text: '浜哄憳鏁�',
-                    textAlign: 'center',
-                    fill: '#333'
-                  }
-                }
-            ]
-          },
-          series: [
-            {
-              data: datas,
-              type: 'line',
-              areaStyle: {
-                normal: {
-                  color: {
-                    x: 0,
-                    y: 0,
-                    x2: 0,
-                    y2: 1,
-                    colorStops: [{
-                      offset: 0,
-                      color: '#207FF7' // 0% 澶勭殑棰滆壊
-                    }, {
-                      offset: 1,
-                      color: 'rgba(255,255,255,.2)' // 100% 澶勭殑棰滆壊
-                    }],
-                    globalCoord: false // 缂虹渷涓� false
-                  }
-                }
-              },
-              lineStyle: { // 绾挎潯鏍峰紡
+          ]
+        },
+        series: [
+          {
+            data: datas,
+            type: 'line',
+            areaStyle: {
+              normal: {
                 color: {
-                  type: 'linear',
                   x: 0,
                   y: 0,
                   x2: 0,
                   y2: 1,
                   colorStops: [{
-                    offset: 0, color: '#207FF7' // 0% 澶勭殑棰滆壊
+                    offset: 0,
+                    color: '#207FF7' // 0% 澶勭殑棰滆壊
                   }, {
-                    offset: 1, color: '#207FF7' // 100% 澶勭殑棰滆壊
-                  }]
-                },
-                width: 2 // 绾挎潯绮楃粏
+                    offset: 1,
+                    color: 'rgba(255,255,255,.2)' // 100% 澶勭殑棰滆壊
+                  }],
+                  globalCoord: false // 缂虹渷涓� false
+                }
+              }
+            },
+            lineStyle: { // 绾挎潯鏍峰紡
+              color: {
+                type: 'linear',
+                x: 0,
+                y: 0,
+                x2: 0,
+                y2: 1,
+                colorStops: [{
+                  offset: 0, color: '#207FF7' // 0% 澶勭殑棰滆壊
+                }, {
+                  offset: 1, color: '#207FF7' // 100% 澶勭殑棰滆壊
+                }]
               },
-              symbol: 'circle',
-              symbolSize: 10,
-              itemStyle: {
-                borderWidth: 1,
-                borderColor: '#fff',
-                color: '#207FF7'
-              },
-              smooth: false
-            }
-          ]
-        }
-        myChart.setOption(option)
-        window.addEventListener('resize', function () { // 鎵ц
-          myChart.resize()
-        })
-      },
-      // 杞﹁締鍒嗙被缁熻
-      initDept() {
-        if (!this.listZB) return
-
-        const dom = document.getElementById('echart2')
-        console.log(dom)
-        const myChart = echarts.init(dom)
-
-        let data = this.listZB.map(item => {
-          return {
-            value: item.total,
-            name: item.name
+              width: 2 // 绾挎潯绮楃粏
+            },
+            symbol: 'circle',
+            symbolSize: 10,
+            itemStyle: {
+              borderWidth: 1,
+              borderColor: '#fff',
+              color: '#207FF7'
+            },
+            smooth: false
           }
-        })
+        ]
+      }
+      myChart.setOption(option)
+      window.addEventListener('resize', function () { // 鎵ц
+        myChart.resize()
+      })
+    },
+    // 杞﹁締鍒嗙被缁熻
+    initDept () {
+      if (!this.listZB) return
 
-        let option = {
-          tooltip: {
-            trigger: 'item',
-          },
-          legend: {
-            show: false,
-            orient: 'vertical',
-            left: 'left'
-          },
-          series : [
-            {
-              name: '璁块棶鏉ユ簮',
-              type: 'pie',
-              radius: ['34%', '50%'],
-              labelLine: {
-                normal: {
-                  length: 30,
-                  length2: 70,
+      const dom = document.getElementById('echart2')
+      console.log(dom)
+      const myChart = echarts.init(dom)
+
+      const data = this.listZB.map(item => {
+        return {
+          value: item.total,
+          name: item.name
+        }
+      })
+
+      const option = {
+        tooltip: {
+          trigger: 'item'
+        },
+        legend: {
+          show: false,
+          orient: 'vertical',
+          left: 'left'
+        },
+        series: [
+          {
+            name: '璁块棶鏉ユ簮',
+            type: 'pie',
+            radius: ['34%', '50%'],
+            labelLine: {
+              normal: {
+                length: 30,
+                length2: 70
+              }
+            },
+            label: {
+              formatter: '{a|{b}} {d}%',
+              rich: {
+                a: {
+                  color: '#333333',
+                  fontSize: 14,
+                  fontWeight: 500
                 }
               },
-              label: {
-                formatter: "{a|{b}} {d}%",
-                rich: {
-                  a: {
-                    color: '#333333',
-                    fontSize: 14,
-                    fontWeight: 500
-                  }
-                },
-                padding: [0,-50,20,-100]
-              },
-              data: data
-            }
-          ]
-        }
-        myChart.setOption(option)
-        window.addEventListener('resize', function () { // 鎵ц
-          myChart.resize()
-        })
-      },
-      initDept3() {
-        const myChart = echarts.init(document.querySelector('#echart3'))
-
-        let option = {
-          grid: {
-            left: '5%',
-            right: '10%',
-            bottom: '0%',
-            top: '20%',
-            containLabel: true
-          },
-          xAxis: {
-            type: 'category',
-            data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
-          },
-          yAxis: {
-            type: 'value'
-          },
-          series: [
-            {
-              data: [150, 230, 224, 218, 135, 147, 260],
-              type: 'line'
-            }
-          ]
-        }
-        myChart.setOption(option)
-        window.addEventListener('resize', function () { // 鎵ц
-          myChart.resize()
-        })
+              padding: [0, -50, 20, -100]
+            },
+            data: data
+          }
+        ]
       }
+      myChart.setOption(option)
+      window.addEventListener('resize', function () { // 鎵ц
+        myChart.resize()
+      })
+    },
+    initDept3 () {
+      const myChart = echarts.init(document.querySelector('#echart3'))
+
+      const option = {
+        grid: {
+          left: '5%',
+          right: '10%',
+          bottom: '0%',
+          top: '20%',
+          containLabel: true
+        },
+        xAxis: {
+          type: 'category',
+          data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
+        },
+        yAxis: {
+          type: 'value'
+        },
+        series: [
+          {
+            data: [150, 230, 224, 218, 135, 147, 260],
+            type: 'line'
+          }
+        ]
+      }
+      myChart.setOption(option)
+      window.addEventListener('resize', function () { // 鎵ц
+        myChart.resize()
+      })
     }
   }
+}
 </script>
 
 <style lang="scss" scoped>
@@ -504,7 +501,7 @@
 
         .main_table {
             display: flex;
-            align-items: start;
+            align-items: flex-start;
             justify-content: space-between;
             margin-top: 10px;
             .main_table_list {
@@ -665,7 +662,6 @@
                 padding: 20px;
                 box-sizing: border-box;
                 /*border-right: 12px solid #f7f7f7;*/
-
 
                 .echart1 {
                     width: 100%;
diff --git a/admin/src/views/business/carStatistics.vue b/admin/src/views/business/carStatistics.vue
index 8ed23e3..99bab1c 100644
--- a/admin/src/views/business/carStatistics.vue
+++ b/admin/src/views/business/carStatistics.vue
@@ -174,6 +174,12 @@
                 return
               }
 
+              if (!res || res.length === 0) {
+                this.column = []
+                this.list = []
+                return
+              }
+
               this.column = res[0]
 
               this.list = res.slice(1).map(row => {
@@ -525,7 +531,7 @@
 
         .main_table {
             display: flex;
-            align-items: start;
+            align-items: flex-start;
             justify-content: space-between;
             margin-top: 10px;
             .main_table_list {
diff --git a/admin/src/views/index.vue b/admin/src/views/index.vue
index 91f3d25..b99d623 100644
--- a/admin/src/views/index.vue
+++ b/admin/src/views/index.vue
@@ -238,6 +238,7 @@
       nowDate: '',
       nowWeek: '',
       headerData: {},
+      timeInfo:'涓婂崍',
       staticData: {},
       manningRatio: [],
       taskList: [],
@@ -376,6 +377,7 @@
       this.$router.push(item.path)
     },
     updateDate () {
+      this.timeInfo = new Date().getHours()<12?'涓婂崍':'涓嬪崍'
       this.nowDate = dayjs().format('YYYY骞碝鏈圖鏃�')
       this.nowWeek = weeks[new Date().getDay()]
     },
diff --git a/admin/src/views/login.vue b/admin/src/views/login.vue
index 5c64f46..8af0572 100644
--- a/admin/src/views/login.vue
+++ b/admin/src/views/login.vue
@@ -4,7 +4,7 @@
     <div class="login_wrap">
       <div class="login_img">
         <div class="h3" style="font-size: 30px; margin-bottom: 0;">{{sysConfig.title || ''}}</div>
-        <div class="h3">{{sysConfig.subtitle || title}}</div>
+        <div class="h3">鏅烘収鐗╂祦鍥尯瀹夋秷涓�浣撳寲绯荤粺</div>
       </div>
       <div class="form_wrap">
         <div class="tabs">
@@ -104,6 +104,7 @@
     ...mapState(['sysConfig'])
   },
   mounted () {
+    alert(1)
     this.username = localStorage.getItem('username') || ''
     this.password = localStorage.getItem('password') || ''
     this.phone = localStorage.getItem('phone') || ''
diff --git a/admin/vue.config.js b/admin/vue.config.js
index c429385..d54e209 100644
--- a/admin/vue.config.js
+++ b/admin/vue.config.js
@@ -12,7 +12,7 @@
   lintOnSave: false,
   devServer: {
     host: '0.0.0.0',
-    port: 10012,
+    port: 10085,
     proxy: {
       [process.env.VUE_APP_API_PREFIX]: {
         target: process.env.VUE_APP_API_URL,
diff --git "a/server/startsh/\345\220\257\345\212\250\350\204\232\346\234\254\345\222\214\346\227\245\345\277\227\345\244\204\347\220\206\350\204\232\346\234\254\350\257\264\346\230\216.txt" "b/server/startsh/\345\220\257\345\212\250\350\204\232\346\234\254\345\222\214\346\227\245\345\277\227\345\244\204\347\220\206\350\204\232\346\234\254\350\257\264\346\230\216.txt"
index c1fc2a6..22968a8 100644
--- "a/server/startsh/\345\220\257\345\212\250\350\204\232\346\234\254\345\222\214\346\227\245\345\277\227\345\244\204\347\220\206\350\204\232\346\234\254\350\257\264\346\230\216.txt"
+++ "b/server/startsh/\345\220\257\345\212\250\350\204\232\346\234\254\345\222\214\346\227\245\345\277\227\345\244\204\347\220\206\350\204\232\346\234\254\350\257\264\346\230\216.txt"
@@ -12,6 +12,10 @@
 #鏌ョ湅鏄惁鍒涘缓鎴愬姛
 crontab -l
 
+vim /etc/systemd/system/zhyqVisits.service
+
+sudo systemctl start zhyqVisits.service
+sudo systemctl enable zhyqVisits.service
 #JAVA spring boot涓娇鐢╣oogle鐨刼rtools(绠楁硶鍖�)
 
 Linux绯荤粺瀹夎瀵瑰簲鐨勭増鏈湇鍔★細
@@ -24,4 +28,4 @@
 (nameserve 8.8.8.8)
 
 
-tail -f /usr/local/jars/logs/visitsAdmin/info.2025-10-31.0.log
\ No newline at end of file
+tail -f /usr/local/jars/logs/visitsAdmin/info.2025-10-31.0.log
diff --git a/server/system_service/src/main/java/com/doumee/core/utils/Constants.java b/server/system_service/src/main/java/com/doumee/core/utils/Constants.java
index b4c7506..9edb8e1 100644
--- a/server/system_service/src/main/java/com/doumee/core/utils/Constants.java
+++ b/server/system_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -1,7 +1,9 @@
 package com.doumee.core.utils;
 
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -23,7 +25,9 @@
     public static final String HEADER_USER_TOKEN = "dm_user_token";
     public static final String REDIS_USER_KEY = "user_token_list_";
     public static final String REDIS_TOKEN_KEY = "token_";
+    public static final String WMS_IN_REPERTOTY_CODE_LIST = "WMS_IN_REPERTOTY_CODE_LIST";
     public static final String REDIS_HK_TOKEN_KEY = "hk_token_";
+    public static   boolean IS_AUTOCALL_WORKING = false;
     public static final String HK_TOKEN_VALIDITY = "HK_TOKEN_VALIDITY";
     public static final String[]  ALL_SPELL_LIST_FIRST = new String[]{"A", "B", "C", "D", "E", "F", "G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
     public static final int ZERO = 0 ;
@@ -556,6 +560,7 @@
 
     public static final String COFFEE_BEAN_TASK ="COFFEE_BEAN_TASK";
 
+    public static final String IN_REPERTOTY_CODE ="IN_REPERTOTY_CODE";
 
     public static final String HOME_IMAGE ="HOME_IMAGE";
     public static final String DD_TALK ="DD_TALK";
@@ -792,14 +797,73 @@
         }
     }
 
+    public static  String getWmsAreasNameByCode(String listStr,String code) {
+        try {
+            JSONArray list = JSONObject.parseArray(listStr );
+            if(list!=null && list.size()>0){
+                for (int i = 0; i < list.size(); i++) {
+                    if(StringUtils.equals(list.getJSONObject(i).getString("code"),code)){
+                        return  list.getJSONObject(i).getString("name");
+                    }
+                }
+            }
+        }catch (Exception e){
+
+        }
+        return null;
+    }
+    public static   List<JSONObject> getWmsAreasList(){
+        List<JSONObject>  list = new ArrayList<>();
+        JSONObject t = new JSONObject();
+        t.put("code","01");
+        t.put("name","铓屽煚鑿寸儫鍘�");
+        list.add(t);
+        t = new JSONObject();
+        t.put("code","02");
+        t.put("name","鑺滄箹鍗风儫鍘�");
+        list.add(t);
+        t = new JSONObject();
+        t.put("code","03");
+        t.put("name","鍚堣偉鍗风儫鍘�");
+        list.add(t);
+        t = new JSONObject();
+        t.put("code","04");
+        t.put("name","闃滈槼鍗风儫鍘�");
+        list.add(t);
+        t = new JSONObject();
+        t.put("code","04206");
+        t.put("name","鍚堣偉鍗风儫鍘傞瀺灞卞簱");
+        list.add(t);
+        t = new JSONObject();
+        t.put("code","05");
+        t.put("name","婊佸窞鍗风儫鍘�");
+        list.add(t);
+        t = new JSONObject();
+        t.put("code","06");
+        t.put("name","钂欏煄棣欒寗鐢熶骇閮�");
+        list.add(t);
+        t = new JSONObject();
+        t.put("code","07");
+        t.put("name","閲嶅簡涓儫宸ヤ笟鏈夐檺璐d换鍏徃");
+        list.add(t);
+        t = new JSONObject();
+        t.put("code","08");
+        t.put("name","闄曡タ涓儫宸ヤ笟鏈夐檺璐d换鍏徃");
+        list.add(t);
+        t = new JSONObject();
+        t.put("code","09");
+        t.put("name","鐗规畩绾康鐗�");
+        list.add(t);
+        return list;
+    }
     public static void main(String[] args) {
+        System.out.println(JSONObject.toJSONString(getWmsAreasList()));
 //        getChinesePingyin("DDaa姹熻悕鐨勫瀵瑰");
 //        System.out.println(DateUtil.getShortTime(new Date()));
 //        System.out.println( "2025-01-14 10:50:56".substring(0,10));
 //        System.out.println(Constants.checkCarNo("鐨朅A10991"));
 //        System.out.println(Constants.getVehiclePlateNo("婀楤140D17").getDescription());
 //        System.out.println(Constants.getVehiclePlateNo("瀹緼P0637").getDescription());
-
 //        0789150665 C97B092F 0789150561
 
 
@@ -960,6 +1024,7 @@
         LEAVED(10, "宸茬鍥� ","杞﹁締浠巤data}绂诲満 " ),
         OVER_NUMBER(11, "宸茶繃鍙�","瓒呮椂鏈埌鎸囧畾鏈堝彴鑷姩杩囧彿" ),
         CHANGE_GROUP(12, "鏇存崲鏈堝彴缁�","浠庛�恵data}銆戞洿鎹㈠埌銆恵data1}銆�" ),
+        BACK_TO_WAIT_SIGNIN(13, "閲嶆柊绛惧埌","閲嶆柊绛惧埌" ),
         ;
 
         // 鎴愬憳鍙橀噺
diff --git a/server/visits/device_service/pom.xml b/server/visits/device_service/pom.xml
index 248de40..bdd8398 100644
--- a/server/visits/device_service/pom.xml
+++ b/server/visits/device_service/pom.xml
@@ -9,13 +9,13 @@
         <version>1.0.0-SNAPSHOT</version>
         <relativePath>../../pom.xml</relativePath>
     </parent>
-
     <artifactId>device_service</artifactId>
 
     <properties>
         <maven.compiler.source>8</maven.compiler.source>
         <maven.compiler.target>8</maven.compiler.target>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <fastjson.version>1.2.70</fastjson.version>
     </properties>
 
     <dependencies>
@@ -28,5 +28,10 @@
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>${fastjson.version}</version>
+        </dependency>
     </dependencies>
 </project>
\ No newline at end of file
diff --git a/server/visits/dmvisit_admin/src/main/resources/bootstrap-dev.yml b/server/visits/dmvisit_admin/src/main/resources/bootstrap-dev.yml
index 3be58d6..f8f8e9b 100644
--- a/server/visits/dmvisit_admin/src/main/resources/bootstrap-dev.yml
+++ b/server/visits/dmvisit_admin/src/main/resources/bootstrap-dev.yml
@@ -15,8 +15,7 @@
       password: nacos
       discovery:
         server-addr: http://192.168.0.7:8848 #閰嶇疆Nacos鍦板潃
-#        namespace: dmvisit
-        namespace: wuhu_visit_dev
+        namespace: dm_visits_test
         username: nacos
         password: nacos
 knife4j:
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java
index ed2ea88..a2da938 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java
@@ -431,6 +431,7 @@
         String[] iccmSignoff= new String[]{"/api/iccm/v1/signoff","iccm璁垮绛剧"};// iccm璁垮绛剧
         String[] authResultPage= new String[]{"/api/acps/auth/open/v1/auth/result/businessNo/page","鎸変笟鍔$紪鍙锋煡璇笅鍙戣褰�"};// 1.4.7.3鎸変笟鍔$紪鍙锋煡璇笅鍙戣褰�
         String[] wxAuthUrl= new String[]{"dps/web/wxAuth/loginV2?oaId=atwl&redirectUrl=","寰呭姙鑰冨嫟璺宠浆鍦板潃"};// 寰呭姙鑰冨嫟璺宠浆鍦板潃
+        String[] sensorStatusStatistic= new String[]{"/api/v1/sensorStatusStatistic","娑堥槻缁翠繚瀹氬埗-璁惧缁翠繚鎯呭喌"};//娑堥槻缁翠繚瀹氬埗-璁惧缁翠繚鎯呭喌
     }
     /**
      * 闄勫綍A.55娑堥槻璁惧绫诲瀷
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Device.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Device.java
index b7d2440..88110bc 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Device.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Device.java
@@ -73,8 +73,8 @@
     @ExcelColumn(name="鎺掑簭鐮�")
     private Integer sortnum;
 
-    @ApiModelProperty(value = "绫诲瀷 0闂ㄧ 1杞﹀簱 2LED 3骞挎挱鐐� 4骞挎挱璁惧 5鏂矾鍣ㄧ┖寮�", example = "1")
-    @ExcelColumn(name="绫诲瀷 0闂ㄧ 1杞﹀簱 2LED 3骞挎挱鐐� 4骞挎挱璁惧 5鏂矾鍣ㄧ┖寮�")
+    @ApiModelProperty(value = "绫诲瀷 0闂ㄧ 1杞﹀簱 2LED 3骞挎挱鐐� 4骞挎挱璁惧 5鏂矾鍣ㄧ┖寮� 6娴峰悍鐢佃〃", example = "1")
+    @ExcelColumn(name="绫诲瀷 0闂ㄧ 1杞﹀簱 2LED 3骞挎挱鐐� 4骞挎挱璁惧 5鏂矾鍣ㄧ┖寮� 6娴峰悍鐢佃〃")
     private Integer type;
     @ApiModelProperty(value = "鏄惁鍥尯鍑哄叆鍙� 0涓嶆槸 1鏄�", example = "1")
     @ExcelColumn(name="鏄惁鍥尯鍑哄叆鍙� 0涓嶆槸 1鏄�")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningRuleDetail.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningRuleDetail.java
index 6eacb96..8b97cb1 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningRuleDetail.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/WarningRuleDetail.java
@@ -1,8 +1,8 @@
 package com.doumee.dao.business.model;
 
+import com.doumee.service.business.third.model.LoginUserModel;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
-import com.doumee.service.business.third.model.LoginUserModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java
index 7dcfc40..3ba9af1 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java
@@ -1710,23 +1710,41 @@
     @Override
     public    YearDeviceDataVO yearFightingAdminDeviceData(){
         YearDeviceDataVO data = new YearDeviceDataVO();
-        FireStatisticRequest param = new FireStatisticRequest();
-        param.setIndexCode("api_fire_statistic");
-        BaseResponse<FireStatisticResponse> response = HKService.fireStatistic(param);
-        if(response != null && StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE) && response.getData()!=null ) {
-            data.setProtectNum(Constants.formatIntegerNum(response.getData().getMaintenanceNum()));
-            data.setPlanProtectTotal(Constants.formatIntegerNum(response.getData().getDeviceTotalNum()));
+//        FireStatisticRequest param = new FireStatisticRequest();
+//        param.setIndexCode("api_fire_statistic");
+//        BaseResponse<FireStatisticResponse> response = HKService.fireStatistic(param);
+//        if(response != null && StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE) && response.getData()!=null ) {
+//            data.setProtectNum(Constants.formatIntegerNum(response.getData().getMaintenanceNum()));
+//            data.setPlanProtectTotal(Constants.formatIntegerNum(response.getData().getDeviceTotalNum()));
+//        }
+//        param = new FireStatisticRequest();
+//        param.setIndexCode("api_fire_statistic_month");
+//        BaseResponse<FireStatisticResponse> response1 = HKService.fireStatisticMonth(param);
+//        if(response1 != null && StringUtils.equals(response1.getCode(), HKConstants.RESPONSE_SUCCEE)
+//                && response1.getData()!=null ) {
+//            data.setMonthAddNum(Constants.formatIntegerNum(response1.getData().getMaintenanceNumMonth()));
+//            data.setMonthTotalNum(Constants.formatIntegerNum(response1.getData().getDeviceTotalNum()));
+//        }
+
+        data.setProtectNum(Constants.ZERO);
+        data.setPlanProtectTotal(Constants.ZERO);
+        data.setMonthAddNum(Constants.ZERO);
+        data.setMonthTotalNum(Constants.ZERO);
+        BaseResponse<SensorStatusStatisticResponse> response = HKService.sensorStatusStatistic();
+        if(response != null && StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)
+                && response.getData()!=null ) {
+            data.setProtectNum(Constants.formatIntegerNum(response.getData().getSensorMainNum()));
+            data.setPlanProtectTotal(Constants.formatIntegerNum(response.getData().getSensorNum()));
+            data.setMonthAddNum(Constants.formatIntegerNum(response.getData().getSensorMainMonthNum()));
+            data.setMonthTotalNum(Constants.formatIntegerNum(response.getData().getSensorNum()));
         }
-        param = new FireStatisticRequest();
-        param.setIndexCode("api_fire_statistic_month");
-        BaseResponse<FireStatisticResponse> response1 = HKService.fireStatisticMonth(param);
-        if(response1 != null && StringUtils.equals(response1.getCode(), HKConstants.RESPONSE_SUCCEE)
-                && response1.getData()!=null ) {
-            data.setMonthAddNum(Constants.formatIntegerNum(response1.getData().getMaintenanceNumMonth()));
-            data.setMonthTotalNum(Constants.formatIntegerNum(response1.getData().getDeviceTotalNum()));
-        }
+
         return data;
     }
+
+
+
+
 
     /**
      * 銆愭秷闃茬鎺с�戠湅鏉�-鍒嗙被鍜屾眹鎬荤殑鍚勭姸鎬佽澶囨暟閲�
@@ -2578,7 +2596,8 @@
                 .selectAs(Platform::getName,PlatformWarnEvent::getPlatformName)
                 .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId)
                 .eq(PlatformWarnEvent::getIsdeleted,Constants.ZERO)
-                .apply("to_days(t.create_date) = to_days(now())")
+                //.apply(" to_days(t.create_date) = to_days(now()) ")
+                .apply(" ( t.create_date > now() - INTERVAL 10 MINUTE ) ")
                 .orderByDesc(PlatformWarnEvent::getCreateDate)
                 .last(" limit "+limit)
         );

--
Gitblit v1.9.3