From 3bf18e6a9448af394530ff765906d69ca351ed5e Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期三, 30 十月 2024 18:39:03 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 admin/src/components/business/operaVisitsWindow.vue                                                                 |    7 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/SecurityDeviceDataVO.java    |   28 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/EnergyController.java                              |  129 ++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java           |    5 
 server/visits/admin_timer/src/main/java/com/doumee/api/PlatformJobController.java                                   |   21 
 admin/src/components/business/OperaHiddenDangerParamWindow.vue                                                      |   82 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyCloudController.java                        |    9 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/ArriveGoodsVO.java           |   26 
 server/system_service/src/main/java/com/doumee/api/system/SystemController.java                                     |   25 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java             |    6 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/WholeProvinceBoardVO.java    |   84 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java            |   40 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformJobRunBoardVO.java   |   75 +
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java                          |   10 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/VisitRetentionDataVO.java    |   24 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformWorkDataVO.java      |   39 
 screen/src/api/index.js                                                                                             |   70 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDangerParam.java                    |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformBooksServiceImpl.java          |    6 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/YearDeviceDataVO.java        |   26 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/MenuDataResponse.java       |   14 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/FightingAdminController.java                       |  126 +
 admin/src/components/operation/HiddenDangerParam.vue                                                                |   18 
 server/system_service/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java                       |   10 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformWmsJobServiceImpl.java         |    6 
 server/system_service/src/main/java/com/doumee/dao/system/dto/LoginPhoneDTO.java                                    |   24 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/FightingAdminBoardVO.java    |   59 
 server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java              |    6 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerParamServiceImpl.java      |   10 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformJob.java                          |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformDurationVO.java      |   31 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java                 |   17 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/WmsServiceImpl.java              |   82 +
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/AlarmDataVO.java             |   37 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/TransportMeasureVO.java      |   26 
 screen/src/views/LogisticsEfficiency.vue                                                                            |   51 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformGroupFinishVO.java   |   28 
 server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java                                      |   13 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/StockRataVO.java             |   28 
 screen/src/router/index.js                                                                                          |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/EnergyBoardVO.java           |   97 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java               |   57 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/SalesOperationVO.java        |   29 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/WorkEfficiencyVO.java        |   24 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/DeviceAlarmDataVO.java       |   40 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformBooksCloudController.java                  |    6 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java      |   22 
 server/system_service/src/main/java/com/doumee/service/system/SystemLoginService.java                               |    4 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java                         |   35 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/OnSitDispatchController.java                       |  170 ++
 admin/src/api/business/company.js                                                                                   |    4 
 admin/src/router/index.js                                                                                           |    8 
 admin/src/views/platform/LogisticsRecord/waybill.vue                                                                |    3 
 server/system_service/src/main/java/com/doumee/core/utils/Constants.java                                            |    7 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/JobDataVO.java               |   24 
 server/system_service/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java                                         |   53 
 admin/src/views/operation/danger/areaSet.vue                                                                        |   14 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/OnSitDispatchBoardVO.java    |   54 
 server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java                                        |    1 
 server/system_service/src/main/java/com/doumee/dao/system/model/Multifile.java                                      |    6 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/SmsEmailService.java                        |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java                |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformGroupServiceImpl.java          |   12 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/SecurityController.java                            |  104 +
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/GeneralVO.java               |   23 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/TransportTaskVO.java         |   30 
 server/system_service/src/main/java/com/doumee/dao/business/model/SmsEmail.java                                     |    0 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/OilDataVO.java               |   26 
 server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java                      |   81 +
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java                          |   45 
 server/system_service/src/main/resources/mappers/SystemUserMapper.xml                                               |    3 
 server/system_service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java                               |   20 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CarUseBookCloudController.java                     |    6 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/third/EmayService.java                      |   32 
 server/system_service/src/main/java/com/doumee/dao/system/dto/QuerySystemUserDTO.java                               |    7 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/AlarmHandleDataVO.java       |   37 
 admin/src/views/login.vue                                                                                           |   16 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/CarWorkSituationVO.java      |   40 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/EnergyDataVO.java            |   23 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/SecurityBoardVO.java         |   73 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/WholeProvinceController.java                       |  171 ++
 server/system_service/src/main/java/com/doumee/dao/business/dao/SmsEmailMapper.java                                 |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java                               |    5 
 screen/src/views/TaskEfficiency.vue                                                                                 |  230 ++-
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/PlatformJobRunController.java                      |  180 ++
 admin/src/utils/request.js                                                                                          |    8 
 admin/src/views/business/relativeMember.vue                                                                         |    1 
 server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java                                   |   26 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HiddenDangerCloudController.java                   |   16 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java                 |   19 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java                              |    5 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java                |  107 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPlatformsServiceImpl.java |   54 
 admin/src/components/business/operaVisitsReportWindow.vue                                                           |    7 
 admin/src/views/operation/danger/record.vue                                                                         |    5 
 screen/src/views/FireFighting.vue                                                                                   |  433 +++--
 96 files changed, 3,363 insertions(+), 449 deletions(-)

diff --git a/admin/src/api/business/company.js b/admin/src/api/business/company.js
index dd0434d..da1ff1a 100644
--- a/admin/src/api/business/company.js
+++ b/admin/src/api/business/company.js
@@ -41,6 +41,10 @@
 export function companyGetList (data) {
   return request.post('/visitsAdmin/cloudService/business/company/page', data)
 }
+// 鏌ヨ鎵�鏈夐儴闂�
+export function companyGetListPost (data) {
+  return request.post('/visitsAdmin/cloudService/business/company/list', data)
+}
 
 // 鍒犻櫎
 export function deleteById (id) {
diff --git a/admin/src/components/business/OperaHiddenDangerParamWindow.vue b/admin/src/components/business/OperaHiddenDangerParamWindow.vue
index 12155f9..ffe844c 100644
--- a/admin/src/components/business/OperaHiddenDangerParamWindow.vue
+++ b/admin/src/components/business/OperaHiddenDangerParamWindow.vue
@@ -1,71 +1,74 @@
 <template>
-    <GlobalWindow
-        :title="title"
-        width="500px"
-        :visible.sync="visible"
-        :confirm-working="isWorking"
-        @confirm="confirm"
-    >
-      <el-form :model="form" ref="form" :rules="rules">
-          <el-form-item label="鍚嶇О" prop="name">
-            <el-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�" v-trim/>
-          </el-form-item>
-          <el-form-item label="鎺掑簭鐮�(鍗囧簭)" prop="sortnum">
-            <el-input v-model="form.sortnum" type="number"  placeholder="璇疯緭鍏ユ帓搴忕爜" v-trim/>
-          </el-form-item>
-          <el-form-item v-if="form.type==0" label="閫夋嫨瀹夊叏鍛橈細" prop="memberIdList">
-            <el-select v-model="form.memberIdList" filterable multiple clearable placeholder="璇烽�夋嫨">
-              <el-option
-                  v-for="item in memberList"
-                  :key="item.id"
-                  :label="item.name"
-                  :value="item.id">
-              </el-option>
-            </el-select>
-          </el-form-item>
-        </el-form>
-    </GlobalWindow>
+  <GlobalWindow :title="title" width="500px" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm">
+    <el-form :model="form" ref="form" :rules="rules">
+      <el-form-item label="鍚嶇О" prop="name">
+        <el-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�" v-trim />
+      </el-form-item>
+      <el-form-item label="璐d换閮ㄩ棬" prop="companyId">
+        <el-select @change="loadMember" v-model="form.companyId">
+          <el-option v-for="op in department" :key="op.id" :label="op.name" :value="op.id"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item v-if="form.type == 0" label="閫夋嫨瀹夊叏鍛�" prop="memberIdList">
+        <el-select v-model="form.memberIdList" filterable multiple clearable placeholder="璇烽�夋嫨">
+          <el-option v-for="item in memberList" :key="item.id" :label="item.name" :value="item.id">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="鎺掑簭鐮�(鍗囧簭)" prop="sortnum">
+        <el-input v-model="form.sortnum" type="number" placeholder="璇疯緭鍏ユ帓搴忕爜" v-trim />
+      </el-form-item>
+    </el-form>
+  </GlobalWindow>
 </template>
 
 <script>
 import BaseOpera from '@/components/base/BaseOpera'
 import GlobalWindow from '@/components/common/GlobalWindow'
 import { allList } from '@/api/business/member'
+import { companyGetListPost } from '@/api/business/company'
 export default {
   name: 'OperaHiddenDangerParamWindow',
   extends: BaseOpera,
   components: { GlobalWindow },
-  data () {
+  data() {
     return {
       // 琛ㄥ崟鏁版嵁
       memberList: [],
+      department: [],
+      departprops: {
+        label: 'name',
+        value: 'id',
+        checkStrictly: true
+      },
       form: {
         id: null,
         name: null,
+        companyId: null,
         memberIdList: null,
         type: null,
         sortnum: null
       },
       // 楠岃瘉瑙勫垯
       rules: {
-        name: [
-          { required: true, message: '璇疯緭鍏ュ悕绉�' }
-        ]
+        name: [{ required: true, message: '璇疯緭鍏ュ悕绉�' }],
+        companyId: [{ required: true, message: '璇烽�夋嫨' }],
+        memberIdList: [{ required: true, message: '璇烽�夋嫨', type: 'array' }],
       }
     }
   },
-  created () {
+  created() {
     this.config({
       api: '/business/hiddenDangerParam',
       'field.id': 'id'
     })
   },
   methods: {
-    open (title, target, type) {
+    open(title, target, type) {
       this.title = title
       this.visible = true
       this.form.type = type
-      this.loadMember()
+      this.getfindCompanyTreePage()
       // 鏂板缓缁勭粐
       if (target == null) {
         this.$nextTick(() => {
@@ -90,10 +93,19 @@
         }
       })
     },
-    loadMember () {
+    getfindCompanyTreePage() {
+      companyGetListPost({})
+        .then(res => {
+          if (res && res.length > 0) {
+            this.department = res
+          }
+        })
+    },
+    loadMember() {
       allList({
         type: 2,
-        companyType: 1
+        companyType: 1,
+        companyId: this.form.companyId
       })
         .then(res => {
           this.memberList = res
diff --git a/admin/src/components/business/operaVisitsReportWindow.vue b/admin/src/components/business/operaVisitsReportWindow.vue
index d45b176..161bfdd 100644
--- a/admin/src/components/business/operaVisitsReportWindow.vue
+++ b/admin/src/components/business/operaVisitsReportWindow.vue
@@ -55,7 +55,7 @@
         ></el-input>
       </el-form-item>
       <el-form-item label="鍏ュ洯杞﹁締" prop="carNos">
-        <el-input v-model="param.carNos" placeholder="璇疯緭鍏ヨ溅鐗屽彿"></el-input>
+        <el-input v-model.trim="param.carNos" placeholder="璇疯緭鍏ヨ溅鐗屽彿"></el-input>
       </el-form-item>
       <el-form-item label="闅忚溅浜烘暟" prop="memberNum">
         <el-input
@@ -205,6 +205,11 @@
         if (!valid) {
           return
         }
+        const { param } = this
+        if(param.carNos){
+          param.carNos = param.carNos.replace(/\s*/g,"")
+          param.carNos = param.carNos.replace(/[\r\n]/g, "")
+        }
         // 璋冪敤鏂板缓鎺ュ彛
         this.isWorking = true
         createVisit({
diff --git a/admin/src/components/business/operaVisitsWindow.vue b/admin/src/components/business/operaVisitsWindow.vue
index 7eff5ec..28d9454 100644
--- a/admin/src/components/business/operaVisitsWindow.vue
+++ b/admin/src/components/business/operaVisitsWindow.vue
@@ -117,7 +117,7 @@
         ></el-input>
       </el-form-item>
       <el-form-item label="闅忚杞﹁締">
-        <el-input v-model="param.carNos" placeholder="璇疯緭鍏ヨ溅鐗屽彿"></el-input>
+        <el-input v-model.trim="param.carNos" onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')" placeholder="璇疯緭鍏ヨ溅鐗屽彿"></el-input>
       </el-form-item>
     </el-form>
   </GlobalWindow>
@@ -135,6 +135,7 @@
     GlobalWindow,
     UploadFaceImg
   },
+  
   data () {
     return {
       isShowModal: false,
@@ -257,6 +258,10 @@
           return
         }
         const { param } = this
+        if(param.carNos){
+          param.carNos = param.carNos.replace(/\s*/g,"")
+          param.carNos = param.carNos.replace(/[\r\n]/g, "")
+        }
         if (param.starttime.slice(0, 10) !== param.endtime.slice(0, 10)) return this.$tip.error('鍏ュ洯鏃堕棿鍜岀鍥椂闂翠笉鍙法澶�')
         // 璋冪敤鏂板缓鎺ュ彛
         this.isWorking = true
diff --git a/admin/src/components/operation/HiddenDangerParam.vue b/admin/src/components/operation/HiddenDangerParam.vue
index 18cc589..c2b75eb 100644
--- a/admin/src/components/operation/HiddenDangerParam.vue
+++ b/admin/src/components/operation/HiddenDangerParam.vue
@@ -22,6 +22,11 @@
           default-time="08:00:00"
         />
       </el-form-item>
+      <el-form-item label="璐d换閮ㄩ棬" prop="companyId">
+        <el-select  v-model="param.companyId">
+          <el-option v-for="op in department" :key="op.id" :label="op.name" :value="op.id"></el-option>
+        </el-select>
+      </el-form-item>
       <el-form-item label="闅愭偅鍖哄煙" prop="areaId">
         <el-select v-model="param.areaId" @change="changeArea" placeholder="璇烽�夋嫨">
           <el-option
@@ -106,6 +111,7 @@
 import { allList, memberList } from '@/api/business/hiddenDangerParam'
 import { create } from '@/api/business/hiddenDanger'
 import { Loading } from 'element-ui'
+import { companyGetListPost } from '@/api/business/company'
 export default {
   extends: BaseOpera,
   components: {
@@ -126,11 +132,13 @@
       uploadData: {
         folder: 'HIDDEN_DANGER_FILE'
       },
+      department: [],
       rules: {
         // starttime: [{ required: true, message: '璇烽�夋嫨鏃ユ湡', trigger: 'change' }],
         areaId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
         cateId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
         checkUserId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
+        companyId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
         faceImgUrl: [{ required: true, message: '璇蜂笂浼�', trigger: 'change' }],
 
         content: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }]
@@ -142,6 +150,7 @@
     this.initData()
   },
   methods: {
+    
     initData () {
       allList({ type: 1 }).then(res => { // 绫诲瀷
         this.typeList = res || []
@@ -152,6 +161,15 @@
       memberList({}).then(res => {
         this.memberList = res || []
       })
+      this.getfindCompanyTreePage()
+    },
+    getfindCompanyTreePage() {
+      companyGetListPost({})
+        .then(res => {
+          if (res && res.length > 0) {
+            this.department = res
+          }
+        })
     },
     changeArea (e) {
       const item = this.addrList.find(i => i.id === e)
diff --git a/admin/src/router/index.js b/admin/src/router/index.js
index 0078cd0..db35fa8 100644
--- a/admin/src/router/index.js
+++ b/admin/src/router/index.js
@@ -60,10 +60,10 @@
       return
     }
     // 濡傛灉璁块棶鐨勬槸鐧诲綍椤甸潰锛屽垯鐩存帴璺宠浆鑷抽椤�
-    if (to.name === 'login') {
-      next({ name: 'index' })
-      return
-    }
+    // if (to.name === 'login') {
+    //   next({ name: 'index' })
+    //   return
+    // }
     next()
     return
   }
diff --git a/admin/src/utils/request.js b/admin/src/utils/request.js
index 24c674c..b70945d 100644
--- a/admin/src/utils/request.js
+++ b/admin/src/utils/request.js
@@ -4,6 +4,7 @@
 import { trim } from './util'
 import cache from '../plugins/cache'
 import { Message } from 'element-ui'
+import router from '@/router'
 
 axios.defaults.headers.common['Content-Type'] = 'application/json;charset=UTF-8'
 const axiosInstance = axios.create({
@@ -41,6 +42,7 @@
 
 // 鏂板缓鍝嶅簲鎷︽埅鍣�
 axiosInstance.interceptors.response.use((response) => {
+
   // 璇锋眰澶辫触
   if (response.status !== 200) {
     return Promise.reject(new Error('鏈嶅姟鍣ㄧ箒蹇欙紝璇风◢鍚庡啀璇�'))
@@ -54,10 +56,10 @@
     return Promise.reject(new Error('鏈嶅姟鍣ㄧ箒蹇欙紝璇风◢鍚庡啀璇�'))
   }
   if (response.data.code === 401 || response.data.code === 5112) {
-    if (response.config.autoLogin !== false) {
+    // if (response.config.autoLogin !== false) {
       Cookies.set('dm_user_token','')
-      window.location.href = process.env.VUE_APP_ROUTER_MODE === 'hash' ? (process.env.VUE_APP_CONTEXT_PATH +'/#/login') : (process.env.VUE_APP_CONTEXT_PATH+'/login')
-    }
+      router.replace({name: 'login'})
+    // }
     return Promise.reject(response.data)
   }
   // 涓氬姟澶辫触
diff --git a/admin/src/views/business/relativeMember.vue b/admin/src/views/business/relativeMember.vue
index 7d44185..676283c 100644
--- a/admin/src/views/business/relativeMember.vue
+++ b/admin/src/views/business/relativeMember.vue
@@ -119,6 +119,7 @@
             <span v-if="row.status == 2" style="color: red">鎷夐粦/鍐荤粨</span>
           </template>
         </el-table-column>-->
+        <el-table-column prop="trainEndTime" label="鍩硅鏈夋晥鏈�" min-width="100px">  </el-table-column>
         <el-table-column label="閮ㄩ棬绫诲瀷" min-width="100px">
           <template slot-scope="{row}">
             <span v-if="row.companyType == 0">鐩稿叧鏂圭粍缁�</span>
diff --git a/admin/src/views/login.vue b/admin/src/views/login.vue
index ee91131..f75520c 100644
--- a/admin/src/views/login.vue
+++ b/admin/src/views/login.vue
@@ -3,6 +3,7 @@
     <img src="@/assets/images/bg@2x.png" class="main_bg" alt="">
     <div class="login_wrap">
       <div class="login_img">
+        <div class="h2">瀹夊窘瀹夋嘲鐗╂祦鏈夐檺璐d换鍏徃</div>
         <div class="h3">鏅烘収鐗╂祦鍥尯瀹夋秷涓�浣撳寲绯荤粺</div>
       </div>
       <div class="form_wrap">
@@ -264,8 +265,19 @@
       background: url("../assets/images/login_img@2x.png");
       background-size: 100% 100%;
       padding-left: 40px;
-      padding-top: 80px;
-
+      padding-top: 60px;
+      .h2{
+        color: $primary-color;
+        background-color: #fff;
+        height: 24px;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        border-radius: 4px;
+        width: 186px;
+        display: flex;
+        margin-bottom: 12px;
+      }
       .h3 {
         font-size: 28px;
         font-weight: 700;
diff --git a/admin/src/views/operation/danger/areaSet.vue b/admin/src/views/operation/danger/areaSet.vue
index 6505acb..6423fdc 100644
--- a/admin/src/views/operation/danger/areaSet.vue
+++ b/admin/src/views/operation/danger/areaSet.vue
@@ -5,6 +5,9 @@
       <el-form-item label="闅愭偅鍖哄煙" prop="name">
         <el-input v-model="searchForm.name" clearable placeholder="璇疯緭鍏ラ殣鎮e尯鍩�" @keypress.enter.native="search"></el-input>
       </el-form-item>
+      <el-form-item label="璐d换閮ㄩ棬" prop="companyName">
+        <el-input v-model="searchForm.companyName" clearable placeholder="璇疯緭鍏ラ儴闂ㄥ悕绉�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
       <section>
         <el-button type="primary" @click="search">鎼滅储</el-button>
         <el-button @click="reset">閲嶇疆</el-button>
@@ -23,14 +26,15 @@
           @selection-change="handleSelectionChange"
       >
         <el-table-column type="selection" width="55"></el-table-column>
-        <el-table-column prop="name" label="闅愭偅鍖哄煙" min-width="200px"></el-table-column>
-        <el-table-column prop="sortnum" label="鎺掑簭鐮�"  min-width="100px"></el-table-column>
-        <el-table-column prop="memberNames" label="瀹夊叏鍛�" min-width="200px"></el-table-column>
-        <el-table-column prop="editDate" label="鎿嶄綔鏃堕棿" min-width="200px"></el-table-column>
+        <el-table-column prop="name" label="闅愭偅鍖哄煙" min-width="120px"></el-table-column>
+        <el-table-column prop="companyName" label="璐d换閮ㄩ棬" min-width="120px"></el-table-column>
+        <el-table-column prop="sortnum" label="鎺掑簭鐮�"  min-width="70px"></el-table-column>
+        <el-table-column prop="memberNames" label="瀹夊叏鍛�" min-width="80px"></el-table-column>
+        <el-table-column prop="editDate" label="鎿嶄綔鏃堕棿" min-width="160px"></el-table-column>
         <el-table-column
             v-if="containPermissions(['business:hiddendangerparam:update', 'business:hiddendangerparam:delete' ])"
             label="鎿嶄綔"
-            min-width="250"
+            min-width="140"
             fixed="right"
         >
           <template slot-scope="{row}">
diff --git a/admin/src/views/operation/danger/record.vue b/admin/src/views/operation/danger/record.vue
index d51731a..31f2fbb 100644
--- a/admin/src/views/operation/danger/record.vue
+++ b/admin/src/views/operation/danger/record.vue
@@ -8,6 +8,9 @@
       <el-form-item label="鎻愭姤浜虹粍缁�" prop="companyName">
         <el-input v-model="searchForm.companyName" placeholder="璇疯緭鍏�" clearable @keypress.enter.native="search"></el-input>
       </el-form-item>
+      <el-form-item label="璐d换閮ㄩ棬" prop="companyName">
+        <el-input v-model="searchForm.companyName" placeholder="璇疯緭鍏�" clearable @keypress.enter.native="search"></el-input>
+      </el-form-item>
       <el-form-item label="闅愭偅鍖哄煙" prop="areaId">
         <el-select v-model="searchForm.areaId" placeholder="璇烽�夋嫨闅愭偅鍖哄煙" clearable  @change="search">
           <el-option
@@ -72,6 +75,7 @@
           @selection-change="handleSelectionChange"
       >
         <el-table-column type="selection" width="55"></el-table-column>
+        <el-table-column prop="companyName" label="璐d换閮ㄩ棬" min-width="150px"></el-table-column>
         <el-table-column prop="areaName" label="闅愭偅鍖哄煙" min-width="150px"></el-table-column>
         <el-table-column prop="categoryName" label="闅愭偅绫诲瀷" min-width="150px"></el-table-column>
         <el-table-column prop="memberName" label="鎻愭姤浜�" min-width="80px"></el-table-column>
@@ -128,6 +132,7 @@
         memberName: '',
         companyName: '',
         queryStartTime: '',
+        companyName: '',
         queryEndTime: '',
         areaId: null,
         cateId: null,
diff --git a/admin/src/views/platform/LogisticsRecord/waybill.vue b/admin/src/views/platform/LogisticsRecord/waybill.vue
index fef375d..f0b7a3e 100644
--- a/admin/src/views/platform/LogisticsRecord/waybill.vue
+++ b/admin/src/views/platform/LogisticsRecord/waybill.vue
@@ -109,6 +109,9 @@
             type: 'select',
             label: '浣滀笟鐘舵��',
             options: [
+              { value: 0, label: '寰呯‘璁�' },
+              { value: 1, label: '寰呯鍒�' },
+              { value: 2, label: '绛夊緟鍙彿' },
               { value: 3, label: '鍏ュ洯绛夊緟' },
               { value: 4, label: '鏈堝彴绛夊緟' },
               { value: 5, label: '浣滀笟涓�' },
diff --git a/screen/src/api/index.js b/screen/src/api/index.js
index 2d94684..0056ec7 100644
--- a/screen/src/api/index.js
+++ b/screen/src/api/index.js
@@ -26,24 +26,74 @@
 }
 
 // 娑堥槻绠℃帶澶у睆 鎶ヨ淇℃伅
-export const getStoreTaskList = (data) => {
-  return request('visitsAdmin/cloudService/board/api/wholeProvince/transportTaskList', data)
+export const getFightingalarmData = (data) => {
+  return request('visitsAdmin/cloudService/board/api/fightingAdmin/alarmData', data)
 }
 // 娑堥槻绠℃帶澶у睆 鍛婅澶勭悊鍒嗘瀽
-export const getStoreTaskList = (data) => {
-  return request('visitsAdmin/cloudService/board/api/wholeProvince/transportTaskList', data)
+export const getFightingHandle = (data) => {
+  return request('visitsAdmin/cloudService/board/api/fightingAdmin/alarmHandleData', data)
 }
 // 娑堥槻绠℃帶澶у睆 涓績鏁版嵁
-export const getStoreTaskList = (data) => {
-  return request('visitsAdmin/cloudService/board/api/wholeProvince/transportTaskList', data)
+export const getFightingcenterData = (data) => {
+  return request('visitsAdmin/cloudService/board/api/fightingAdmin/centerData', data)
 }
 // 娑堥槻绠℃帶澶у睆 浠婃棩鍚勭郴缁熻澶囩姸鎬佸強鍛婅鏁伴噺
-export const getStoreTaskList = (data) => {
-  return request('visitsAdmin/cloudService/board/api/wholeProvince/transportTaskList', data)
+export const getFightingDeAlarm = (data) => {
+  return request('visitsAdmin/cloudService/board/api/fightingAdmin/deviceAlarmData', data)
 }
 // 娑堥槻绠℃帶澶у睆 鏈勾娑堥槻璁惧-璁炬柦缁存姢鎯呭喌
-export const getStoreTaskList = (data) => {
-  return request('visitsAdmin/cloudService/board/api/wholeProvince/transportTaskList', data)
+export const getFightingDeviceY = (data) => {
+  return request('visitsAdmin/cloudService/board/api/fightingAdmin/yearDeviceData', data)
+}
+
+// 鍦哄唴璋冨害鐪嬫澘 浠婃棩鏈堝彴瀹屾垚璁㈠崟缁熻
+export const cnplatformGroupFinish = (data) => {
+  return request('visitsAdmin/cloudService/board/api/onSitDispatch/platformGroupFinish', data)
+}
+// 鍦哄唴璋冨害鐪嬫澘 浠婃棩鏈堝彴宸ヤ綔鏃堕暱瓒嬪娍
+export const cnplatformDuration = (data) => {
+  return request('visitsAdmin/cloudService/board/api/onSitDispatch/platformDuration', data)
+}
+// 鍦哄唴璋冨害鐪嬫澘 瀹炴椂鏈堝彴浣滀笟淇℃伅
+export const cnplatformWorkData = (data) => {
+  return request('visitsAdmin/cloudService/board/api/onSitDispatch/platformWorkData', data)
+}
+// 鍦哄唴璋冨害鐪嬫澘 涓績鏁版嵁
+export const cncenterData = (data) => {
+  return request('visitsAdmin/cloudService/board/api/onSitDispatch/centerData', data)
+}
+// 鍦哄唴璋冨害鐪嬫澘 浠婃棩杞﹁締浣滀笟鎯呭喌
+export const cncarWorkSituation  = (data) => {
+  return request('visitsAdmin/cloudService/board/api/onSitDispatch/carWorkSituation', data)
+}
+// 鍦哄唴璋冨害鐪嬫澘 瀹炴椂浣滀笟鏁堢巼
+export const cnworkEfficiency = (data) => {
+  return request('visitsAdmin/cloudService/board/api/onSitDispatch/workEfficiency', data)
+}
+
+// 鐗╂祦杩愯璋冨害鐪嬫澘 涓績鏁版嵁
+export const wlcenterData = (data) => {
+  return request('visitsAdmin/cloudService/board/api/platformJobRun/centerData', data)
+}
+// 鐗╂祦杩愯璋冨害鐪嬫澘 鍑哄叆搴撲换鍔¢噺
+export const wljobData = (data) => {
+  return request('visitsAdmin/cloudService/board/api/platformJobRun/jobData', data)
+}
+// 鐗╂祦杩愯璋冨害鐪嬫澘 褰撴棩杩愯緭浠诲姟
+export const wlplatformJobList = (data) => {
+  return request('visitsAdmin/cloudService/board/api/platformJobRun/platformJobList', data)
+}
+// 鐗╂祦杩愯璋冨害鐪嬫澘 搴撳瓨鎯呭喌
+export const wlstockList = (data) => {
+  return request('visitsAdmin/cloudService/board/api/platformJobRun/stockList', data)
+}
+// 鐗╂祦杩愯璋冨害鐪嬫澘 浠婃棩鍏ュ簱閲忕粺璁�
+export const wltotalInList = (data) => {
+  return request('visitsAdmin/cloudService/board/api/platformJobRun/totalInList', data)
+}
+// 鐗╂祦杩愯璋冨害鐪嬫澘 杩愯緭浠诲姟鍒嗘瀽
+export const wltransportMeasure = (data) => {
+  return request('visitsAdmin/cloudService/board/api/platformJobRun/transportMeasure', data)
 }
 
 
diff --git a/screen/src/router/index.js b/screen/src/router/index.js
index 4449704..74799c6 100644
--- a/screen/src/router/index.js
+++ b/screen/src/router/index.js
@@ -5,7 +5,7 @@
   routes: [
     {
       path: '/',
-      component: () => import('../views/FireFighting.vue')
+      component: () => import('../views/SecurityControl.vue')
     },
     {
       path: '/PlatformCall', // 鏈堝彴鍙彿澶у睆
diff --git a/screen/src/views/FireFighting.vue b/screen/src/views/FireFighting.vue
index 2a5d881..25fd46a 100644
--- a/screen/src/views/FireFighting.vue
+++ b/screen/src/views/FireFighting.vue
@@ -31,14 +31,14 @@
                   <span class="item">鏁呴殰</span>
                   <span class="item">绂荤嚎</span>
                 </div>
-                <template v-for="i in 5">
+                <template v-for="(item, i) in dataList1" :key="i">
                   <div class="line">
-                    <span class="item name">鐏伓鎶ヨ绯荤粺</span>
-                    <span class="item">11</span>
-                    <span class="item">11</span>
-                    <span class="item">11</span>
-                    <span class="item">11</span>
-                    <span class="item">11</span>
+                    <span class="item name">{{ item.deviceTypeName }}</span>
+                    <span class="item">{{ item.statusTotal }}</span>
+                    <span class="item">{{ item.alarmNum }}</span>
+                    <span class="item">{{ item.shieldNum }}</span>
+                    <span class="item">{{ item.errNum }}</span>
+                    <span class="item">{{ item.offlineNum }}</span>
                   </div>
                   <div class="separate"></div>
                 </template>
@@ -54,12 +54,12 @@
               <img src="@/assets/images/title@2x.png" class="bg" alt="" />
             </div>
             <div class="police_wrap">
-              <div class="item" v-for="(ind, i) in 4">
+              <div class="item" v-for="(item, i) in dataList2">
                 <div class="head">
-                  <div class="name">鐪熷疄鎶ヨ鏁�</div>
-                  <div class="name">{{ i }}娆�</div>
+                  <div class="name">{{ item.name }}</div>
+                  <div class="name">{{ item.num }}娆�</div>
                 </div>
-                <FirePercent :color="policeColors[i]" :rate="40" />
+                <FirePercent :color="policeColors[i]" :rate="item.rate" />
               </div>
 
             </div>
@@ -84,35 +84,35 @@
                 <img src="@/assets/images/FireFighting/xiaofang_ic_zaixian@2x.png" alt="">
                 <div class="content">
                   <div class="name">鍦ㄧ嚎</div>
-                  <div class="num">1000</div>
+                  <div class="num">{{ dataList4.onlineDeviceNum }}</div>
                 </div>
               </div>
               <div class="item">
                 <img src="@/assets/images/FireFighting/xiaofang_ic_baojing@2x.png" alt="">
                 <div class="content">
                   <div class="name">鎶ヨ</div>
-                  <div class="num num2">12</div>
+                  <div class="num num2">{{ dataList4.alarmDeviceNum }}</div>
                 </div>
               </div>
               <div class="item">
                 <img src="@/assets/images/FireFighting/xiaofang_ic_guzhang@2x.png" alt="">
                 <div class="content">
                   <div class="name">鏁呴殰</div>
-                  <div class="num num3">12</div>
+                  <div class="num num3">{{ dataList4.errDeviceNum }}</div>
                 </div>
               </div>
               <div class="item">
                 <img src="@/assets/images/FireFighting/xiaofang_ic_lixian@2x.png" alt="">
                 <div class="content">
                   <div class="name">绂荤嚎</div>
-                  <div class="num num4">12</div>
+                  <div class="num num4">{{ dataList4.offlineDeviceNum }}</div>
                 </div>
               </div>
               <div class="item">
                 <img src="@/assets/images/FireFighting/xiaofang_ic_pingbi@2x.png" alt="">
                 <div class="content">
                   <div class="name">灞忚斀</div>
-                  <div class="num num5">12</div>
+                  <div class="num num5">{{ dataList4.shieldDeviceNum }}</div>
                 </div>
               </div>
             </div>
@@ -206,20 +206,26 @@
             </div>
             <div class="content_wrap">
               <div class="list">
-                <template v-for="i in 3">
-                  <div class="item">
-                    <div>宸茬淮淇�</div>
-                    <div class="num active">500</div>
-                  </div>
-                  <div v-if="i < 3" class="separate"></div>
-                </template>
-
+                <div class="item">
+                  <div>宸茬淮淇�</div>
+                  <div class="num active">{{ dataList5.protectNum }}</div>
+                </div>
+                <div class="separate"></div>
+                <div class="item">
+                  <div>璁″垝缁翠繚</div>
+                  <div class="num active">{{ dataList5.planProtectTotal }}</div>
+                </div>
+                <div class="separate"></div>
+                <div class="item">
+                  <div>缁翠繚鐜�</div>
+                  <div v-if="dataList5.protectNum && dataList5.planProtectTotal" class="num active">{{ ((dataList5.protectNum / dataList5.planProtectTotal) * 100).toFixed(0) }}%</div>
+                </div>
               </div>
               <div class="footer">
                 <img src="@/assets/images/FireFighting/ic_weixiu@2x.png" class="icon" alt="">
                 <div class="content">
                   <div>鏈湀鏂板缁翠繚</div>
-                  <div class="num">40 <span>涓�</span></div>
+                  <div class="num">{{ dataList5.monthAddNum }} <span>涓�</span></div>
                 </div>
               </div>
             </div>
@@ -241,14 +247,14 @@
                 <img src="@/assets/images/FireFighting/ic_tibao@2x.png" alt="">
                 <div class="content">
                   <div class="name">鎻愭姤闅愭偅鏁�</div>
-                  <div class="num"><span>10</span>涓�</div>
+                  <div class="num"><span>{{ dataList4.todayDangerNum }}</span>涓�</div>
                 </div>
               </div>
               <div class="item">
                 <img src="@/assets/images/FireFighting/ic_chuli@2x.png" alt="">
                 <div class="content">
                   <div class="name">澶勭悊闅愭偅鏁�</div>
-                  <div class="num"><span class="today">3</span>涓�</div>
+                  <div class="num"><span class="today">{{ dataList4.dealDangerNum }}</span>涓�</div>
                 </div>
               </div>
             </div>
@@ -277,7 +283,7 @@
                     </div>
                     <div class="title">
                       <img class="addr" src="@/assets/images/FireFighting/xiaofang_ic_weizhi@2x.png" alt="">
-                      <span>address</span>
+                      <span>A鍘傛埧3杞﹂棿闂ㄥ彛</span>
                     </div>
                   </div>
                 </div>
@@ -295,8 +301,15 @@
 import VScaleScreen from 'v-scale-screen'
 import FirePercent from '@/components/FirePercent.vue'
 import dayjs from 'dayjs'
-
 import * as echarts from 'echarts'
+import {
+  getFightingalarmData,
+  getFightingHandle,
+  getFightingcenterData,
+  getFightingDeAlarm,
+  getFightingDeviceY,
+} from '@/api'
+
 const colors = ['#FEAF01', '#01ABFE', '#51F9E4']
 const weekMap = ['鏄熸湡鏃�', '鏄熸湡涓�', '鏄熸湡浜�', '鏄熸湡涓�', '鏄熸湡鍥�', '鏄熸湡浜�', '鏄熸湡鍏�',]
 const date = ref(dayjs().format('YYYY.MM.DD'))
@@ -309,166 +322,7 @@
 
 }, 1000)
 
-const arr = ['#68e2e3', '#50afd3', '#377cdb', '#d5ae3a']
-const initEchart2 = () => {
-  var myChart = echarts.init(document.querySelector('.echart2'))
-  // 鐢熸垚鏁版嵁鍜屾棩鏈�
-  function getLastSevenDays() {
-    const days = []
-    const today = new Date()
-    for (let i = 10; i >= 0; i--) {
-      days.push(`${i + 1}鏈坄) // 鏍煎紡鍖栨棩鏈熶负 "X鏈圶鏃�"
-    }
-    return days
-  }
 
-  // 绀轰緥鏁版嵁
-  const data1 = [13, 14, 14, 14, 14, 12, 11, 23, 12, 1] // 鍑嗘椂
-  const data2 = [1, 1, 2, 1, 1, 2, 2, 3, 2, 1, 5] // 杩熷埌
-  const data3 = [1, 0, 0, 0, 0, 0, 2, 2, 3, 1, 2] // 璇峰亣
-  const data4 = [8, 5, 4, 7, 4, 5, 7, 4, 2, 1, 3] // 鍔犵彮
-  const option = {
-    legend: {
-      x: "center",
-      textStyle: {
-        color: "#FFFFFF", // 鍥句緥鏂囧瓧璁句负鐧借壊
-        fontSize: 12
-      },
-      icon: 'circle',
-      top: '6%',
-      itemWidth: 8,
-      itemHeight: 8,
-      itemGap: 20,
-      data: ['鍛婅鏁�', '杩涜涓�', '宸插鐞�', '璇姤鏁�'] // 鏇存柊鍥句緥鍚嶇О
-    },
-    grid: {
-      left: '2%',
-      right: '0%',
-      top: '18%',
-      bottom: '10%',
-      containLabel: true,
-    },
-    tooltip: {
-      trigger: "axis",
-      axisPointer: {
-        type: "shadow"
-      },
-      textStyle: {
-        color: "rgba(255, 255, 255, 1)"
-      },
-      backgroundColor: "rgba(0,0,0,0.8)",
-      borderColor: "rgba(219, 230, 255, 0.8)",
-    },
-    xAxis: {
-      data: getLastSevenDays(), // 浣跨敤杩戜竷澶╂棩鏈�
-      axisLabel: {
-        color: "#FFFFFF", // X 杞存枃瀛楄涓虹櫧鑹�
-        fontSize: 14,
-      },
-      axisLine: {
-        lineStyle: {
-          color: '#1E294C'
-        }
-      },
-      axisTick: {
-        show: false
-      }
-    },
-    yAxis: {
-      show: true,
-      axisLabel: {
-        color: "#FFFFFF", // Y 杞存枃瀛楄涓虹櫧鑹�
-        fontSize: 12,
-      },
-      axisLine: {
-        lineStyle: {
-          color: '#A9AEB2'
-        }
-      },
-      axisTick: {
-        lineStyle: {
-          color: '#A9AEB2'
-        }
-      },
-      splitLine: {
-        show: true,
-        lineStyle: {
-          color: ["#0f1d27"],
-          width: 1
-        },
-      },
-    },
-    series: [
-      {
-        name: "鍛婅鏁�",
-        type: "bar",
-        stack: "attendance",
-        data: data1,
-        itemStyle: {
-          color: '#FEAF01',
-        },
-        label: {
-          show: false,
-          color: "#FFFFFF",
-        },
-        emphasis: {
-          focus: "series",
-        },
-        barWidth: 6,
-      },
-      {
-        name: "杩涜涓�", // 杩熷埌鏁版嵁
-        type: "bar",
-        stack: "attendance",
-        data: data2,
-        itemStyle: {
-          color: '#28F0C4', // 杩熷埌鐨勯鑹�
-        },
-        label: {
-          show: false,
-          color: "#FFFFFF",
-        },
-        emphasis: {
-          focus: "series",
-        },
-      },
-      {
-        name: "宸插鐞�", // 璇峰亣鏁版嵁
-        type: "bar",
-        stack: "attendance",
-        data: data3,
-        itemStyle: {
-          color: '#0193FE', // 璇峰亣鐨勯鑹�
-        },
-        label: {
-          show: false,
-          color: "#FFFFFF",
-        },
-        emphasis: {
-          focus: "series",
-        },
-      },
-      {
-        name: "璇姤鏁�", // 鍗曠嫭鐨勫姞鐝煴瀛�
-        type: "bar",
-        data: data4,
-        barWidth: 6,
-        itemStyle: {
-          color: '#FEED01', // 楂樹寒鐨勭传鑹�
-        },
-        emphasis: {
-          focus: "series",
-        },
-      },
-    ],
-  }
-  myChart.setOption(option)
-  window.addEventListener('resize', function () {//鎵ц
-    myChart.resize()
-  })
-}
-
-const policeColors = ['#01D9FE', '#FE5501', '#0193FE', '#28F0C4']
 const initWatergage = () => {
   const myChart = echarts.init(document.getElementById('watergage'))
   var data_value = 2
@@ -834,8 +688,209 @@
   })
 }
 
+const dataList1 = ref([])
+const getData1 = () => {
+  getFightingDeAlarm().then(res => {
+    dataList1.value = res.data
+  })
+}
+const policeColors = ['#01D9FE', '#FE5501', '#0193FE', '#28F0C4']
+const dataList2 = ref([])
+const getData2 = () => {
+  getFightingalarmData().then(res => {
+    const result = res.data || {}
+    let temp = []
+    temp.push({ name: '鐪熷疄鎶ヨ鏁�', num: result.realNum, rate: (result.realNum / result.totalNum) * 100 })
+    temp.push({ name: '璇姤璀︽暟', num: result.errNum, rate: (result.errNum / result.totalNum) * 100 })
+    temp.push({ name: '宸茶В闄�', num: result.liftNum, rate: (result.liftNum / result.totalNum) * 100 })
+    temp.push({ name: '澶勭悊涓�', num: result.processingNum, rate: (result.processingNum / result.totalNum) * 100 })
+    dataList2.value = temp
+  })
+}
+
+const dataList3 = ref([])
+const getData3 = () => {
+  getFightingHandle({ type: 0 }).then(res => {
+    dataList3.value = res.data || []
+    initEchart2()
+  })
+}
+const initEchart2 = () => {
+  var myChart = echarts.init(document.querySelector('.echart2'))
+  // 鐢熸垚鏁版嵁鍜屾棩鏈�
+  // 绀轰緥鏁版嵁
+  const data1 = dataList3.value.map(i => i.alarmNum)
+  const data2 = dataList3.value.map(i => i.processingNum)
+  const data3 = dataList3.value.map(i => i.liftNum)
+  const data4 = dataList3.value.map(i => i.errNum)
+  const option = {
+    legend: {
+      x: "center",
+      textStyle: {
+        color: "#FFFFFF", // 鍥句緥鏂囧瓧璁句负鐧借壊
+        fontSize: 12
+      },
+      icon: 'circle',
+      top: '6%',
+      itemWidth: 8,
+      itemHeight: 8,
+      itemGap: 20,
+      data: ['鍛婅鏁�', '杩涜涓�', '宸插鐞�', '璇姤鏁�'] // 鏇存柊鍥句緥鍚嶇О
+    },
+    grid: {
+      left: '2%',
+      right: '0%',
+      top: '20%',
+      bottom: '10%',
+      containLabel: true,
+    },
+    tooltip: {
+      trigger: "axis",
+      axisPointer: {
+        type: "shadow"
+      },
+      textStyle: {
+        color: "rgba(255, 255, 255, 1)"
+      },
+      backgroundColor: "rgba(0,0,0,0.8)",
+      borderColor: "rgba(219, 230, 255, 0.8)",
+    },
+    xAxis: {
+      data: dataList3.value.map(i => i.monthStr),
+      axisLabel: {
+        color: "#FFFFFF", // X 杞存枃瀛楄涓虹櫧鑹�
+        fontSize: 14,
+      },
+      axisLine: {
+        lineStyle: {
+          color: '#1E294C'
+        }
+      },
+      axisTick: {
+        show: false
+      }
+    },
+    yAxis: {
+      show: true,
+      axisLabel: {
+        color: "#FFFFFF", // Y 杞存枃瀛楄涓虹櫧鑹�
+        fontSize: 12,
+      },
+      axisLine: {
+        lineStyle: {
+          color: '#A9AEB2'
+        }
+      },
+      axisTick: {
+        lineStyle: {
+          color: '#A9AEB2'
+        }
+      },
+      splitLine: {
+        show: true,
+        lineStyle: {
+          color: ["#0f1d27"],
+          width: 1
+        },
+      },
+    },
+    series: [
+      {
+        name: "鍛婅鏁�",
+        type: "bar",
+        stack: "attendance",
+        data: data1,
+        itemStyle: {
+          color: '#FEAF01',
+        },
+        label: {
+          show: false,
+          color: "#FFFFFF",
+        },
+        emphasis: {
+          focus: "series",
+        },
+        barWidth: 6,
+      },
+      {
+        name: "杩涜涓�", // 杩熷埌鏁版嵁
+        type: "bar",
+        stack: "attendance",
+        data: data2,
+        itemStyle: {
+          color: '#28F0C4', // 杩熷埌鐨勯鑹�
+        },
+        label: {
+          show: false,
+          color: "#FFFFFF",
+        },
+        emphasis: {
+          focus: "series",
+        },
+      },
+      {
+        name: "宸插鐞�", // 璇峰亣鏁版嵁
+        type: "bar",
+        stack: "attendance",
+        data: data3,
+        itemStyle: {
+          color: '#0193FE', // 璇峰亣鐨勯鑹�
+        },
+        label: {
+          show: false,
+          color: "#FFFFFF",
+        },
+        emphasis: {
+          focus: "series",
+        },
+      },
+      {
+        name: "璇姤鏁�", // 鍗曠嫭鐨勫姞鐝煴瀛�
+        type: "bar",
+        data: data4,
+        barWidth: 6,
+        itemStyle: {
+          color: '#FEED01', // 楂樹寒鐨勭传鑹�
+        },
+        emphasis: {
+          focus: "series",
+        },
+      },
+    ],
+  }
+  myChart.setOption(option)
+  window.addEventListener('resize', function () {//鎵ц
+    myChart.resize()
+  })
+}
+
+const dataList4 = ref({})
+const getData4 = () => {
+  getFightingcenterData().then(res => {
+    dataList4.value = res.data || {}
+  })
+}
+const dataList5 = ref({}) // 缁翠繚
+const getData5 = () => {
+  getFightingDeviceY().then(res => {
+    dataList5.value = res.data || {}
+  })
+}
+const dataList6 = ref([])
+const getData6 = () => {
+  getFightingHandle({type: 1}).then(res => {
+    dataList6.value = res.data
+  })
+}
+
 onMounted(() => {
-  initEchart2()
+  getData1()
+  getData2()
+  getData3()
+  getData4()
+  getData5()
+  getData6()
+
   initWatergage()
   initLiquidlevel()
 })
diff --git a/screen/src/views/LogisticsEfficiency.vue b/screen/src/views/LogisticsEfficiency.vue
index 6441406..f7dbdd1 100644
--- a/screen/src/views/LogisticsEfficiency.vue
+++ b/screen/src/views/LogisticsEfficiency.vue
@@ -248,6 +248,14 @@
 import dayjs from 'dayjs'
 import * as echarts from 'echarts'
 import ahJSON from '@/assets/anhui.json'
+import {
+  wlcenterData,
+  wljobData,
+  wlplatformJobList,
+  wlstockList,
+  wltotalInList,
+  wltransportMeasure,
+} from '@/api'
 
 const colors = ['#FEAF01', '#01ABFE', '#51F9E4']
 const weekMap = ['鏄熸湡鏃�', '鏄熸湡涓�', '鏄熸湡浜�', '鏄熸湡涓�', '鏄熸湡鍥�', '鏄熸湡浜�', '鏄熸湡鍏�',]
@@ -626,7 +634,50 @@
   })
 }
 
+const dataList1 = ref([])
+const getData1 = () => {
+  wlcenterData().then(res => {
+    const result = res
+  })
+}
+const dataList2 = ref([])
+const getData2 = () => {
+  wlcenterData().then(res => {
+    const result = res
+  })
+}
+const dataList3 = ref([])
+const getData3 = () => {
+  wlcenterData().then(res => {
+    const result = res
+  })
+}
+const dataList4 = ref([])
+const getData4 = () => {
+  wlcenterData().then(res => {
+    const result = res
+  })
+}
+const dataList5 = ref([])
+const getData5 = () => {
+  wlcenterData().then(res => {
+    const result = res
+  })
+}
+const dataList6 = ref([])
+const getData6 = () => {
+  wlcenterData().then(res => {
+    const result = res
+  })
+}
 onMounted(() => {
+  getData1()
+  getData2()
+  getData3()
+  getData4()
+  getData5()
+  getData6()
+  return
   initEnergy()
   initEchart1()
   initMap()
diff --git a/screen/src/views/TaskEfficiency.vue b/screen/src/views/TaskEfficiency.vue
index 3576b8f..27e6ece 100644
--- a/screen/src/views/TaskEfficiency.vue
+++ b/screen/src/views/TaskEfficiency.vue
@@ -24,20 +24,20 @@
             <div class="car_static">
               <div class="echart_wrap">
                 <div class="pie_text">
-                  <div class="fs30"><strong>300</strong></div>
+                  <div class="fs30"><strong>{{ data1 }}</strong></div>
                   <div>瀹屾垚閲�</div>
                 </div>
                 <div class="echart1" id="echart1"></div>
               </div>
               <div class="list">
-                <div class="item">
+                <div class="item" v-for="item, i in dataList1" :key="i">
                   <div class="line">
-                    <div :style="{ background: colors[0] }" class="icon"></div>
-                    <div class="text">瀹夋嘲鐗╂祦瑁呰揣鏈堝彴缁�</div>
+                    <div :style="{ background: colors[i] }" class="icon"></div>
+                    <div class="text">{{ item.name }}</div>
                   </div>
-                  <div :style="{ color: colors[0] }" class="num">100涓囨敮</div>
+                  <div :style="{ color: colors[i] }" class="num">{{ item.value }}涓囨敮</div>
                 </div>
-                <div class="item">
+                <!-- <div class="item">
                   <div class="line">
                     <div :style="{ background: colors[1] }" class="icon"></div>
                     <div class="text">瀹夋嘲鐗╂祦鍗歌揣鏈堝彴缁�</div>
@@ -50,7 +50,7 @@
                     <div class="text">甯傚叕鍙稿嵏璐ф湀鍙扮粍</div>
                   </div>
                   <div :style="{ color: colors[2] }" class="num">100涓囨敮</div>
-                </div>
+                </div> -->
               </div>
             </div>
           </div>
@@ -63,13 +63,13 @@
               <img src="@/assets/images/title@2x.png" class="bg" alt="" />
             </div>
             <div class="list">
-              <div class="line" v-for="item, i in 5">
+              <div class="line" v-for="item, i in dataList2" :key="i">
                 <div class="top"><span v-if="i < 3">top</span>{{ i }}</div>
-                <div class="id_card">鐨朅12313</div>
+                <div class="id_card">{{ item.platformName }}</div>
                 <div class="wrap">
-                  <ChargeRate :rate="15" :color />
+                  <ChargeRate :rate="item.rate" />
                 </div>
-                <div class="num">6灏忔椂34鍒嗛挓</div>
+                <div class="num">{{ item.workTotalTimeT }}</div>
               </div>
             </div>
           </div>
@@ -80,9 +80,9 @@
                 <div>瀹炴椂浣滀笟鏁堢巼</div>
               </div>
               <div class="tabs">
-                <div class="tab active">鍑哄簱</div>
+                <div class="tab" :class="{ active: activeTab3 == 1 }" @click="tabClick3(1)">鍑哄簱</div>
                 <div class="separate"></div>
-                <div class="tab">鍏ュ簱</div>
+                <div class="tab" :class="{ active: activeTab3 == 0 }" @click="tabClick3(0)">鍏ュ簱</div>
               </div>
               <img src="@/assets/images/title@2x.png" class="bg" alt="" />
             </div>
@@ -96,32 +96,32 @@
             <div class="static_wrap">
               <div class="item">
                 <div class="name">鏈堝彴鏁伴噺</div>
-                <div class="nums">
-                  <div class="num" v-for="i in '010'">{{ i }}</div>
+                <div v-if="data4.platformTotal" class="nums">
+                  <div class="num" v-for="n, i in data4.platformTotal + ''" :key="i">{{ n }}</div>
                 </div>
               </div>
               <div class="item">
                 <div class="name">绌洪棽鏈堝彴</div>
-                <div class="nums">
-                  <div class="num" v-for="i in '010'">{{ i }}</div>
+                <div v-if="data4.freePlatform" class="nums">
+                  <div class="num" v-for="n, i in data4.freePlatform + ''" :key="i">{{ n }}</div>
                 </div>
               </div>
               <div class="item">
                 <div class="name">棰勭害杞﹁締</div>
-                <div class="nums">
-                  <div class="num" v-for="i in '010'">{{ i }}</div>
+                <div v-if="data4.reservationCar" class="nums">
+                  <div class="num" v-for="n, i in data4.reservationCar + ''" :key="i">{{ n }}</div>
                 </div>
               </div>
               <div class="item">
                 <div class="name">浣滀笟杞﹁締</div>
-                <div class="nums">
-                  <div class="num" v-for="i in '010'">{{ i }}</div>
+                <div v-if="data4.workingCar" class="nums">
+                  <div class="num" v-for="n, i in data4.workingCar + ''" :key="i">{{ n }}</div>
                 </div>
               </div>
               <div class="item">
                 <div class="name">鎺掗槦杞﹁締</div>
-                <div class="nums">
-                  <div class="num" v-for="i in '010'">{{ i }}</div>
+                <div class="nums" v-if="data4.lineUpCar">
+                  <div class="num" v-for="n, i in data4.lineUpCar + ''" :key="i">{{ n }}</div>
                 </div>
               </div>
             </div>
@@ -139,13 +139,15 @@
                 <div>棰勮瀹屾垚鏃堕棿</div>
                 <div>鏈堝彴鐘舵��</div>
               </div>
-              <div class="line" v-for="i in 6">
-                <div>鏈堝彴鍚嶇О</div>
-                <div>浣滀笟杞﹁締</div>
-                <div>浣滀笟閲�</div>
-                <div>浣滀笟鏃堕暱</div>
-                <div>棰勮瀹屾垚鏃堕棿</div>
-                <div>鏈堝彴鐘舵��</div>
+              <div class="line" v-for="item, i in dataList5" :key="i">
+                <div>{{ item.platformName }}</div>
+                <div>{{ item.carNo || '-' }}</div>
+                <div>{{ item.workNum }}{{ item.workNum ? '涓囨敮' : '-' }}</div>
+                <div>{{ item.workTime || '-' }}</div>
+                <div>{{ item.finishTime || '-' }}</div>
+                <div :style="{
+                  color: item.status == 1 ? '#869CC9' : item.status == 2 ? '#FE5501' : '#D2E0FF'
+                }">{{ item.statusTemp }}</div>
               </div>
             </div>
           </div>
@@ -162,34 +164,34 @@
             <div class="static_wrap">
               <div class="item">
                 <div class="name">绛惧埌鏁�</div>
-                <div class="num">1</div>
+                <div class="num">{{ data6.inNum || 0 }}</div>
               </div>
               <div class="item">
                 <div class="name">宸插彨鍙�</div>
-                <div class="num">1</div>
+                <div class="num">{{ data6.callNum || 0 }}</div>
               </div>
               <div class="item">
                 <div class="name">宸蹭綔涓�</div>
-                <div class="num">1</div>
+                <div class="num">{{ data6.workingNum || 0 }}</div>
               </div>
               <div class="item">
                 <div class="name">宸插畬鎴�</div>
-                <div class="num">1</div>
+                <div class="num">{{ data6.finishNum || 0 }}</div>
               </div>
             </div>
             <div class="echart_wrap">
               <div class="echart3" id="echart3"></div>
             </div>
             <div class="list">
-              <div class="line" v-for=" i in 7">
+              <div class="line" v-for="item, i in data6.platformLogList">
                 <div class="time_wrap">
-                  <div class="time">12.40</div>
+                  <div class="time" v-if="item.createDate">{{ item.createDate.slice(11, 16) }}</div>
                   <div class="sp"></div>
                   <div class="dian"></div>
                 </div>
-                <div class="id_card">鐨朅12313</div>
+                <div class="id_card">{{ item.carCodeFront }}</div>
                 <div class="status">寮�濮嬩綔涓�</div>
-                <div class="desc">鎺掗槦绛夊緟鍙彿</div>
+                <div class="desc">{{ item.content }}</div>
               </div>
             </div>
           </div>
@@ -242,6 +244,14 @@
 import dayjs from 'dayjs'
 import ChargeRate from '@/components/ChargeRate.vue'
 import * as echarts from 'echarts'
+import {
+  cnplatformGroupFinish,
+  cnplatformDuration,
+  cnplatformWorkData,
+  cncenterData,
+  cncarWorkSituation,
+  cnworkEfficiency,
+} from '@/api'
 
 
 const weekMap = ['鏄熸湡鏃�', '鏄熸湡涓�', '鏄熸湡浜�', '鏄熸湡涓�', '鏄熸湡鍥�', '鏄熸湡浜�', '鏄熸湡鍏�',]
@@ -275,11 +285,7 @@
         labelLine: {
           show: false
         },
-        data: [
-          { value: 1048, name: 'Search Engine' },
-          { value: 735, name: 'Direct' },
-          { value: 580, name: 'Email' }
-        ]
+        data: dataList1.value
       }
     ]
   }
@@ -336,7 +342,7 @@
       axisTick: {
         show: false,
       },
-      data: ['2017', '2018', '2019', '2020', '2021', '2022', '2023',],
+      data: dataList3.value.map(i => i.workTime),
     }],
     yAxis: [
       {
@@ -424,7 +430,7 @@
           shadowColor: 'rgba(124,248,255, 0)',
           shadowBlur: 20
         },
-        data: [393, 438, 485, 631, 389, 224, 287]
+        data: dataList3.value.map(i => i.workNum)
       },
       {
         name: '绱浣滀笟閲�',
@@ -452,7 +458,7 @@
           },
           barBorderRadius: [30, 30, 0, 0],
         },
-        data: [393, 438, 485, 631, 689, 524, 687]
+        data: dataList3.value.map(i => i.totalWorkNum)
       },
     ]
   }
@@ -493,6 +499,13 @@
       offset: 1,
       color: '#61d3f9'
     }])]
+  const temp = []
+  temp.push({ name: '棰勭害鏁�', value: data6.value.reservationNum || 0 })
+  temp.push({ name: '宸茶繘鍦�', value: data6.value.inNum || 0 })
+  temp.push({ name: '宸蹭綔涓�', value: data6.value.workingNum || 0 })
+  temp.push({ name: '宸茬鍦�', value: data6.value.leaveNum || 0 })
+  console.log('temp', temp);
+  
   const option = {
     color: colors,
     tooltip: {
@@ -519,12 +532,7 @@
           borderWidth: 0,
           borderColor: '#fff'
         },
-        data: [
-          { value: 100, name: '棰勭害鏁�', },
-          { value: 50, name: '宸茶繘鍦�' },
-          { value: 20, name: '宸蹭綔涓�' },
-          { value: 30, name: '宸茬鍦�' },
-        ]
+        data: temp
       },
       {
         type: 'funnel',
@@ -570,12 +578,7 @@
             opacity: 1
           }
         },
-        data: [
-          { value: 100, name: '棰勭害鏁�', },
-          { value: 50, name: '宸茶繘鍦�' },
-          { value: 20, name: '宸蹭綔涓�' },
-          { value: 30, name: '宸茬鍦�' },
-        ]
+        data: temp
       },
     ]
   }
@@ -585,13 +588,102 @@
   })
 }
 
+const dataList1 = ref([])
+const data1 = ref(0)
+const getData1 = () => {
+  cnplatformGroupFinish().then(res => {
+    const result = res.data || []
+    let count = 0
+    dataList1.value = result.map(i => {
+      count += i.finishData
+      return {
+        value: i.finishData,
+        name: i.platformGroupName
+      }
+    })
+    data1.value = count
+    initEchart1()
+  })
+}
+const dataList2 = ref([])
+const getData2 = () => {
+  cnplatformDuration().then(res => {
+    const result = res.data || []
+    dataList2.value = result.map(item => {
+      if (item.workTotalTime) {
+        if (item.workTotalTime > 60) {
+          item.workTotalTimeT = (item.workTotalTime / 60).toFixed(0) + '灏忔椂' + item.workTotalTime % 60 + '鍒嗛挓'
+        } else {
+          item.workTotalTimeT = item.workTotalTime
+        }
+      }
+      item.rate = ((item.workTotalTime / item.openTotalTime) * 30).toFixed(0)
+      return item
+    })
+  })
+}
+
+const dataList3 = ref([])
+const activeTab3 = ref(1)
+const tabClick3 = (val) => {
+  activeTab3.value = val
+  getData3()
+}
+const getData3 = () => {
+  cnworkEfficiency({ type: activeTab3.value }).then(res => {
+    const result = res.data
+    dataList3.value = result
+    initEchart2()
+  })
+}
+const data4 = ref({})
+const getData4 = () => {
+  cncenterData().then(res => {
+    const result = res.data
+    data4.value = result
+  })
+}
+const dataList5 = ref([])
+const getData5 = () => {
+  cnplatformWorkData().then(res => {
+    const result = res.data || []
+    dataList5.value = result.map(i => {
+      i.statusTemp = i.status == 0 ? '浣滀笟涓�' : i.status == 1 ? '绌洪棽涓�' : '浣滀笟瓒呮椂'
+      if (i.workTime) {
+        if (item.workTime > 60) {
+          item.workTime = (item.workTime / 60).toFixed(0) + 'h' + item.workTime % 60 + 'm'
+        } else {
+          item.workTime = item.workTime
+        }
+      }
+      i.finishTime = dayjs(i.finishTime).format('HH:mm')
+      return i
+    })
+  })
+}
+
+const data6 = ref({})
+const getData6 = () => {
+  cncarWorkSituation().then(res => {
+    const result = res.data
+    data6.value = result
+    initEchart3()
+  })
+}
 
 
 onMounted(() => {
   // initEnergy()
-  initEchart1()
-  initEchart2()
-  initEchart3()
+  getData1()
+  getData2()
+  getData3()
+  getData4()
+  getData5()
+  getData6()
+
+  // initEchart1()
+  // initEchart2()
+  // initEchart3()
 })
 
 
@@ -613,7 +705,6 @@
     .left_box_one {
       width: 100%;
       margin-bottom: 20px;
-      border: 1px solid;
 
       .car_static {
         display: flex;
@@ -692,7 +783,6 @@
       .list {
         padding: 20px 24px 4px;
         height: 227px;
-        border: 1px solid;
 
         .line {
           display: flex;
@@ -715,15 +805,21 @@
           .id_card {
             color: #DBEAEA;
             font-weight: 500;
-            margin-right: 14px;
+            margin-right: 2px;
             font-size: 14px;
+            width: 80px;
+            overflow: hidden;
+            white-space: nowrap;
+            text-overflow: ellipsis;
           }
 
           .num {
             font-weight: 500;
+            width: 82px;
+            text-align: right;
             font-size: 13px;
             color: #DBEAEA;
-            margin-left: 15px;
+            margin-left: 2px;
           }
 
           .wrap {
@@ -1161,6 +1257,10 @@
       margin: 0 6px;
     }
 
+    .tab {
+      cursor: pointer;
+    }
+
     .active {
       color: #0094eb;
     }
diff --git a/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java b/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java
index 19d048f..3f39d61 100644
--- a/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java
+++ b/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java
@@ -1209,9 +1209,13 @@
         response.setPrefix(prefix);
 
         if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
-            String path = systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.FTP_RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.PROJECTS).getCode();
+            String path = systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.FTP_RESOURCE_PATH)
+                    .getCode() + systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.PROJECTS).getCode();
+            String localPath = systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.FTP_LOCAL_RESOURCE_PATH)
+                    .getCode() + systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.PROJECTS).getCode();
             for (Multifile multifile:multifileList) {
                 multifile.setFileurlFull(path + multifile.getFileurl());
+                multifile.setLocalFileurlFull(localPath + multifile.getFileurl());
             }
             response.setMultifileList(multifileList);
         }
diff --git a/server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java b/server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java
index 1032835..83fcdca 100644
--- a/server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java
+++ b/server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java
@@ -10,6 +10,7 @@
 import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.utils.Constants;
 import com.doumee.dao.system.dto.LoginDTO;
+import com.doumee.dao.system.dto.LoginPhoneDTO;
 import com.doumee.service.common.CaptchaService;
 import com.doumee.service.system.SystemLoginService;
 import com.doumee.service.system.SystemUserService;
@@ -70,6 +71,26 @@
             return ApiResponse.failed(ResponseStatus.SERVER_ERROR);
         }
     }
+
+
+    @PreventRepeat(limit = 10, lockTime = 10000)
+    @ApiOperation("鐭俊楠岃瘉鐮佺櫥褰�")
+    @PostMapping("/loginByPhone")
+    @LoginNoRequired
+    public ApiResponse<String> loginByPhone (@Validated @RequestBody LoginPhoneDTO dto, ServerWebExchange serverWebExchange) {
+        try {
+            ServerHttpRequest request = serverWebExchange.getRequest();
+            LoginUserInfo user = systemLoginService.loginByPhone(dto,request);
+            String token = jwtTokenUtil.generateToken(user);
+            return ApiResponse.success(token);
+        }catch (BusinessException e){
+            return ApiResponse.failed(e.getCode(),e.getMessage());
+        }catch (Exception e){
+            e.printStackTrace();
+            return ApiResponse.failed(ResponseStatus.SERVER_ERROR);
+        }
+    }
+
 
 
     @PreventRepeat(limit = 10, lockTime = 10000)
@@ -136,6 +157,9 @@
     public ApiResponse<String> logout(@RequestHeader(Constants.HEADER_USER_TOKEN) String oldToken){
         try {
              jwtTokenUtil.logout(oldToken);
+
+
+
         }catch (BusinessException e){
             return ApiResponse.failed(e.getCode(),e.getMessage());
         }catch (Exception e){
@@ -145,6 +169,8 @@
 
     }
 
+
+
     /**
      * 鍒锋柊JWT浠ょ墝,鐢ㄦ棫鐨勪护鐗屾崲鏂扮殑浠ょ墝
      */
diff --git a/server/system_service/src/main/java/com/doumee/api/system/SystemController.java b/server/system_service/src/main/java/com/doumee/api/system/SystemController.java
index 638c2a7..3d7543e 100644
--- a/server/system_service/src/main/java/com/doumee/api/system/SystemController.java
+++ b/server/system_service/src/main/java/com/doumee/api/system/SystemController.java
@@ -1,25 +1,45 @@
 package com.doumee.api.system;
 
 import com.doumee.api.BaseController;
+import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.biz.system.SystemUserBiz;
 import com.doumee.core.annotation.pr.PreventRepeat;
 import com.doumee.core.annotation.trace.Trace;
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.model.LoginUserInfo;
+import com.doumee.core.utils.Constants;
 import com.doumee.dao.system.dto.LoginDTO;
 import com.doumee.dao.system.dto.UpdatePwdDto;
 import com.doumee.service.system.SystemLoginService;
+import com.hikvision.artemis.sdk.ArtemisHttpUtil;
+import com.hikvision.artemis.sdk.util.HttpUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.util.EntityUtils;
 import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.subject.Subject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
-
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.util.EntityUtils;
 import javax.servlet.http.HttpServletRequest;
 
 import org.springframework.web.bind.annotation.*;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
 
 /**
  * @author Eva.Caesar Liu
@@ -38,6 +58,7 @@
     @Autowired
     private SystemLoginService systemLoginService;
 
+
     @PreventRepeat(limit = 10, lockTime = 10000)
     @ApiOperation("鐧诲綍")
     @PostMapping("/login")
@@ -54,6 +75,8 @@
         return ApiResponse.success(null);
     }
 
+
+
     @Trace(withRequestParameters = false)
     @ApiOperation("淇敼褰撳墠鐢ㄦ埛瀵嗙爜")
     @PostMapping("/updatePwd")
diff --git a/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java b/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java
index 20e8eda..db49413 100644
--- a/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java
+++ b/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java
@@ -165,6 +165,16 @@
                 throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "宸ュ彿銆�"+systemUser.getEmpNo()+"銆戝凡瀛樺湪");
             }
         }
+       //楠岃瘉鎵嬫満鍙�
+        if (StringUtils.isNotBlank(systemUser.getMobile())) {
+            queryUserDto = new SystemUser();
+            queryUserDto.setDeleted(Boolean.FALSE);
+            queryUserDto.setMobile(systemUser.getMobile());
+            user = systemUserService.findOne(queryUserDto);
+            if (user != null) {
+                throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "鎵嬫満鍙枫��"+systemUser.getMobile()+"銆戝凡瀛樺湪");
+            }
+        }
         // 鐢熸垚瀵嗙爜鐩�
         String salt = RandomStringUtils.randomAlphabetic(6);
         // 鐢熸垚瀵嗙爜
@@ -233,6 +243,16 @@
                 throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "宸ュ彿銆�"+systemUser.getEmpNo()+"銆戝凡瀛樺湪");
             }
         }
+        //楠岃瘉鎵嬫満鍙�
+        if (StringUtils.isNotBlank(systemUser.getMobile())) {
+            queryUserDto = new SystemUser();
+            queryUserDto.setMobile(systemUser.getMobile());
+            queryUserDto.setDeleted(Boolean.FALSE);
+            user = systemUserService.findOne(queryUserDto);
+            if (user != null && !user.getId().equals(systemUser.getId())) {
+                throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "鎵嬫満鍙枫��"+systemUser.getMobile()+"銆戝凡瀛樺湪");
+            }
+        }
         // 淇敼鐢ㄦ埛
         systemUserService.updateById(systemUser);
         // 璁剧疆閮ㄩ棬
diff --git a/server/system_service/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java b/server/system_service/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
index f88920c..8e539a4 100644
--- a/server/system_service/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
+++ b/server/system_service/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
@@ -1,28 +1,41 @@
 package com.doumee.config.jwt;
 
 import com.alibaba.fastjson.JSONObject;
+import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.HttpsUtil;
 import io.jsonwebtoken.Jwts;
 import io.jsonwebtoken.SignatureAlgorithm;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.util.EntityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
+import java.io.IOException;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
 @Component
+@Slf4j
 public class JwtTokenUtil {
 
     @Autowired
     private RedisTemplate<String,Object> redisTemplate;
     @Resource
     private JwtProperties jwtProperties;
-
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz ;
 
     /**
      * 鐢熸垚token浠ょ墝
@@ -113,12 +126,50 @@
      */
     public void logout(String token) {
         try {
+            //鐧诲嚭娴峰悍绯荤粺鏁版嵁
+            LoginUserInfo loginUserInfo = this.getUserInfoByToken(token);
+            String url = systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.HK_HTTPS).getCode() +
+                    systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.HK_HOST).getCode() +
+                    systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.LOGIN_OUT_URL).getCode();
+            if(StringUtils.isNotBlank(loginUserInfo.getHkMenuToken())){
+                log.info("璋冭捣娴峰悍閫�鍑虹櫥褰�=======================>"+url+"?token="+loginUserInfo.getHkMenuToken());
+//                this.hkLoginOut(url+"?token="+loginUserInfo.getHkMenuToken());
+                HttpsUtil.get(url+"?token="+loginUserInfo.getHkMenuToken(),true);
+            }
             redisTemplate.delete(Constants.REDIS_TOKEN_KEY+token);//鍒犻櫎鑰佺殑token
+
         } catch (Exception e) {
             e.printStackTrace();
         }
     }
 
+
+    public void hkLoginOut(String url){
+        try {
+            // 鍒涘缓HttpClient瀵硅薄
+            HttpClient httpClient = HttpClientBuilder.create().build();
+            // 鍒涘缓HttpGet瀵硅薄锛屾寚瀹氳璁块棶鐨刄RL鍦板潃
+            HttpGet httpGet = new HttpGet(url);
+            // 鍙戦�丟ET璇锋眰锛岃幏鍙栧搷搴�
+            HttpResponse response = httpClient.execute(httpGet);
+            // 鑾峰彇鍝嶅簲鐘舵�佺爜
+            int statusCode = response.getStatusLine().getStatusCode();
+            // 鍒ゆ柇璇锋眰鏄惁鎴愬姛
+            if (statusCode == 200) {
+                // 鑾峰彇鍝嶅簲鍐呭
+                HttpEntity entity = response.getEntity();
+                String responseContent = EntityUtils.toString(entity, "UTF-8");
+                System.out.println(responseContent);
+                log.info("璋冭捣娴峰悍閫�鍑虹櫥褰曡繑鍥炰俊鎭�=======================>"+responseContent);
+            } else {
+                System.out.println("璇锋眰澶辫触锛屽搷搴旂爜锛�" + statusCode);
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+
     /**
      * 楠岃瘉浠ょ墝
      *
diff --git a/server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java b/server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java
index ba4a587..b635d74 100644
--- a/server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java
+++ b/server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java
@@ -40,6 +40,7 @@
     private Integer needChangePwd;
     private String mobile;
     private String sessionId;
+    private String hkMenuToken;
 
     private Date loginDate;
     @ApiModelProperty(value = "璐︽埛鏉ユ簮锛�0=鍚庡彴娣诲姞 锛� 2=鍙告満娉ㄥ唽")
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 275254c..75f7777 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
@@ -39,6 +39,7 @@
     public static final String LED_CONTENT_SPEED ="LED_CONTENT_SPEED" ;
     public static final String HK_HOST ="HK_HOST" ;
     public static final String HK_APPKEY ="HK_APPKEY" ;
+    public static final String LOGIN_OUT_URL ="LOGIN_OUT" ;
     public static final String HK_APPSECRET ="HK_APPSECRET" ;
     public static final String HK_HTTPS ="HK_HTTPS" ;
     public static final String HK_PUSH_URL = "HK_PUSH_URL";
@@ -46,6 +47,8 @@
     public static final String HK_ROOTORG_NAME ="HK_ROOTORG_NAME" ;
     public static final String PLATFORM ="PLATFORM" ;
     public static final String POWER_MINUTE ="POWER_MINUTE" ;
+    public static final String SPECIAL_COMPANY_ID ="SPECIAL_COMPANY_ID" ;
+
     public static final String RESERVATION_TOTAL_NUM ="RESERVATION_TOTAL_NUM" ;
     public static final String SIGN_IN_PLACE_LAT ="SIGN_IN_PLACE_LAT" ;
     public static final String SIGN_IN_PLACE_LNT ="SIGN_IN_PLACE_LNT" ;
@@ -104,6 +107,7 @@
     public static final String FTP_USERNAME ="FTP_USERNAME" ;
     public static final String FTP_PWD ="FTP_PWD" ;
     public static final String FTP_RESOURCE_PATH ="FTP_RESOURCE_PATH" ;
+    public static final String FTP_LOCAL_RESOURCE_PATH ="FTP_LOCAL_RESOURCE_PATH" ;
     public static final String ERP_ORGLIST_URL ="ERP_ORGLIST_URL" ;
     public static final String ERP_USERLIST_URL ="ERP_USERLIST_URL" ;
     public static final String ERP_APPROVE_URL ="ERP_APPROVE_URL" ;
@@ -864,7 +868,7 @@
         CALLING(1, "鍙彿涓�","${param}璇峰墠寰�${param2}绛夊緟浣滀笟"),
         DONE(2, "浣滀笟瀹屾垚","${param}浣滀笟瀹屾垚锛岃灏藉揩椹剁" ),
         WRONG_IN(3, "閿欒鍋滈潬","${param}鏈堝彴鍋滈潬閿欒锛岃灏藉揩椹剁" ),
-        TIMEOUT_IN(4, "瓒呮椂鍋滈潬","${param}鏈堝彴鍋滈潬瓒呮椂锛岃灏藉揩椹剁璇峰敖蹇┒绂�" ),
+        TIMEOUT_IN(4, "瓒呮椂鍋滈潬","${param}鏈堝彴鍋滈潬瓒呮椂锛岃灏藉揩椹剁" ),
         TIMEOUT_WORK(5, "浣滀笟瓒呮椂","${param}浣滀笟瓒呮椂" ),
         ;
 
@@ -879,6 +883,7 @@
             this.info = info;
             this.name = name;
         }
+
         public static String getName(int index) {
             for (PlatformBroadcastContent c : PlatformBroadcastContent.values()) {
                 if (c.getKey() == index) {
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/SmsEmailMapper.java b/server/system_service/src/main/java/com/doumee/dao/business/dao/SmsEmailMapper.java
similarity index 85%
rename from server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/SmsEmailMapper.java
rename to server/system_service/src/main/java/com/doumee/dao/business/dao/SmsEmailMapper.java
index b10c7aa..a6d3fcc 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/SmsEmailMapper.java
+++ b/server/system_service/src/main/java/com/doumee/dao/business/dao/SmsEmailMapper.java
@@ -1,4 +1,4 @@
-package com.doumee.dao.business;
+package com.doumee.dao.business.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.SmsEmail;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/SmsEmail.java b/server/system_service/src/main/java/com/doumee/dao/business/model/SmsEmail.java
similarity index 100%
rename from server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/SmsEmail.java
rename to server/system_service/src/main/java/com/doumee/dao/business/model/SmsEmail.java
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginPhoneDTO.java b/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginPhoneDTO.java
new file mode 100644
index 0000000..4646b5f
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginPhoneDTO.java
@@ -0,0 +1,24 @@
+package com.doumee.dao.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+/**
+ * @author Eva.Caesar Liu
+ * @date 2023/02/14 11:14
+ */
+@Data
+@ApiModel("鎵嬫満鍙风櫥褰曞弬鏁�")
+public class LoginPhoneDTO implements Serializable {
+
+    @NotBlank(message = "鎵嬫満鍙蜂笉鑳戒负绌�")
+    @ApiModelProperty(value = "鎵嬫満鍙�")
+    private String phone;
+    @NotBlank(message = "楠岃瘉鐮佷笉鑳戒负绌�")
+    @ApiModelProperty(value = "楠岃瘉鐮�")
+    private String code;
+}
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/dto/QuerySystemUserDTO.java b/server/system_service/src/main/java/com/doumee/dao/system/dto/QuerySystemUserDTO.java
index ffefc01..d313c60 100644
--- a/server/system_service/src/main/java/com/doumee/dao/system/dto/QuerySystemUserDTO.java
+++ b/server/system_service/src/main/java/com/doumee/dao/system/dto/QuerySystemUserDTO.java
@@ -40,6 +40,7 @@
 
     @ApiModelProperty(value = "瑙掕壊ID")
     private Integer roleId;
+
     @ApiModelProperty(value = "浼佷笟缂栫爜")
     private Integer companyId;
 
@@ -52,5 +53,11 @@
     @ApiModelProperty(value = "鐢ㄦ埛绫诲瀷锛�0=鐩稿叧鏂癸紱1=鍐呴儴" ,hidden = true)
     private Integer companyType;
 
+    @ApiModelProperty(value = "鏄惁鏌ヨ鍥哄畾浜哄憳锛�0=鍚︼紱1=鏄�" )
+    private Integer querySpecial;
+
+    @ApiModelProperty(value = "鏄惁鏌ヨ鍥哄畾浜哄憳缁勭粐涓婚敭" ,hidden = true)
+    private String companySpecialId;
+
 
 }
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/model/Multifile.java b/server/system_service/src/main/java/com/doumee/dao/system/model/Multifile.java
index cfeb7eb..adfdfc3 100644
--- a/server/system_service/src/main/java/com/doumee/dao/system/model/Multifile.java
+++ b/server/system_service/src/main/java/com/doumee/dao/system/model/Multifile.java
@@ -79,4 +79,10 @@
     @TableField(exist = false)
     private String fileurlFull;
 
+
+    @ApiModelProperty(value = "鍐呯綉鏂囦欢鍦板潃")
+    @TableField(exist = false)
+    private String localFileurlFull;
+
+
 }
diff --git a/server/system_service/src/main/java/com/doumee/service/system/SystemLoginService.java b/server/system_service/src/main/java/com/doumee/service/system/SystemLoginService.java
index f6ebaca..dc28a94 100644
--- a/server/system_service/src/main/java/com/doumee/service/system/SystemLoginService.java
+++ b/server/system_service/src/main/java/com/doumee/service/system/SystemLoginService.java
@@ -3,6 +3,7 @@
 import com.doumee.core.model.LoginUserInfo;
 import com.doumee.dao.system.dto.LoginByOpenidDTO;
 import com.doumee.dao.system.dto.LoginDTO;
+import com.doumee.dao.system.dto.LoginPhoneDTO;
 import org.springframework.http.server.reactive.ServerHttpRequest;
 
 import javax.servlet.http.HttpServletRequest;
@@ -23,6 +24,9 @@
 
     LoginUserInfo loginByPasswordNew (LoginDTO dto, ServerHttpRequest request);
 
+    LoginUserInfo loginByPhone(LoginPhoneDTO dto, ServerHttpRequest request);
+
+
     LoginUserInfo driverLogin(LoginDTO dto, ServerHttpRequest request);
     /**
      * 鏍规嵁 openId鐧诲綍
diff --git a/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java b/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
index 0519b92..b9b8bf2 100644
--- a/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
+++ b/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
@@ -1,5 +1,6 @@
 package com.doumee.service.system.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.doumee.config.jwt.JwtTokenUtil;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.LoginUserInfo;
@@ -7,9 +8,12 @@
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.dao.CompanyMapper;
+import com.doumee.dao.business.dao.SmsEmailMapper;
 import com.doumee.dao.business.model.Company;
+import com.doumee.dao.business.model.SmsEmail;
 import com.doumee.dao.system.dto.LoginByOpenidDTO;
 import com.doumee.dao.system.dto.LoginDTO;
+import com.doumee.dao.system.dto.LoginPhoneDTO;
 import com.doumee.dao.system.model.*;
 import com.doumee.service.common.CaptchaService;
 import com.doumee.service.system.*;
@@ -43,6 +47,9 @@
     @Lazy
     @Autowired
     private SystemUserService systemUserService;
+
+    @Autowired
+    private SmsEmailMapper smsEmailMapper;
 
     @Lazy
     @Autowired
@@ -172,6 +179,80 @@
 
 
 
+
+
+    @Override
+    public LoginUserInfo loginByPhone(LoginPhoneDTO dto, ServerHttpRequest request) {
+        SystemLoginLog loginLog = new SystemLoginLog();
+        loginLog.setLoginUsername(dto.getPhone());
+        loginLog.setLoginTime(new Date());
+        loginLog.setSystemVersion(systemVersion);
+        loginLog.setLocation(Utils.Location.getLocationString(loginLog.getIp()));
+        if(request!=null&&request.getHeaders()!=null && request.getHeaders().size()>0){
+            loginLog.setIp(Utils.User_Client.getIP(request));
+            loginLog.setPlatform(Utils.User_Client.getPlatform(request));
+            loginLog.setClientInfo(Utils.User_Client.getBrowser(request));
+            loginLog.setOsInfo(Utils.User_Client.getOS(request));
+        }
+        loginLog.setServerIp(Utils.Server.getIP());
+
+
+        // 鏍规嵁鐢ㄦ埛鍚嶆煡璇㈢敤鎴峰璞�
+        SystemUser queryDto = new SystemUser();
+        queryDto.setMobile(dto.getPhone());
+        queryDto.setDeleted(Boolean.FALSE);
+        SystemUser user = systemUserService.findOne(queryDto);
+        if (user == null) {
+            throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT);
+        }
+        if(!Constants.equalsInteger(user.getSource(),Constants.ZERO)){
+            throw new BusinessException(ResponseStatus.NO_ALLOW_LOGIN);
+        }
+
+        if(isDebug == null  || !isDebug){
+            //楠岃瘉 鐭俊鐮�
+            SmsEmail model = smsEmailMapper.selectOne(new QueryWrapper<SmsEmail>().lambda()
+                    .eq(SmsEmail::getType, Constants.ZERO)
+                    .eq(SmsEmail::getPhone, dto.getPhone())
+                    .eq(SmsEmail::getRemark, dto.getCode())
+                    .eq(SmsEmail::getIsdeleted, Constants.ZERO)
+            );
+            if(model == null){
+                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝楠岃瘉鐮佷笉姝g‘锛岃閲嶆柊鍙戦�佸啀璇曪紒");
+            }
+            if(!Constants.equalsInteger(model.getStatus(),Constants.ZERO)){
+                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝楠岃瘉鐮佸凡澶辨晥锛岃閲嶆柊鍙戦�佸啀璇曪紒");
+            }
+            if(model.getCreateDate() !=null &&
+                    System.currentTimeMillis() - model.getCreateDate().getTime() > 3*60*1000){
+                model.setStatus(Constants.ONE);
+                model.setEditDate(new Date());
+                smsEmailMapper.updateById(model);
+                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝楠岃瘉鐮佸凡澶辨晥锛岃閲嶆柊鍙戦�佸啀璇晘");
+            }
+            model.setStatus(Constants.ONE);
+            model.setEditDate(new Date());
+            smsEmailMapper.updateById(model);
+        }
+
+        Company company = new Company();
+        if(Objects.nonNull(user.getCompanyId())){
+            company = companyMapper.selectById(user.getCompanyId());
+        }
+        // 鑾峰彇鐧诲綍鐢ㄦ埛淇℃伅
+        List<SystemRole> roles = systemRoleService.findByUserId(user.getId());
+        List<SystemPermission> permissions = systemPermissionService.findByUserId(user.getId());
+
+        SystemRole rt = new SystemRole();
+        rt.setDeleted(Boolean.FALSE);
+        //鏁版嵁閮ㄩ棬鏉冮檺闆嗗悎
+        user.setCompanyIdList(systemDataPermissionService.selectHighRole(new SystemDataPermission(),rt,user));
+
+        LoginUserInfo userInfo = LoginUserInfo.from(user, roles, permissions,company,null);
+        return  userInfo;
+    }
+
+
     @Override
     public LoginUserInfo driverLogin(LoginDTO dto, ServerHttpRequest request) {
         SystemLoginLog loginLog = new SystemLoginLog();
diff --git a/server/system_service/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java b/server/system_service/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java
index 347f4d2..acd5a2b 100644
--- a/server/system_service/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java
+++ b/server/system_service/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java
@@ -32,6 +32,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -140,6 +141,15 @@
             List<Integer> collect = list.stream().map(s -> s.getId()).collect(Collectors.toList());
             pageWrap.getModel().setDepartmentIds(collect);
         }*/
+
+        //鏌ヨ鐗规畩鐨�42浜洪厤缃�
+        if(Objects.nonNull(pageWrap.getModel()) && Constants.equalsInteger(pageWrap.getModel().getQuerySpecial(),Constants.ONE)){
+            String companySpecialId = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SPECIAL_COMPANY_ID).getCode();
+            if(StringUtils.isNotBlank(companySpecialId)){
+                pageWrap.getModel().setCompanySpecialId(companySpecialId);
+            }
+        }
+
         // 鎵ц鏌ヨ
         PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity());
         List<SystemUserListVO> userList = systemUserMapper.selectManageList(pageWrap.getModel(), pageWrap.getOrderByClause());
diff --git a/server/system_service/src/main/resources/mappers/SystemUserMapper.xml b/server/system_service/src/main/resources/mappers/SystemUserMapper.xml
index 16a7154..1554fc5 100644
--- a/server/system_service/src/main/resources/mappers/SystemUserMapper.xml
+++ b/server/system_service/src/main/resources/mappers/SystemUserMapper.xml
@@ -75,6 +75,9 @@
       <if test="dto.companyType != null ">
         AND  sd.`type` = #{dto.companyType}
       </if>
+      <if test="dto.querySpecial != null and dto.querySpecial = 1 ">
+            AND find_in_set(#{dto.companySpecialId},REPLACE(sd.company_path,"/",","))
+      </if>
     </where>
     ${orderByClause}
   </select>
diff --git a/server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java b/server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java
index 289aec6..090e834 100644
--- a/server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java
+++ b/server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java
@@ -67,12 +67,19 @@
     @ApiOperation("銆愯瀹㈢郴缁熴�戝畾鏃舵洿鏂板井淇″叕浼楀彿accesstoken")
     @GetMapping("/timer/wxtoken/updateWxAccessToken")
     ApiResponse updateWxAccessToken();
-    @ApiOperation("銆愭暟瀛楀寲鏈堝彴銆戞湀鍙颁綔涓氭姤璀︿笟鍔�")
-    @GetMapping("/timer/platformJob/platformJobTimer")
-    ApiResponse platformJobTimer();
     @ApiOperation("銆愯瀹㈢郴缁熴�戣瀹㈡暟鎹嵆灏嗚秴鏃堕璀�")
     @GetMapping("/timer/visit/visitTimeOut")
     ApiResponse visitTimeOut() ;
+    @ApiOperation("銆愭暟瀛楀寲鏈堝彴銆戞湀鍙板仠闈犺秴鏃舵姤璀︿笟鍔�")
+    @GetMapping("/timer/platformJob/platformJobTimer")
+    ApiResponse platformJobTimer();
+    @ApiOperation("銆愭暟瀛楀寲鏈堝彴銆戞湀鍙颁綔涓氳秴鏃舵姤璀︿笟鍔�")
+    @GetMapping("/timer/platformJob/platformJobWorkTimeOut")
+    ApiResponse platformJobWorkTimeOut();
+    @ApiOperation("銆愭暟瀛楀寲鏈堝彴銆戞湀鍙扮瓑寰呬綔涓氳秴鏃朵笟鍔�")
+    @GetMapping("/timer/platformJob/platformJobWaitTimeOut")
+    ApiResponse platformJobWaitTimeOut();
+
 
 
 }
diff --git a/server/visits/admin_timer/src/main/java/com/doumee/api/PlatformJobController.java b/server/visits/admin_timer/src/main/java/com/doumee/api/PlatformJobController.java
index 9159418..228006e 100644
--- a/server/visits/admin_timer/src/main/java/com/doumee/api/PlatformJobController.java
+++ b/server/visits/admin_timer/src/main/java/com/doumee/api/PlatformJobController.java
@@ -36,14 +36,27 @@
     private PlatformJobService platformJobService;
 
 
-    @ApiOperation("鏈堝彴浣滀笟鎶ヨ涓氬姟")
+    @ApiOperation("鏈堝彴鍋滈潬瓒呮椂鎶ヨ涓氬姟")
     @GetMapping("/platformJobTimer")
     public ApiResponse platformJobTimer() {
         platformJobService.timeOutReport();
-        platformJobService.timeOutCallIn();
-        platformJobService.timeOutWork();
-        return ApiResponse.success("鏈堝彴浣滀笟鎶ヨ涓氬姟");
+        return ApiResponse.success("鏈堝彴鍋滈潬瓒呮椂鎶ヨ涓氬姟");
     }
 
 
+    @ApiOperation("鏈堝彴浣滀笟瓒呮椂鎶ヨ涓氬姟")
+    @GetMapping("/platformJobWorkTimeOut")
+    public ApiResponse platformJobWorkTimeOut() {
+        platformJobService.timeOutWork();
+        return ApiResponse.success("鏈堝彴浣滀笟瓒呮椂鎶ヨ涓氬姟");
+    }
+
+
+    @ApiOperation("鏈堝彴绛夊緟浣滀笟瓒呮椂涓氬姟")
+    @GetMapping("/platformJobWaitTimeOut")
+    public ApiResponse platformJobWaitTimeOut() {
+        platformJobService.timeOutCallIn();
+        return ApiResponse.success("鏈堝彴绛夊緟浣滀笟瓒呮椂涓氬姟");
+    }
+
 }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CarUseBookCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CarUseBookCloudController.java
index 575fb48..06a55e7 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CarUseBookCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CarUseBookCloudController.java
@@ -4,6 +4,8 @@
 import com.doumee.config.annotation.CloudRequiredPermission;
 import com.doumee.core.annotation.excel.ExcelExporter;
 import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
@@ -19,6 +21,7 @@
 
 import javax.servlet.http.HttpServletResponse;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * @author 姹熻箘韫�
@@ -39,6 +42,9 @@
     public ApiResponse create(@RequestBody CarUseBook carUseBook,@RequestHeader(Constants.HEADER_USER_TOKEN) String token)  throws Exception {
         LoginUserInfo loginUserInfo = getLoginUser(token);
         carUseBook.setCreator(loginUserInfo.getId());
+        if(Objects.isNull(loginUserInfo.getMemberId())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炲唴閮ㄤ汉鍛樻棤娉曡繘琛岃鎿嶄綔");
+        }
         carUseBook.setMemberId(loginUserInfo.getMemberId());
         return ApiResponse.success(carUseBookService.create(carUseBook));
     }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyCloudController.java
index 464f2bd..ec0beda 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyCloudController.java
@@ -103,6 +103,15 @@
         return ApiResponse.success(companyService.findPage(pageWrap));
     }
 
+    @ApiOperation("缁勭粐鍒楄〃")
+    @PostMapping("/list")
+    @CloudRequiredPermission("business:company:query")
+    public ApiResponse<List<Company>> list (@RequestBody Company company,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+        return ApiResponse.success(companyService.findList(company));
+    }
+
+
+
     @ApiOperation("缁勭粐鏍戞煡璇�")
     @GetMapping("/tree")
     @ApiImplicitParams({
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HiddenDangerCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HiddenDangerCloudController.java
index a4960d6..f6604e0 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HiddenDangerCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HiddenDangerCloudController.java
@@ -4,7 +4,10 @@
 import com.doumee.config.annotation.CloudRequiredPermission;
 import com.doumee.core.annotation.excel.ExcelExporter;
 import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
@@ -16,6 +19,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
+import java.util.Objects;
 
 /**
  * @author 姹熻箘韫�
@@ -34,7 +38,11 @@
     @PostMapping("/create")
     @CloudRequiredPermission("business:hiddendanger:create")
     public ApiResponse create(@RequestBody HiddenDanger hiddenDanger,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
-        hiddenDanger.setLoginUserInfo(this.getLoginUser(token));
+        LoginUserInfo loginUserInfo = this.getLoginUser(token);
+        if(Objects.isNull(loginUserInfo.getMemberId())||Objects.isNull(loginUserInfo)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠璐︽埛鏃犳硶杩涜璇ユ搷浣�");
+        }
+        hiddenDanger.setLoginUserInfo(loginUserInfo);
         return ApiResponse.success(hiddenDangerService.create(hiddenDanger));
     }
 
@@ -58,7 +66,11 @@
     @PostMapping("/updateById")
     @CloudRequiredPermission("business:hiddendanger:update")
     public ApiResponse updateById(@RequestBody HiddenDanger hiddenDanger,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
-        hiddenDanger.setLoginUserInfo(this.getLoginUser(token));
+        LoginUserInfo loginUserInfo = this.getLoginUser(token);
+        if(Objects.isNull(loginUserInfo.getMemberId())||Objects.isNull(loginUserInfo)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠璐︽埛鏃犳硶杩涜璇ユ搷浣�");
+        }
+        hiddenDanger.setLoginUserInfo(loginUserInfo);
         hiddenDangerService.updateById(hiddenDanger);
         return ApiResponse.success(null);
     }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java
index 00bda8d..fb6eeb0 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java
@@ -1,9 +1,11 @@
 package com.doumee.cloud.admin;
 
+import com.alibaba.fastjson.JSONObject;
 import com.doumee.api.BaseController;
 import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.config.annotation.CloudRequiredPermission;
 import com.doumee.config.annotation.LoginNoRequired;
+import com.doumee.config.jwt.JwtProperties;
 import com.doumee.core.annotation.pr.PreventRepeat;
 import com.doumee.core.haikang.model.param.BaseResponse;
 import com.doumee.core.haikang.model.param.request.*;
@@ -35,10 +37,8 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.BufferedReader;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
 
 /**
  * @author 姹熻箘韫�
@@ -71,6 +71,8 @@
     @Autowired
     private RedisTemplate<String,Object> redisTemplate;
 
+    @Autowired
+    private JwtProperties jwtProperties;
 
     @PreventRepeat
     @ApiOperation("銆愭捣搴枫�戝叏閲忓悓姝ユ湀鍙颁俊鎭帴鍙�")
@@ -241,9 +243,34 @@
         String url = systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.HK_HTTPS).getCode() +
         systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.HK_HOST).getCode()
                  + HKService.getMenuUrl(type,hkToken);
+        try {
+            if(redisTemplate!=null&& jwtProperties!=null){
+                loginUserInfo.setHkMenuToken(hkToken);
+                redisTemplate.opsForValue().set(Constants.REDIS_TOKEN_KEY+token, JSONObject.toJSONString(loginUserInfo),jwtProperties.getExpiration(), TimeUnit.MILLISECONDS);
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+
         return ApiResponse.success( url);
     }
 
+    @ApiOperation(value = "鑾峰彇瀹夐槻骞冲彴绯荤粺鍏嶅瘑鑿滃崟閰嶇疆" )
+    @GetMapping("/getHkMenuConfig")
+    public ApiResponse<List<Integer>> getHkMenuConfig(@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+        LoginUserInfo loginUserInfo = getLoginUser(token);
+        List<Integer> menuConfigList = new ArrayList<>();
+        if(Objects.nonNull(loginUserInfo) && StringUtils.isNotBlank(loginUserInfo.getUsername())){
+            menuConfigList = hkSyncPlatformsService.getMenuConfig(loginUserInfo.getUsername());
+        }
+        return ApiResponse.success(menuConfigList);
+    }
+
+
+
+
+
+
     @ApiOperation("銆愭捣搴枫�戣缃甃ED灞忔枃妗�")
     @PostMapping("/setLedContent")
     public ApiResponse<List<Map<String,Object>>> setLedContent(@RequestBody TransparentChannelSingleRequest body  , HttpServletResponse response) {
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformBooksCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformBooksCloudController.java
index f619326..6223da1 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformBooksCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformBooksCloudController.java
@@ -4,6 +4,8 @@
 import com.doumee.config.annotation.CloudRequiredPermission;
 import com.doumee.core.annotation.excel.ExcelExporter;
 import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageWrap;
@@ -25,6 +27,7 @@
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * @author 姹熻箘韫�
@@ -118,6 +121,9 @@
     @PostMapping("/apply")
     public ApiResponse<Integer> apply (@RequestBody PlatformBooksApplyDTO platformBooksApplyDTO , @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         LoginUserInfo loginUserInfo = getLoginUser(token);
+        if(Objects.isNull(loginUserInfo.getMemberId())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炲唴閮ㄤ汉鍛樻棤娉曡繘琛岃鎿嶄綔");
+        }
         platformBooksApplyDTO.setUserId(loginUserInfo.getMemberId());
         platformBooksApplyDTO.setDriverId(loginUserInfo.getMemberId());
         return ApiResponse.success(platformBooksService.apply(platformBooksApplyDTO));
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/EnergyController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/EnergyController.java
new file mode 100644
index 0000000..cd0e8be
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/EnergyController.java
@@ -0,0 +1,129 @@
+package com.doumee.cloud.board;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.LoginNoRequired;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.web.response.platformReport.*;
+import io.swagger.annotations.*;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2024/10/28 13:42
+ */
+
+@Api(tags = "鑳借�楃湅鏉�")
+@RestController
+@Slf4j
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/board/api/energy")
+public class EnergyController extends BaseController {
+
+
+    @LoginNoRequired
+    @ApiOperation("涓績鏁版嵁")
+    @GetMapping("/centerData")
+    public ApiResponse<EnergyBoardVO> centerData() {
+        EnergyBoardVO data = new EnergyBoardVO();
+        Random random = new Random();
+        data.setSmokeBoxTotal(random.nextInt(20000));
+        data.setCarbon(new BigDecimal(random.nextInt(1000)));
+        data.setElectricityQuantity(random.nextInt(1000));
+        data.setElectricityYear(new BigDecimal(random.nextInt(10)));
+        data.setElectricityMonth(new BigDecimal(random.nextInt(10)));
+
+        data.setWaterQuantity(new BigDecimal(random.nextInt(1000)));
+        data.setWaterYear(new BigDecimal(random.nextInt(10)));
+        data.setWaterMonth(new BigDecimal(random.nextInt(10)));
+
+
+        data.setGasQuantity(new BigDecimal(random.nextInt(1000)));
+        data.setGasYear(new BigDecimal(random.nextInt(10)));
+        data.setGasMonth(new BigDecimal(random.nextInt(10)));
+
+        data.setOfficeQuantity(random.nextInt(20));
+        data.setPowerQuantity(random.nextInt(20));
+        data.setWorkHouseQuantity(random.nextInt(20));
+        data.setParkQuantity(random.nextInt(20));
+        data.setTodayElectricity(random.nextInt(20));
+        data.setMonthElectricity(random.nextInt(20));
+        data.setYesterdayElectricity(random.nextInt(20));
+        return ApiResponse.success(data);
+    }
+
+
+
+
+
+    @LoginNoRequired
+    @ApiOperation("瀹炴椂璐熻嵎鏇茬嚎")
+    @GetMapping("/loadCurve")
+    public ApiResponse<List<EnergyDataVO>> loadCurve() {
+        List<EnergyDataVO> loadCurveList = new ArrayList<>();
+        Random random = new Random();
+        for (int i = 1; i <= 23; i++) {
+            EnergyDataVO data = new EnergyDataVO();
+            data.setTimeData(StringUtils.leftPad(i+"",2,"0") +":00");
+            data.setEnergy(new BigDecimal(random.nextInt(200)));
+            loadCurveList.add(data);
+        }
+        return ApiResponse.success(loadCurveList);
+    }
+
+
+
+    @LoginNoRequired
+    @ApiOperation("鏈堣兘鑰椼�佹补鑰楀垎鏋�")
+    @GetMapping("/energyDataList")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "type", value = "鏌ヨ绫诲瀷锛�0=姘达紱1=姘旓紱2=鐢碉紱3=娌硅��", required = true),
+    })
+    public ApiResponse<List<EnergyDataVO>> energyDataList(@RequestParam Integer type) {
+        List<EnergyDataVO> energyDataVOList = new ArrayList<>();
+        Random random = new Random();
+        for (int i = 1; i <= 12; i++) {
+            EnergyDataVO data = new EnergyDataVO();
+            data.setTimeData(i +"鏈�");
+            data.setEnergy(new BigDecimal(random.nextInt(200)));
+            energyDataVOList.add(data);
+        }
+        return ApiResponse.success(energyDataVOList);
+    }
+
+
+    @LoginNoRequired
+    @ApiOperation("涓婃湀娌硅�楁帓琛�")
+    @GetMapping("/lastMonthOil")
+    public ApiResponse<List<OilDataVO>> lastMonthOil() {
+        List<OilDataVO> oilDataVOList = new ArrayList<>();
+        Random random = new Random();
+        BigDecimal maxOil = BigDecimal.ZERO;
+        BigDecimal lastOil = BigDecimal.ZERO;
+        for (int i = 1; i <= 7; i++) {
+            OilDataVO oilDataVO = new OilDataVO();
+            oilDataVO.setCarNo("鐨朅8" + random.nextInt(9) + random.nextInt(9) + random.nextInt(9) + random.nextInt(9));
+            if(i==1){
+                oilDataVO.setQuantity(new BigDecimal(random.nextInt(100)));
+                maxOil = oilDataVO.getQuantity();
+            }else{
+                oilDataVO.setQuantity(new BigDecimal(random.nextInt(lastOil.intValue())));
+            }
+            lastOil = oilDataVO.getQuantity();
+            oilDataVO.setMaxOil(maxOil);
+            oilDataVOList.add(oilDataVO);
+        }
+        return ApiResponse.success(oilDataVOList);
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/FightingAdminController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/FightingAdminController.java
new file mode 100644
index 0000000..7591eee
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/FightingAdminController.java
@@ -0,0 +1,126 @@
+package com.doumee.cloud.board;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.LoginNoRequired;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.PlatformLogMapper;
+import com.doumee.dao.business.model.PlatformLog;
+import com.doumee.dao.web.response.platformReport.*;
+import io.swagger.annotations.*;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2024/10/28 13:42
+ */
+
+@Api(tags = "娑堥槻绠℃帶澶у睆")
+@RestController
+@Slf4j
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/board/api/fightingAdmin")
+public class FightingAdminController extends BaseController {
+
+
+    @LoginNoRequired
+    @ApiOperation("涓績鏁版嵁")
+    @GetMapping("/centerData")
+    public ApiResponse<FightingAdminBoardVO> centerData() {
+        FightingAdminBoardVO data = new FightingAdminBoardVO();
+        Random random = new Random();
+        data.setOfflineDeviceNum(random.nextInt(20));
+        data.setOnlineDeviceNum(random.nextInt(20));
+        data.setErrDeviceNum(random.nextInt(20));
+        data.setShieldDeviceNum(random.nextInt(20));
+        data.setTodayDangerNum(random.nextInt(20));
+        data.setDealDangerNum(random.nextInt(20));
+        return ApiResponse.success(data);
+    }
+
+
+    @LoginNoRequired
+    @ApiOperation("浠婃棩鍚勭郴缁熻澶囩姸鎬佸強鍛婅鏁伴噺")
+    @GetMapping("/deviceAlarmData")
+    public ApiResponse<List<DeviceAlarmDataVO>> deviceAlarmData() {
+        List<DeviceAlarmDataVO> deviceAlarmDataVOList = new ArrayList<>();
+        Random random = new Random();
+        for (int i = 1; i <= 5; i++) {
+            DeviceAlarmDataVO deviceAlarmDataVO = new DeviceAlarmDataVO();
+            deviceAlarmDataVO.setDeviceTypeName("璁惧鍚嶇О_"+i);
+            deviceAlarmDataVO.setAlarmNum(random.nextInt(20));
+            deviceAlarmDataVO.setErrNum(random.nextInt(20));
+            deviceAlarmDataVO.setOfflineNum(random.nextInt(20));
+            deviceAlarmDataVO.setShieldNum(random.nextInt(20));
+            deviceAlarmDataVO.setStatusTotal(deviceAlarmDataVO.getAlarmNum() + deviceAlarmDataVO.getErrNum() + deviceAlarmDataVO.getOfflineNum() + deviceAlarmDataVO.getShieldNum());
+            deviceAlarmDataVOList.add(deviceAlarmDataVO);
+        }
+        return ApiResponse.success(deviceAlarmDataVOList);
+    }
+
+
+    @LoginNoRequired
+    @ApiOperation("鎶ヨ淇℃伅")
+    @GetMapping("/alarmData")
+    public ApiResponse<AlarmDataVO> alarmData() {
+        AlarmDataVO alarmDataVO = new AlarmDataVO();
+        Random random = new Random();
+        alarmDataVO.setTotalNum(random.nextInt(30));
+        alarmDataVO.setRealNum(random.nextInt(alarmDataVO.getTotalNum()));
+        alarmDataVO.setErrNum(random.nextInt(alarmDataVO.getRealNum()));
+        alarmDataVO.setLiftNum(random.nextInt(alarmDataVO.getErrNum()));
+        alarmDataVO.setProcessingNum(random.nextInt(alarmDataVO.getErrNum()));
+        return ApiResponse.success(alarmDataVO);
+    }
+
+
+
+    @LoginNoRequired
+    @ApiOperation("鍛婅澶勭悊鍒嗘瀽")
+    @GetMapping("/alarmHandleData")
+    public ApiResponse<List<AlarmHandleDataVO>> alarmHandleData(@RequestParam Integer type) {
+        List<AlarmHandleDataVO> alarmHandleDataVOList = new ArrayList<>();
+        Random random = new Random();
+        for (int i = 1; i <= 12; i++) {
+            AlarmHandleDataVO alarmHandleDataVO = new AlarmHandleDataVO();
+            alarmHandleDataVO.setMonthStr(i+"鏈�");
+            alarmHandleDataVO.setAlarmNum(random.nextInt(20));
+            alarmHandleDataVO.setErrNum(random.nextInt(20));
+            alarmHandleDataVO.setLiftNum(random.nextInt(20));
+            alarmHandleDataVO.setProcessingNum(random.nextInt(20));
+            alarmHandleDataVOList.add(alarmHandleDataVO);
+        }
+        return ApiResponse.success(alarmHandleDataVOList);
+    }
+
+
+    @LoginNoRequired
+    @ApiOperation("鏈勾娑堥槻璁惧/璁炬柦缁存姢鎯呭喌")
+    @GetMapping("/yearDeviceData")
+    public ApiResponse<YearDeviceDataVO> yearDeviceData() {
+        Random random = new Random();
+        YearDeviceDataVO yearDeviceDataVO = new YearDeviceDataVO();
+        yearDeviceDataVO.setMonthAddNum(random.nextInt(100));
+        yearDeviceDataVO.setPlanProtectTotal(random.nextInt(1000));
+        yearDeviceDataVO.setProtectNum(yearDeviceDataVO.getPlanProtectTotal());
+        return ApiResponse.success(yearDeviceDataVO);
+    }
+
+
+
+
+
+
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/OnSitDispatchController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/OnSitDispatchController.java
new file mode 100644
index 0000000..60dd0bc
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/OnSitDispatchController.java
@@ -0,0 +1,170 @@
+package com.doumee.cloud.board;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.LoginNoRequired;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.DateUtil;
+import com.doumee.dao.business.PlatformLogMapper;
+import com.doumee.dao.business.model.Platform;
+import com.doumee.dao.business.model.PlatformJob;
+import com.doumee.dao.business.model.PlatformLog;
+import com.doumee.dao.openapi.request.HkBaseTokenRequest;
+import com.doumee.dao.system.join.NoticesJoinMapper;
+import com.doumee.dao.web.response.platformReport.*;
+import com.doumee.service.business.PlatformJobService;
+import com.doumee.service.business.PlatformLogService;
+import io.swagger.annotations.*;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.*;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2024/10/28 13:42
+ */
+
+@Api(tags = "鍦哄唴璋冨害鐪嬫澘")
+@RestController
+@Slf4j
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/board/api/onSitDispatch")
+public class OnSitDispatchController extends BaseController {
+
+    @Autowired
+    private PlatformLogMapper platformLogMapper;
+
+
+
+    @LoginNoRequired
+    @ApiOperation("涓績鏁版嵁")
+    @GetMapping("/centerData")
+    public ApiResponse<OnSitDispatchBoardVO> centerData() {
+        OnSitDispatchBoardVO data = new OnSitDispatchBoardVO();
+        data.setPlatformTotal(100);
+        data.setFreePlatform(8);
+        data.setReservationCar(97);
+        data.setWorkingCar(56);
+        data.setLineUpCar(35);
+        return ApiResponse.success(data);
+    }
+
+
+    @LoginNoRequired
+    @ApiOperation("浠婃棩鏈堝彴瀹屾垚璁㈠崟缁熻")
+    @GetMapping("/platformGroupFinish")
+    public ApiResponse<List<PlatformGroupFinishVO>> platformGroupFinish() {
+        List<PlatformGroupFinishVO> platformGroupFinishVOList = new ArrayList<>();
+        Random random = new Random();
+        for (int i = 0; i < 3; i++) {
+            PlatformGroupFinishVO platformGroupFinishVO = new PlatformGroupFinishVO();
+            platformGroupFinishVO.setPlatformGroupName(i+"_鏈堝彴缁勫悕绉�");
+            platformGroupFinishVO.setPlatformId(i);
+            platformGroupFinishVO.setFinishData(300+random.nextInt(100));
+            platformGroupFinishVOList.add(platformGroupFinishVO);
+        }
+        return ApiResponse.success(platformGroupFinishVOList);
+    }
+
+
+    @LoginNoRequired
+    @ApiOperation("浠婃棩鏈堝彴宸ヤ綔鏃堕暱瓒嬪娍")
+    @GetMapping("/platformDuration")
+    public ApiResponse<List<PlatformDurationVO>> platformDuration() {
+        List<PlatformDurationVO> platformDurationList = new ArrayList<>();
+        Random random = new Random();
+        for (int i = 0; i < 3; i++) {
+            PlatformDurationVO platformDurationVO = new PlatformDurationVO();
+            platformDurationVO.setPlatformName(i+"_鏈堝彴鍚嶇О");
+            platformDurationVO.setPlatformId(i);
+            platformDurationVO.setWorkTotalTime(100+random.nextInt(100));
+            platformDurationVO.setOpenTotalTime(200+random.nextInt(100));
+            platformDurationList.add(platformDurationVO);
+        }
+        return ApiResponse.success(platformDurationList);
+    }
+
+
+    @LoginNoRequired
+    @ApiOperation("浠婃棩鏈堝彴宸ヤ綔鏃堕暱瓒嬪娍")
+    @GetMapping("/workEfficiency")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "type", value = "鏌ヨ绫诲瀷锛�0=鍏ュ簱锛�1=鍑哄簱", required = true),
+    })
+    public ApiResponse<List<WorkEfficiencyVO>> workEfficiency(@RequestParam Integer type) {
+        List<WorkEfficiencyVO> workEfficiencyVOList = new ArrayList<>();
+        Random random = new Random();
+        Integer totalWorkNum = 0;
+        for (int i = 8; i <= 20; i++) {
+            if(i%2==0){
+                WorkEfficiencyVO workEfficiencyVO = new WorkEfficiencyVO();
+                workEfficiencyVO.setWorkNum(200+random.nextInt(100));
+                totalWorkNum = totalWorkNum + workEfficiencyVO.getWorkNum();
+                workEfficiencyVO.setTotalWorkNum(totalWorkNum);
+                workEfficiencyVO.setWorkTime(StringUtils.leftPad(i+"",2,"0") +":00");
+                workEfficiencyVOList.add(workEfficiencyVO);
+            }
+        }
+        return ApiResponse.success(workEfficiencyVOList);
+    }
+
+
+    @LoginNoRequired
+    @ApiOperation("浠婃棩杞﹁締浣滀笟鎯呭喌")
+    @GetMapping("/carWorkSituation")
+    public ApiResponse<CarWorkSituationVO> carWorkSituation() {
+
+        Random random = new Random();
+        CarWorkSituationVO carWorkSituationVO = new CarWorkSituationVO();
+        carWorkSituationVO.setCallNum(200+random.nextInt(100));
+        carWorkSituationVO.setFinishNum(100+random.nextInt(100));
+        carWorkSituationVO.setCallNum(100+random.nextInt(100));
+        carWorkSituationVO.setWorkingNum(100+random.nextInt(100));
+        carWorkSituationVO.setFinishNum(100+random.nextInt(100));
+        carWorkSituationVO.setInNum(100+random.nextInt(100));
+        List<PlatformLog> platformLogList = platformLogMapper.selectList(new QueryWrapper<PlatformLog>().lambda()
+                .orderByDesc(PlatformLog::getCreateDate)
+                .last(" limit 7 ")
+        );
+        carWorkSituationVO.setPlatformLogList(platformLogList);
+        return ApiResponse.success(carWorkSituationVO);
+    }
+
+
+
+    @LoginNoRequired
+    @ApiOperation("瀹炴椂鏈堝彴浣滀笟淇℃伅")
+    @GetMapping("/platformWorkData")
+    public ApiResponse<List<PlatformWorkDataVO>> platformWorkData() {
+        List<PlatformWorkDataVO> platformWorkDataVOList = new ArrayList<>();
+        Random random = new Random();
+        for (int i = 0; i < 3; i++) {
+            PlatformWorkDataVO platformDurationVO = new PlatformWorkDataVO();
+            platformDurationVO.setPlatformName(i+"_鏈堝彴鍚嶇О");
+            platformDurationVO.setCarNo("鐨朅8" + random.nextInt(9) + random.nextInt(9) + random.nextInt(9) + random.nextInt(9));
+            platformDurationVO.setWorkType(random.nextInt(1));
+            platformDurationVO.setWorkNum(100+random.nextInt(100));
+            platformDurationVO.setFinishTime(Long.valueOf(System.currentTimeMillis()/1000 + 200+random.nextInt(100)));
+            platformDurationVO.setStatus(random.nextInt(2));
+            platformWorkDataVOList.add(platformDurationVO);
+        }
+        return ApiResponse.success(platformWorkDataVOList);
+    }
+
+
+
+
+
+
+
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/PlatformJobRunController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/PlatformJobRunController.java
new file mode 100644
index 0000000..2cd9eba
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/PlatformJobRunController.java
@@ -0,0 +1,180 @@
+package com.doumee.cloud.board;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.LoginNoRequired;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.DateUtil;
+import com.doumee.dao.business.PlatformJobMapper;
+import com.doumee.dao.business.join.PlatformJobJoinMapper;
+import com.doumee.dao.business.model.Platform;
+import com.doumee.dao.business.model.PlatformBooks;
+import com.doumee.dao.business.model.PlatformJob;
+import com.doumee.dao.business.model.PlatformWmsJob;
+import com.doumee.dao.web.response.platformReport.*;
+import com.doumee.service.business.PlatformJobService;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import io.swagger.annotations.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2024/10/28 13:42
+ */
+
+@Api(tags = "鍥尯鐗╂祦杩愯璋冨害鐪嬫澘")
+@RestController
+@Slf4j
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/board/api/platformJobRun")
+public class PlatformJobRunController extends BaseController {
+
+    @ApiModelProperty
+    private PlatformJobJoinMapper platformJobJoinMapper;
+
+    @LoginNoRequired
+    @ApiOperation("涓績鏁版嵁")
+    @GetMapping("/centerData")
+    public ApiResponse<PlatformJobRunBoardVO> centerData() {
+        PlatformJobRunBoardVO data = new PlatformJobRunBoardVO();
+        Random random = new Random();
+        data.setMonthOutTotal(BigDecimal.valueOf(random.nextInt(100)).multiply(new BigDecimal(10000)));
+        data.setMonthOutTotalOnYear(BigDecimal.valueOf(random.nextInt(10)));
+        data.setMonthOutTimes(random.nextInt(1000));
+        data.setYearOutTotal(data.getMonthOutTotal().multiply(new BigDecimal(11)));
+        data.setYearOutTotalOnYear(BigDecimal.valueOf(random.nextInt(10)));
+        data.setYearOutTimes(random.nextInt(1000) * 11);
+
+        data.setTodayInRata(new BigDecimal(random.nextInt(100)));
+        data.setMonthInRata(data.getTodayInRata().multiply(new BigDecimal(30)));
+
+        data.setTodayOutRata(new BigDecimal(random.nextInt(100)));
+        data.setMonthOutRata(data.getTodayOutRata().multiply(new BigDecimal(30)));
+
+
+        return ApiResponse.success(data);
+    }
+
+
+    @LoginNoRequired
+    @ApiOperation("杩愯緭浠诲姟鍒嗘瀽")
+    @GetMapping("/transportMeasure")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "queryType", value = "鏌ヨ绫诲瀷锛�0=鍛紱1=鏈堬紱2=骞达紱", required = true),
+    })
+    public ApiResponse<List<TransportMeasureVO>> transportMeasure(@RequestParam Integer queryType) {
+        List<TransportMeasureVO> list = new ArrayList<>();
+        Random random = new Random();
+        List<String> dayList = DateUtil.getBeforDays(new Date(),7);
+        if(Constants.equalsInteger(queryType,Constants.ONE)){
+            dayList = DateUtil.getBeforDays(new Date(),30);
+        }else if(Constants.equalsInteger(queryType,Constants.TWO)){
+            dayList = DateUtil.getBeforMonth(new Date(),12);
+        }
+        for (String str:dayList) {
+            TransportMeasureVO data = new TransportMeasureVO();
+            data.setPlanTimes(str);
+            data.setPlanTaskNum(new BigDecimal(random.nextInt(1000)));
+            data.setFinishTaskNum(new BigDecimal(data.getPlanTaskNum().intValue()));
+            list.add(data);
+        }
+        return ApiResponse.success(list);
+    }
+
+
+
+
+
+    @LoginNoRequired
+    @ApiOperation("褰撴棩杩愯緭浠诲姟")
+    @GetMapping("/platformJobList")
+    public ApiResponse<List<PlatformJob>> platformJobList() {
+        List<PlatformJob> list =  platformJobJoinMapper.selectJoinList(PlatformJob.class,
+                new MPJLambdaWrapper<PlatformJob>()
+                        .selectAll(PlatformJob.class)
+                        .selectAs(PlatformBooks::getId,PlatformJob::getBookId)
+                        .selectAs(Platform::getName,PlatformJob::getPlatformName)
+                        .selectAs(Platform::getWorkRate,PlatformJob::getWorkRate)
+                        .selectAs(PlatformWmsJob::getCarrierName,PlatformJob::getCarrierName)
+                        .selectAs(PlatformWmsJob::getRepertotyAddress,PlatformJob::getRepertotyAddress)
+                        .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId)
+                        .leftJoin(PlatformWmsJob.class,PlatformWmsJob::getCarryBillCode,PlatformJob::getBillCode)
+                        .leftJoin(PlatformBooks.class,PlatformBooks::getJobId,PlatformJob::getId)
+                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
+                        .in(PlatformJob::getStatus
+                                ,Constants.PlatformJobStatus.WAIT_CALL.getKey()
+                                ,Constants.PlatformJobStatus.CALLED.getKey()
+                                ,Constants.PlatformJobStatus.IN_WAIT.getKey()
+                                ,Constants.PlatformJobStatus.WORKING.getKey()
+                                ,Constants.PlatformJobStatus.TRANSFERING.getKey()
+                                ,Constants.PlatformJobStatus.EXCEPTION.getKey()
+                                ,Constants.PlatformJobStatus.DONE.getKey()
+                        )
+                        .orderByDesc(PlatformJob::getSignNum)
+                        .last(" limit 20 ")
+        );
+        return ApiResponse.success(list);
+    }
+
+
+
+    @LoginNoRequired
+    @ApiOperation("鍑哄叆搴撲换鍔¢噺")
+    @GetMapping("/jobData")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "queryType", value = "鏌ヨ绫诲瀷锛�0=鍑哄簱锛�1=鍏ュ簱锛�", required = true),
+    })
+    public ApiResponse<JobDataVO> jobData(@RequestParam Integer queryType) {
+        Random random = new Random();
+        JobDataVO jobDataVO = new JobDataVO();
+        jobDataVO.setPlanTaskNum(BigDecimal.valueOf(random.nextInt(1000)));
+        jobDataVO.setFinishTaskNum(BigDecimal.valueOf(jobDataVO.getPlanTaskNum().intValue()));
+        return ApiResponse.success(jobDataVO);
+    }
+
+    @LoginNoRequired
+    @ApiOperation("浠婃棩鍏ュ簱閲忕粺璁�")
+    @GetMapping("/totalInList")
+    public ApiResponse<List<GeneralVO>> totalInList() {
+        List<GeneralVO> list = new ArrayList<>();
+        for (int i = 1; i < 4; i++) {
+            Random random = new Random();
+            GeneralVO data = new GeneralVO();
+            data.setName("鍘傚尯鍚嶇О_"+i);
+            data.setNum(BigDecimal.valueOf(random.nextInt(1000)));
+            list.add(data);
+        }
+        return ApiResponse.success(list);
+    }
+
+
+
+    @LoginNoRequired
+    @ApiOperation("搴撳瓨鎯呭喌")
+    @GetMapping("/stockList")
+    public ApiResponse<List<GeneralVO>> stockList() {
+        List<GeneralVO> list = new ArrayList<>();
+        for (int i = 1; i < 10; i++) {
+            Random random = new Random();
+            GeneralVO data = new GeneralVO();
+            data.setName("鍚嶇О"+i);
+            data.setNum(BigDecimal.valueOf(random.nextInt(1000)));
+            list.add(data);
+        }
+        return ApiResponse.success(list);
+    }
+
+
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/SecurityController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/SecurityController.java
new file mode 100644
index 0000000..0622588
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/SecurityController.java
@@ -0,0 +1,104 @@
+package com.doumee.cloud.board;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.LoginNoRequired;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.web.response.platformReport.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2024/10/28 13:42
+ */
+
+@Api(tags = "瀹夐槻绠℃帶澶у睆")
+@RestController
+@Slf4j
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/board/api/security")
+public class SecurityController extends BaseController {
+
+
+    @LoginNoRequired
+    @ApiOperation("涓績鏁版嵁")
+    @GetMapping("/centerData")
+    public ApiResponse<SecurityBoardVO> centerData() {
+        SecurityBoardVO data = new SecurityBoardVO();
+        Random random = new Random();
+        data.setParkingLotTotal(random.nextInt(200));
+        data.setFreeParkingLot(random.nextInt(data.getParkingLotTotal()));
+
+        data.setInternalCarTotal(random.nextInt(100));
+        data.setRelatedCarTotal(random.nextInt(100));
+        data.setVisitCarTotal(random.nextInt(100));
+        data.setInParkCarTotal(data.getInternalCarTotal() + data.getRelatedCarTotal() + data.getVisitCarTotal());
+
+        data.setInternalTotal(random.nextInt(100));
+        data.setRelatedTotal(random.nextInt(100));
+        data.setVisitTotal(random.nextInt(100));
+        data.setInParkTotal(data.getInternalTotal() + data.getRelatedTotal() + data.getVisitTotal());
+
+        data.setDeviceTotal(random.nextInt(20));
+        data.setErrTotal(random.nextInt(20));
+        data.setInternalJobCarTotal(random.nextInt(20));
+        data.setVisitJobCarTotal(random.nextInt(20));
+        data.setRelatedJobCarTotal(random.nextInt(20));
+
+        return ApiResponse.success(data);
+    }
+
+
+    @LoginNoRequired
+    @ApiOperation("鍥尯瀹夐槻璁惧")
+    @GetMapping("/securityDeviceData")
+    public ApiResponse<List<SecurityDeviceDataVO>> securityDeviceData() {
+        List<SecurityDeviceDataVO> list = new ArrayList<>();
+        Random random = new Random();
+        for (int i = 1; i <= 3; i++) {
+            SecurityDeviceDataVO data = new SecurityDeviceDataVO();
+            data.setDeviceType("璁惧绫诲瀷_"+i);
+            data.setOnlineNum(random.nextInt(10));
+            data.setOfflineDeviceNum(random.nextInt(10));
+            data.setTotalNum(data.getOnlineNum() + data.getOfflineDeviceNum() );
+            list.add(data);
+        }
+        return ApiResponse.success(list);
+    }
+
+
+
+
+    @LoginNoRequired
+    @ApiOperation("璁垮婊炵暀鎯呭喌")
+    @GetMapping("/visitRetentionData")
+    public ApiResponse<List<VisitRetentionDataVO>> visitRetentionData() {
+        List<VisitRetentionDataVO> list = new ArrayList<>();
+        Random random = new Random();
+        for (int i = 1; i <= 3; i++) {
+            VisitRetentionDataVO data = new VisitRetentionDataVO();
+            data.setName("灏忔槑_"+i);
+            data.setCompanyName("杩愮淮缁刜"+i);
+            data.setTimeOutMinute(Long.valueOf(random.nextInt(200)));
+            list.add(data);
+        }
+        return ApiResponse.success(list);
+    }
+
+
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/WholeProvinceController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/WholeProvinceController.java
new file mode 100644
index 0000000..738f7cf
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/WholeProvinceController.java
@@ -0,0 +1,171 @@
+package com.doumee.cloud.board;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.LoginNoRequired;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.DateUtil;
+import com.doumee.dao.web.response.platformReport.*;
+import io.swagger.annotations.*;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2024/10/28 13:42
+ */
+
+@Api(tags = "鍏ㄧ渷涓�搴撳埗绠$悊鐪嬫澘")
+@RestController
+@Slf4j
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/board/api/wholeProvince")
+public class WholeProvinceController extends BaseController {
+
+
+    @LoginNoRequired
+    @ApiOperation("涓績鏁版嵁")
+    @GetMapping("/centerData")
+    public ApiResponse<WholeProvinceBoardVO> centerData() {
+        WholeProvinceBoardVO data = new WholeProvinceBoardVO();
+        Random random = new Random();
+
+        data.setYearOutTotal(BigDecimal.valueOf(random.nextInt(200)));
+        data.setYearOutTotalOnYear(BigDecimal.valueOf(random.nextInt(10)));
+        data.setYearOutTimes(random.nextInt(200));
+        data.setYearProvinceRata(BigDecimal.valueOf(random.nextInt(100)).divide(new BigDecimal(100),2,BigDecimal.ROUND_HALF_UP));
+
+        data.setYearInPlanTotal(BigDecimal.valueOf(random.nextInt(200)));
+        data.setYearInTotal(BigDecimal.valueOf(random.nextInt(data.getYearInPlanTotal().intValue())));
+        data.setYearInTotalOnYear(BigDecimal.valueOf(random.nextInt(10)));
+        data.setYearInTimes(random.nextInt(200));
+
+        data.setOutPlanTotal(BigDecimal.valueOf(random.nextInt(200)));
+        data.setOutPlanTimes(random.nextInt(200));
+        data.setOutTotal(BigDecimal.valueOf(random.nextInt(data.getOutPlanTotal().intValue())));
+        data.setOutTimes(random.nextInt(data.getOutPlanTimes()));
+        data.setOutRata(BigDecimal.valueOf(random.nextInt(100)));
+
+        return ApiResponse.success(data);
+    }
+
+
+    @LoginNoRequired
+    @ApiOperation("杩戜竷鏃ュ埌璐ф儏鍐�")
+    @GetMapping("/arriveGoodsList")
+    public ApiResponse<List<ArriveGoodsVO>> arriveGoodsList() {
+        List<ArriveGoodsVO> list = new ArrayList<>();
+        Random random = new Random();
+        List<String> dayList = DateUtil.getBeforDays(new Date(),7);
+        for (String str:dayList) {
+            ArriveGoodsVO data = new ArriveGoodsVO();
+            data.setDateStr(str);
+            data.setArriveNum(new BigDecimal(random.nextInt(1000)));
+            data.setInTransitNum(new BigDecimal(random.nextInt(1000)));
+            list.add(data);
+
+        }
+        return ApiResponse.success(list);
+    }
+
+
+    @LoginNoRequired
+    @ApiOperation("褰撳墠杩愯緭浠诲姟")
+    @GetMapping("/transportTaskList")
+    public ApiResponse<List<TransportTaskVO>> transportTaskList() {
+        List<TransportTaskVO> list = new ArrayList<>();
+        Random random = new Random();
+        for (int i = 1; i < 11; i++) {
+            TransportTaskVO data = new TransportTaskVO();
+            data.setCarNo("鐨朅8" + random.nextInt(9) + random.nextInt(9) + random.nextInt(9) + random.nextInt(9));
+            data.setStatusStr("鍒拌揪鍗歌揣鍦�");
+            data.setAddress("瀹夊窘鍚堣偉");
+            data.setTaskDate(new Date());
+            list.add(data);
+        }
+        return ApiResponse.success(list);
+    }
+
+
+
+
+    @LoginNoRequired
+    @ApiOperation("杩涢攢瀛樿繍钀�")
+    @GetMapping("/salesOperationList")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "queryType", value = "鏌ヨ绫诲瀷锛�0=鍛紱1=鏈堬紱2=骞达紱", required = true),
+    })
+    public ApiResponse<List<SalesOperationVO>> salesOperationList(@RequestParam Integer queryType) {
+        List<SalesOperationVO> list = new ArrayList<>();
+        Random random = new Random();
+        List<String> dayList = DateUtil.getBeforDays(new Date(),7);
+        if(Constants.equalsInteger(queryType,Constants.ONE)){
+            dayList = DateUtil.getBeforDays(new Date(),30);
+        }else if(Constants.equalsInteger(queryType,Constants.TWO)){
+            dayList = DateUtil.getBeforMonth(new Date(),12);
+        }
+        for (String str:dayList) {
+            SalesOperationVO data = new SalesOperationVO();
+            data.setDateStr(str);
+            data.setStockNum(new BigDecimal(random.nextInt(1000)));
+            data.setTotalInNum(new BigDecimal(random.nextInt(1000)));
+            data.setTotalOutNum(new BigDecimal(random.nextInt(1000)));
+            list.add(data);
+        }
+        return ApiResponse.success(list);
+    }
+
+    @LoginNoRequired
+    @ApiOperation("搴撳瓨鍒╃敤鐜�")
+    @GetMapping("/energyDataList")
+    public ApiResponse<List<StockRataVO>> energyDataList() {
+        List<StockRataVO> energyDataVOList = new ArrayList<>();
+        Random random = new Random();
+        for (int i = 1; i <= 5; i++) {
+            StockRataVO data = new StockRataVO();
+            data.setPlaceName("鍦扮偣_"+i);
+            data.setNowStockNum(new BigDecimal(random.nextInt(200)));
+            data.setStockRataNum(new BigDecimal(random.nextInt(200)));
+            data.setTotalStockNum(new BigDecimal(random.nextInt(100)));
+            energyDataVOList.add(data);
+        }
+        return ApiResponse.success(energyDataVOList);
+    }
+
+
+    @LoginNoRequired
+    @ApiOperation("涓婃湀娌硅�楁帓琛�")
+    @GetMapping("/lastMonthOil")
+    public ApiResponse<List<OilDataVO>> lastMonthOil() {
+        List<OilDataVO> oilDataVOList = new ArrayList<>();
+        Random random = new Random();
+        BigDecimal maxOil = BigDecimal.ZERO;
+        BigDecimal lastOil = BigDecimal.ZERO;
+        for (int i = 1; i <= 7; i++) {
+            OilDataVO oilDataVO = new OilDataVO();
+            oilDataVO.setCarNo("鐨朅8" + random.nextInt(9) + random.nextInt(9) + random.nextInt(9) + random.nextInt(9));
+            if(i==1){
+                oilDataVO.setQuantity(new BigDecimal(random.nextInt(100)));
+                maxOil = oilDataVO.getQuantity();
+            }else{
+                oilDataVO.setQuantity(new BigDecimal(random.nextInt(lastOil.intValue())));
+            }
+            lastOil = oilDataVO.getQuantity();
+            oilDataVO.setMaxOil(maxOil);
+            oilDataVOList.add(oilDataVO);
+        }
+        return ApiResponse.success(oilDataVOList);
+    }
+
+}
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 b85c0e4..a568a00 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
@@ -39,8 +39,11 @@
      * 3銆佽兘绠′腑蹇冿細ngzx
      */
     public interface MenuPageId{
-
-
+        String afzx = "afzx";//瀹夐槻涓績
+        String xkzx = "xkzx";//娑堟帶涓績
+        String ngzx = "ngzx";//鑳界涓績
+        String jsc = "jsc";//鐗╀笟鍚庡嫟
+        String kqgzt = "attendance_workstand";//鑰冨嫟绠$悊
     }
 
     /**
@@ -133,6 +136,9 @@
         String[] fireDeviceStatusSearch= new String[]{"/api/fpnms/v2/device/status/search","鏌ヨ娑堥槻璁惧閮ㄤ欢鐘舵��"};//鏌ヨ娑堥槻璁惧閮ㄤ欢鐘舵��
         String[] findDeviceAlarmPage= new String[]{"/api/v1/alarm/findDeviceAlarmPage","鍒嗛〉鏌ヨ璁惧涓嬬殑鎵�鏈夋姤璀﹁褰�"};//鍒嗛〉鏌ヨ璁惧涓嬬殑鎵�鏈夋姤璀﹁褰�
         String[] getTodoListPage= new String[]{"/api/v3/todo/getTodoListPage","鍒嗛〉鑾峰彇寰呭姙鍒楄〃"};//1.10.1鍒嗛〉鑾峰彇寰呭姙鍒楄〃
+        String[] loginOut= new String[]{"/xauthplus-plugin/logout","閫�鍑虹櫥褰�"};//閫�鍑虹櫥褰�
+        String[] sendSms= new String[]{"/api/smsps/v1/smsService/sms","鐭俊楠岃瘉鐮�"};//鐭俊楠岃瘉鐮�
+        String[] getMenus= new String[]{"/api/privilegeService/v1/menus/list","鑾峰彇鐢ㄦ埛鏈夋潈闄愮殑鑿滃崟鍔熻兘椤�"};//鑾峰彇鐢ㄦ埛鏈夋潈闄愮殑鑿滃崟鍔熻兘椤�
     }
 
     /**
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java
index 3ba05db..143549b 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java
@@ -753,6 +753,11 @@
 			return startDoPostStringArtemis(HKConstants.InterfacePath.platformStatus,null);
 		}
 	}
+
+	public static String getHkMenu(Map<String,String> body) {
+		return startDoGetStringArtemis(HKConstants.InterfacePath.getMenus,body);
+	}
+
 	/**
 	 * 鑾峰彇鏈堝彴缁勪欢閰嶇疆鐨凩ED璁惧娓呭崟
 	 * @param body
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/MenuDataResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/MenuDataResponse.java
new file mode 100644
index 0000000..ba55c83
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/MenuDataResponse.java
@@ -0,0 +1,14 @@
+package com.doumee.core.haikang.model.param.respose;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class MenuDataResponse {
+
+    private Integer	total;
+
+    private List<String> list;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java
index dbb67f0..e1b202c 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java
@@ -1,7 +1,10 @@
 package com.doumee.core.haikang.service;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.TypeReference;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
 import com.doumee.core.haikang.model.HKConstants;
 import com.doumee.core.haikang.model.HKTools;
 import com.doumee.core.haikang.model.param.BaseListPageResponse;
@@ -10,6 +13,7 @@
 import com.doumee.core.haikang.model.param.request.*;
 import com.doumee.core.haikang.model.param.respose.*;
 import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.HttpsUtil;
 import com.hikvision.artemis.sdk.config.ArtemisConfig;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -21,6 +25,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 @Slf4j
 public class HKService {
@@ -1320,6 +1325,10 @@
         }
         return  null;
     }
+
+
+
+
     /**
      *鑾峰彇鏈堝彴缁勪欢閰嶇疆鐨凩ED璁惧娓呭崟
      * @return
@@ -1457,6 +1466,42 @@
         }
         return  null;
     }
+
+    public static BaseResponse sendSmsByHk(Map<String,Object> param,String url){
+        log.info("銆愭捣搴峰彂閫佺煭淇°��================寮�濮�===="+JSONObject.toJSONString(param));
+        try {
+            TypeReference typeReference =
+                    new TypeReference<BaseResponse>(){};
+            String res = HttpsUtil.postJson(url, JSONObject.toJSONString(param));
+            BaseResponse result = JSONObject.parseObject(res, typeReference.getType());
+            logResult(result,"娴峰悍鍙戦�佺煭淇�");
+            return  result;
+        }catch (Exception e){
+            log.error("銆愭捣搴峰彂閫佺煭淇°��================澶辫触====锛歕n"+ e.getMessage());
+            e.printStackTrace();
+        }
+       return null;
+    }
+
+
+
+    public static BaseResponse<MenuDataResponse> getMenuConfig(Map<String,String> param){
+        log.info("銆愯幏鍙栬彍鍗曞姛鑳介厤缃」銆�================寮�濮�===="+ JSONObject.toJSONString(param));
+        try {
+            String res = HKTools.getHkMenu(param);
+            TypeReference typeReference =
+                    new TypeReference<BaseResponse<MenuDataResponse>>(){};
+            BaseResponse<MenuDataResponse>   result = JSONObject.parseObject(res, typeReference.getType());
+            logResult(result,"鑾峰彇鑿滃崟鍔熻兘閰嶇疆椤�");
+            return  result;
+        }catch (Exception e){
+            log.error("銆愯幏鍙栬彍鍗曞姛鑳介厤缃」銆�================澶辫触====锛歕n"+ e.getMessage());
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+
     private static void logResult(BaseResponse res,String name) {
         if(StringUtils.equals(res.getCode(),HKConstants.RESPONSE_SUCCEE)){
             log.info("銆�"+name+"銆�================鎴愬姛====\n"+res);
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDangerParam.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDangerParam.java
index dcb7980..09c04f0 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDangerParam.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDangerParam.java
@@ -87,9 +87,10 @@
     @ApiModelProperty(value = "璐d换閮ㄩ棬缂栫爜锛堝叧鑱攃ompany锛�", example = "1")
 //    @ExcelColumn(name="鎻愭姤浜虹紪鐮侊紙鍏宠仈member锛�")
     private Integer companyId;
+
     @ApiModelProperty(value = "璐d换閮ㄩ棬缂栫爜", example = "1")
 //    @ExcelColumn(name="鎻愭姤浜虹紪鐮侊紙鍏宠仈member锛�")
     @TableField(exist = false)
-    private Integer companyName;
+    private String companyName;
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
index cb286bd..98ad7d6 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
@@ -276,4 +276,9 @@
     @TableField(exist = false)
     private List<String> roleNames;
 
+    @ApiModelProperty(value = "鏄惁鏌ヨ鍥哄畾浜哄憳锛�0=鍚︼紱1=鏄�" )
+    @TableField(exist = false)
+    private Integer querySpecial;
+
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformJob.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformJob.java
index efb886f..4ea4253 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformJob.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformJob.java
@@ -292,6 +292,7 @@
     @TableField(exist = false)
     private String carrierName ;
 
+
     @ApiModelProperty(value = "璺濈绛惧埌鐐硅窛绂�")
     @TableField(exist = false)
     private BigDecimal getDistance;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/AlarmDataVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/AlarmDataVO.java
new file mode 100644
index 0000000..cfcd27f
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/AlarmDataVO.java
@@ -0,0 +1,37 @@
+package com.doumee.dao.web.response.platformReport;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 鎶ヨ淇℃伅
+ *
+ * @Author : Rk
+ * @create 2024/10/25 14:26
+ */
+@Data
+public class AlarmDataVO {
+
+
+    @ApiModelProperty(value = "鎬绘暟")
+    private Integer totalNum;
+
+    @ApiModelProperty(value = "鐪熷疄鎶ヨ鏁伴噺")
+    private Integer realNum;
+
+    @ApiModelProperty(value = "璇姤璀︽暟")
+    private Integer errNum;
+
+    @ApiModelProperty(value = "宸茶В闄ゆ暟閲�")
+    private Integer liftNum;
+
+    @ApiModelProperty(value = "澶勭悊涓暟閲�")
+    private Integer processingNum;
+
+
+
+
+
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/AlarmHandleDataVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/AlarmHandleDataVO.java
new file mode 100644
index 0000000..6f6c8c1
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/AlarmHandleDataVO.java
@@ -0,0 +1,37 @@
+package com.doumee.dao.web.response.platformReport;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 鍛婅澶勭悊鍒嗘瀽
+ *
+ * @Author : Rk
+ * @create 2024/10/25 14:26
+ */
+@Data
+public class AlarmHandleDataVO {
+
+
+    @ApiModelProperty(value = "鏈堜唤")
+    private String monthStr;
+
+    @ApiModelProperty(value = "鎶ヨ鏁伴噺")
+    private Integer alarmNum;
+
+    @ApiModelProperty(value = "璇姤璀︽暟")
+    private Integer errNum;
+
+    @ApiModelProperty(value = "宸插鐞嗘暟閲�")
+    private Integer liftNum;
+
+    @ApiModelProperty(value = "杩涜涓暟閲�")
+    private Integer processingNum;
+
+
+
+
+
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/ArriveGoodsVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/ArriveGoodsVO.java
new file mode 100644
index 0000000..ef7a9ad
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/ArriveGoodsVO.java
@@ -0,0 +1,26 @@
+package com.doumee.dao.web.response.platformReport;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 閫氱敤
+ *
+ * @Author : Rk
+ * @create 2024/10/25 10:59
+ */
+@Data
+public class ArriveGoodsVO {
+
+    @ApiModelProperty(value = "鏃ユ湡")
+    private String dateStr;
+
+    @ApiModelProperty(value = "鍦ㄩ�旀暟閲�")
+    private BigDecimal inTransitNum;
+
+    @ApiModelProperty(value = "鍒拌揣鏁伴噺")
+    private BigDecimal arriveNum;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/CarWorkSituationVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/CarWorkSituationVO.java
new file mode 100644
index 0000000..59c5dd4
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/CarWorkSituationVO.java
@@ -0,0 +1,40 @@
+package com.doumee.dao.web.response.platformReport;
+
+import com.doumee.dao.business.model.PlatformLog;
+import com.doumee.dao.system.model.Notices;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 杞﹁締浣滀笟鎯呭喌
+ *
+ * @Author : Rk
+ * @create 2024/10/25 10:59
+ */
+@Data
+public class CarWorkSituationVO {
+
+    @ApiModelProperty(value = "棰勭害鏁伴噺")
+    private Integer reservationNum;
+
+    @ApiModelProperty(value = "杩涘満鏁伴噺")
+    private Integer inNum;
+
+    @ApiModelProperty(value = "宸插彨鍙锋暟閲�")
+    private Integer callNum;
+
+    @ApiModelProperty(value = "宸蹭綔涓氭暟閲�")
+    private Integer workingNum;
+
+    @ApiModelProperty(value = "宸插畬鎴愭暟閲�")
+    private Integer finishNum;
+
+    @ApiModelProperty(value = "宸茬鍦烘暟閲�")
+    private Integer leaveNum;
+
+    @ApiModelProperty(value = "浣滀笟鏃ュ織")
+    private List<PlatformLog> platformLogList;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/DeviceAlarmDataVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/DeviceAlarmDataVO.java
new file mode 100644
index 0000000..e5e452c
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/DeviceAlarmDataVO.java
@@ -0,0 +1,40 @@
+package com.doumee.dao.web.response.platformReport;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 浠婃棩鍚勭郴缁熻澶囩姸鎬佸強鍛婅鏁�
+ *
+ * @Author : Rk
+ * @create 2024/10/25 14:26
+ */
+@Data
+public class DeviceAlarmDataVO {
+
+
+    @ApiModelProperty(value = "璁惧绫诲瀷鍚嶇О")
+    private String deviceTypeName;
+
+    @ApiModelProperty(value = "鎬绘暟")
+    private Integer statusTotal;
+
+    @ApiModelProperty(value = "鎶ヨ鏁伴噺")
+    private Integer alarmNum;
+
+    @ApiModelProperty(value = "鏁呴殰鏁伴噺")
+    private Integer errNum;
+
+    @ApiModelProperty(value = "鏁呴殰鏁伴噺")
+    private Integer offlineNum;
+
+    @ApiModelProperty(value = "灞忚斀鏁伴噺")
+    private Integer shieldNum;
+
+
+
+
+
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/EnergyBoardVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/EnergyBoardVO.java
new file mode 100644
index 0000000..13217a0
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/EnergyBoardVO.java
@@ -0,0 +1,97 @@
+package com.doumee.dao.web.response.platformReport;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 鑳借�楃湅鏉�
+ *
+ * @Author : Rk
+ * @create 2024/10/25 13:53
+ */
+@Data
+public class EnergyBoardVO {
+
+
+    @ApiModelProperty(value = "鏈勾搴﹀惊鐜儫绠�")
+    private Integer smokeBoxTotal;
+
+    @ApiModelProperty(value = "纰虫帓鏀� 鍗曚綅 鍚�")
+    private BigDecimal carbon;
+
+    @ApiModelProperty(value = "涓婃湀鐢ㄧ數 鍗曚綅 kw路h")
+    private Integer electricityQuantity;
+
+    @ApiModelProperty(value = "鐢ㄧ數鐜瘮")
+    private BigDecimal electricityYear;
+
+    @ApiModelProperty(value = "鐢ㄧ數鍚屾瘮")
+    private BigDecimal electricityMonth;
+
+
+    @ApiModelProperty(value = "涓婃湀鐢ㄦ按 鍗曚綅 t")
+    private BigDecimal waterQuantity;
+
+    @ApiModelProperty(value = "鐢ㄦ按鐜瘮")
+    private BigDecimal waterYear;
+
+    @ApiModelProperty(value = "鐢ㄦ按鍚屾瘮")
+    private BigDecimal waterMonth;
+
+
+
+    @ApiModelProperty(value = "涓婃湀鐢ㄦ皵 鍗曚綅 ")
+    private BigDecimal gasQuantity;
+
+    @ApiModelProperty(value = "鐢ㄦ皵鐜瘮")
+    private BigDecimal gasYear;
+
+    @ApiModelProperty(value = "鐢ㄦ皵鍚屾瘮")
+    private BigDecimal gasMonth;
+
+
+    @ApiModelProperty(value = "鍔炲叕妤肩敤鐢� 鍗曚綅 kw路h")
+    private Integer officeQuantity;
+
+    @ApiModelProperty(value = "鎴愬搧搴撶敤鐢� 鍗曚綅 kw路h")
+    private Integer productHouseQuantity;
+
+    @ApiModelProperty(value = "鑱斿悎宸ユ埧鐢ㄧ數 鍗曚綅 kw路h")
+    private Integer workHouseQuantity;
+
+    @ApiModelProperty(value = "鐗╂祦鍥尯鐢ㄧ數 鍗曚綅 kw路h")
+    private Integer parkQuantity;
+
+    @ApiModelProperty(value = "鍔ㄥ姏绔欐埧鐢ㄧ數 鍗曚綅 kw路h")
+    private Integer powerQuantity;
+
+    @ApiModelProperty(value = "浠婃棩鐢ㄧ數 鍗曚綅 kw路h")
+    private Integer todayElectricity;
+
+    @ApiModelProperty(value = "鏈湀鐢ㄧ數 鍗曚綅 kw路h")
+    private Integer monthElectricity;
+
+    @ApiModelProperty(value = "鏄ㄦ棩鐢ㄧ數 鍗曚綅 kw路h")
+    private Integer yesterdayElectricity;
+
+    @ApiModelProperty(value = "瀹炴椂璐熻嵎鏇茬嚎",hidden = true)
+    private List<EnergyDataVO> loadCurveList;
+
+    @ApiModelProperty(value = "鏈堣兘鑰楀垎鏋� - 姘�",hidden = true)
+    private List<EnergyDataVO> energyDataWaterList;
+
+    @ApiModelProperty(value = "鏈堣兘鑰楀垎鏋� - 姘�",hidden = true)
+    private List<EnergyDataVO> energyDataGasList;
+
+    @ApiModelProperty(value = "鏈堣兘鑰楀垎鏋� - 鐢�",hidden = true)
+    private List<EnergyDataVO> energyDataElectricityList;
+
+    @ApiModelProperty(value = "鏈堟补鑰楀垎鏋�",hidden = true)
+    private List<EnergyDataVO> oilList;
+
+    @ApiModelProperty(value = "涓婃湀娌硅�楁帓琛�",hidden = true)
+    private List<OilDataVO> lastMonthOilList;
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/EnergyDataVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/EnergyDataVO.java
new file mode 100644
index 0000000..83ebb35
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/EnergyDataVO.java
@@ -0,0 +1,23 @@
+package com.doumee.dao.web.response.platformReport;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2024/10/25 16:25
+ */
+@Data
+public class EnergyDataVO {
+
+    @ApiModelProperty(value = "鏃堕棿")
+    private String timeData;
+
+    @ApiModelProperty(value = "鑳借��")
+    private BigDecimal energy;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/FightingAdminBoardVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/FightingAdminBoardVO.java
new file mode 100644
index 0000000..77b5a38
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/FightingAdminBoardVO.java
@@ -0,0 +1,59 @@
+package com.doumee.dao.web.response.platformReport;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 娑堥槻绠℃帶澶у睆
+ *
+ * @Author : Rk
+ * @create 2024/10/25 13:53
+ */
+@Data
+public class FightingAdminBoardVO {
+
+
+    @ApiModelProperty(value = "鍦ㄧ嚎璁惧鏁伴噺")
+    private Integer onlineDeviceNum;
+
+    @ApiModelProperty(value = "鎶ヨ璁惧鏁伴噺")
+    private Integer alarmDeviceNum;
+
+    @ApiModelProperty(value = "鏁呴殰璁惧鏁伴噺")
+    private Integer errDeviceNum;
+
+    @ApiModelProperty(value = "绂荤嚎璁惧鏁伴噺")
+    private Integer offlineDeviceNum;
+
+    @ApiModelProperty(value = "灞忚斀璁惧鏁伴噺")
+    private Integer shieldDeviceNum;
+
+    @ApiModelProperty(value = "鎻愭姤闅愭偅鏁伴噺")
+    private Integer todayDangerNum;
+
+    @ApiModelProperty(value = "澶勭悊闅愭偅鏁伴噺")
+    private Integer dealDangerNum;
+
+    @ApiModelProperty(value = "浠婃棩鍚勭郴缁熻澶囩姸鎬佸強鍛婅鏁伴噺" , hidden = true)
+    private List<DeviceAlarmDataVO> deviceAlarmDataList;
+
+    @ApiModelProperty(value = "鎶ヨ淇℃伅" , hidden = true)
+    private AlarmDataVO alarmData;
+
+    @ApiModelProperty(value = "鍛婅澶勭悊鍒嗘瀽" , hidden = true)
+    private List<AlarmHandleDataVO> alarmHandleDataList;
+
+    //TODO 娓╁害浼犳劅鍣�
+
+    //TODO 婀垮害浼犳劅鍣�
+
+    @ApiModelProperty(value = "鏈勾娑堥槻璁惧/璁炬柦缁存姢鎯呭喌" , hidden = true)
+    private YearDeviceDataVO yearDeviceData;
+
+
+    //TODO 鍛婅淇℃伅
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/GeneralVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/GeneralVO.java
new file mode 100644
index 0000000..fbeb41b
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/GeneralVO.java
@@ -0,0 +1,23 @@
+package com.doumee.dao.web.response.platformReport;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 閫氱敤
+ *
+ * @Author : Rk
+ * @create 2024/10/25 10:59
+ */
+@Data
+public class GeneralVO {
+
+    @ApiModelProperty(value = "鍚嶇О")
+    private String name;
+
+    @ApiModelProperty(value = "鏁伴噺")
+    private BigDecimal num;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/JobDataVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/JobDataVO.java
new file mode 100644
index 0000000..b7bee1f
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/JobDataVO.java
@@ -0,0 +1,24 @@
+package com.doumee.dao.web.response.platformReport;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 褰撴棩浠诲姟淇℃伅
+ *
+ * @Author : Rk
+ * @create 2024/10/25 10:59
+ */
+@Data
+public class JobDataVO {
+
+    @ApiModelProperty(value = "褰撴棩浠诲姟鎬婚噺 涓囨敮")
+    private BigDecimal planTaskNum;
+
+    @ApiModelProperty(value = "褰撴棩瀹屾垚浠诲姟鎬婚噺 涓囨敮")
+    private BigDecimal finishTaskNum;
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/OilDataVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/OilDataVO.java
new file mode 100644
index 0000000..14c035b
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/OilDataVO.java
@@ -0,0 +1,26 @@
+package com.doumee.dao.web.response.platformReport;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2024/10/25 16:31
+ */
+@Data
+public class OilDataVO {
+
+    @ApiModelProperty(value = "鏈�楂樻补鑰�")
+    private BigDecimal maxOil;
+
+    @ApiModelProperty(value = "娌硅��")
+    private BigDecimal quantity;
+
+    @ApiModelProperty(value = "杞︾墝鐓�")
+    private String carNo;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/OnSitDispatchBoardVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/OnSitDispatchBoardVO.java
new file mode 100644
index 0000000..e374319
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/OnSitDispatchBoardVO.java
@@ -0,0 +1,54 @@
+package com.doumee.dao.web.response.platformReport;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 鍦哄唴璋冨害鐪嬫澘
+ *
+ * @Author : Rk
+ * @create 2024/10/25 9:54
+ */
+@Data
+public class OnSitDispatchBoardVO {
+
+    @ApiModelProperty(value = "鏈堝彴鏁伴噺")
+    private Integer platformTotal;
+
+    @ApiModelProperty(value = "绌洪棽鏈堝彴鏁伴噺")
+    private Integer freePlatform;
+
+    @ApiModelProperty(value = "棰勭害杞﹁締")
+    private Integer reservationCar;
+
+    @ApiModelProperty(value = "浣滀笟杞﹁締")
+    private Integer workingCar;
+
+    @ApiModelProperty(value = "鎺掗槦杞﹁締")
+    private Integer lineUpCar;
+
+    @ApiModelProperty(value = "浠婃棩鏈堝彴瀹屾垚璁㈠崟缁熻" , hidden = true)
+    private List<PlatformGroupFinishVO> platformGroupFinishList;
+
+    @ApiModelProperty(value = "浠婃棩鏈堝彴宸ヤ綔鏃堕暱瓒嬪娍" , hidden = true)
+    private List<PlatformDurationVO> platformDurationList;
+
+    @ApiModelProperty(value = "瀹炴椂浣滀笟鏁堢巼 - 鍏ュ簱" , hidden = true)
+    private List<WorkEfficiencyVO> workEfficiencyInList;
+
+    @ApiModelProperty(value = "瀹炴椂浣滀笟鏁堢巼 - 鍑哄簱" , hidden = true)
+    private List<WorkEfficiencyVO> workEfficiencyOutList;
+
+    @ApiModelProperty(value = "浠婃棩杞﹁締浣滀笟鎯呭喌" , hidden = true)
+    private CarWorkSituationVO carWorkSituation;
+
+    @ApiModelProperty(value = "瀹炴椂鏈堝彴浣滀笟淇℃伅" , hidden = true)
+    private List<PlatformWorkDataVO> platformWorkDataList;
+
+    //TODO 瀹炴椂鍛婅淇℃伅
+
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformDurationVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformDurationVO.java
new file mode 100644
index 0000000..ac1666e
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformDurationVO.java
@@ -0,0 +1,31 @@
+package com.doumee.dao.web.response.platformReport;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 鏈堝彴宸ヤ綔鏃堕暱瓒嬪娍
+ *
+ * @Author : Rk
+ * @create 2024/10/25 10:59
+ */
+@Data
+public class PlatformDurationVO {
+
+
+    @ApiModelProperty(value = "浣滀笟鏃堕暱淇℃伅  鍗曚綅鍒嗛挓")
+    private Integer workTotalTime;
+
+    @ApiModelProperty(value = "寮�鏀炬�绘椂闀� 鍗曚綅鍒嗛挓")
+    private Integer openTotalTime;
+
+    @ApiModelProperty(value = "鏈堝彴涓婚敭")
+    private Integer platformId;
+
+    @ApiModelProperty(value = "鏈堝彴鍚嶇О")
+    private String platformName;
+
+
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformGroupFinishVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformGroupFinishVO.java
new file mode 100644
index 0000000..c8fa25c
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformGroupFinishVO.java
@@ -0,0 +1,28 @@
+package com.doumee.dao.web.response.platformReport;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 浠婃棩鏈堝彴瀹屾垚璁㈠崟缁熻
+ *
+ * @Author : Rk
+ * @create 2024/10/25 10:59
+ */
+@Data
+public class PlatformGroupFinishVO {
+
+
+    @ApiModelProperty(value = "瀹屾垚閲� 涓囨敮")
+    private Integer finishData;
+
+    @ApiModelProperty(value = "鏈堝彴涓婚敭")
+    private Integer platformId;
+
+    @ApiModelProperty(value = "鏈堝彴缁勫悕绉�")
+    private String platformGroupName;
+
+
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformJobRunBoardVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformJobRunBoardVO.java
new file mode 100644
index 0000000..31e7902
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformJobRunBoardVO.java
@@ -0,0 +1,75 @@
+package com.doumee.dao.web.response.platformReport;
+
+import com.doumee.dao.business.model.PlatformJob;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 鍥尯鐗╂祦杩愯璋冨害鐪嬫澘
+ *
+ * @Author : Rk
+ * @create 2024/10/25 9:54
+ */
+@Data
+public class PlatformJobRunBoardVO {
+
+    @ApiModelProperty(value = "绱鍑哄簱閲� - 鏈堝害")
+    private BigDecimal monthOutTotal;
+
+    @ApiModelProperty(value = "绱鍑哄簱閲忔湀搴� - 鍚屾瘮")
+    private BigDecimal monthOutTotalOnYear;
+
+    @ApiModelProperty(value = "绱鍑哄簱閲� - 骞村害")
+    private BigDecimal yearOutTotal;
+
+    @ApiModelProperty(value = "绱鍑哄簱閲忓勾搴� - 鍚屾瘮")
+    private BigDecimal yearOutTotalOnYear;
+
+    @ApiModelProperty(value = "绱鍑哄簱杞︽ - 鏈堝害")
+    private Integer monthOutTimes;
+
+    @ApiModelProperty(value = "绱鍑哄簱杞︽ - 骞村害")
+    private Integer yearOutTimes;
+
+    @ApiModelProperty(value = "浠婃棩鍑哄簱鏁堢巼")
+    private BigDecimal todayOutRata;
+
+    @ApiModelProperty(value = "鏈湀鍑哄簱鏁堢巼")
+    private BigDecimal monthOutRata;
+
+    @ApiModelProperty(value = "浠婃棩鍏ュ簱鏁堢巼")
+    private BigDecimal todayInRata;
+
+    @ApiModelProperty(value = "鏈湀鍏ュ簱鏁堢巼")
+    private BigDecimal monthInRata;
+
+    @ApiModelProperty(value = "杩愯緭浠诲姟鍒嗘瀽 - 7鏃�" , hidden = true)
+    private List<TransportMeasureVO> transportMeasureWeekList;
+
+    @ApiModelProperty(value = "杩愯緭浠诲姟鍒嗘瀽 - 鏈堝害", hidden = true)
+    private List<TransportMeasureVO> transportMeasureMonthList;
+
+    @ApiModelProperty(value = "杩愯緭浠诲姟鍒嗘瀽 - 骞村害", hidden = true)
+    private List<TransportMeasureVO> transportMeasureYearList;
+
+    @ApiModelProperty(value = "褰撴棩杩愯緭浠诲姟")
+    private List<PlatformJob> platformJobList;
+
+    @ApiModelProperty(value = "鍑哄簱浠诲姟")
+    private JobDataVO outJob;
+
+    @ApiModelProperty(value = "鍏ュ簱浠诲姟")
+    private JobDataVO inJob;
+
+    @ApiModelProperty(value = "浠婃棩鍏ュ簱閲忕粺璁�")
+    private List<GeneralVO> totalInList;
+
+    @ApiModelProperty(value = "搴撳瓨鎯呭喌")
+    private List<GeneralVO> stockList;
+
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformWorkDataVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformWorkDataVO.java
new file mode 100644
index 0000000..49416df
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformWorkDataVO.java
@@ -0,0 +1,39 @@
+package com.doumee.dao.web.response.platformReport;
+
+import com.doumee.dao.system.model.Notices;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 鏈堝彴褰撳墠浣滀笟鎯呭喌
+ *
+ * @Author : Rk
+ * @create 2024/10/25 10:59
+ */
+@Data
+public class PlatformWorkDataVO {
+
+    @ApiModelProperty(value = "鏈堝彴鍚嶇О")
+    private String platformName;
+
+    @ApiModelProperty(value = "杞︾墝鍙�")
+    private String carNo;
+
+    @ApiModelProperty(value = "浣滀笟閲�")
+    private Integer workNum;
+
+    @ApiModelProperty(value = "浣滀笟绫诲瀷:0=鍗歌揣锛�1=瑁呰揣")
+    private Integer workType;
+
+    @ApiModelProperty(value = "浣滀笟鏃堕暱 鍗曚綅 鍒嗛挓")
+    private Integer workTime;
+
+    @ApiModelProperty(value = "棰勮瀹屾垚鏃堕棿 鍗曚綅锛氭椂闂存埑")
+    private Long finishTime;
+
+    @ApiModelProperty(value = "鏈堝彴鐘舵�侊細0=浣滀笟涓紱1=绌洪棽涓紱2=浣滀笟瓒呮椂")
+    private Integer status;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/SalesOperationVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/SalesOperationVO.java
new file mode 100644
index 0000000..6590352
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/SalesOperationVO.java
@@ -0,0 +1,29 @@
+package com.doumee.dao.web.response.platformReport;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 杩涢攢瀛樺簱瀛�
+ *
+ * @Author : Rk
+ * @create 2024/10/25 10:59
+ */
+@Data
+public class SalesOperationVO {
+
+    @ApiModelProperty(value = "鏃ユ湡")
+    private String dateStr;
+
+    @ApiModelProperty(value = "鎬诲叆搴撴暟 涓囨敮")
+    private BigDecimal totalInNum;
+
+    @ApiModelProperty(value = "鎬诲嚭搴撴暟 涓囨敮")
+    private BigDecimal totalOutNum;
+
+    @ApiModelProperty(value = "搴撳瓨鍊� 涓囨敮")
+    private BigDecimal stockNum;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/SecurityBoardVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/SecurityBoardVO.java
new file mode 100644
index 0000000..2cbd492
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/SecurityBoardVO.java
@@ -0,0 +1,73 @@
+package com.doumee.dao.web.response.platformReport;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 瀹夐槻绠℃帶澶у睆
+ *
+ * @Author : Rk
+ * @create 2024/10/25 13:53
+ */
+@Data
+public class SecurityBoardVO {
+
+
+    @ApiModelProperty(value = "鎬昏溅浣嶆暟閲�")
+    private Integer parkingLotTotal;
+
+    @ApiModelProperty(value = "鍓╀綑杞︿綅鏁伴噺")
+    private Integer freeParkingLot;
+
+    @ApiModelProperty(value = "鍛樺伐杞﹁締")
+    private Integer internalCarTotal;
+
+    @ApiModelProperty(value = "鐩稿叧鏂硅溅杈�")
+    private Integer relatedCarTotal;
+
+    @ApiModelProperty(value = "璁垮杞﹁締")
+    private Integer visitCarTotal;
+
+    @ApiModelProperty(value = "褰撳墠鍦ㄥ洯浜烘暟")
+    private Integer inParkTotal;
+
+    @ApiModelProperty(value = "鍦ㄥ洯鍐呴儴浜哄憳鏁伴噺")
+    private Integer internalTotal;
+
+    @ApiModelProperty(value = "鍦ㄥ洯鐩稿叧鏂规暟閲�")
+    private Integer relatedTotal;
+
+    @ApiModelProperty(value = "鍦ㄥ洯璁垮鏁伴噺")
+    private Integer visitTotal;
+
+    @ApiModelProperty(value = "褰撳墠鍦ㄥ洯杞﹁締鎬绘暟")
+    private Integer inParkCarTotal;
+
+    @ApiModelProperty(value = "褰撳墠璁惧鎬绘暟")
+    private Integer deviceTotal;
+
+    @ApiModelProperty(value = "褰撳墠鎶ヨ鎬绘暟")
+    private Integer errTotal;
+
+    @ApiModelProperty(value = "鍐呰繍杞︼紙瀹夋嘲鑷湁杞︼級")
+    private Integer internalJobCarTotal;
+
+    @ApiModelProperty(value = "澶栧崗杩愯緭杞﹁締")
+    private Integer relatedJobCarTotal;
+
+    @ApiModelProperty(value = "甯傚叕鍙歌溅杈�")
+    private Integer visitJobCarTotal;
+
+    //TODO 瀹夐槻鍛婅
+
+    @ApiModelProperty(value = "鍥尯瀹夐槻璁惧", hidden = true)
+    private List<SecurityDeviceDataVO> securityDeviceDataList;
+
+    @ApiModelProperty(value = "璁垮婊炵暀鎯呭喌", hidden = true)
+    private List<VisitRetentionDataVO> visitRetentionDataList;
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/SecurityDeviceDataVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/SecurityDeviceDataVO.java
new file mode 100644
index 0000000..b179b33
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/SecurityDeviceDataVO.java
@@ -0,0 +1,28 @@
+package com.doumee.dao.web.response.platformReport;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 鍥尯瀹夐槻璁惧
+ *
+ * @Author : Rk
+ * @create 2024/10/25 10:59
+ */
+@Data
+public class SecurityDeviceDataVO {
+
+    @ApiModelProperty(value = "璁惧绫诲瀷")
+    private String deviceType;
+
+    @ApiModelProperty(value = "鎬绘暟")
+    private Integer totalNum;
+
+    @ApiModelProperty(value = "鍦ㄧ嚎鏁伴噺")
+    private Integer onlineNum;
+
+    @ApiModelProperty(value = "绂荤嚎鏁伴噺")
+    private Integer offlineDeviceNum;
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/StockRataVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/StockRataVO.java
new file mode 100644
index 0000000..04b15d9
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/StockRataVO.java
@@ -0,0 +1,28 @@
+package com.doumee.dao.web.response.platformReport;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 搴撳瓨鍒╃敤鐜�
+ *
+ * @Author : Rk
+ * @create 2024/10/25 10:59
+ */
+@Data
+public class StockRataVO {
+    @ApiModelProperty(value = "鍦扮偣")
+    private String placeName;
+
+    @ApiModelProperty(value = "鎬诲簱鏁� 涓囨敮")
+    private BigDecimal totalStockNum;
+
+    @ApiModelProperty(value = "褰撳墠搴撴暟 涓囨敮")
+    private BigDecimal nowStockNum;
+
+    @ApiModelProperty(value = "搴撳瓨鍒╃敤鐜� 涓囨敮")
+    private BigDecimal stockRataNum;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/TransportMeasureVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/TransportMeasureVO.java
new file mode 100644
index 0000000..49d793c
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/TransportMeasureVO.java
@@ -0,0 +1,26 @@
+package com.doumee.dao.web.response.platformReport;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 杩愯緭閲�
+ *
+ * @Author : Rk
+ * @create 2024/10/25 10:59
+ */
+@Data
+public class TransportMeasureVO {
+
+    @ApiModelProperty(value = "璁″垝浠诲姟閲� 涓囨敮")
+    private BigDecimal planTaskNum;
+
+    @ApiModelProperty(value = "浠诲姟瀹屾垚閲� 涓囨敮")
+    private BigDecimal finishTaskNum;
+
+    @ApiModelProperty(value = "璁″垝浠诲姟鏁�")
+    private String planTimes;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/TransportTaskVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/TransportTaskVO.java
new file mode 100644
index 0000000..56de61b
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/TransportTaskVO.java
@@ -0,0 +1,30 @@
+package com.doumee.dao.web.response.platformReport;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 杩愯緭浠诲姟
+ *
+ * @Author : Rk
+ * @create 2024/10/25 10:59
+ */
+@Data
+public class TransportTaskVO {
+
+    @ApiModelProperty(value = "杞︾墝鍙�")
+    private String carNo;
+
+    @ApiModelProperty(value = "鐘舵��")
+    private String statusStr;
+
+    @ApiModelProperty(value = "浣嶇疆")
+    private String address;
+
+    @ApiModelProperty(value = "浠诲姟涓嬭揪鏃堕棿")
+    private Date taskDate;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/VisitRetentionDataVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/VisitRetentionDataVO.java
new file mode 100644
index 0000000..f235177
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/VisitRetentionDataVO.java
@@ -0,0 +1,24 @@
+package com.doumee.dao.web.response.platformReport;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 璁垮婊炵暀淇℃伅
+ *
+ * @Author : Rk
+ * @create 2024/10/25 10:59
+ */
+@Data
+public class VisitRetentionDataVO {
+
+    @ApiModelProperty(value = "璁垮濮撳悕")
+    private String name;
+
+    @ApiModelProperty(value = "鎷滆閮ㄩ棬")
+    private String companyName;
+
+    @ApiModelProperty(value = "瓒呮椂鏃堕暱 鍗曚綅锛氬垎閽�")
+    private Long timeOutMinute;
+
+}
\ No newline at end of file
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/WholeProvinceBoardVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/WholeProvinceBoardVO.java
new file mode 100644
index 0000000..778c88e
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/WholeProvinceBoardVO.java
@@ -0,0 +1,84 @@
+package com.doumee.dao.web.response.platformReport;
+
+import com.doumee.dao.business.model.PlatformJob;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 鍏ㄧ渷涓�搴撳埗绠$悊鐪嬫澘
+ *
+ * @Author : Rk
+ * @create 2024/10/25 9:54
+ */
+@Data
+public class WholeProvinceBoardVO {
+
+    @ApiModelProperty(value = "绱鍑哄簱閲�  - 骞村害")
+    private BigDecimal yearOutTotal;
+
+    @ApiModelProperty(value = "绱鍑哄簱閲�  - 骞村害鍚屾瘮")
+    private BigDecimal yearOutTotalOnYear;
+
+    @ApiModelProperty(value = "绱鍑哄簱杞︽ - 骞村害")
+    private Integer yearOutTimes;
+
+    @ApiModelProperty(value = "鐪佸唴鍗犳瘮")
+    private BigDecimal yearProvinceRata;
+
+
+    @ApiModelProperty(value = "绱鍏ュ簱閲�  - 骞村害")
+    private BigDecimal yearInTotal;
+
+    @ApiModelProperty(value = "绱鍏ュ簱閲�  - 骞村害鍚屾瘮")
+    private BigDecimal yearInTotalOnYear;
+
+    @ApiModelProperty(value = "绱鍏ュ簱杞︽ - 骞村害")
+    private Integer yearInTimes;
+
+    @ApiModelProperty(value = "璁″垝鍏ュ簱閲� - 骞村害")
+    private BigDecimal yearInPlanTotal;
+
+
+
+    @ApiModelProperty(value = "浠婃棩璁″垝鍑哄簱閲�")
+    private BigDecimal outPlanTotal;
+
+    @ApiModelProperty(value = "浠婃棩璁″垝鍑哄簱娆℃暟")
+    private Integer outPlanTimes;
+
+    @ApiModelProperty(value = "浠婃棩鍑哄簱閲�")
+    private BigDecimal outTotal;
+
+    @ApiModelProperty(value = "浠婃棩鍑哄簱娆℃暟")
+    private Integer outTimes;
+
+    @ApiModelProperty(value = "鍑哄簱鑳藉姏鍗犳瘮")
+    private BigDecimal outRata;
+
+    @ApiModelProperty(value = "杩戜竷鏃ュ埌璐ф儏鍐�" , hidden = true)
+    private List<ArriveGoodsVO> arriveGoodsList;
+
+    @ApiModelProperty(value = "褰撳墠杩愯緭浠诲姟" , hidden = true)
+    private List<TransportTaskVO> transportTaskList;
+
+
+    @ApiModelProperty(value = "杩涢攢瀛樿繍钀� - 7鏃�" , hidden = true)
+    private List<SalesOperationVO> salesOperationWeekList;
+
+    @ApiModelProperty(value = "杩涢攢瀛樿繍钀� - 鏈堝害" , hidden = true)
+    private List<SalesOperationVO> salesOperationMonthList;
+
+    @ApiModelProperty(value = "杩涢攢瀛樿繍钀� - 骞村害" , hidden = true)
+    private List<SalesOperationVO> salesOperationYearList;
+
+    @ApiModelProperty(value = "搴撳瓨鍒╃敤鐜�" , hidden = true)
+    private List<StockRataVO> stockRataVOListList;
+
+
+
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/WorkEfficiencyVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/WorkEfficiencyVO.java
new file mode 100644
index 0000000..8a07d08
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/WorkEfficiencyVO.java
@@ -0,0 +1,24 @@
+package com.doumee.dao.web.response.platformReport;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 瀹炴椂浣滀笟鏁堢巼
+ *
+ * @Author : Rk
+ * @create 2024/10/25 10:59
+ */
+@Data
+public class WorkEfficiencyVO {
+
+    @ApiModelProperty(value = "浣滀笟鏃舵鏃堕棿 HH-mm  ")
+    private String workTime;
+
+    @ApiModelProperty(value = "鍒嗘椂浣滀笟閲� 鍗曚綅 涓囨敮")
+    private Integer workNum;
+
+    @ApiModelProperty(value = "绱浣滀笟閲� 鍗曚綅 涓囨敮")
+    private Integer totalWorkNum;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/YearDeviceDataVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/YearDeviceDataVO.java
new file mode 100644
index 0000000..04a7a8c
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/YearDeviceDataVO.java
@@ -0,0 +1,26 @@
+package com.doumee.dao.web.response.platformReport;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 鏈勾娑堥槻璁惧/璁炬柦缁存姢鎯呭喌
+ *
+ * @Author : Rk
+ * @create 2024/10/25 14:26
+ */
+@Data
+public class YearDeviceDataVO {
+
+
+    @ApiModelProperty(value = "宸茬淮淇濇暟閲�")
+    private Integer protectNum;
+
+    @ApiModelProperty(value = "璁″垝缁翠繚鏁�")
+    private Integer planProtectTotal;
+
+    @ApiModelProperty(value = "鏈湀鏂板缁翠繚")
+    private Integer monthAddNum;
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/SmsEmailService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/SmsEmailService.java
index c04968b..ddb2af4 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/SmsEmailService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/SmsEmailService.java
@@ -96,4 +96,5 @@
      * @return long
      */
     long count(SmsEmail smsEmail);
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
index 7f493e7..b0ed16f 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
@@ -17,6 +17,7 @@
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.*;
 import com.doumee.dao.business.dao.CompanyMapper;
+import com.doumee.dao.business.dao.SmsEmailMapper;
 import com.doumee.dao.business.dto.ApproveDTO;
 import com.doumee.dao.business.join.ApproveJoinMapper;
 import com.doumee.dao.business.join.CarUseBookJoinMapper;
@@ -40,7 +41,6 @@
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
index 1ba80f2..f62e20f 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
@@ -8,13 +8,14 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.*;
 import com.doumee.dao.business.*;
+import com.doumee.dao.business.dao.SmsEmailMapper;
 import com.doumee.dao.business.join.ApproveJoinMapper;
 import com.doumee.dao.business.join.CarUseBookJoinMapper;
 import com.doumee.dao.business.model.*;
 import com.doumee.dao.business.vo.ApproveDataVO;
 import com.doumee.dao.business.vo.DateIntervalVO;
+
 import com.doumee.dao.system.model.SystemDictData;
-import com.doumee.dao.system.model.SystemUser;
 import com.doumee.service.business.ApproveService;
 import com.doumee.service.business.CarUseBookService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -23,7 +24,6 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.doumee.service.business.third.EmayService;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
-import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -33,10 +33,8 @@
 import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
-import java.time.temporal.ChronoUnit;
 import java.util.*;
 import java.util.Date;
-import java.util.stream.Collectors;
 
 /**
  * 杞﹁締_鐢ㄨ溅鐢宠淇℃伅琛⊿ervice瀹炵幇
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
index a79a985..ea21e28 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
@@ -355,8 +355,111 @@
 
     @Override
     public List<Company> findList(Company company) {
-        QueryWrapper<Company> wrapper = new QueryWrapper<>(company);
-        return companyMapper.selectList(wrapper);
+        MPJLambdaWrapper<Company> queryWrapper = new MPJLambdaWrapper<>();
+        company.setIsdeleted(Constants.ZERO);
+        if (company.getId() != null) {
+            queryWrapper.eq(Company::getId, company.getId());
+        }
+        if (company.getCreator() != null) {
+            queryWrapper.eq(Company::getCreator, company.getCreator());
+        }
+        if (company.getCreateDate() != null) {
+            queryWrapper.ge(Company::getCreateDate, Utils.Date.getStart(company.getCreateDate()));
+            queryWrapper.le(Company::getCreateDate, Utils.Date.getEnd(company.getCreateDate()));
+        }
+        if (company.getEditor() != null) {
+            queryWrapper.eq(Company::getEditor, company.getEditor());
+        }
+        if (company.getEditDate() != null) {
+            queryWrapper.ge(Company::getEditDate, Utils.Date.getStart(company.getEditDate()));
+            queryWrapper.le(Company::getEditDate, Utils.Date.getEnd(company.getEditDate()));
+        }
+        if (company.getIsdeleted() != null) {
+            queryWrapper.eq(Company::getIsdeleted, company.getIsdeleted());
+        }
+        if (company.getName() != null) {
+            queryWrapper.like(Company::getName, company.getName());
+        }
+        if (company.getRemark() != null) {
+            queryWrapper.eq(Company::getRemark, company.getRemark());
+        }
+        if (company.getStatus() != null) {
+            queryWrapper.eq(Company::getStatus, company.getStatus());
+        }
+        if (company.getSortnum() != null) {
+            queryWrapper.eq(Company::getSortnum, company.getSortnum());
+        }
+        if (company.getImgurl() != null) {
+            queryWrapper.eq(Company::getImgurl, company.getImgurl());
+        }
+        if (company.getType() != null) {
+            queryWrapper.eq(Company::getType, company.getType());
+        }
+        if (company.getCategoryId() != null) {
+            queryWrapper.eq(Company::getCategoryId, company.getCategoryId());
+        }
+        if (company.getCode() != null) {
+            queryWrapper.eq(Company::getCode, company.getCode());
+        }
+        if (company.getParentId() != null) {
+            queryWrapper.eq(Company::getParentId, company.getParentId());
+        }
+        if (company.getLinkName() != null) {
+            queryWrapper.eq(Company::getLinkName, company.getLinkName());
+        }
+        if (company.getLinkPhone() != null) {
+            queryWrapper.eq(Company::getLinkPhone, company.getLinkPhone());
+        }
+        if (company.getHkId() != null) {
+            queryWrapper.eq(Company::getHkId, company.getHkId());
+        }
+        if (company.getHkStatus() != null) {
+            queryWrapper.eq(Company::getHkStatus, company.getHkStatus());
+        }
+        if (company.getHkDate() != null) {
+            queryWrapper.ge(Company::getHkDate, Utils.Date.getStart(company.getHkDate()));
+            queryWrapper.le(Company::getHkDate, Utils.Date.getEnd(company.getHkDate()));
+        }
+        if (company.getErpId() != null) {
+            queryWrapper.eq(Company::getErpId, company.getErpId());
+        }
+        if (company.getErpDate() != null) {
+            queryWrapper.ge(Company::getErpDate, Utils.Date.getStart(company.getErpDate()));
+            queryWrapper.le(Company::getErpDate, Utils.Date.getEnd(company.getErpDate()));
+        }
+        if (company.getErpStatus() != null) {
+            queryWrapper.eq(Company::getErpStatus, company.getErpStatus());
+        }
+        if (company.getDdId() != null) {
+            queryWrapper.eq(Company::getDdId, company.getDdId());
+        }
+        if (company.getDdDate() != null) {
+            queryWrapper.ge(Company::getDdDate, Utils.Date.getStart(company.getDdDate()));
+            queryWrapper.le(Company::getDdDate, Utils.Date.getEnd(company.getDdDate()));
+        }
+        if (company.getDdStatus() != null) {
+            queryWrapper.eq(Company::getDdStatus, company.getDdStatus());
+        }
+        if (company.getFsId() != null) {
+            queryWrapper.eq(Company::getFsId, company.getFsId());
+        }
+        if (company.getFsStatus() != null) {
+            queryWrapper.eq(Company::getFsStatus, company.getFsStatus());
+        }
+        if (company.getFsDate() != null) {
+            queryWrapper.ge(Company::getFsDate, Utils.Date.getStart(company.getFsDate()));
+            queryWrapper.le(Company::getFsDate, Utils.Date.getEnd(company.getFsDate()));
+        }
+        queryWrapper.orderByDesc(Company::getCreateDate);
+        queryWrapper.leftJoin(Company.class,Company::getId,Company::getParentId);
+        queryWrapper.select(" t.* ")
+                .select("(select count(m.id) from member m where m.COMPANY_ID=t.id and m.ISDELETED=0) as countNum") ;
+        queryWrapper.select("t1.name",Company::getParentName);
+        queryWrapper.select("t1.company_path",Company::getParentCompanyPath);
+        queryWrapper.eq(Objects.nonNull(company.getStatus()),Company::getStatus,Constants.ZERO);
+        queryWrapper.like(StringUtils.isNotBlank(company.getName()),Company::getName,company.getName());
+        queryWrapper.like(StringUtils.isNotBlank(company.getParentName()),"c.name",company.getParentName());
+        return companyMapper.selectList(queryWrapper);
     }
 
     @Override
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerParamServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerParamServiceImpl.java
index 0fc9114..29c0893 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerParamServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerParamServiceImpl.java
@@ -1,30 +1,23 @@
 package com.doumee.service.business.impl;
 
-import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
-import com.doumee.core.utils.SmsConstants;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.HiddenDangerParamMapper;
 import com.doumee.dao.business.MemberMapper;
-import com.doumee.dao.business.SmsConfigMapper;
-import com.doumee.dao.business.SmsEmailMapper;
 import com.doumee.dao.business.model.*;
 import com.doumee.service.business.HiddenDangerParamService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.doumee.service.business.third.EmayService;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
-import io.swagger.models.auth.In;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
-import org.checkerframework.checker.units.qual.C;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -67,7 +60,7 @@
                 throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝瀹夊叏鍛樹俊鎭笉姝g‘锛岃鎸夎姹傚~鍐欏唴瀹癸紒");
             }
            List<Member>  memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
-                    .eq(Member::getType,Constants.TWO)
+//                    .eq(Member::getType,Constants.TWO)
                     .eq(Member::getCompanyId,model.getCompanyId())
                     .in(Member::getId,ids)
                     .eq(Member::getIsdeleted,Constants.ZERO));
@@ -227,6 +220,7 @@
                 .eq(pageWrap.getModel().getEditor() != null, HiddenDangerParam::getEditor, pageWrap.getModel().getEditor())
                 .eq(pageWrap.getModel().getIsdeleted() != null, HiddenDangerParam::getIsdeleted, pageWrap.getModel().getIsdeleted())
                 .like(pageWrap.getModel().getName() != null, HiddenDangerParam::getName, pageWrap.getModel().getName())
+                .like(pageWrap.getModel().getCompanyName() != null, Company::getName, pageWrap.getModel().getCompanyName())
                 .eq(pageWrap.getModel().getRemark() != null, HiddenDangerParam::getRemark, pageWrap.getModel().getRemark())
                 .eq(pageWrap.getModel().getStatus() != null, HiddenDangerParam::getStatus, pageWrap.getModel().getStatus())
                 .eq(pageWrap.getModel().getSortnum() != null, HiddenDangerParam::getSortnum, pageWrap.getModel().getSortnum())
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java
index 8c93aed..4383839 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java
@@ -16,20 +16,19 @@
 import com.doumee.core.utils.SmsConstants;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.*;
+import com.doumee.dao.business.dao.SmsEmailMapper;
 import com.doumee.dao.business.model.*;
 import com.doumee.dao.system.MultifileMapper;
+
 import com.doumee.dao.system.join.NoticesJoinMapper;
 import com.doumee.dao.system.model.Multifile;
 import com.doumee.dao.system.model.Notices;
-import com.doumee.service.business.HiddenDangerLogService;
 import com.doumee.service.business.HiddenDangerService;
 import com.doumee.service.business.third.EmayService;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import org.apache.commons.lang3.StringUtils;
-import org.checkerframework.checker.units.qual.C;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index b87cef9..fcc146f 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -1125,6 +1125,7 @@
                 .selectAs(Company::getName,Member::getCompanyName) ;
         queryWrapper.selectAs(Position::getName,Member::getPositionName);
         queryWrapper.leftJoin(Position.class,Position::getId,Member::getPositionId);
+        queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
         if(StringUtils.isNotBlank(member.getName())){
             queryWrapper.like(Member::getName,member.getName());
         }
@@ -1139,6 +1140,12 @@
         }
         if(null != member.getCompanyId()) {
             queryWrapper.eq(Member::getCompanyId,member.getCompanyId());
+        }
+        if(null != member.getQuerySpecial() && Constants.equalsInteger(member.getQuerySpecial(),Constants.ONE)){
+            String companySpecialId = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SPECIAL_COMPANY_ID).getCode();
+            if(StringUtils.isNotBlank(companySpecialId)){
+                queryWrapper.apply(" find_in_set('"+companySpecialId+"',REPLACE(t2.company_path,'/','')) ");
+            }
         }
         queryWrapper.eq(Member::getIsdeleted,Constants.ZERO);
         queryWrapper.eq(Member::getWorkStatus,Constants.ZERO);
@@ -1375,6 +1382,8 @@
         queryWrapper.selectAs(Company::getCompanyNamePath,Member::getCompanyNamePath);
         queryWrapper.selectAs(Company::getCompanyPath,Member::getCompanyPath);
         queryWrapper.select(" ( select count(1) from member_card mc where mc.isdeleted = 0 and  mc.member_id = t.id ) as  memberCardCount ");
+        queryWrapper.select(" ( select max(tt.END_TIME) from train_time tt where tt.isdeleted = 0 and  tt.member_id = t.id ) as  trainEndTime ");
+
         queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,Member::getEditor);
         queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
         queryWrapper.selectAs(Position::getName,Member::getPositionName);
@@ -1629,9 +1638,11 @@
         }catch (Exception e){
 
         }
-        List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>()
-                .lambda().eq(Member::getIsdeleted,Constants.ZERO)
-                .eq(Member::getType,Constants.memberType.internal)
+        List<Member> memberList = memberJoinMapper.selectJoinList(Member.class,new MPJLambdaWrapper<Member>()
+                .selectAll(Member.class)
+                .leftJoin(Company.class,Company::getId,Member::getCompanyId)
+                .eq(Member::getIsdeleted,Constants.ZERO)
+                .eq(Company::getType,Constants.ZERO)
                 .eq(Member::getStatus,Constants.ZERO)
                 .isNotNull(Member::getHkId)
                 .apply("to_days(LAST_VISIT_DATE)+ "+days+" < to_days(now())" ));
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformBooksServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformBooksServiceImpl.java
index a5a659b..9f757c2 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformBooksServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformBooksServiceImpl.java
@@ -1,7 +1,5 @@
 package com.doumee.service.business.impl;
 
-import cn.emay.sdk.util.StringUtil;
-import com.alibaba.nacos.shaded.org.checkerframework.checker.units.qual.A;
 import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
@@ -13,11 +11,12 @@
 import com.doumee.core.utils.SmsConstants;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.*;
+import com.doumee.dao.business.dao.SmsEmailMapper;
 import com.doumee.dao.business.join.ApproveJoinMapper;
 import com.doumee.dao.business.model.*;
 import com.doumee.dao.business.vo.ApproveDataVO;
+
 import com.doumee.dao.system.join.NoticesJoinMapper;
-import com.doumee.dao.web.reqeust.ConfirmTaskDTO;
 import com.doumee.dao.web.reqeust.PlatformBooksApplyDTO;
 import com.doumee.dao.web.reqeust.PlatformBooksCheckNumDTO;
 import com.doumee.dao.web.reqeust.RevokeDTO;
@@ -29,7 +28,6 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.doumee.service.business.third.EmayService;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.tomcat.util.bcel.Const;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformGroupServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformGroupServiceImpl.java
index 6f5dc78..e817a2a 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformGroupServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformGroupServiceImpl.java
@@ -304,18 +304,6 @@
                 platformWorkVO.setCallNum(
                         platformJobs.stream().filter(i->Constants.equalsInteger(i.getPlatformId(),platform.getId())  && Constants.equalsInteger(i.getStatus(),Constants.PlatformJobStatus.CALLED.getKey())).collect(Collectors.toList()).size()
                 );
-                System.out.printf(String.valueOf(platformJobs.stream().filter(i->
-                        Constants.equalsInteger(i.getStatus(),Constants.PlatformJobStatus.WAIT_CALL.getKey())
-                ).collect(Collectors.toList()).size())
-                );
-                System.out.printf(String.valueOf(platformJobList.stream().filter(i->
-                                Constants.equalsInteger(i.getStatus(),Constants.PlatformJobStatus.IN_WAIT.getKey()) ||
-                                        ( Constants.equalsInteger(platform.getId(),i.getPlatformId()) &&
-                                                Constants.equalsInteger(i.getStatus(),Constants.PlatformJobStatus.TRANSFERING.getKey())
-                                        )
-                        ).collect(Collectors.toList()).size())
-                );
-
                 platformWorkVO.setWaitNum(
 
                         platformJobs.stream().filter(i->
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java
index a708a19..0145eaa 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java
@@ -18,12 +18,14 @@
 import com.doumee.core.tms.model.response.TmsLockStatusQueryResponse;
 import com.doumee.core.utils.*;
 import com.doumee.dao.business.*;
+import com.doumee.dao.business.dao.SmsEmailMapper;
 import com.doumee.dao.business.join.PlatformJobJoinMapper;
 import com.doumee.dao.business.join.PlatformJoinMapper;
 import com.doumee.dao.business.model.*;
 import com.doumee.dao.business.vo.LargeScreenDataVO;
 import com.doumee.dao.openapi.request.*;
 import com.doumee.dao.openapi.response.*;
+
 import com.doumee.dao.system.model.SystemUser;
 import com.doumee.dao.web.reqeust.*;
 import com.doumee.dao.web.response.DriverHomeVO;
@@ -35,10 +37,8 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.doumee.service.business.impl.hksync.HkSyncPushServiceImpl;
-import com.doumee.service.business.impl.thrid.WmsServiceImpl;
 import com.doumee.service.business.third.EmayService;
 import com.doumee.service.business.third.TmsService;
-import com.doumee.service.business.third.WmsService;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -418,22 +418,28 @@
 
     public void queryWaitNum(PlatformJob platformJob){
         if(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WAIT_CALL.getKey())){
-            //鏌ヨ鍓嶆柟鎺掗槦鏁伴噺
-            List<PlatformJob> lineUpNum =  platformJobMapper.selectList(new QueryWrapper<PlatformJob>().lambda()
+            //鏌ヨ褰撳墠鎵�鏈夋帓闃熸暟閲�
+            List<PlatformJob> lineUpAllList =  platformJobMapper.selectList(new QueryWrapper<PlatformJob>().lambda()
                     .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                     .in(PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CALL.getKey()
                             ,Constants.PlatformJobStatus.IN_WAIT.getKey()
                             ,Constants.PlatformJobStatus.TRANSFERING.getKey())
-                    .gt(PlatformJob::getSignDate,platformJob.getSignDate())
+//                    .lt(PlatformJob::getSignDate,platformJob.getSignDate())
                     .eq(PlatformJob::getPlatformGroupId,platformJob.getPlatformGroupId())
-                    .like(PlatformJob::getArriveDate,DateUtil.dateTypeToString(platformJob.getArriveDate(),"yyyy-MM-dd")));
-            platformJob.setLineUpNum(lineUpNum.size());
-            BigDecimal sumWorkRate = platformJob.getTotalNum();
-            for (PlatformJob linePlatformJob:lineUpNum) {
+//                    .like(PlatformJob::getArriveDate,DateUtil.dateTypeToString(platformJob.getArriveDate(),"yyyy-MM-dd"))
+            );
+
+            for (PlatformJob linePlatformJob:lineUpAllList) {
                 this.getWmsJobData(linePlatformJob);
-                sumWorkRate = sumWorkRate.add(linePlatformJob.getTotalNum());
             }
-            if(lineUpNum.size()>Constants.ZERO){
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(lineUpAllList)){
+                //鏌ヨ鎺掗槦鍦ㄦ垜鍓嶉潰鐨勬暟鎹�
+                List<PlatformJob> lineUpNum = lineUpAllList.stream().filter(i->Objects.nonNull(i.getSignDate())&&i.getSignDate().getTime()<platformJob.getSignDate().getTime()).collect(Collectors.toList());
+                platformJob.setLineUpNum(lineUpNum.size());
+                BigDecimal sumWorkRate = platformJob.getTotalNum();
+                for (PlatformJob linePlatformJob:lineUpNum) {
+                    sumWorkRate = sumWorkRate.add(linePlatformJob.getTotalNum());
+                }
                 //璁$畻棰勮绛夊緟鏃堕棿
                 List<Platform> platformList = platformJoinMapper.selectList(new QueryWrapper<Platform>().lambda().eq(Platform::getIsdeleted,Constants.ZERO).eq(Platform::getGroupId,platformJob.getPlatformGroupId()));
                 BigDecimal workRate = platformList.stream().map(m->m.getWorkRate()).reduce(BigDecimal.ZERO,BigDecimal::add);
@@ -497,7 +503,6 @@
                 .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId)
                 .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                 .eq(PlatformJob::getDrivierPhone,loginUserInfo.getMobile())
-//                .like(PlatformJob::getArriveDate,DateUtil.getCurrDate())
                 .orderByDesc(PlatformJob::getId)
         );
         for (PlatformJob platformJob:platformJobList) {
@@ -743,12 +748,12 @@
                             .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId)
                             .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                             .eq(PlatformJob::getPlatformGroupId,platformGroup.getId())
-                            .le(Objects.nonNull(platformJob),PlatformJob::getSignDate,DateUtil.dateTypeToString(platformJob.getSignDate(),"yyyy-MM-dd HH:mm:ss"))
                             .in(PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CALL.getKey(),
                                     Constants.PlatformJobStatus.IN_WAIT.getKey(),
                                     Constants.PlatformJobStatus.CALLED.getKey())
-                            .orderByDesc(PlatformJob::getStatus)
-                            .orderByDesc(PlatformJob::getSignDate));
+                            .orderByAsc(PlatformJob::getSignDate)
+                            .orderByAsc(PlatformJob::getSignNum)
+            );
             platformGroup.setSignJobList(platformJobSignInList);
             //鏌ヨ褰撳墠鏈堝彴缁勪笅
             List<PlatformJob> platformJobWorkList = platformJobJoinMapper.selectJoinList(PlatformJob.class,
@@ -1181,7 +1186,8 @@
                 SmsConstants.platformJobContent.platformJobMove,oldPlatform.getName(),platform.getName()
         );
 
-        platformJob.setPlatformName(platform.getName());
+        platformJob.setPlatformName(oldPlatform.getName());
+        platformJob.setPlatformId(oldPlatform.getId());
         this.broadcastAndLEed(platformJob, StringUtils.isBlank(oldPlatform.getLedContent())?Constants.PlatformLedContent.IDEL_CONTNET.getName():oldPlatform.getLedContent(),
                 null
         );
@@ -1391,8 +1397,6 @@
             //TODO 澶栧崗杞﹀嵏璐� 鎴栬�� 甯傚叕鍙歌溅鍗歌揣 鍒欐牴鎹换鍔℃儏鍐�
 
         }
-
-
 
 
         //鍙戦�佺煭淇′俊鎭�
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformWmsJobServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformWmsJobServiceImpl.java
index 1a0d1ad..b17522e 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformWmsJobServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformWmsJobServiceImpl.java
@@ -119,10 +119,10 @@
                                     wmsJobContractVO.getPlatformWmsDetailList().get(Constants.ZERO).getLockStatus()
                             );
                         }
+                        wmsJobContractVO.setStatus(
+                                wmsJobContractVO.getPlatformWmsDetailList().get(Constants.ZERO).getStatus()
+                        );
                     }
-                    wmsJobContractVO.setStatus(
-                            wmsJobContractVO.getPlatformWmsDetailList().get(Constants.ZERO).getStatus()
-                    );
                 }
                 wmsJobContractVOList.add(wmsJobContractVO);
             }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java
index c04756c..c453c2c 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java
@@ -1,6 +1,7 @@
 package com.doumee.service.business.impl;
 
-import com.alibaba.nacos.shaded.org.checkerframework.checker.units.qual.A;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -8,29 +9,27 @@
 import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
-import com.doumee.core.model.LoginUserInfo;
+import com.doumee.core.haikang.model.HKConstants;
+import com.doumee.core.haikang.model.param.BaseResponse;
+import com.doumee.core.haikang.service.HKService;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
-import com.doumee.core.utils.Constants;
-import com.doumee.core.utils.DateUtil;
-import com.doumee.core.utils.SmsConstants;
-import com.doumee.core.utils.Utils;
+import com.doumee.core.utils.*;
 import com.doumee.dao.business.*;
+import com.doumee.dao.business.dao.SmsEmailMapper;
 import com.doumee.dao.business.model.*;
 import com.doumee.service.business.SmsEmailService;
 import com.doumee.service.business.third.EmayService;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.shiro.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
-import java.util.Arrays;
+import java.net.URLEncoder;
+import java.util.*;
 import java.util.Date;
-import java.util.List;
-import java.util.Objects;
 
 /**
  * 鐭俊閭欢淇℃伅琛⊿ervice瀹炵幇
@@ -51,7 +50,7 @@
     @Value("${debug_model}")
     private boolean debugModel;
 
-    public static void isCaptcheValide(SmsEmailMapper smsEmailMapper, String phone, String captche) {
+    public static void isCaptcheValide(com.doumee.dao.business.dao.SmsEmailMapper smsEmailMapper, String phone, String captche) {
         SmsEmail model = smsEmailMapper.selectOne(new QueryWrapper<SmsEmail>().lambda()
                 .eq(SmsEmail::getType, Constants.ZERO)
                 .eq(SmsEmail::getPhone, phone)
@@ -75,6 +74,8 @@
         model.setEditDate(new Date());
         smsEmailMapper.updateById(model);
     }
+
+
 
     @Override
     public Integer create(SmsEmail smsEmail) {
@@ -100,10 +101,11 @@
 
         String content = systemDictDataBiz.queryByCode(Constants.SMS,Constants.SMS_COMNAME).getCode()+"楠岃瘉鐮佷负锛�"+code+"锛屾楠岃瘉鐮佹湁鏁堜负3鍒嗛挓銆傝鍕挎硠闇�";
 
-        boolean result=   emayService.sendSingleSms(smsEmail.getPhone(),content);
-        if(!result){
-            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鐭俊楠岃瘉鐮佸彂閫佸け璐ワ紝璇风◢鍚庨噸璇曪紒");
-        }
+//        boolean result=   emayService.sendSingleSms(smsEmail.getPhone(),content);
+        emayService.sendSmsByHk(smsEmail.getPhone(),content);
+//        if(!result){
+//            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鐭俊楠岃瘉鐮佸彂閫佸け璐ワ紝璇风◢鍚庨噸璇曪紒");
+//        }
 
         smsEmail.setRemark(code);
         smsEmail.setIsdeleted(Constants.ZERO);
@@ -265,7 +267,7 @@
      * @param msg
      * @param auditUser
      */
-    public static void sendVisitSms(SystemDictDataBiz systemDictDataBiz, EmayService emayService , SmsEmailMapper smsEmailMapper , SmsConfigMapper smsConfigMapper,
+    public static void sendVisitSms(SystemDictDataBiz systemDictDataBiz, EmayService emayService , com.doumee.dao.business.dao.SmsEmailMapper smsEmailMapper , SmsConfigMapper smsConfigMapper,
                                     VisitsMapper visitsMapper, Integer objId, String objCode, String msg, List<String> auditUser){
         try{
             SmsConfig smsConfig = smsConfigMapper.selectOne(new QueryWrapper<SmsConfig>().lambda().eq(SmsConfig::getCode,
@@ -319,8 +321,8 @@
      * @param msg
      * @param auditUser
      */
-    public static void sendVisitReportSms(SystemDictDataBiz systemDictDataBiz, EmayService emayService , SmsEmailMapper smsEmailMapper , SmsConfigMapper smsConfigMapper,
-                                    VisitsMapper visitsMapper, Integer objId, String objCode, String msg, List<String> auditUser){
+    public static void sendVisitReportSms(SystemDictDataBiz systemDictDataBiz, EmayService emayService , com.doumee.dao.business.dao.SmsEmailMapper smsEmailMapper , SmsConfigMapper smsConfigMapper,
+                                          VisitsMapper visitsMapper, Integer objId, String objCode, String msg, List<String> auditUser){
         try{
             SmsConfig smsConfig = smsConfigMapper.selectOne(new QueryWrapper<SmsConfig>().lambda().eq(SmsConfig::getCode,
                     objCode).last(" limit 1 "));
@@ -373,8 +375,8 @@
      * @param objCode
      * @param auditUser
      */
-    public static void sendHiddenDangerSms(SystemDictDataBiz systemDictDataBiz, EmayService emayService , SmsEmailMapper smsEmailMapper , SmsConfigMapper smsConfigMapper,
-                                    HiddenDangerMapper hiddenDangerMapper, Integer objId, String objCode,List<String> auditUser){
+    public static void sendHiddenDangerSms(SystemDictDataBiz systemDictDataBiz, EmayService emayService , com.doumee.dao.business.dao.SmsEmailMapper smsEmailMapper , SmsConfigMapper smsConfigMapper,
+                                           HiddenDangerMapper hiddenDangerMapper, Integer objId, String objCode, List<String> auditUser){
         try{
             SmsConfig smsConfig = smsConfigMapper.selectOne(new QueryWrapper<SmsConfig>().lambda().eq(SmsConfig::getCode,
                     objCode).last(" limit 1 "));
@@ -407,8 +409,8 @@
      * @param msg
      * @param userList
      */
-    public static void sendCarUseSms(SystemDictDataBiz systemDictDataBiz, EmayService emayService , SmsEmailMapper smsEmailMapper , SmsConfigMapper smsConfigMapper,
-                                           CarUseBookMapper carUseBookMapper, Integer objId, String objCode, String msg, List<String> userList){
+    public static void sendCarUseSms(SystemDictDataBiz systemDictDataBiz, EmayService emayService , com.doumee.dao.business.dao.SmsEmailMapper smsEmailMapper , SmsConfigMapper smsConfigMapper,
+                                     CarUseBookMapper carUseBookMapper, Integer objId, String objCode, String msg, List<String> userList){
         //鎮ㄦ湁涓�鏉°�愮敤杞︾敵璇枫�戦渶瑕佸鐞嗭紝璇︾粏淇℃伅璇峰墠寰�寰俊鍏紬鍙锋煡鐪嬨��
         try{
             SmsConfig smsConfig = smsConfigMapper.selectOne(new QueryWrapper<SmsConfig>().lambda().eq(SmsConfig::getCode,
@@ -448,8 +450,8 @@
      * @param msg
      * @param auditUser
      */
-    public static void sendPlatformBookSms(SystemDictDataBiz systemDictDataBiz,EmayService emayService ,SmsEmailMapper smsEmailMapper ,SmsConfigMapper smsConfigMapper,
-            PlatformBooksMapper platformBooksMapper,Integer objId,String objCode,String msg,List<String> auditUser){
+    public static void sendPlatformBookSms(SystemDictDataBiz systemDictDataBiz, EmayService emayService , com.doumee.dao.business.dao.SmsEmailMapper smsEmailMapper , SmsConfigMapper smsConfigMapper,
+                                           PlatformBooksMapper platformBooksMapper, Integer objId, String objCode, String msg, List<String> auditUser){
         try{
             SmsConfig smsConfig = smsConfigMapper.selectOne(new QueryWrapper<SmsConfig>().lambda().eq(SmsConfig::getCode,
                     objCode).last(" limit 1 "));
@@ -493,8 +495,8 @@
      * @param objCode
      * @param platformName
      */
-    public static void sendPlatformJobSms(SystemDictDataBiz systemDictDataBiz,EmayService emayService , SmsEmailMapper smsEmailMapper , SmsConfigMapper smsConfigMapper,
-                                          PlatformJobMapper platformJobMapper, Integer objId, String objCode, String platformName,String newPlatformName){
+    public static void sendPlatformJobSms(SystemDictDataBiz systemDictDataBiz, EmayService emayService , com.doumee.dao.business.dao.SmsEmailMapper smsEmailMapper , SmsConfigMapper smsConfigMapper,
+                                          PlatformJobMapper platformJobMapper, Integer objId, String objCode, String platformName, String newPlatformName){
         //platformJobNewJob	{杞︾墝鍙穧杞︿富鎮ㄥソ锛屾偍鏈変竴涓柊鐨勮繍杈撲换鍔★紝璇︾粏淇℃伅璇峰墠寰�寰俊鍏紬鍙锋煡鐪嬨��
         //platformJobStopJob	{杞︾墝鍙穧杞︿富鎮ㄥソ锛屾偍鐨勮繍杈撲换鍔″凡琚彇娑堬紝璇︾粏淇℃伅璇峰墠寰�寰俊鍏紬鍙锋煡鐪嬨��
         //platformJobCallIn	{杞︾墝鍙穧杞︿富鎮ㄥソ锛岃鍦�10鍒嗛挓鍐咃紝鍓嶅線鍥尯绛夊緟鍖虹瓑寰呭彨鍙蜂綔涓氥��
@@ -542,7 +544,8 @@
             smsEmail.setObjType(objType);
             smsEmail.setObjId(objId);
             smsEmailMapper.insert(smsEmail);
-            emayService.sendSingleSms(phone,content);
+            emayService.sendSmsByHk(phone,content);
+
 
         }
     }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
index 63e8713..188a1d8 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -12,12 +12,10 @@
 import com.doumee.core.erp.model.openapi.response.erp.ApproveInfoResponse;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.haikang.model.HKConstants;
-import com.doumee.core.haikang.model.param.BaseListPageResponse;
 import com.doumee.core.haikang.model.param.BaseResponse;
 import com.doumee.core.haikang.model.param.request.FacePictureCheckRequest;
 import com.doumee.core.haikang.model.param.request.VisitAppointmentOutRequest;
 import com.doumee.core.haikang.model.param.request.VisitAppointmentRequest;
-import com.doumee.core.haikang.model.param.respose.AscDeviceStatusInfoResponse;
 import com.doumee.core.haikang.model.param.respose.FacePictureCheckResponse;
 import com.doumee.core.haikang.model.param.respose.VisitAppointmentResponse;
 import com.doumee.core.haikang.service.HKService;
@@ -30,12 +28,13 @@
 import com.doumee.dao.admin.response.PCWorkPlatformDataVO;
 import com.doumee.dao.business.*;
 import com.doumee.dao.business.dao.CompanyMapper;
+import com.doumee.dao.business.dao.SmsEmailMapper;
 import com.doumee.dao.business.dto.ResetPasswordDTO;
 import com.doumee.dao.business.join.DeviceJoinMapper;
 import com.doumee.dao.business.join.VisitsJoinMapper;
 import com.doumee.dao.business.model.*;
+
 import com.doumee.dao.system.SystemUserMapper;
-import com.doumee.dao.system.dto.NoticesDTO;
 import com.doumee.dao.system.dto.ResetSystemUserPwdDTO;
 import com.doumee.dao.system.join.NoticesJoinMapper;
 import com.doumee.dao.system.model.Notices;
@@ -58,23 +57,13 @@
 import com.doumee.service.business.third.EmayService;
 import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
-import io.swagger.models.auth.In;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
-import sun.misc.BASE64Encoder;
 
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
 import java.util.*;
 import java.util.Date;
 import java.util.stream.Collectors;
@@ -1551,7 +1540,7 @@
 
             //浠婃棩鍦ㄥ洯浜烘暟
             pcWorkPlatformDataVO.setTodayInParkUserNum(
-                    retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.TWO)).count()
+                    retentionList.stream().filter(i->!Constants.equalsInteger(i.getType(),Constants.THREE)).count()
             );
 
             pcWorkPlatformDataVO.setTodayInUserNum(Constants.ZERO);
@@ -1567,7 +1556,7 @@
 
             //鍦ㄥ洯璁垮鏁伴噺
             pcWorkPlatformDataVO.setInParkVisitUserNum(
-                    retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.TWO)&&Objects.isNull(i.getCompanyType())).count()
+                    retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ONE)&&Objects.isNull(i.getCompanyType())).count()
             );
             pcWorkPlatformDataVO.setVisitUserNum(Constants.ZERO);
             pcWorkPlatformDataVO.setSignLevelNum(Constants.ZERO);
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPlatformsServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPlatformsServiceImpl.java
index ec7fc9d..8e507e5 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPlatformsServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPlatformsServiceImpl.java
@@ -3,6 +3,7 @@
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.haikang.model.HKConstants;
@@ -20,14 +21,15 @@
 import com.doumee.dao.business.model.Platform;
 import com.doumee.dao.business.model.PlatformDevice;
 import com.doumee.dao.business.model.PlatformJob;
+import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 璁惧淇℃伅琛⊿ervice瀹炵幇
@@ -42,6 +44,10 @@
     private PlatformJobMapper platformJobMapper;
     @Autowired
     private PlatformDeviceMapper platformDeviceMapper;
+    @Autowired
+    @Lazy
+    private SystemDictDataBiz systemDictDataBiz;
+
 
     /**
      * 鍚屾娴峰悍鏈堝彴鏁版嵁
@@ -276,4 +282,46 @@
         return  true;
     }
 
+
+
+    public  List<Integer> getMenuConfig(String userId){
+        try {
+            List<Integer> resultList= new ArrayList<>();
+            Map<String,String> param = new HashMap<>();
+            param.put("userId",userId);
+            BaseResponse<MenuDataResponse> result = HKService.getMenuConfig(param);
+            if(result !=null){
+                if(!StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE)){
+                    throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),result.getMsg());
+                }
+                MenuDataResponse menuDataResponse = result.getData();
+                List<String> list = menuDataResponse.getList();
+                if(CollectionUtils.isNotEmpty(list)){
+                    //鍒嗗埆鍒ゆ柇4涓彍鍗�
+                    if(list.stream().filter(i->i.equals("Infovision iPark Platform_"+HKConstants.MenuPageId.afzx)).collect(Collectors.toList()).size()>Constants.ZERO){
+                        resultList.add(0);
+                    }
+                    if(list.stream().filter(i->i.equals("Infovision iPark Platform_"+HKConstants.MenuPageId.xkzx)).collect(Collectors.toList()).size()>Constants.ZERO){
+                        resultList.add(1);
+                    }
+                    if(list.stream().filter(i->i.equals("Infovision iPark Platform_"+HKConstants.MenuPageId.ngzx)).collect(Collectors.toList()).size()>Constants.ZERO){
+                        resultList.add(2);
+                    }
+                    if(list.stream().filter(i->i.equals("Infovision iPark Platform_"+HKConstants.MenuPageId.jsc)).collect(Collectors.toList()).size()>Constants.ZERO){
+                        resultList.add(3);
+                    }
+                    if(list.stream().filter(i->i.equals("Infovision iPark Platform_"+HKConstants.MenuPageId.kqgzt)).collect(Collectors.toList()).size()>Constants.ZERO){
+                        resultList.add(4);
+                    }
+                }
+                return resultList;
+            }else{
+                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鑾峰彇鑿滃崟澶辫触锛�");
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鑾峰彇鑿滃崟澶辫触锛岃绋嶅悗閲嶈瘯锛�");
+    }
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
index 23383bc..98a540a 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
@@ -27,6 +27,12 @@
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.util.EntityUtils;
 import org.checkerframework.checker.units.qual.C;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -34,6 +40,7 @@
 import org.springframework.util.CollectionUtils;
 
 import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -88,6 +95,13 @@
     private PlatformLogMapper platformLogMapper;
     @Autowired
     private PlatformWarnEventServiceImpl platformWarnEventService;
+
+
+
+
+
+
+
     /**
      * 娴峰悍闂ㄧ浜嬩欢鎺ㄩ��
      * @param param
@@ -840,10 +854,8 @@
                                     Constants.PlatformJobStatus.IN_WAIT.getKey(),
                                     Constants.PlatformJobStatus.CALLED.getKey(),
                                     Constants.PlatformJobStatus.WORKING.getKey(),
-                                    Constants.PlatformJobStatus.DONE.getKey(),
                                     Constants.PlatformJobStatus.TRANSFERING.getKey(),
-                                    Constants.PlatformJobStatus.EXCEPTION.getKey(),
-                                    Constants.PlatformJobStatus.AUTHED_LEAVE.getKey()
+                                    Constants.PlatformJobStatus.EXCEPTION.getKey()
                             )
                     )==Constants.ZERO){
                         PlatformJob platformJob = platformJobMapper.selectOne(new QueryWrapper<PlatformJob>().lambda()
@@ -1263,12 +1275,12 @@
             if(StringUtils.isBlank(device.getHkId())){
                 continue;
             }
-            if(Constants.equalsInteger(device.getType(),Constants.ZERO)){
+            /*if(Constants.equalsInteger(device.getType(),Constants.ZERO)){
                 //濡傛灉鏄疞ED
                 PlatformBroadcastLog log = dealLedContentBiz(model.getId(),device.getHkNo(),device.getName(),content,speed,1);
                 logList.add(log);
                 ledList.add(device.getHkId());
-            }else  if(Constants.equalsInteger(device.getType(),Constants.TWO)){
+            }else  */if(Constants.equalsInteger(device.getType(),Constants.TWO)){
                 //濡傛灉鏄箍鎾偣
                 bNames += device.getName()+";";
                 broadcastList.add(device.getHkId());
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/WmsServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/WmsServiceImpl.java
index 27e8c56..a08a5ab 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/WmsServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/WmsServiceImpl.java
@@ -13,11 +13,14 @@
 import com.doumee.core.wms.model.response.WmsBaseResponse;
 import com.doumee.core.wms.model.response.WmsInventoryDataResponse;
 import com.doumee.dao.business.*;
+import com.doumee.dao.business.dao.SmsEmailMapper;
 import com.doumee.dao.business.model.*;
+
 import com.doumee.service.business.impl.SmsEmailServiceImpl;
 import com.doumee.service.business.third.EmayService;
 import com.doumee.service.business.third.WmsService;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import io.swagger.models.auth.In;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -85,10 +88,22 @@
         }
         WmsOrderPlatformRequest  param  = new WmsOrderPlatformRequest();
          param.setData(new ArrayList<>());
-         WmsOrderPlatformInfoRequest o = new WmsOrderPlatformInfoRequest();
-         o.setCarrierBillCode(job.getBillCode());
-         o.setRailwayNo(job.getPlatformWmsCode());
-         param.getData().add(o);
+
+        List<PlatformWmsDetail> platformWmsDetailList = platformWmsDetailMapper.selectList(new QueryWrapper<PlatformWmsDetail>().lambda()
+                .eq(PlatformWmsDetail::getJobId,job.getId())
+                .eq(PlatformWmsDetail::getIsdeleted,Constants.ZERO)
+        );
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(platformWmsDetailList)){
+            for (PlatformWmsDetail platformWmsDetail:platformWmsDetailList) {
+                if(StringUtils.isNotBlank(platformWmsDetail.getIocode())){
+                    WmsOrderPlatformInfoRequest o = new WmsOrderPlatformInfoRequest();
+                    o.setCarrierBillCode(platformWmsDetail.getIocode());
+                    o.setRailwayNo(job.getPlatformWmsCode());
+                    param.getData().add(o);
+                }
+            }
+        }
+
          String url = type == 0?systemDictDataBiz.queryByCode(Constants.WMS_PARAM,Constants.WMS_INBOUND_PLATFROM_URL).getCode():
                  systemDictDataBiz.queryByCode(Constants.WMS_PARAM,Constants.WMS_OUTBOUND_PLATFROM_URL).getCode();;
          String name = type ==0?"銆怶MS銆戝叆搴撲綔涓氬崟鍒嗛厤鏈堝彴":"銆怶MS銆戝嚭搴撲綔涓氱殑鍒嗛厤鏈堝彴";
@@ -503,6 +518,35 @@
                     .set(PlatformWmsDetail::getStatus,Constants.TWO)
                     .in(PlatformWmsDetail::getIocode,iocodeList)
                     .eq(PlatformWmsDetail::getIsdeleted, Constants.ZERO));
+            
+            platformWmsJobMapper.update(null,new UpdateWrapper<PlatformWmsJob>().lambda()
+                    .set(PlatformWmsJob::getStatus,Constants.TWO)
+                    .in(PlatformWmsJob::getIocode,iocodeList)
+                    .eq(PlatformWmsJob::getIsdeleted, Constants.ZERO));
+
+            List<PlatformWmsJob> platformWmsJob = platformWmsJobMapper.selectList(new QueryWrapper<PlatformWmsJob>().lambda()
+                    .in(PlatformWmsJob::getIocode,iocodeList)
+                    .eq(PlatformWmsJob::getIsdeleted, Constants.ZERO)
+            );
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(platformWmsJob)){
+                List<Integer> jobIds = platformWmsJob.stream().filter(i->Objects.nonNull(i.getJobId())).map(i->i.getJobId()).collect(Collectors.toList());
+                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(jobIds)){
+                    Set<Integer> setJobIds = new HashSet<>(jobIds);
+                    platformJobMapper.update(null,new UpdateWrapper<PlatformJob>()
+                            .lambda()
+                            .set(PlatformJob::getStatus,Constants.PlatformJobStatus.CANCEL.getKey())
+                            .in(PlatformJob::getId,setJobIds)
+                    );
+                    for (Integer jobId:setJobIds
+                    ) {
+                        SmsEmailServiceImpl.sendPlatformJobSms(systemDictDataBiz,
+                                emayService,smsEmailMapper,smsConfigMapper,platformJobMapper,jobId,
+                                SmsConstants.platformJobContent.platformJobStopJob,null,null
+                        );
+                    }
+                }
+            }
+
         }catch (Exception e){
             log.error("銆怶MS銆戝鐞嗗叆搴撳彇娑堥�氱煡涓氬姟===============涓氬姟澶勭悊寮傚父"+e.getMessage());
             return returnFailReuslt("涓氬姟澶勭悊寮傚父");
@@ -534,6 +578,36 @@
                     .set(PlatformWmsDetail::getStatus,Constants.TWO)
                     .in(PlatformWmsDetail::getIocode,iocodeList)
                     .eq(PlatformWmsDetail::getIsdeleted, Constants.ZERO));
+
+            platformWmsJobMapper.update(null,new UpdateWrapper<PlatformWmsJob>().lambda()
+                    .set(PlatformWmsJob::getStatus,Constants.TWO)
+                    .in(PlatformWmsJob::getIocode,iocodeList)
+                    .eq(PlatformWmsJob::getIsdeleted, Constants.ZERO));
+
+            List<PlatformWmsJob> platformWmsJob = platformWmsJobMapper.selectList(new QueryWrapper<PlatformWmsJob>().lambda()
+                    .in(PlatformWmsJob::getIocode,iocodeList)
+                    .eq(PlatformWmsJob::getIsdeleted, Constants.ZERO)
+            );
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(platformWmsJob)){
+                List<Integer> jobIds = platformWmsJob.stream().filter(i->Objects.nonNull(i.getJobId())).map(i->i.getJobId()).collect(Collectors.toList());
+                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(jobIds)){
+                    Set<Integer> setJobIds = new HashSet<>(jobIds);
+                    platformJobMapper.update(null,new UpdateWrapper<PlatformJob>()
+                            .lambda()
+                            .set(PlatformJob::getStatus,Constants.PlatformJobStatus.CANCEL.getKey())
+                            .in(PlatformJob::getId,setJobIds)
+                    );
+                    for (Integer jobId:setJobIds
+                         ) {
+                        SmsEmailServiceImpl.sendPlatformJobSms(systemDictDataBiz,
+                                emayService,smsEmailMapper,smsConfigMapper,platformJobMapper,jobId,
+                                SmsConstants.platformJobContent.platformJobStopJob,null,null
+                        );
+                    }
+                }
+            }
+
+
         }catch (Exception e){
             log.error("銆怶MS銆戝嚭搴撳彇娑堥�氱煡浠诲姟涓氬姟澶勭悊===============涓氬姟澶勭悊寮傚父"+e.getMessage());
             return returnFailReuslt("涓氬姟澶勭悊寮傚父");
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/third/EmayService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/third/EmayService.java
index d223a2b..128f8aa 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/third/EmayService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/third/EmayService.java
@@ -6,15 +6,23 @@
 import cn.emay.sdk.core.dto.sms.response.SmsResponse;
 import com.alibaba.fastjson.JSONObject;
 import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.haikang.model.HKConstants;
+import com.doumee.core.haikang.model.param.BaseResponse;
+import com.doumee.core.haikang.service.HKService;
 import com.doumee.core.utils.Constants;
 import com.doumee.dao.business.model.InterfaceLog;
 import com.doumee.service.business.InterfaceLogService;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.PostConstruct;
 import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
 
 @Service
 public class EmayService {
@@ -89,4 +97,28 @@
 	}
 
 
+	public  void sendSmsByHk(String phone,String content){
+		try {
+			String url = systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.HK_HTTPS).getCode() +
+					systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.HK_HOST).getCode() +
+					HKConstants.ARTEMIS_PATH +
+					HKConstants.InterfacePath.sendSms[0];
+			Map<String,Object> map = new HashMap<>();
+			map.put("phoneNo",phone.split(","));
+			map.put("content",content);
+			BaseResponse result = HKService.sendSmsByHk(map,url);
+			if(result !=null){
+				if(!StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE)){
+					throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),result.getMsg());
+				}
+			}else{
+				throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鐭俊鍙戦�佸け璐ワ紝璇风◢鍚庨噸璇曪紒");
+			}
+		}catch (Exception e){
+			e.printStackTrace();
+		}
+		throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鐭俊鍙戦�佸け璐ワ紝璇风◢鍚庨噸璇曪紒");
+	}
+
+
 }

--
Gitblit v1.9.3