From 37926bbc6a660245630cae0424c65cb1661c33df Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期六, 12 十月 2024 14:11:37 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 screen/src/assets/images/energy_ef/ic_renwuzongliang@2x.png                                                    |    0 
 screen/src/assets/images/energy_ef/car_zaitu@2x.png                                                            |    0 
 screen/src/assets/images/energy_ef/ruku_task.png                                                               |    0 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceServiceImpl.java            |    2 
 server/visits/admin_timer/src/main/java/com/doumee/api/PlatformJobController.java                              |   17 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/SmsConfigService.java                  |    2 
 admin/src/api/system/sms.js                                                                                    |    8 
 screen/src/assets/images/energy_ef/map_car_kongxian@2x.png                                                     |    0 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java       |   65 ++
 pda/utils/config.js                                                                                            |    4 
 screen/src/assets/images/energy_ef/chuku_task.png                                                              |    0 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/SmsConfigCloudController.java                 |   15 
 screen/src/assets/images/energy_ef/map_car_lixian@2x.png                                                       |    0 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformWmsJobServiceImpl.java    |    3 
 screen/src/assets/images/energy_ef/car_kongxian@2x.png                                                         |    0 
 screen/src/views/EnergyConsum.vue                                                                              |  497 +++++++++--------
 admin/.env.development                                                                                         |    5 
 screen/src/assets/images/energy_ef/ic_rukuxiaolv@2x.png                                                        |    0 
 admin/src/components/common/RichEditor.vue                                                                     |    9 
 screen/src/assets/images/energy_ef/bg@2x.png                                                                   |    0 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformJob.java                     |    6 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/WmsJobContractVO.java                   |    4 
 admin/src/views/platform/LogisticsRecord/leaveAuth.vue                                                         |    9 
 screen/package.json                                                                                            |    1 
 screen/src/views/LogisticsEfficiency.vue                                                                       |  637 +++++++++++++++++++++++
 server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java                                 |   10 
 screen/src/router/index.js                                                                                     |    7 
 screen/src/assets/images/energy_ef/chuku_task_ac.png                                                           |    0 
 screen/src/assets/images/energy_ef/map_car_zaitu@2x.png                                                        |    0 
 admin/src/views/business/visitorSources.vue                                                                    |   30 
 screen/src/assets/images/energy_ef/ic_chukuxiaolv@2x.png                                                       |    0 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java |    9 
 admin/src/views/platform/LogisticsRecord/subscribe.vue                                                         |   14 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsConfigServiceImpl.java         |   13 
 screen/src/assets/images/energy_ef/car_lixian@2x.png                                                           |    0 
 screen/src/assets/images/energy_ef/ic_bili@2x.png                                                              |    0 
 screen/src/assets/images/maintitle.gif                                                                         |    0 
 screen/src/assets/images/energy_ef/ic_wanchengrenwu@2x.png                                                     |    0 
 admin/src/views/platform/LogisticsRecord/waybill.vue                                                           |   17 
 server/system_service/src/main/java/com/doumee/core/utils/Constants.java                                       |    6 
 admin/src/views/system/smsMessage.vue                                                                          |   53 +
 screen/src/views/PlatformCall.vue                                                                              |    1 
 h5/pages/staff/task/driver.vue                                                                                 |    6 
 pda/pages/index/control.vue                                                                                    |    2 
 screen/src/assets/images/energy_ef/ruku_task_ac.png                                                            |    0 
 screen/src/assets/images/energy_ef/chuku_ic_car@2x.png                                                         |    0 
 admin/src/components/common/QueryForm/queryForm.vue                                                            |   59 -
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformJobService.java                |    5 
 /dev/null                                                                                                      |   67 --
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/DriverPlatformController.java                   |   14 
 screen/src/assets/images/energy_ef/china@2x.png                                                                |    0 
 admin/src/views/business/relativeMember.vue                                                                    |    8 
 pda/manifest.json                                                                                              |    2 
 admin/src/views/business/internalMember.vue                                                                    |    2 
 54 files changed, 1,194 insertions(+), 415 deletions(-)

diff --git a/admin/.env.development b/admin/.env.development
index 8dd310d..0571e3b 100644
--- a/admin/.env.development
+++ b/admin/.env.development
@@ -2,6 +2,7 @@
 NODE_ENV = 'development'
 
 VUE_APP_API_URL  = 'http://localhost:10010'
-# VUE_APP_API_URL  = 'http://192.168.0.103:10010'
-VUE_APP_API_URL  = 'http://10.50.250.253:8088/gateway_interface'
+# VUE_APP_API_URL  = 'http://192.168.0.139:10010'
+# VUE_APP_API_URL  = 'http://10.50.250.253:8088/gateway_interface'
+VUE_APP_API_URL  = 'https://dmtest.ahapp.net/antai_admin_interface/'
 
diff --git a/admin/src/api/system/sms.js b/admin/src/api/system/sms.js
index e0f700b..9a34d4d 100644
--- a/admin/src/api/system/sms.js
+++ b/admin/src/api/system/sms.js
@@ -8,3 +8,11 @@
 export function SmsStatusUpdate (data) {
   return request.post('/visitsAdmin/cloudService/business/smsConfig/updateById', data)
 }
+// 鐭俊閫氱煡 鎵归噺鐘舵�佹洿鏂�
+export function SmsStatussUpdate (data) {
+  return request.get('/visitsAdmin/cloudService/business/smsConfig/updateStatus/batch', {
+    params: {
+      ...data
+    }
+  })
+}
diff --git a/admin/src/components/common/QueryForm/queryForm.vue b/admin/src/components/common/QueryForm/queryForm.vue
index 9eedeab..c56d064 100644
--- a/admin/src/components/common/QueryForm/queryForm.vue
+++ b/admin/src/components/common/QueryForm/queryForm.vue
@@ -2,15 +2,13 @@
   <div class="doumee-filter">
     <el-form inline label-suffix="锛�" @submit.native.prevent>
       <template v-for="(item, index) in queryFormConfig.formItems">
-        <el-form-item v-if="item.type === 'input' && (showZk || index < listLength)" :key="item.filed"
-          :label="item.label">
+        <el-form-item v-if="item.type === 'input' && (showZk || index < listLength)" :key="item.filed">
           <el-input v-model="searchForm[item.filed]"
             :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
-            :placeholder="item.placeholder ? item.placeholder : '璇疯緭鍏�' + item.label" class="w200"
+            :placeholder="item.label" class="w200"
             @change="changeForm(item.filed)" @keyup.enter.native="handlekeyup(item.keyup || false)" />
         </el-form-item>
-        <el-form-item v-if="item.type === 'moneySelect' && (showZk || index < listLength)" :key="item.label"
-          :label="item.label">
+        <el-form-item v-if="item.type === 'moneySelect' && (showZk || index < listLength)" :key="item.label">
           <el-input v-model="searchForm[item.filedStrt]"
             :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
             :placeholder="item.start" style="width: 150px" />
@@ -19,49 +17,42 @@
             :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
             :placeholder="item.end" style="width: 150px" />
         </el-form-item>
-        <el-form-item v-if="item.type === 'select' && (showZk || index < listLength)" :key="item.filed"
-          :label="item.label">
+        <el-form-item v-if="item.type === 'select' && (showZk || index < listLength)" :key="item.filed">
           <el-select v-model="searchForm[item.filed]" :filterable="item.filterable || true"
             :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
-            :placeholder="item.placeholder ? item.placeholder : '璇烽�夋嫨' + item.label" class="w200"
+            :placeholder="item.label" class="w200"
             @change="changeForm(item.filed)">
             <el-option v-for="opt, i in item.options" :key="i" :value="item.valueCode ? opt[item.valueCode] : opt.value"
               :label="item.labelCode ? opt[item.labelCode] : opt.label" />
           </el-select>
         </el-form-item>
-        <el-form-item v-if="item.type === 'date' && (showZk || index < listLength)" :key="item.filed"
-          :label="item.label || '鏃ユ湡'">
+        <el-form-item v-if="item.type === 'date' && (showZk || index < listLength)" :key="item.filed">
           <el-date-picker v-model="searchForm[item.filed]" type="date" value-format="yyyy-MM-dd" class="w200"
             :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
-            :placeholder="item.placeholder || '璇烽�夋嫨鏃ユ湡'" :picker-options="item.pickerOptions || {}"
+            :placeholder="item.label" :picker-options="item.pickerOptions || {}"
             @change="changeForm(item.filed)" />
         </el-form-item>
-        <el-form-item v-if="item.type === 'daterange' && (showZk || index < listLength)" :key="item.filed"
-          :label="item.label || ''">
+        <el-form-item v-if="item.type === 'daterange' && (showZk || index < listLength)" :key="item.filed">
           <el-date-picker v-model="searchForm[item.filed]" value-format="yyyy-MM-dd" type="daterange"
             range-separator="鑷�"
             :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
             :start-placeholder="item.start || ''" :end-placeholder="item.end || ''"
             :picker-options="item.pickerOptions || {}" class="w400" @change="changeForm(item.filed)" />
         </el-form-item>
-        <el-form-item v-if="item.type === 'timePicker' && (showZk || index < listLength)" :key="item.filed"
-          :label="item.label || '閫夋嫨鏃堕棿'">
+        <el-form-item v-if="item.type === 'timePicker' && (showZk || index < listLength)" :key="item.filed">
           <el-time-picker v-model="searchForm[item.filed]" is-range range-separator="鑷�" format="HH:mm"
             value-format="HH:mm" start-placeholder="寮�濮嬫椂闂�" end-placeholder="缁撴潫鏃堕棿" placeholder="閫夋嫨鏃堕棿鑼冨洿" class="w400"
             @change="changeForm(item.filed)" />
         </el-form-item>
-        <el-form-item v-if="item.type === 'datetimerange' && (showZk || index < listLength)" :key="item.filed"
-          :label="item.label || '閫夋嫨鏃ユ湡'">
+        <el-form-item v-if="item.type === 'datetimerange' && (showZk || index < listLength)" :key="item.filed">
           <el-date-picker v-model="searchForm[item.filed]" format="yyyy-MM-dd HH:mm:ss"
-            value-format="yyyy-MM-dd HH:mm:ss" type="datetimerange"
-            :default-time="['00:00:00', '23:59:59']"
+            value-format="yyyy-MM-dd HH:mm:ss" type="datetimerange" :default-time="['00:00:00', '23:59:59']"
             :picker-options="item.pickerOptions || pickerOptions" range-separator="鑷�"
             :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
             :start-placeholder="item.start || '寮�濮嬫椂闂�'" :end-placeholder="item.end || '缁撴潫鏃堕棿'" class="w400"
             @change="changeForm(item.filed)" />
         </el-form-item>
-        <el-form-item v-if="item.type === 'slot' && (showZk || index < listLength)" :key="item.filed"
-          :label="item.label">
+        <el-form-item v-if="item.type === 'slot' && (showZk || index < listLength)" :key="item.filed">
           <slot :name="item.filed" />
         </el-form-item>
       </template>
@@ -100,13 +91,13 @@
       default: () => { }
     }
   },
-  data () {
+  data() {
     return {
       showZk: false,
       pickerOptions: {
         shortcuts: [{
           text: '杩�7澶�',
-          onClick (picker) {
+          onClick(picker) {
             const end = new Date()
             const start = new Date()
             start.setTime(end.getTime() - 3600 * 1000 * 24 * 6)
@@ -115,7 +106,7 @@
         },
         {
           text: '杩�30澶�',
-          onClick (picker) {
+          onClick(picker) {
             const end = new Date()
             const start = new Date()
             start.setTime(end.getTime() - 3600 * 1000 * 24 * 29)
@@ -124,7 +115,7 @@
         },
         {
           text: '杩�60澶�',
-          onClick (picker) {
+          onClick(picker) {
             const end = new Date()
             const start = new Date()
             start.setTime(end.getTime() - 3600 * 1000 * 24 * 59)
@@ -133,14 +124,14 @@
         },
         {
           text: '杩�90澶�',
-          onClick (picker) {
+          onClick(picker) {
             const end = new Date()
             const start = new Date()
             start.setTime(end.getTime() - 3600 * 1000 * 24 * 89)
             picker.$emit('pick', [start, end])
           }
         }],
-        disabledDate (time) {
+        disabledDate(time) {
           var curDate = new Date(new Date().toLocaleDateString()).getTime()
           var preDate = new Date(curDate + 24 * 60 * 60 * 1000 - 1)
           return time.getTime() > preDate
@@ -151,31 +142,31 @@
   emits: ['input', 'handleQuery', 'clear'],
   computed: {
     searchForm: {
-      get () {
+      get() {
         return this.value
       },
-      set (value) {
+      set(value) {
         this.$emit('input', value)
       }
     }
   },
   methods: {
-    handleQuery () {
+    handleQuery() {
       this.$emit('handleQuery')
     },
-    handlekeyup (pd) {
+    handlekeyup(pd) {
       if (pd) {
         this.$emit('handleQuery')
       }
     },
-    changeForm (filed) {
+    changeForm(filed) {
       this.$emit('changeForm', filed)
     },
-    zkBtn () {
+    zkBtn() {
       this.showZk = !this.showZk
       this.$emit('zkBtn', this.zk)
     },
-    clear () {
+    clear() {
       this.$emit('clear')
     }
   }
diff --git a/admin/src/components/common/RichEditor.vue b/admin/src/components/common/RichEditor.vue
index 09786fb..d144c66 100644
--- a/admin/src/components/common/RichEditor.vue
+++ b/admin/src/components/common/RichEditor.vue
@@ -1,7 +1,7 @@
 <template>
   <div :style="styleEditor">
     <Toolbar style="border-bottom: 1px solid #ccc" :editor="editor" :defaultConfig="toolbarConfig" :mode="mode" />
-    <Editor style="height: 300px; overflow-y: hidden;" v-model="html" :defaultConfig="editorConfig" :mode="mode"
+    <Editor style="max-height: 300px;min-height: 100px; overflow-y: hidden;" v-model="html" :defaultConfig="editorConfig" :mode="mode"
             @onCreated="onCreated" @onChange="onChange" />
   </div>
 </template>
@@ -10,6 +10,7 @@
 import Vue from 'vue'
 import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
 import { Loading } from 'element-ui';
+let loadingInstance = null
 export default Vue.extend({
   props: {
     richData: { // 鐖剁粍浠朵紶閫掔殑鏁版嵁
@@ -149,7 +150,7 @@
             timeout: 10 * 1000, //10 绉�
             // 涓婁紶鍓�
             onBeforeUpload(files) {
-              Loading.service({
+              loadingInstance = Loading.service({
                 lock: true,
                 text: '涓婁紶涓�...',
                 spinner: 'el-icon-loading',
@@ -162,7 +163,7 @@
               console.log(res);
               // 鍥犱负鑷畾涔夋彃鍏ュ鑷磑nSuccess涓巓nFailed鍥炶皟鍑芥暟涓嶈捣浣滅敤,鑷繁鎵嬪姩澶勭悊
               // 鍏堝叧闂瓑寰呯殑Message
-              Loading.service({
+              loadingInstance = Loading.service({
                 lock: true,
                 text: '涓婁紶涓�...',
                 spinner: 'el-icon-loading',
@@ -187,6 +188,7 @@
             // 鍗曚釜鏂囦欢涓婁紶澶辫触
             onFailed(file, res) {
               console.log(`${file.originalFilename} 涓婁紶澶辫触`, res);
+              loadingInstance.close();
             },
             // 涓婁紶杩涘害鐨勫洖璋冨嚱鏁�
             onProgress(progress) {
@@ -195,6 +197,7 @@
             },
             // 涓婁紶閿欒锛屾垨鑰呰Е鍙� timeout 瓒呮椂
             onError(file, err, res) {
+              loadingInstance.close();
               console.log(`${file.originalFilename} 涓婁紶鍑洪敊`, err, res);
             }
           },
diff --git a/admin/src/views/business/internalMember.vue b/admin/src/views/business/internalMember.vue
index f0568a1..ba0ad77 100644
--- a/admin/src/views/business/internalMember.vue
+++ b/admin/src/views/business/internalMember.vue
@@ -58,7 +58,7 @@
         <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete"
             v-permissions="['business:member:delete']">鎵归噺鍒犻櫎</el-button></li>
         <li><el-button type="primary" v-permissions="['business:empower:create']" @click="startEmpowerBatch()"
-            icon="el-icon-plus">涓嬪彂鎺堟潈</el-button></li>
+            >涓嬪彂鎺堟潈</el-button></li>
         <li style="float: right">
           <el-checkbox style="font-size: 12px" label="1" v-model="searchForm.includeChild" key="1"
             @change="search">鏄惁鍖呭惈涓嬬骇缁勭粐</el-checkbox>
diff --git a/admin/src/views/business/relativeMember.vue b/admin/src/views/business/relativeMember.vue
index 5452250..026d7f3 100644
--- a/admin/src/views/business/relativeMember.vue
+++ b/admin/src/views/business/relativeMember.vue
@@ -65,8 +65,8 @@
             icon="el-icon-plus" v-permissions="['business:traintime:create']">鍩硅鏈熷鍏�</el-button></li>
         <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete"
             v-permissions="['business:member:delete']">鎵归噺鍒犻櫎</el-button></li>
-        <li><el-button type="primary" v-permissions="['business:empower:create']" @click="startEmpowerBatch()"
-            icon="el-icon-plus">涓嬪彂鎺堟潈</el-button></li>
+        <li><el-button type="primary" v-permissions="['business:empower:create']" @click="startEmpowerBatch()">涓嬪彂鎺堟潈</el-button></li>
+        <li><el-button type="primary" v-permissions="['business:empower:exportExcel']" @click="exportExcel">瀵煎嚭</el-button></li>
       </ul>
       <el-table v-loading="isWorking.search" :data="tableData.list" stripe @selection-change="handleSelectionChange">
         <el-table-column type="selection" width="55"></el-table-column>
@@ -147,7 +147,7 @@
         <el-table-column label="鍗$墖" min-width="80px">
           <template slot-scope="{row}">
             <el-button @click="$refs.cardOpeningRecord.open('寮�鍗¤褰�', row.id)" type="text">{{ row.memberCardCount ||
-              '0'}}</el-button>
+              '0' }}</el-button>
           </template>
         </el-table-column>
         <el-table-column prop="editorName" label="鎿嶄綔浜�" min-width="100px"></el-table-column>
@@ -383,6 +383,7 @@
 
 <style lang="scss" scoped>
 @import '@/assets/style/variables.scss';
+
 .box {
   width: 100%;
   display: flex;
@@ -399,6 +400,7 @@
     height: 100%;
   }
 }
+
 .zhuguan {
   color: $primary-color;
   border: 1px solid $primary-color;
diff --git a/admin/src/views/business/visitorSources.vue b/admin/src/views/business/visitorSources.vue
index 0aee304..84bdd07 100644
--- a/admin/src/views/business/visitorSources.vue
+++ b/admin/src/views/business/visitorSources.vue
@@ -75,25 +75,28 @@
         />
       </el-form-item>
       <el-form-item label="鍦ㄥ洯椤荤煡:" prop="visitNotice">
-        <el-tiptap
+        <!-- <el-tiptap
           style="width: 50%"
           v-model="form.visitNotice"
           :extensions="extensions"
-        />
+        /> -->
+        <RichEditor style="width: 70%" :richData="form.visitNotice" :styleEditor="styleEditor" @getWangedditor="getWangedditor" :readonly="false"/>
       </el-form-item>
       <el-form-item label="璁垮棰勭害鎸囧崡:" prop="visitNotice">
-        <el-tiptap
+        <!-- <el-tiptap
           style="width: 50%"
           v-model="form.visitTips"
           :extensions="extensions"
-        />
+        /> -->
+        <RichEditor style="width: 70%" :richData="form.visitTips" :styleEditor="styleEditor" @getWangedditor="getWangedditor1" :readonly="false"/>
       </el-form-item>
       <el-form-item label="璁垮鍏ュ洯瀵艰鍥�:" prop="visitNotice">
-        <el-tiptap
+        <!-- <el-tiptap
           style="width: 50%"
           v-model="form.visitMap"
           :extensions="extensions"
-        />
+        /> -->
+        <RichEditor style="width: 70%" :richData="form.visitMap" :styleEditor="styleEditor" @getWangedditor="getWangedditor2" :readonly="false"/>
       </el-form-item>
       <el-form-item>
         <el-button type="primary" @click="submit">淇濆瓨閰嶇疆椤�</el-button>
@@ -104,6 +107,7 @@
 
 <script>
 import { getVisitConfigDTO, updateVisitConfig } from '@/api/system/common'
+import RichEditor from '@/components/common/RichEditor'
 import {
   // necessary extensions
   Doc,
@@ -131,7 +135,9 @@
 import { upload } from '@/api/system/common'
 export default {
   name: 'visitorSources',
-
+  components: {
+    RichEditor
+  },
   data() {
     return {
       form: {
@@ -148,6 +154,7 @@
         visitTips: '',
         frezzDays: null
       },
+      styleEditor:'border: 1px solid #ccc;display: inline-block;',
       extensions: [
         new Doc(),
         new Text(),
@@ -188,6 +195,15 @@
   },
 
   methods: {
+    getWangedditor(val){
+      this.form.visitNotice =val
+    },
+    getWangedditor1(val){
+      this.form.visitTips =val
+    },
+    getWangedditor2(val){
+      this.form.visitMap =val
+    },
     getData() {
       getVisitConfigDTO({})
         .then(res => {
diff --git a/admin/src/views/platform/LogisticsRecord/leaveAuth.vue b/admin/src/views/platform/LogisticsRecord/leaveAuth.vue
index 35a4005..70e321d 100644
--- a/admin/src/views/platform/LogisticsRecord/leaveAuth.vue
+++ b/admin/src/views/platform/LogisticsRecord/leaveAuth.vue
@@ -121,6 +121,15 @@
             label: '椹鹃┒鍛�'
           },
           {
+            filed: 'queryStatusForPower',
+            type: 'select',
+            label: '鎺堟潈鐘舵��',
+            options: [
+              { value: '9,10', label: '宸叉巿鏉�' },
+              { value: '6', label: '鏈巿鏉�' }
+            ]
+          },
+          {
             filed: 'selDate',
             type: 'datetimerange',
             label: '浣滀笟瀹屾垚鏃堕棿鎼滅储',
diff --git a/admin/src/views/platform/LogisticsRecord/subscribe.vue b/admin/src/views/platform/LogisticsRecord/subscribe.vue
index 02ec74c..d68bd50 100644
--- a/admin/src/views/platform/LogisticsRecord/subscribe.vue
+++ b/admin/src/views/platform/LogisticsRecord/subscribe.vue
@@ -171,6 +171,18 @@
             label: '鍚堝悓鍗曞彿'
           },
           {
+            filed: 'status',
+            type: 'select',
+            label: '瀹℃壒缁撴灉',
+            options: [
+              { value: 0, label: '寰呭鎵�' },
+              { value: 1, label: '瀹℃壒涓�' },
+              { value: 2, label: '瀹℃壒閫氳繃' },
+              { value: 3, label: '瀹℃壒椹冲洖' },
+              { value: 4, label: '宸插彇娑�' },
+            ]
+          },
+          {
             filed: 'selDate',
             type: 'datetimerange',
             label: '鎿嶄綔鏃堕棿',
@@ -289,7 +301,7 @@
         selDate: [],
         fastdate: 0,
       }
-      this.getList()
+      this.changeRadio('0')
     },
     handleDetail(row) {
       this.isShowDriver = true
diff --git a/admin/src/views/platform/LogisticsRecord/waybill.vue b/admin/src/views/platform/LogisticsRecord/waybill.vue
index 3786ca0..dd34efc 100644
--- a/admin/src/views/platform/LogisticsRecord/waybill.vue
+++ b/admin/src/views/platform/LogisticsRecord/waybill.vue
@@ -105,6 +105,23 @@
             label: '杞︾墝鍙�'
           },
           {
+            filed: 'status',
+            type: 'select',
+            label: '浣滀笟鐘舵��',
+            options: [
+              { value: 3, label: '鍏ュ洯绛夊緟' },
+              { value: 4, label: '鏈堝彴绛夊緟' },
+              { value: 5, label: '浣滀笟涓�' },
+              { value: 6, label: '浣滀笟瀹屾垚' },
+              { value: 7, label: '杞Щ涓�' },
+              { value: 8, label: '寮傚父鎸傝捣' },
+              { value: 9, label: '宸叉巿鏉冪鍥�' },
+              { value: 10, label: '宸茬鍥�' },
+              { value: 11, label: '宸茶繃鍙�' },
+              { value: 12, label: '宸插彇娑�' },
+            ]
+          },
+          {
             filed: 'selDate',
             type: 'datetimerange',
             label: '鎿嶄綔鏃堕棿',
diff --git a/admin/src/views/system/smsMessage.vue b/admin/src/views/system/smsMessage.vue
index 9b1052e..f3f551f 100644
--- a/admin/src/views/system/smsMessage.vue
+++ b/admin/src/views/system/smsMessage.vue
@@ -1,20 +1,22 @@
 <template>
   <div class="main_app">
-    <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)"
-      @clear="clear">
+    <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear">
     </QueryForm>
-    <!-- <div class="pt16">
-      <el-button :loading="exLoading" @click="handleEx"
-        v-permissions="['business:platformjob:exportExcel']">瀵煎嚭</el-button>
-    </div> -->
-    <el-table class="mb20" v-loading="loading" :data="list" stripe>
+    <div class="pt16 mb10">
+      <el-button type="primary" @click="batchStatus(0)"
+        v-permissions="['business:platformjob:update']">鎵归噺鍚敤</el-button>
+      <el-button @click="batchStatus(1)" v-permissions="['business:platformjob:update']">鎵归噺绂佺敤</el-button>
+    </div>
+    <el-table @selection-change="handleSelectionChange" class="mb20" v-loading="loading" :data="list" stripe>
+      <el-table-column align="center" type="selection" width="55">
+      </el-table-column>
       <el-table-column prop="name" label="娑堟伅鏍囬" min-width="160" show-overflow-tooltip />
       <el-table-column prop="code" label="娑堟伅缂栫爜" min-width="150" show-overflow-tooltip />
       <el-table-column prop="content" label="娑堟伅妯℃澘" min-width="300" show-overflow-tooltip />
       <el-table-column label="鐘舵��" width="120" align="center" fixed="right">
         <template v-slot="scope">
-          <el-switch v-model="scope.row.status" @change="changeStatus(scope.row)" :active-value="0" :inactive-value="1">
-          </el-switch>  
+          <el-switch v-permissions="['business:platformjob:update']" v-model="scope.row.status" @change="changeStatus(scope.row)" :active-value="0" :inactive-value="1">
+          </el-switch>
         </template>
       </el-table-column>
     </el-table>
@@ -25,7 +27,7 @@
 <script>
 import Pagination from '@/components/common/Pagination'
 import QueryForm from '@/components/common/QueryForm'
-import { getSmsList, SmsStatusUpdate } from '@/api/system/sms'
+import { getSmsList, SmsStatusUpdate, SmsStatussUpdate } from '@/api/system/sms'
 
 import GlobalWindow from '@/components/common/GlobalWindow'
 import { Message } from 'element-ui'
@@ -38,6 +40,7 @@
   },
   data() {
     return {
+      ids: [],
       isShowDetail: false,
       exLoading: false,
       loading: false,
@@ -78,8 +81,32 @@
     this.getList()
   },
   methods: {
+    handleSelectionChange(val) {
+      this.ids = val.map(i => i.id)
+      console.log('ids', this.ids)
+    },
+    batchStatus(status) {
+      const { ids } = this
+      if (ids.length == 0) return Message.error('璇峰厛閫夋嫨瑕佹洿鏀圭殑鐭俊閫氱煡')
+      this.$confirm(`纭畾${status == 0 ? '鍚敤' : '绂佺敤'}閫変腑鐨勬墍鏈夌煭淇¢�氱煡鍚�?`, '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        SmsStatussUpdate({
+          ids: ids.join(','),
+          status
+        }).then(res => {
+          Message.success('鎵归噺鏇存柊鎴愬姛')
+          this.getList()
+        }, () => {
+          this.getList()
+        })
+      })
+
+    },
     changeStatus(row) {
-      console.log('row', row);
+      console.log('row', row)
       SmsStatusUpdate({
         ...row
       }).then(res => {
@@ -109,8 +136,8 @@
         this.loading = false
       })
     },
-   
-    
+
+
     clear() {
       this.pagination.page = 1
       this.filters = {}
diff --git a/h5/pages/staff/task/driver.vue b/h5/pages/staff/task/driver.vue
index 421cfdd..7018b5d 100644
--- a/h5/pages/staff/task/driver.vue
+++ b/h5/pages/staff/task/driver.vue
@@ -101,7 +101,11 @@
       </view>
     </view>
     <view class="emyty"></view>
-    <view class="main_footer">
+    <view v-if="
+      info.approveDateVO != null &&
+      info.approveDateVO.canBeApproved != null &&
+      info.approveDateVO.canBeApproved == 1
+    " class="main_footer">
       <view class="btn" @click="handleSub('0')">鎷掔粷</view>
       <view class="btn agree" @click="handleSub('1')">鍚屾剰</view>
     </view>
diff --git a/pda/manifest.json b/pda/manifest.json
index efecef9..cb7800a 100644
--- a/pda/manifest.json
+++ b/pda/manifest.json
@@ -18,7 +18,7 @@
 			"proxy": {
 				"/gateway_interface": {
 					// 杩欎釜瀛楁鍚嶉渶涓庝綘閰嶇疆鐨刡asePrefixUrl涓�鑷达紝绯荤粺璇嗗埆鍒板甫鏈�/dev-api璇锋眰鐨勫湴鍧�鏃讹紝浼氬湪鍓嶉潰鎷兼帴涓婁唬鐞嗘湇鍔″櫒鍦板潃
-					"target" : "http://10.50.250.178:8088/gateway_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
+					"target" : "http://10.50.250.253:8088/gateway_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
 					// "target": "http://192.168.0.100:10010", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
 					"changeOrigin": true, // 鍏佽璺ㄥ煙 
 					"pathRewrite": {
diff --git a/pda/pages/index/control.vue b/pda/pages/index/control.vue
index 904ea22..739a7d0 100644
--- a/pda/pages/index/control.vue
+++ b/pda/pages/index/control.vue
@@ -36,7 +36,7 @@
 		},
 		getPlatformGroup() {
 			getPlatformGroupList({
-				queryData: 1,
+				queryData: 0,
 				queryType: 0
 			}).then(res => {
 				this.platformGroupList = res.data || []
diff --git a/pda/utils/config.js b/pda/utils/config.js
index cccc897..0d82c16 100644
--- a/pda/utils/config.js
+++ b/pda/utils/config.js
@@ -1,6 +1,6 @@
 
-export const baseUrl = 'gateway_interface/'
-// export const baseUrl = 'http://10.50.250.178:8088/gateway_interface/'
+// export const baseUrl = 'gateway_interface/'
+export const baseUrl = 'http://10.50.250.253:8088/gateway_interface/'
 export const uploadAvatar = `${baseUrl}visitsAdmin/cloudService/web/public/uploadFtp.do`
 export const uploadUrl = `${baseUrl}visitsAdmin/cloudService/public/uploadBatch`
 
diff --git a/screen/package.json b/screen/package.json
index d7e0320..c1738f2 100644
--- a/screen/package.json
+++ b/screen/package.json
@@ -5,6 +5,7 @@
   "type": "module",
   "scripts": {
     "dev": "vite --host",
+    "serve": "vite --host",
     "build": "vite build",
     "preview": "vite preview"
   },
diff --git a/screen/src/assets/images/energy_ef/bg@2x.png b/screen/src/assets/images/energy_ef/bg@2x.png
new file mode 100644
index 0000000..6b6b563
--- /dev/null
+++ b/screen/src/assets/images/energy_ef/bg@2x.png
Binary files differ
diff --git a/screen/src/assets/images/energy_ef/car_kongxian@2x.png b/screen/src/assets/images/energy_ef/car_kongxian@2x.png
new file mode 100644
index 0000000..4b88ea3
--- /dev/null
+++ b/screen/src/assets/images/energy_ef/car_kongxian@2x.png
Binary files differ
diff --git a/screen/src/assets/images/energy_ef/car_lixian@2x.png b/screen/src/assets/images/energy_ef/car_lixian@2x.png
new file mode 100644
index 0000000..bc75d5f
--- /dev/null
+++ b/screen/src/assets/images/energy_ef/car_lixian@2x.png
Binary files differ
diff --git a/screen/src/assets/images/energy_ef/car_zaitu@2x.png b/screen/src/assets/images/energy_ef/car_zaitu@2x.png
new file mode 100644
index 0000000..4640d4b
--- /dev/null
+++ b/screen/src/assets/images/energy_ef/car_zaitu@2x.png
Binary files differ
diff --git a/screen/src/assets/images/energy_ef/china@2x.png b/screen/src/assets/images/energy_ef/china@2x.png
new file mode 100644
index 0000000..e0ca96c
--- /dev/null
+++ b/screen/src/assets/images/energy_ef/china@2x.png
Binary files differ
diff --git a/screen/src/assets/images/energy_ef/chuku_ic_car@2x.png b/screen/src/assets/images/energy_ef/chuku_ic_car@2x.png
new file mode 100644
index 0000000..990950f
--- /dev/null
+++ b/screen/src/assets/images/energy_ef/chuku_ic_car@2x.png
Binary files differ
diff --git a/screen/src/assets/images/energy_ef/chuku_task.png b/screen/src/assets/images/energy_ef/chuku_task.png
new file mode 100644
index 0000000..56c945e
--- /dev/null
+++ b/screen/src/assets/images/energy_ef/chuku_task.png
Binary files differ
diff --git a/screen/src/assets/images/energy_ef/chuku_task_ac.png b/screen/src/assets/images/energy_ef/chuku_task_ac.png
new file mode 100644
index 0000000..6742b96
--- /dev/null
+++ b/screen/src/assets/images/energy_ef/chuku_task_ac.png
Binary files differ
diff --git a/screen/src/assets/images/energy_ef/ic_bili@2x.png b/screen/src/assets/images/energy_ef/ic_bili@2x.png
new file mode 100644
index 0000000..49efcd1
--- /dev/null
+++ b/screen/src/assets/images/energy_ef/ic_bili@2x.png
Binary files differ
diff --git a/screen/src/assets/images/energy_ef/ic_chukuxiaolv@2x.png b/screen/src/assets/images/energy_ef/ic_chukuxiaolv@2x.png
new file mode 100644
index 0000000..39c6e3b
--- /dev/null
+++ b/screen/src/assets/images/energy_ef/ic_chukuxiaolv@2x.png
Binary files differ
diff --git a/screen/src/assets/images/energy_ef/ic_renwuzongliang@2x.png b/screen/src/assets/images/energy_ef/ic_renwuzongliang@2x.png
new file mode 100644
index 0000000..91bd7e2
--- /dev/null
+++ b/screen/src/assets/images/energy_ef/ic_renwuzongliang@2x.png
Binary files differ
diff --git a/screen/src/assets/images/energy_ef/ic_rukuxiaolv@2x.png b/screen/src/assets/images/energy_ef/ic_rukuxiaolv@2x.png
new file mode 100644
index 0000000..cb09cb1
--- /dev/null
+++ b/screen/src/assets/images/energy_ef/ic_rukuxiaolv@2x.png
Binary files differ
diff --git a/screen/src/assets/images/energy_ef/ic_wanchengrenwu@2x.png b/screen/src/assets/images/energy_ef/ic_wanchengrenwu@2x.png
new file mode 100644
index 0000000..2d1dfcc
--- /dev/null
+++ b/screen/src/assets/images/energy_ef/ic_wanchengrenwu@2x.png
Binary files differ
diff --git a/screen/src/assets/images/energy_ef/map_car_kongxian@2x.png b/screen/src/assets/images/energy_ef/map_car_kongxian@2x.png
new file mode 100644
index 0000000..38bff78
--- /dev/null
+++ b/screen/src/assets/images/energy_ef/map_car_kongxian@2x.png
Binary files differ
diff --git a/screen/src/assets/images/energy_ef/map_car_lixian@2x.png b/screen/src/assets/images/energy_ef/map_car_lixian@2x.png
new file mode 100644
index 0000000..42ffa31
--- /dev/null
+++ b/screen/src/assets/images/energy_ef/map_car_lixian@2x.png
Binary files differ
diff --git a/screen/src/assets/images/energy_ef/map_car_zaitu@2x.png b/screen/src/assets/images/energy_ef/map_car_zaitu@2x.png
new file mode 100644
index 0000000..7efde5a
--- /dev/null
+++ b/screen/src/assets/images/energy_ef/map_car_zaitu@2x.png
Binary files differ
diff --git a/screen/src/assets/images/energy_ef/ruku_task.png b/screen/src/assets/images/energy_ef/ruku_task.png
new file mode 100644
index 0000000..1d33480
--- /dev/null
+++ b/screen/src/assets/images/energy_ef/ruku_task.png
Binary files differ
diff --git a/screen/src/assets/images/energy_ef/ruku_task_ac.png b/screen/src/assets/images/energy_ef/ruku_task_ac.png
new file mode 100644
index 0000000..06cebcc
--- /dev/null
+++ b/screen/src/assets/images/energy_ef/ruku_task_ac.png
Binary files differ
diff --git a/screen/src/assets/images/maintitle.gif b/screen/src/assets/images/maintitle.gif
new file mode 100644
index 0000000..dbe6c73
--- /dev/null
+++ b/screen/src/assets/images/maintitle.gif
Binary files differ
diff --git a/screen/src/router/index.js b/screen/src/router/index.js
index b25624f..69da7a3 100644
--- a/screen/src/router/index.js
+++ b/screen/src/router/index.js
@@ -6,7 +6,7 @@
   routes: [
     {
       path: '/',
-      component: () => import('../views/PlatformCall.vue')
+      component: () => import('../views/LogisticsEfficiency.vue')
     },
     {
       path: '/PlatformCall',
@@ -18,6 +18,11 @@
       name: 'EnergyConsum',
       component: () => import('../views/EnergyConsum.vue')
     },
+    {
+      path: '/LogisticsControl',
+      name: 'LogisticsControl',
+      component: () => import('../views/LogisticsEfficiency.vue')
+    },
   ]
 })
 
diff --git a/screen/src/views/EnergyConsum.vue b/screen/src/views/EnergyConsum.vue
index 8be04ea..d408457 100644
--- a/screen/src/views/EnergyConsum.vue
+++ b/screen/src/views/EnergyConsum.vue
@@ -1,241 +1,243 @@
 <template>
-  <div class="main_app">
-    <img src="@/assets/images/bg_main_app.png" class="main_bg" alt="" />
-    <div class="main_header">
-      <img src="@/assets/images/maintitle@2x.png" class="main_header_bg" alt="" />
-      <div class="title">瀹夋嘲鏅烘収鐗╂祦鍥尯-缁胯壊浣庣⒊杩愯惀</div>
-      <div class="time">
-        <span class="date">{{ date }}</span>
-        <span class="week">{{ week }}</span>
-        <span class="time">{{ time }}</span>
-      </div>
-    </div>
-    <div class="main_content">
-      <div class="left_box">
-        <div class="left_box_one">
-          <div class="com_header">
-            <div class="title">
-              <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
-              <div>瀹炴椂涓夌浉鐢垫祦/鐢靛帇</div>
-            </div>
-            <img src="@/assets/images/title@2x.png" class="bg" alt="" />
-          </div>
-          <div class="content">
-            <div class="item">
-              <div class="lab">A鐩哥數娴�(A)</div>
-              <div class="val">60</div>
-            </div>
-            <div class="item">
-              <div class="lab">B鐩哥數娴�(A)</div>
-              <div class="val">60</div>
-            </div>
-            <div class="item">
-              <div class="lab">C鐩哥數娴�(A)</div>
-              <div class="val">60</div>
-            </div>
-            <div class="item">
-              <div class="lab">鏈夊姛鍔熺巼(KW)</div>
-              <div class="val">60</div>
-            </div>
-            <div class="item">
-              <div class="lab">鍔熺巼鍥犳暟</div>
-              <div class="val">60</div>
-            </div>
-            <div class="item">
-              <div class="lab">鏈夊姛鐢靛害(掳)</div>
-              <div class="val">60</div>
-            </div>
-          </div>
-        </div>
-        <div class="left_box_two">
-          <div class="com_header">
-            <div class="title">
-              <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
-              <div>瀹炴椂璐熻嵎鏇茬嚎</div>
-            </div>
-            <img src="@/assets/images/title@2x.png" class="bg" alt="" />
-          </div>
-          <div class="load_wrap">
-            <div class="loadRef"></div>
-          </div>
-        </div>
-        <div class="left_box_three">
-          <div class="com_header">
-            <div class="title">
-              <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
-              <div>鏈堣兘鑰楀垎鏋�</div>
-            </div>
-            <div class="tabs">
-              <div class="tab active">鐢ㄧ數</div>
-              <div class="separate"></div>
-              <div class="tab">鐢ㄦ按</div>
-              <div class="separate"></div>
-              <div class="tab">鐢ㄦ皵</div>
-            </div>
-            <img src="@/assets/images/title@2x.png" class="bg" alt="" />
-          </div>
-          <div class="energy_wrap">
-            <div class="energyRef"></div>
-          </div>
+  <v-scale-screen width="1920" height="960" :fullScreen="true">
+    <div class="main_app">
+      <img src="@/assets/images/bg_main_app.png" class="main_bg" alt="" />
+      <div class="main_header">
+        <img src="@/assets/images/maintitle@2x.png" class="main_header_bg" alt="" />
+        <div class="title">瀹夋嘲鏅烘収鐗╂祦鍥尯-缁胯壊浣庣⒊杩愯惀</div>
+        <div class="time_wrap">
+          <span class="date">{{ date }}</span>
+          <span class="week">{{ week }}</span>
+          <span class="time">{{ time }}</span>
         </div>
       </div>
-      <div class="center_box">
-        <div class="center_box_one">
-          <div class="list">
-            <div class="item">
-              <div class="header">
-                <img class="icon" src="@/assets/images/ic_yongdian@2x.png" alt="" />
-                <div class="content">
-                  <div class="name">涓婃湀鐢ㄧ數(kw路h)</div>
-                  <div class="num">450</div>
+      <div class="main_content">
+        <div class="left_box">
+          <div class="left_box_one">
+            <div class="com_header">
+              <div class="title">
+                <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
+                <div>瀹炴椂涓夌浉鐢垫祦/鐢靛帇</div>
+              </div>
+              <img src="@/assets/images/title@2x.png" class="bg" alt="" />
+            </div>
+            <div class="content">
+              <div class="item">
+                <div class="lab">A鐩哥數娴�(A)</div>
+                <div class="val">60</div>
+              </div>
+              <div class="item">
+                <div class="lab">B鐩哥數娴�(A)</div>
+                <div class="val">60</div>
+              </div>
+              <div class="item">
+                <div class="lab">C鐩哥數娴�(A)</div>
+                <div class="val">60</div>
+              </div>
+              <div class="item">
+                <div class="lab">鏈夊姛鍔熺巼(KW)</div>
+                <div class="val">60</div>
+              </div>
+              <div class="item">
+                <div class="lab">鍔熺巼鍥犳暟</div>
+                <div class="val">60</div>
+              </div>
+              <div class="item">
+                <div class="lab">鏈夊姛鐢靛害(掳)</div>
+                <div class="val">60</div>
+              </div>
+            </div>
+          </div>
+          <div class="left_box_two">
+            <div class="com_header">
+              <div class="title">
+                <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
+                <div>瀹炴椂璐熻嵎鏇茬嚎</div>
+              </div>
+              <img src="@/assets/images/title@2x.png" class="bg" alt="" />
+            </div>
+            <div class="load_wrap">
+              <div class="loadRef"></div>
+            </div>
+          </div>
+          <div class="left_box_three">
+            <div class="com_header">
+              <div class="title">
+                <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
+                <div>鏈堣兘鑰楀垎鏋�</div>
+              </div>
+              <div class="tabs">
+                <div class="tab active">鐢ㄧ數</div>
+                <div class="separate"></div>
+                <div class="tab">鐢ㄦ按</div>
+                <div class="separate"></div>
+                <div class="tab">鐢ㄦ皵</div>
+              </div>
+              <img src="@/assets/images/title@2x.png" class="bg" alt="" />
+            </div>
+            <div class="energy_wrap">
+              <div class="energyRef"></div>
+            </div>
+          </div>
+        </div>
+        <div class="center_box">
+          <div class="center_box_one">
+            <div class="list">
+              <div class="item">
+                <div class="header">
+                  <img class="icon" src="@/assets/images/ic_yongdian@2x.png" alt="" />
+                  <div class="content">
+                    <div class="name">涓婃湀鐢ㄧ數(kw路h)</div>
+                    <div class="num">450</div>
+                  </div>
+                </div>
+                <div class="static">
+                  <span class="lab">鍚屾瘮</span>
+                  <img class="icon" src="@/assets/images/ic_up.webp" alt="" />
+                  <span class="val">11</span>
+                  <span class="lab">鐜瘮</span>
+                  <img class="icon" src="@/assets/images/ic_down.webp" alt="" />
+                  <span class="val">11</span>
                 </div>
               </div>
-              <div class="static">
-                <span class="lab">鍚屾瘮</span>
-                <img class="icon" src="@/assets/images/ic_up.webp" alt="" />
-                <span class="val">11</span>
-                <span class="lab">鐜瘮</span>
-                <img class="icon" src="@/assets/images/ic_down.webp" alt="" />
-                <span class="val">11</span>
-              </div>
-            </div>
-            <div class="item">
-              <div class="header">
-                <img class="icon" src="@/assets/images/ic_yongshui@2x.png" alt="" />
-                <div class="content">
-                  <div class="name">涓婃湀鐢ㄦ按(t)</div>
-                  <div class="num">450</div>
+              <div class="item">
+                <div class="header">
+                  <img class="icon" src="@/assets/images/ic_yongshui@2x.png" alt="" />
+                  <div class="content">
+                    <div class="name">涓婃湀鐢ㄦ按(t)</div>
+                    <div class="num">450</div>
+                  </div>
+                </div>
+                <div class="static">
+                  <span class="lab">鍚屾瘮</span>
+                  <img class="icon" src="@/assets/images/ic_up.webp" alt="" />
+                  <span class="val">11</span>
+                  <span class="lab">鐜瘮</span>
+                  <img class="icon" src="@/assets/images/ic_down.webp" alt="" />
+                  <span class="val">11</span>
                 </div>
               </div>
-              <div class="static">
-                <span class="lab">鍚屾瘮</span>
-                <img class="icon" src="@/assets/images/ic_up.webp" alt="" />
-                <span class="val">11</span>
-                <span class="lab">鐜瘮</span>
-                <img class="icon" src="@/assets/images/ic_down.webp" alt="" />
-                <span class="val">11</span>
-              </div>
-            </div>
-            <div class="item">
-              <div class="header">
-                <img class="icon" src="@/assets/images/ic_yongqi@2x.png" alt="" />
-                <div class="content">
-                  <div class="name">涓婃湀鐢ㄦ皵(t)</div>
-                  <div class="num">450</div>
+              <div class="item">
+                <div class="header">
+                  <img class="icon" src="@/assets/images/ic_yongqi@2x.png" alt="" />
+                  <div class="content">
+                    <div class="name">涓婃湀鐢ㄦ皵(t)</div>
+                    <div class="num">450</div>
+                  </div>
+                </div>
+                <div class="static">
+                  <span class="lab">鍚屾瘮</span>
+                  <img class="icon" src="@/assets/images/ic_up.webp" alt="" />
+                  <span class="val">11</span>
+                  <span class="lab">鐜瘮</span>
+                  <img class="icon" src="@/assets/images/ic_down.webp" alt="" />
+                  <span class="val">11</span>
                 </div>
               </div>
-              <div class="static">
-                <span class="lab">鍚屾瘮</span>
-                <img class="icon" src="@/assets/images/ic_up.webp" alt="" />
-                <span class="val">11</span>
-                <span class="lab">鐜瘮</span>
-                <img class="icon" src="@/assets/images/ic_down.webp" alt="" />
-                <span class="val">11</span>
+            </div>
+          </div>
+          <div class="center_box_two">
+            <img class="bg" src="@/assets/images/img_city@2x.png" alt="" />
+            <div class="item item1">
+              <div class="num fs_linear">240<span class="unit">kw路h</span></div>
+              <div class="name">鑱斿悎宸ユ埧</div>
+              <img src="@/assets/images/bg_data@2x.png" class="bg" alt="" />
+            </div>
+            <div class="item item2">
+              <div class="num fs_linear">240<span class="unit">kw路h</span></div>
+              <div class="name">鑱斿悎宸ユ埧</div>
+              <img src="@/assets/images/bg_data@2x.png" class="bg" alt="" />
+            </div>
+            <div class="item item3">
+              <div class="num fs_linear">240<span class="unit">kw路h</span></div>
+              <div class="name">鑱斿悎宸ユ埧</div>
+              <img src="@/assets/images/bg_data@2x.png" class="bg" alt="" />
+            </div>
+            <div class="item item4">
+              <div class="num fs_linear">240<span class="unit">kw路h</span></div>
+              <div class="name">鑱斿悎宸ユ埧</div>
+              <img src="@/assets/images/bg_data@2x.png" class="bg" alt="" />
+            </div>
+            <div class="item item5">
+              <div class="num fs_linear">240<span class="unit">kw路h</span></div>
+              <div class="name">鑱斿悎宸ユ埧</div>
+              <img src="@/assets/images/bg_data@2x.png" class="bg" alt="" />
+            </div>
+            <div class="bottom_wrap">
+              <div class="bottom bottom1">
+                <div class="num fs_linear">240</div>
+                <div class="name">鏄ㄦ棩鐢ㄧ數</div>
+                <div class="unit">kw路h</div>
+                <img src="@/assets/images/ic_dianliang_b@2x.png" class="bg" alt="" />
+              </div>
+              <div class="bottom bottom2">
+                <div class="num">240</div>
+                <div class="name">浠婃棩鐢ㄧ數</div>
+                <div class="unit">kw路h</div>
+                <img src="@/assets/images/ic_dianliang@2x.png" class="bg" alt="" />
+              </div>
+              <div class="bottom bottom3">
+                <div class="num fs_linear">240</div>
+                <div class="name">鏈湀鐢ㄧ數</div>
+                <div class="unit">kw路h</div>
+                <img src="@/assets/images/ic_dianliang_b@2x.png" class="bg" alt="" />
               </div>
             </div>
           </div>
         </div>
-        <div class="center_box_two">
-          <img class="bg" src="@/assets/images/img_city@2x.png" alt="" />
-          <div class="item item1">
-            <div class="num fs_linear">240<span class="unit">kw路h</span></div>
-            <div class="name">鑱斿悎宸ユ埧</div>
-            <img src="@/assets/images/bg_data@2x.png" class="bg" alt="" />
-          </div>
-          <div class="item item2">
-            <div class="num fs_linear">240<span class="unit">kw路h</span></div>
-            <div class="name">鑱斿悎宸ユ埧</div>
-            <img src="@/assets/images/bg_data@2x.png" class="bg" alt="" />
-          </div>
-          <div class="item item3">
-            <div class="num fs_linear">240<span class="unit">kw路h</span></div>
-            <div class="name">鑱斿悎宸ユ埧</div>
-            <img src="@/assets/images/bg_data@2x.png" class="bg" alt="" />
-          </div>
-          <div class="item item4">
-            <div class="num fs_linear">240<span class="unit">kw路h</span></div>
-            <div class="name">鑱斿悎宸ユ埧</div>
-            <img src="@/assets/images/bg_data@2x.png" class="bg" alt="" />
-          </div>
-          <div class="item item5">
-            <div class="num fs_linear">240<span class="unit">kw路h</span></div>
-            <div class="name">鑱斿悎宸ユ埧</div>
-            <img src="@/assets/images/bg_data@2x.png" class="bg" alt="" />
-          </div>
-          <div class="bottom_wrap">
-            <div class="bottom bottom1">
-              <div class="num fs_linear">240</div>
-              <div class="name">鏄ㄦ棩鐢ㄧ數</div>
-              <div class="unit">kw路h</div>
-              <img src="@/assets/images/ic_dianliang_b@2x.png" class="bg" alt="" />
-            </div>
-            <div class="bottom bottom2">
-              <div class="num">240</div>
-              <div class="name">浠婃棩鐢ㄧ數</div>
-              <div class="unit">kw路h</div>
-              <img src="@/assets/images/ic_dianliang@2x.png" class="bg" alt="" />
-            </div>
-            <div class="bottom bottom3">
-              <div class="num fs_linear">240</div>
-              <div class="name">鏈湀鐢ㄧ數</div>
-              <div class="unit">kw路h</div>
-              <img src="@/assets/images/ic_dianliang_b@2x.png" class="bg" alt="" />
-            </div>
-          </div>
-        </div>
-      </div>
-      <div class="right_box">
-        <div class="right_box_one">
-          <div class="com_header">
-            <div class="title">
-              <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
-              <div>鏈湀纰虫帓鏀鹃噺缁熻</div>
-            </div>
-            <img src="@/assets/images/title@2x.png" class="bg" alt="" />
-          </div>
-          <div class="content">
-            <img src="@/assets/images/ic_co2@2x.png" class="co2" alt="">
-            <div>
-              <div class="name">鏈湀绱纰虫帓鏀�</div>
-              <div><span class="num">22.22</span><span>鍚�</span></div>
-            </div>
-          </div>
-        </div>
-        <div class="right_box_two">
-          <div class="com_header">
-            <div class="title">
-              <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
-              <div>涓婃湀娌硅�楁帓琛岀粺璁�</div>
-            </div>
-            <div class="tabs">娌硅�楋細L</div>
-            <img src="@/assets/images/title@2x.png" class="bg" alt="" />
-          </div>
-          <div class="list">
-            <div class="line" v-for="item,i in 6">
-              <div class="top"><span v-if="i < 3">top</span>{{ i }}</div>
-              <div class="id_card">鐨朅12313</div>
-              <div class="wrap">
-                <ChargeRate :rate="15" :color />
+        <div class="right_box">
+          <div class="right_box_one">
+            <div class="com_header">
+              <div class="title">
+                <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
+                <div>鏈湀纰虫帓鏀鹃噺缁熻</div>
               </div>
-              <div class="num">1000</div>
+              <img src="@/assets/images/title@2x.png" class="bg" alt="" />
+            </div>
+            <div class="content">
+              <img src="@/assets/images/ic_co2@2x.png" class="co2" alt="">
+              <div>
+                <div class="name">鏈湀绱纰虫帓鏀�</div>
+                <div><span class="num">22.22</span><span>鍚�</span></div>
+              </div>
             </div>
           </div>
-        </div>
-        <div class="right_box_three">
-          <div class="com_header">
-            <div class="title">
-              <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
-              <div>鏈堟补鑰楀垎鏋�</div>
+          <div class="right_box_two">
+            <div class="com_header">
+              <div class="title">
+                <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
+                <div>涓婃湀娌硅�楁帓琛岀粺璁�</div>
+              </div>
+              <div class="tabs">娌硅�楋細L</div>
+              <img src="@/assets/images/title@2x.png" class="bg" alt="" />
             </div>
-            <img src="@/assets/images/title@2x.png" class="bg" alt="" />
+            <div class="list">
+              <div class="line" v-for="item, i in 6">
+                <div class="top"><span v-if="i < 3">top</span>{{ i }}</div>
+                <div class="id_card">鐨朅12313</div>
+                <div class="wrap">
+                  <ChargeRate :rate="15" :color />
+                </div>
+                <div class="num">1000</div>
+              </div>
+            </div>
           </div>
-          <div class="wrap">
-            <div class="analyseRef"></div>
+          <div class="right_box_three">
+            <div class="com_header">
+              <div class="title">
+                <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
+                <div>鏈堟补鑰楀垎鏋�</div>
+              </div>
+              <img src="@/assets/images/title@2x.png" class="bg" alt="" />
+            </div>
+            <div class="wrap">
+              <div class="analyseRef"></div>
+            </div>
           </div>
         </div>
       </div>
     </div>
-  </div>
+  </v-scale-screen>
 </template>
 
 <script setup>
@@ -243,6 +245,7 @@
 import dayjs from 'dayjs'
 import ChargeRate from '@/components/ChargeRate.vue'
 import * as echarts from 'echarts'
+import VScaleScreen from 'v-scale-screen'
 
 
 const weekMap = ['鏄熸湡鏃�', '鏄熸湡涓�', '鏄熸湡浜�', '鏄熸湡涓�', '鏄熸湡鍥�', '鏄熸湡浜�', '鏄熸湡鍏�',]
@@ -286,7 +289,7 @@
     xAxis: {
       type: 'category',
       boundaryGap: false,
-      data: [1,2,3,4,5,5]
+      data: [1, 2, 3, 4, 5, 5]
     },
     yAxis: {
       type: 'value',
@@ -313,7 +316,7 @@
     },
     series: [
       {
-        data: [1,2,3,4,4,5].map(i => {
+        data: [1, 2, 3, 4, 4, 5].map(i => {
           return {
             name: i,
             value: i,
@@ -398,7 +401,7 @@
     xAxis: {
       type: 'category',
       boundaryGap: false,
-      data: [1,2,3,4,5,5]
+      data: [1, 2, 3, 4, 5, 5]
     },
     yAxis: {
       type: 'value',
@@ -425,7 +428,7 @@
     },
     series: [
       {
-        data: [1,2,3,4,4,4000].map(i => {
+        data: [1, 2, 3, 4, 4, 4000].map(i => {
           return {
             name: i,
             value: i,
@@ -502,7 +505,7 @@
     },
     xAxis: {
       type: 'category',
-      data: [1,2,3,4,4,5]
+      data: [1, 2, 3, 4, 4, 5]
     },
     yAxis: {
       type: 'value',
@@ -520,7 +523,7 @@
     },
     series: [
       {
-        data: [1,2,3,4,5],
+        data: [1, 2, 3, 4, 5],
         type: 'bar',
         barWidth: 10,
         itemStyle: {
@@ -547,7 +550,7 @@
   initOperation()
   initLoadReal()
   initEnergy()
-}) 
+})
 
 
 </script>
@@ -591,11 +594,13 @@
 
     .left_box_two {
       margin-bottom: 20px;
-      .load_wrap{
+
+      .load_wrap {
         width: 100%;
         height: 210px;
         padding: 12px 12px;
-        .loadRef{
+
+        .loadRef {
           width: 100%;
           height: 100%;
         }
@@ -603,10 +608,11 @@
     }
 
     .left_box_three {
-      .energy_wrap{
+      .energy_wrap {
         width: 100%;
         height: 200px;
-        .energyRef{
+
+        .energyRef {
           width: 100%;
           height: 100%;
         }
@@ -805,6 +811,7 @@
 
     .right_box_one {
       margin-bottom: 20px;
+
       .content {
         height: 164px;
         display: flex;
@@ -825,15 +832,19 @@
         }
       }
     }
-    .right_box_two{
+
+    .right_box_two {
       margin-bottom: 20px;
-      .list{
+
+      .list {
         padding: 20px 24px 4px;
-        .line{
+
+        .line {
           display: flex;
           align-items: center;
           margin-bottom: 16px;
-          .top{
+
+          .top {
             font-weight: 500;
             font-size: 12px;
             width: 33px;
@@ -844,19 +855,22 @@
             box-shadow: inset 0px 0px 3px 0px #01D9FE;
             margin-right: 10px;
           }
-          .id_card{
+
+          .id_card {
             color: #DBEAEA;
             font-weight: 500;
             margin-right: 14px;
             font-size: 14px;
           }
-          .num{
+
+          .num {
             font-weight: 500;
             font-size: 13px;
             color: #DBEAEA;
             margin-left: 15px;
           }
-          .wrap{
+
+          .wrap {
             flex: 1;
             height: 20px;
             border: 1px solid #686B6B;
@@ -864,10 +878,12 @@
         }
       }
     }
-    .right_box_three{
-      .wrap{
+
+    .right_box_three {
+      .wrap {
         padding: 8px;
-        .analyseRef{
+
+        .analyseRef {
           width: 100%;
           height: 210px;
         }
@@ -963,7 +979,7 @@
     -webkit-text-fill-color: transparent;
   }
 
-  .time {
+  .time_wrap {
     font-size: 26px;
     font-weight: 600;
     background-image: -webkit-linear-gradient(top,
@@ -1001,11 +1017,10 @@
 }
 
 .main_app {
-  width: 100%;
-  min-height: 100vh;
+  width: 1920px;
+  height: 980px;
   color: #ffffff;
   position: relative;
-
   .main_bg {
     position: absolute;
     left: 0;
diff --git a/screen/src/views/LogisticsControl.vue b/screen/src/views/LogisticsControl.vue
deleted file mode 100644
index b9756f2..0000000
--- a/screen/src/views/LogisticsControl.vue
+++ /dev/null
@@ -1,67 +0,0 @@
-<template>
-  <div class="main_app">
-    <div class="main_header">
-      <div class="title">瀹夋嘲鏅烘収鐗╂祦鍥尯-缁胯壊浣庣⒊杩愯惀</div>
-      <div class="time">
-        <span>{{date}}</span>
-        <span>{{week}}</span>
-        <span>{{time}}</span>
-      </div>
-    </div>
-    <div class="main_content">
-      <div class="left_box">
-        <div class="left_box_one"></div>
-        <div class="left_box_two"></div>
-        <div class="left_box_three"></div>
-      </div>
-      <div class="center_box">
-        <div class="center_box_one"></div>
-        <div class="center_box_two"></div>
-      </div>
-      <div class="right_box">
-        <div class="right_box_one"></div>
-        <div class="right_box_two"></div>
-        <div class="right_box_three"></div>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script setup>
-import { ref } from 'vue'
-import dayjs from 'dayjs'
-
-const weekMap = ['鏄熸湡鏃�', '鏄熸湡涓�', '鏄熸湡浜�', '鏄熸湡涓�', '鏄熸湡鍥�', '鏄熸湡浜�', '鏄熸湡鍏�',]
-const date = ref(dayjs().format('YYYY.MM.DD'))
-const week = ref(weekMap[new Date().getDay()])
-const time = ref(dayjs().format('HH:mm:ss'))
-setInterval(() => { 
-  date.value = dayjs().format('YYYY-MM-DD')
-  week.value = weekMap[new Date().getDay()]
-  time.value = dayjs().format('HH:mm:ss')
-
-},1000)
-
-</script>
-
-<style lang="scss" scoped>
-.main_app{
-  width: 100%;
-  min-height: 100vh;
-  background: #0b2539;
-  color: #FFFFFF;
-}
-.main_content{
-  display: flex;
-  .left_box{}
-  .center_box{}
-  .right_box{}
-}
-.main_header{
-  display: flex;
-  align-items: center;
-  justify-content: space-between;
-  height: 71px;
-  border: 1px solid;
-}
-</style>
\ No newline at end of file
diff --git a/screen/src/views/LogisticsEfficiency.vue b/screen/src/views/LogisticsEfficiency.vue
new file mode 100644
index 0000000..26d9530
--- /dev/null
+++ b/screen/src/views/LogisticsEfficiency.vue
@@ -0,0 +1,637 @@
+<template>
+  <v-scale-screen width="1920" height="960" :fullScreen="true">
+    <div class="main_app">
+      <img src="@/assets/images/energy_ef/bg@2x.png" class="main_bg" alt="" />
+      <div class="main_header">
+        <!-- <img src="@/assets/images/maintitle.gif" class="main_header_bg" alt="" /> -->
+        <img src="@/assets/images/maintitle@2x.png" class="main_header_bg" alt="" />
+        <div class="title">瀹夋嘲鏅烘収鐗╂祦鍥尯-璋冨害鑳芥晥璺熻釜</div>
+        <div class="time_wrap">
+          <span class="date">{{ date }}</span>
+          <span class="week">{{ week }}</span>
+          <span class="time">{{ time }}</span>
+        </div>
+      </div>
+      <div class="main_content">
+        <div class="left_box">
+          <div class="left_box_one">
+            <div class="com_header">
+              <div class="title">
+                <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
+                <div>绱鍑哄簱閲忕粺璁�</div>
+              </div>
+              <div class="tabs">
+                <div class="tab active">鏈湀</div>
+                <div class="separate"></div>
+                <div class="tab">鏈勾</div>
+              </div>
+              <img src="@/assets/images/title@2x.png" class="bg" alt="" />
+            </div>
+            <div class="content_wrap">
+              <div class="content">
+                <div class="num">1000000</div>
+                <div class="unit_wrap">
+                  <span style="color: #869CC9;">鍚屾瘮</span>
+                  <img src="@/assets/images/ic_up.png" class="icon" alt="">
+                  <span>10.2%</span>
+                </div>
+              </div>
+              <div class="train_wrap">
+                <div class="icon_wrap">
+                  <img src="@/assets//images/energy_ef/chuku_ic_car@2x.png" alt="">
+                </div>
+                <div class="total">
+                  <span>绱鍑哄簱杞︽</span>
+                  <span><strong>3900</strong><span class="unit">娆�</span></span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="left_box_two">
+            <div class="com_header">
+              <div class="title">
+                <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
+                <div>鏈堣兘鑰楀垎鏋�</div>
+              </div>
+              <div class="tabs">
+                <div class="tab active">杩�7鏃�</div>
+                <div class="separate"></div>
+                <div class="tab">鏈湀</div>
+                <div class="separate"></div>
+                <div class="tab">鏈勾</div>
+              </div>
+              <img src="@/assets/images/title@2x.png" class="bg" alt="" />
+            </div>
+            <div class="energy_wrap">
+              <div class="energyRef"></div>
+            </div>
+          </div>
+          <div class="left_box_three">
+            <div class="com_header">
+              <div class="title">
+                <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
+                <div>褰撳墠杩愯緭浠诲姟</div>
+              </div>
+              <img src="@/assets/images/title@2x.png" class="bg" alt="" />
+            </div>
+            <div class="list_wrap">
+              <div class="list">
+                <div class="header line">
+                  <span class="item flag">鏍囪瘑</span>
+                  <span class="item order">杩愯緭鍗曞彿</span>
+                  <span class="item id_card">杩愯緭杞﹁締</span>
+                  <span class="item status">浣滀笟鐘舵��</span>
+                  <span class="item addr">鏀惰揣鍗曚綅</span>
+                  <span class="item time">浠诲姟寮�濮嬫椂闂�</span>
+                </div>
+                <div class="line" v-for="i in 7">
+                  <span class="item flag"><span class="flag_bg">鍑�</span></span>
+                  <span class="item order">11</span>
+                  <span class="item id_card">11</span>
+                  <span class="item status">11</span>
+                  <span class="item addr">11</span>
+                  <span class="item time">11</span>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="center_box">
+          <div class="center_box_one">
+            <div class="tabs">
+              <div class="tab active">
+                <img src="@/assets/images/energy_ef/chuku_task_ac.png" alt="">
+                <span>鍑哄簱浠诲姟</span>
+              </div>
+              <div class="tab">
+                <img src="@/assets/images/energy_ef/ruku_task.png" alt="">
+                <span>鍏ュ簱浠诲姟</span>
+              </div>
+            </div>
+            <div class="static_wrap">
+              <div class="item">
+                <img src="@/assets/images/energy_ef/ic_renwuzongliang@2x.png" alt="">
+                <div class="content">
+                  <div class="name">褰撳墠浠诲姟閲�</div>
+                  <div class="num"><span>1000</span>涓囨敮</div>
+                </div>
+              </div>
+              <div class="item">
+                <img src="@/assets/images/energy_ef/ic_wanchengrenwu@2x.png" alt="">
+                <div class="content">
+                  <div class="name">褰撴棩瀹屾垚浠诲姟鎬婚噺</div>
+                  <div class="num"><span class="today">1000</span>涓囨敮</div>
+                </div>
+              </div>
+              <div class="item">
+                <img src="@/assets/images/energy_ef/ic_bili@2x.png" alt="">
+                <div class="content">
+                  <div class="name">宸插畬鎴愭瘮渚�</div>
+                  <div class="num"><span class="finish">1000</span>涓囨敮</div>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="center_box_two"></div>
+        </div>
+        <div class="right_box">
+          <div class="right_box_one"></div>
+          <div class="right_box_two"></div>
+          <div class="right_box_three"></div>
+        </div>
+      </div>
+    </div>
+  </v-scale-screen>
+</template>
+
+<script setup>
+import { ref, onMounted } from 'vue'
+import VScaleScreen from 'v-scale-screen'
+import dayjs from 'dayjs'
+import * as echarts from 'echarts'
+
+const weekMap = ['鏄熸湡鏃�', '鏄熸湡涓�', '鏄熸湡浜�', '鏄熸湡涓�', '鏄熸湡鍥�', '鏄熸湡浜�', '鏄熸湡鍏�',]
+const date = ref(dayjs().format('YYYY.MM.DD'))
+const week = ref(weekMap[new Date().getDay()])
+const time = ref(dayjs().format('HH:mm:ss'))
+setInterval(() => {
+  date.value = dayjs().format('YYYY-MM-DD')
+  week.value = weekMap[new Date().getDay()]
+  time.value = dayjs().format('HH:mm:ss')
+
+}, 1000)
+
+const arr = ['#68e2e3', '#50afd3', '#377cdb', '#d5ae3a']
+const initEnergy = () => {
+  var myChart = echarts.init(document.querySelector('.energyRef'))
+  // 缁樺埗鍥捐〃
+  const arr = ['#68e2e3', '#50afd3', '#377cdb', '#d5ae3a']
+  myChart.setOption({
+    grid: {
+      top: '20%',
+      left: '2%',
+      right: '2%',
+      bottom: '4%',
+      containLabel: true
+    },
+    tooltip: {
+      trigger: 'axis',
+      axisPointer: {
+        type: 'line'
+      },
+    },
+    xAxis: {
+      type: 'category',
+      data: [1, 2, 3, 4, 4, 5]
+    },
+    yAxis: {
+      type: 'value',
+      name: 'kw路h',
+      nameTextStyle: {
+        padding: [0, 0, 4, -30]    // 鍥涗釜鏁板瓧鍒嗗埆涓轰笂鍙充笅宸︿笌鍘熶綅缃窛绂�
+      },
+      splitLine: {
+        show: true,
+        lineStyle: {
+          //杩欓噷杈撳叆绾挎潯鐨勬牱寮�
+          color: 'rgba(255,255,255,0.14)',
+        }
+      }
+    },
+    series: [
+      {
+        data: [1, 2, 3, 4, 5],
+        type: 'bar',
+        barWidth: 10,
+        itemStyle: {
+          normal: {
+            color: new echarts.graphic.LinearGradient(
+              0, 0, 0, 1,
+              [
+                { offset: 0, color: arr[1] },
+                { offset: 1, color: '#080807' }
+              ]
+            ),
+            barBorderRadius: [10, 10, 0, 0]
+          }
+        }
+      }
+    ]
+  })
+  window.addEventListener('resize', function () {//鎵ц
+    myChart.resize()
+  })
+}
+
+onMounted(() => {
+  initEnergy()
+})
+
+
+</script>
+
+<style lang="scss" scoped>
+div {
+  box-sizing: border-box;
+}
+
+.main_content {
+  display: flex;
+  padding: 20px 25px 0;
+
+  .left_box {
+    width: 440px;
+
+    .left_box_one {
+      width: 100%;
+      position: relative;
+      margin-bottom: 20px;
+
+      .content_wrap {
+        height: 164px;
+        padding: 22px 20px 0;
+
+        .content {
+          display: flex;
+          align-items: flex-end;
+          margin: 10px 0 22px;
+
+          .num {
+            margin-right: 10px;
+            font-weight: bold;
+            font-size: 46px;
+            height: 44px;
+            line-height: 52px;
+            font-weight: bold;
+            color: #00F2F3;
+            letter-spacing: 3px;
+            background-image: -webkit-linear-gradient(top,
+                #01D9FE 0%,
+                #0177FE 60%,
+                #0177FE 100%);
+            -webkit-background-clip: text;
+            -webkit-text-fill-color: transparent;
+          }
+
+          .unit_wrap {
+            display: flex;
+            align-items: center;
+          }
+
+          .icon {
+            width: 10px;
+            height: 12px;
+            margin-right: 6px;
+            margin-left: 4px;
+          }
+        }
+
+        .train_wrap {
+          display: flex;
+          height: 40px;
+          margin-top: 18px;
+
+          .icon_wrap {
+            width: 40px;
+            height: 40px;
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            margin-right: 4px;
+            border: 1px solid;
+            background: linear-gradient(180deg, rgba(0, 148, 235, 0.68) 0%, rgba(0, 148, 235, 0) 100%);
+            border-image: linear-gradient(180deg, rgba(177, 210, 255, 0.64), rgba(0, 171, 255, 0.7)) 1 1;
+
+            img {
+              width: 26px;
+            }
+          }
+
+          .total {
+            flex: 1;
+            display: flex;
+            align-items: center;
+            justify-content: space-between;
+            padding: 0 20px;
+            font-size: 16px;
+            border: 1px solid;
+            border-image: linear-gradient(180deg, rgba(177, 210, 255, 0.64), rgba(0, 171, 255, 0.7)) 1 1;
+            background: linear-gradient(180deg, rgba(0, 148, 235, 0.68) 0%, rgba(0, 148, 235, 0) 100%);
+
+            .unit {
+              margin-left: 5px;
+              font-size: 13px;
+            }
+          }
+        }
+      }
+    }
+
+    .left_box_two {
+      margin-bottom: 20px;
+
+      .energy_wrap {
+        width: 100%;
+        height: 250px;
+
+        .energyRef {
+          width: 100%;
+          height: 100%;
+        }
+      }
+    }
+
+    .left_box_three {
+      .list_wrap {
+        padding: 10px 0;
+
+        .list {
+          .line {
+            display: flex;
+            height: 30px;
+            align-items: center;
+            padding: 0 10px;
+            font-size: 12px;
+
+            &:nth-of-type(2n) {
+              background: rgba(27, 64, 97, 0.52);
+
+              .flag_bg {
+                background: #01ABFE !important;
+              }
+            }
+
+            .item {
+              flex: 5;
+              white-space: nowrap;
+              overflow: hidden;
+              text-overflow: ellipsis;
+            }
+
+            .flag {
+              flex: 3;
+              display: flex;
+
+              .flag_bg {
+                width: 22px;
+                height: 22px;
+                display: flex;
+                justify-content: center;
+                align-items: center;
+                border-radius: 50%;
+                background: #00F2F3;
+                font-weight: 500;
+                color: #001B3C;
+              }
+            }
+
+            .status {
+              color: #FEAF01;
+            }
+
+            .addr {
+              flex: 8;
+
+            }
+
+            .time {
+              flex: 8;
+            }
+          }
+        }
+      }
+    }
+  }
+
+  .center_box {
+    flex: 1;
+    padding: 16px 60px;
+    .center_box_one {
+      .tabs {
+        display: flex;
+        align-items: center;
+
+        .tab {
+          display: flex;
+          align-items: center;
+          margin-right: 30px;
+
+          img {
+            width: 20px;
+            height: 20px;
+            margin-right: 8px;
+          }
+
+          font-size: 20px;
+          font-weight: 600;
+          color: #D2E0FF;
+        }
+
+        .active {
+          background-image: -webkit-linear-gradient(top,
+              #fff 0%,
+              #eec05f 60%,
+              #eec05f 100%);
+          -webkit-background-clip: text;
+          -webkit-text-fill-color: transparent;
+        }
+      }
+
+      .static_wrap {
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        margin: 30px 0 54px;
+
+        .item {
+          display: flex;
+
+          img {
+            width: 68px;
+            height: 71px;
+            margin-right: 15px;
+          }
+
+          .content {
+            font-size: 15px;
+
+            .num {
+              font-size: 12px;
+              color: #D2E0FF;
+
+              span {
+                font-weight: bold;
+                font-size: 30px;
+                margin-right: 5px;
+                font-weight: 600;
+                background-image: -webkit-linear-gradient(top,
+                    #01D9FE 0%,
+                    #01D9FE 60%,
+                    #fff 100%);
+                -webkit-background-clip: text;
+                -webkit-text-fill-color: transparent;
+              }
+
+              .today {
+                background-image: -webkit-linear-gradient(top,
+                    #fff 0%,
+                    #20FFC5 50%,
+                    #20FFC5 100%);
+              }
+              .finish{
+                background-image: -webkit-linear-gradient(top,
+                    #fff 0%,
+                    #FFB120 50%,
+                    #FFB120 100%);
+              }
+            }
+          }
+        }
+      }
+    }
+    .center_box_two{
+      width: 100%;
+      border: 1px solid;
+    }
+  }
+
+  .right_box {
+    width: 440px;
+  }
+}
+
+.main_header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  height: 90px;
+  position: relative;
+  padding: 0px 40px 16px;
+  font-weight: 600;
+  font-size: 36px;
+
+  .title {
+    background-image: -webkit-linear-gradient(top,
+        #ffffff 0%,
+        #c8ddff 70%,
+        #85b4ff 80%,
+        #74a9ff 100%);
+    -webkit-background-clip: text;
+    -webkit-text-fill-color: transparent;
+  }
+
+  .time_wrap {
+    font-size: 26px;
+    font-weight: 600;
+    background-image: -webkit-linear-gradient(top,
+        #ffffff 0%,
+        #c8ddff 50%,
+        #85b4ff 80%,
+        #74a9ff 100%);
+    -webkit-background-clip: text;
+    -webkit-text-fill-color: transparent;
+    display: flex;
+    align-items: center;
+
+    .time {
+      width: 180px;
+      display: flex;
+      justify-content: flex-end;
+      padding-bottom: 10px;
+      font-size: 36px;
+    }
+
+    .week {
+      margin-left: 36px;
+    }
+  }
+
+  .main_header_bg {
+    position: absolute;
+    left: 0;
+    top: 0;
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+    z-index: -1;
+  }
+}
+
+.com_header {
+  height: 40px;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding: 0 15px 0 13px;
+  position: relative;
+
+  .title {
+    display: flex;
+    align-items: center;
+    font-weight: bold;
+    font-size: 16px;
+    background-image: -webkit-linear-gradient(top,
+        #ffffff 0%,
+        #c8ddff 66%,
+        #85b4ff 72%,
+        #74a9ff 100%);
+    -webkit-background-clip: text;
+    -webkit-text-fill-color: transparent;
+
+    .icon {
+      width: 16px;
+      height: 16px;
+      margin-right: 14px;
+    }
+  }
+
+  .tabs {
+    display: flex;
+    align-items: center;
+    font-size: 14px;
+    color: #d2e0ff;
+
+    .separate {
+      width: 1px;
+      height: 14px;
+      background-color: #d2e0ff;
+      margin: 0 6px;
+    }
+
+    .active {
+      color: #0094eb;
+    }
+  }
+}
+
+.main_app {
+  width: 1920px;
+  min-height: 960px;
+  /* width: 100%;
+  height: 100vh; */
+  background: #0b2539;
+  color: #FFFFFF;
+  position: relative;
+  z-index: -2;
+
+  .main_bg {
+    position: absolute;
+    left: 0;
+    top: 0;
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+    z-index: -1;
+  }
+}
+
+.bg {
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 100%;
+  object-fit: cover;
+  z-index: -1;
+}
+</style>
\ No newline at end of file
diff --git a/screen/src/views/PlatformCall.vue b/screen/src/views/PlatformCall.vue
index 98a699d..312e4c6 100644
--- a/screen/src/views/PlatformCall.vue
+++ b/screen/src/views/PlatformCall.vue
@@ -30,7 +30,6 @@
             }else{
               item.optTimeTemp = '-'
             }
-            
           }
           // item.optTimeTemp = dayjs.duration(Math.abs(new Date().getTime() - item.optTime)).format('HH:mm')
         }
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 b314be7..d297d31 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
@@ -674,7 +674,8 @@
 
     public  enum PlatformWarnEvent {
         STOP_TIMEOUT(0, "鍋滈潬瓒呮椂","${carCode}鏈堝彴鍋滈潬瓒呮椂" ),
-        STOP_ERROR(1, "鍋滈潬閿欒","${carCode}鏈堝彴鍋滈潬閿欒" );
+        STOP_ERROR(1, "鍋滈潬閿欒","${carCode}鏈堝彴鍋滈潬閿欒" ),
+        WORK_TIMEOUT(2, "浣滀笟瓒呮椂","${carCode}浣滀笟瓒呮椂" );
 
         // 鎴愬憳鍙橀噺
         private int key;
@@ -799,6 +800,7 @@
         WORKING(3, "浣滀笟涓�","${param} ${param2} 浣滀笟涓�" ),
         WRONG_IN(4, "閿欒鍋滈潬","${param} ${param2} 褰撳墠杞﹁締閿欒鍋滈潬锛岃灏藉揩椹剁" ),
         TIMEOUT_IN(5, "瓒呮椂鍋滈潬","${param} ${param2} 褰撳墠杞﹁締瓒呮椂鍋滈潬锛岃灏藉揩椹剁" ),
+        TIMEOUT_WORK(6, "浣滀笟瓒呮椂","${param} ${param2} 褰撳墠杞﹁締浣滀笟瓒呮椂" ),
         ;
 
         // 鎴愬憳鍙橀噺
@@ -851,12 +853,14 @@
      2. 浣滀笟瀹屾垚锛氱殩A12345浣滀笟瀹屾垚锛岃灏藉揩椹剁
      3. 閿欒鍋滈潬锛氱殩A12345鏈堝彴鍋滈潬閿欒锛岃灏藉揩椹剁
      4. 瓒呮椂鍋滈潬锛氱殩A12345鏈堝彴鍋滈潬瓒呮椂锛岃灏藉揩椹剁璇峰敖蹇┒绂�
+     5. 浣滀笟瓒呮椂锛氱殩A12345鏈堝彴鍋滈潬瓒呮椂锛岃灏藉揩椹剁璇峰敖蹇┒绂�
      */
     public  enum PlatformBroadcastContent {
         CALLING(1, "鍙彿涓�","${param}璇峰墠寰�${param2}绛夊緟浣滀笟"),
         DONE(2, "浣滀笟瀹屾垚","${param}浣滀笟瀹屾垚锛岃灏藉揩椹剁" ),
         WRONG_IN(3, "閿欒鍋滈潬","${param}鏈堝彴鍋滈潬閿欒锛岃灏藉揩椹剁" ),
         TIMEOUT_IN(4, "瓒呮椂鍋滈潬","${param}鏈堝彴鍋滈潬瓒呮椂锛岃灏藉揩椹剁璇峰敖蹇┒绂�" ),
+        TIMEOUT_WORK(5, "浣滀笟瓒呮椂","${param}浣滀笟瓒呮椂" ),
         ;
 
         // 鎴愬憳鍙橀噺
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 9aee2f0..2292116 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,8 @@
     @ApiOperation("銆愯瀹㈢郴缁熴�戝畾鏃舵洿鏂板井淇″叕浼楀彿accesstoken")
     @GetMapping("/timer/wxtoken/updateWxAccessToken")
     ApiResponse updateWxAccessToken();
-    @ApiOperation("鏈堝彴浠诲姟瓒呮椂鎶ヨ")
-    @GetMapping("/timer/platformJob/platformJobTimeOut")
-    ApiResponse platformJobTimeOut();
-    @ApiOperation("鏈堝彴浠诲姟鑷姩杩囧彿")
-    @GetMapping("/timer/platformJob/timeOutCallIn")
-    ApiResponse timeOutCallIn();
-
+    @ApiOperation("銆愭暟瀛楀寲鏈堝彴銆戞湀鍙颁綔涓氭姤璀︿笟鍔�")
+    @GetMapping("/timer/platformJob/platformJobTimer")
+    ApiResponse platformJobTimer();
 
 }
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 433cdd1..b259a1f 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
@@ -34,21 +34,14 @@
     @Autowired
     private PlatformJobService platformJobService;
 
-    @ApiOperation("瓒呮椂鎶ヨ鏁版嵁")
-    @GetMapping("/platformJobTimeOut")
-    public ApiResponse platformJobTimeOut() {
+    @ApiOperation("鏈堝彴浣滀笟鎶ヨ涓氬姟")
+    @GetMapping("/platformJobTimer")
+    public ApiResponse platformJobTimer() {
         platformJobService.timeOutReport();
-        return ApiResponse.success("瓒呮椂鎶ヨ鏁版嵁");
-    }
-
-
-    @ApiOperation("瓒呮椂鑷姩杩囧彿")
-    @GetMapping("/timeOutCallIn")
-    public ApiResponse timeOutCallIn() {
         platformJobService.timeOutCallIn();
-        return ApiResponse.success("鑷姩杩囧彿");
+        platformJobService.timeOutWork();
+        return ApiResponse.success("鏈堝彴浣滀笟鎶ヨ涓氬姟");
     }
-
 
 
 }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/SmsConfigCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/SmsConfigCloudController.java
index 1e05013..5d209a2 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/SmsConfigCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/SmsConfigCloudController.java
@@ -60,6 +60,21 @@
         return ApiResponse.success(null);
     }
 
+
+
+    @ApiOperation("鎵归噺绂佸惎鐢�")
+    @GetMapping("/updateStatus/batch")
+    @CloudRequiredPermission("business:smsconfig:update")
+    public ApiResponse updateStatusBatch(@RequestParam String ids,@RequestParam Integer status) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        smsConfigService.updateStatusByIdInBatch(idList,status);
+        return ApiResponse.success(null);
+    }
+
     @ApiOperation("鏍规嵁ID淇敼")
     @PostMapping("/updateById")
     @CloudRequiredPermission("business:smsconfig:update")
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/DriverPlatformController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/DriverPlatformController.java
index 6329411..e82d39a 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/DriverPlatformController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/DriverPlatformController.java
@@ -168,4 +168,18 @@
         return ApiResponse.success(platformJobService.getLargeScreenData());
     }
 
+    @LoginNoRequired
+    @ApiOperation("鏈堝彴浠诲姟娴嬭瘯瀹氭椂鏂规硶")
+    @GetMapping("/testTimer")
+    public ApiResponse testTimer(Integer type) {
+        if(Constants.equalsInteger(type ,1)){
+            platformJobService.timeOutWork();
+        }else if(Constants.equalsInteger(type ,2)){
+            platformJobService.timeOutCallIn();
+        }else if(Constants.equalsInteger(type ,3)){
+            platformJobService.timeOutReport();
+        }
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
 }
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 ab179ae..2424691 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
@@ -417,6 +417,12 @@
     @TableField(exist = false)
     private String queryStatus;
 
+
+    @ApiModelProperty(value = "澶氱姸鎬佹煡璇� 澶氫釜浠�,鍒嗗壊")
+    @TableField(exist = false)
+    private String queryStatusForPower;
+
+
     @ApiModelProperty(value = "浣滀笟绫诲瀷鏌ヨ 澶氫釜浠�,鍒嗗壊")
     @TableField(exist = false)
     private String queryType;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/WmsJobContractVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/WmsJobContractVO.java
index 2a4c704..93bb26d 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/WmsJobContractVO.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/WmsJobContractVO.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.business.vo;
 
+import com.doumee.core.annotation.excel.ExcelColumn;
 import com.doumee.dao.business.model.Approve;
 import com.doumee.dao.business.model.Platform;
 import com.doumee.dao.business.model.PlatformWmsDetail;
@@ -23,6 +24,9 @@
     @ApiModelProperty(value = "鏀惰揣鍦�")
     private String address;
 
+    @ApiModelProperty(value = "0鏈畬鎴� 1宸插畬鎴� 2宸插彇娑�", example = "1")
+    private Integer status;
+
     @ApiModelProperty(value = "涓婇攣鐘舵�侊細0=鏈笂閿侊紱1=宸蹭笂閿侊紱")
     private Integer lockStatus;
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformJobService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformJobService.java
index 66e0703..195779b 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformJobService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformJobService.java
@@ -238,4 +238,9 @@
      */
     void timeOutCallIn();
 
+    /**
+     * 浣滀笟瓒呮椂
+     */
+    void timeOutWork();
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/SmsConfigService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/SmsConfigService.java
index 9e137bb..a41d07d 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/SmsConfigService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/SmsConfigService.java
@@ -48,6 +48,8 @@
      */
     void updateById(SmsConfig smsConfig);
 
+    void updateStatusByIdInBatch(List<Integer> ids,Integer status);
+
     /**
      * 鎵归噺涓婚敭鏇存柊
      *
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceServiceImpl.java
index 3741865..0322937 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceServiceImpl.java
@@ -243,7 +243,7 @@
             }
             model.setSpeed(speed);
         }
-        PlatformBroadcastLog log  =  HkSyncPushServiceImpl.dealLedContentBiz(device.getNo(),device.getName(),model.getContent(),model.getSpeed(),1);
+        PlatformBroadcastLog log  =  HkSyncPushServiceImpl.dealLedContentBiz(0,device.getNo(),device.getName(),model.getContent(),model.getSpeed(),1);
         platformBroadcastLogMapper.insert(log);
         if(log.getHkStatus() == null || !Constants.equalsInteger(log.getHkStatus(), Constants.TWO)){
             throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝灞忓箷鍐呭璁剧疆澶辫触"+(log!=null?log.getHkInfo():""));
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 9a6b9e0..7bdf5a0 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
@@ -271,6 +271,7 @@
                 .eq(pageWrap.getModel().getPlatformGroupId() != null, PlatformJob::getPlatformGroupId, pageWrap.getModel().getPlatformGroupId())
 
                 .apply(pageWrap.getModel().getQueryStatus() != null, " find_in_set(t.`STATUS`,'"+pageWrap.getModel().getQueryStatus()+"')")
+                .apply(pageWrap.getModel().getQueryStatusForPower() != null, " find_in_set(t.`STATUS`,'"+pageWrap.getModel().getQueryStatusForPower()+"')")
                 .apply(pageWrap.getModel().getQueryType() != null, " find_in_set(t.TYPE,'"+pageWrap.getModel().getQueryType()+"')")
                 .ge(pageWrap.getModel().getBeginWorkDateStart() != null, PlatformJob::getStartDate, Utils.Date.getStart(pageWrap.getModel().getBeginWorkDateStart()))
                 .le(pageWrap.getModel().getBeginWorkDateEnd() != null, PlatformJob::getStartDate, Utils.Date.getEnd(pageWrap.getModel().getBeginWorkDateEnd()))
@@ -1093,7 +1094,7 @@
             if(Constants.equalsInteger(device.getType(),Constants.ZERO)&&sendLed){
                 log.error("璋冭捣led------------------------------------------------------------------------------------------");
                 //濡傛灉鏄疞ED
-                PlatformBroadcastLog log = HkSyncPushServiceImpl.dealLedContentBiz(device.getHkNo(),device.getName(),ledContent,speed,1);
+                PlatformBroadcastLog log = HkSyncPushServiceImpl.dealLedContentBiz(model.getId(),device.getHkNo(),device.getName(),ledContent,speed,1);
                 logList.add(log);
                 ledList.add(device.getHkId());
             }else  if(Constants.equalsInteger(device.getType(),Constants.TWO)&&sendBroadcast){
@@ -1170,8 +1171,9 @@
                 SmsConstants.platformJobContent.platformJobMove,oldPlatform.getName(),platform.getName()
         );
 
-        this.broadcastAndLEed(platformJob,null,
-                StringUtils.isBlank(oldPlatform.getRemark())?Constants.PlatformLedContent.IDEL_CONTNET.getName():oldPlatform.getRemark()
+        platformJob.setPlatformName(platform.getName());
+        this.broadcastAndLEed(platformJob, StringUtils.isBlank(oldPlatform.getRemark())?Constants.PlatformLedContent.IDEL_CONTNET.getName():oldPlatform.getLedContent(),
+                null
         );
 
     }
@@ -1731,7 +1733,7 @@
                 if (Objects.isNull(platformJob.getWorkNum()) || Objects.isNull(platformJob.getWorkRate())) {
                     platformDataListResponse.setFinishTime(null);
                 } else {
-                    Integer workMinute = platformJob.getWorkNum().multiply(new BigDecimal(60)).divide(platformJob.getWorkRate()).intValue();
+                    Integer workMinute = platformJob.getWorkNum().multiply(new BigDecimal(60)).divide(platformJob.getWorkRate(),0,BigDecimal.ROUND_HALF_UP).intValue();
                     Date overDate = DateUtil.getXMinuteAfterDate(platformJob.getNewStartDate(), workMinute);
                     platformDataListResponse.setFinishTime(overDate);
                 }
@@ -1926,12 +1928,12 @@
                     if(Objects.isNull(platformJob.getWorkNum()) || Objects.isNull(platformJob.getWorkRate())){
                         platformJob.setOptTime(0L);
                     }else{
-                        Integer workMinute = platformJob.getWorkNum().multiply(new BigDecimal(60)).divide(platformJob.getWorkRate()).intValue();
+                        Integer workMinute = platformJob.getWorkNum().multiply(new BigDecimal(60)).divide(platformJob.getWorkRate(),0,BigDecimal.ROUND_HALF_UP).intValue();
                         Date overDate = DateUtil.getXMinuteAfterDate(platformJob.getNewStartDate(),workMinute);
                         platformJob.setOptTime(overDate.getTime());
                     }
                 }else if(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.CALLED.getKey())){
-                    platformJob.setOptTime(DateUtil.getXMinuteAfterDate(platformJob.getCallDate(),platformJob.getWorktimeOutAlarmTime()).getTime());
+                    platformJob.setOptTime(DateUtil.getXMinuteAfterDate(platformJob.getNewCallDate(),platformJob.getWorktimeOutAlarmTime()).getTime());
                 }
             }
             largeScreenDataVO.setAllList(platformJobList);
@@ -1942,9 +1944,11 @@
         return largeScreenDataVO;
 
     }
-    
-    
 
+
+    /**
+     * 浣滀笟瀹屾垚瓒呮椂
+     */
     @Override
     public void timeOutReport(){
         //鏌ヨ瓒呮椂鏁版嵁
@@ -1953,7 +1957,7 @@
                 .selectAs(Platform::getName,PlatformJob::getPlatformName)
                 .select(" ( now() > DATE_ADD(t.DONE_DATE ,INTERVAL t1.STAY_TIMEOUT_ALARM_TIME MINUTE) ) as isTimeOut   ")
                 .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId)
-                .in(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE,Constants.PlatformJobStatus.AUTHED_LEAVE)
+                .in(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey())
                 .eq(PlatformJob::getInOut,Constants.ONE)
                 .isNotNull(PlatformJob::getDoneDate)
         );
@@ -1986,10 +1990,10 @@
         List<PlatformJob> platformJobList =  platformJobJoinMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper<PlatformJob>()
                 .selectAll(PlatformJob.class)
                 .selectAs(Platform::getName,PlatformJob::getPlatformName)
-                .select(" ( now() > DATE_ADD(t.CALL_DATE ,INTERVAL t2.WAIT_CALL_TIME MINUTE) ) as isTimeOut   ")
+                .select(" ( now() > DATE_ADD( ( select pl.CREATE_DATE from platform_log pl where t.id = pl.obj_id and pl.OBJ_TYPE = 4 order by pl.CREATE_DATE desc  limit 1  )  ,INTERVAL t2.WAIT_CALL_TIME MINUTE) ) as isTimeOut   ")
                 .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId)
                 .leftJoin(PlatformGroup.class,PlatformGroup::getId,Platform::getGroupId)
-                .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.CALLED)
+                .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.CALLED.getKey())
                 .isNotNull(PlatformJob::getCallDate)
         );
         //濡傛灉瓒呮椂 澶勭悊鏁版嵁 骞跺彂閫乴ed涓庡箍鎾�
@@ -2002,4 +2006,43 @@
     }
 
 
+    /**
+     * 浣滀笟瓒呮椂
+     */
+    @Override
+    public void timeOutWork(){
+        //鏌ヨ瓒呮椂鏁版嵁
+        List<PlatformJob> platformJobList =  platformJobJoinMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper<PlatformJob>()
+                .selectAll(PlatformJob.class)
+                .selectAs(Platform::getName,PlatformJob::getPlatformName)
+                .selectAs(Platform::getWorkRate, PlatformJob::getWorkRate)
+                .selectAs(Platform::getWorkTimeoutAlarmTime, PlatformJob::getWorktimeOutAlarmTime)
+                .select(" case when t.total_num is null  then ( select sum(pwd.IO_QTY) from platform_wms_detail pwd where pwd.JOB_ID = t.id  ) else t.total_num end workNum ")
+                .select(" ( select pl.CREATE_DATE from platform_log pl where t.id = pl.obj_id and pl.OBJ_TYPE = 5 order by pl.CREATE_DATE desc  limit 1  ) as newStartDate  ")
+                .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId)
+                .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.WORKING.getKey())
+                .eq(PlatformJob::getInOut,Constants.ONE)
+        );
+        //濡傛灉瓒呮椂 澶勭悊鏁版嵁 骞跺彂閫乴ed涓庡箍鎾�
+        for (PlatformJob platformJob:platformJobList) {
+
+            Integer workMinute = platformJob.getWorkNum().multiply(new BigDecimal(60)).divide(platformJob.getWorkRate(),0,BigDecimal.ROUND_HALF_UP).intValue();
+            Date overDate = DateUtil.getXMinuteAfterDate(platformJob.getNewStartDate(),workMinute + platformJob.getWorktimeOutAlarmTime());
+            if(overDate.getTime() < System.currentTimeMillis() ){
+                //骞挎挱 led閫氱煡
+                this.broadcastAndLEed(platformJob,Constants.PlatformLedContent.TIMEOUT_WORK.getInfo(),
+                        Constants.PlatformBroadcastContent.TIMEOUT_WORK.getInfo());
+
+                SavePlatformWarnEventDTO savePlatformWarnEventDTO = new SavePlatformWarnEventDTO();
+                savePlatformWarnEventDTO.setPlatformJobId(platformJob.getId());
+                savePlatformWarnEventDTO.setPlatformId(platformJob.getPlatformId());
+                savePlatformWarnEventDTO.setCarCode(platformJob.getCarCodeFront());
+                savePlatformWarnEventDTO.setEventType(Constants.PlatformWarnEvent.WORK_TIMEOUT.getKey());
+                platformWarnEventService.savePlatformWarnEvent(savePlatformWarnEventDTO);
+            }
+
+        }
+    }
+
+
 }
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 ddf50fd..6244579 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
@@ -112,6 +112,9 @@
                     wmsJobContractVO.setLockStatus(
                             wmsJobContractVO.getPlatformWmsDetailList().get(Constants.ZERO).getLockStatus()
                     );
+                    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/SmsConfigServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsConfigServiceImpl.java
index 1d2e950..3af599e 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsConfigServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsConfigServiceImpl.java
@@ -15,6 +15,7 @@
 import org.springframework.util.CollectionUtils;
 
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 鐭俊涓氬姟閰嶇疆Service瀹炵幇
@@ -58,6 +59,18 @@
     }
 
     @Override
+    public void updateStatusByIdInBatch(List<Integer> ids,Integer status) {
+        if (CollectionUtils.isEmpty(ids) || Objects.isNull(status)) {
+            return;
+        }
+        smsConfigMapper.update(new UpdateWrapper<SmsConfig>()
+                .set("status",status)
+                .in("id",ids)
+        );
+    }
+
+
+    @Override
     public void updateByIdInBatch(List<SmsConfig> smsConfigs) {
         if (CollectionUtils.isEmpty(smsConfigs)) {
             return;
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 d9cf7a7..0047699 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
@@ -1086,7 +1086,7 @@
             }
             if(Constants.equalsInteger(device.getType(),Constants.ZERO)){
                 //濡傛灉鏄疞ED
-                PlatformBroadcastLog log = dealLedContentBiz(device.getHkNo(),device.getName(),content,speed,1);
+                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)){
@@ -1115,7 +1115,7 @@
     public static PlatformBroadcastLog dealBroadcastBiz(PlatformJob model, List<String> broadcastList,String bNames , String content1) {
         PlatformBroadcastLog log = new PlatformBroadcastLog();
         content1 = content1.replace("${param}",model.getCarCodeFront());
-
+        log.setObjId(model.getId().toString());
         log.setCreateDate(new Date());
         log.setBizType(Constants.ONE);
         log.setHkDate(new Date());
@@ -1139,12 +1139,12 @@
             log.setHkInfo("璇锋眰鎴愬姛");
             log.setHkStatus(Constants.TWO);
         }
-        log.setDeviceType(Constants.ONE);
+        log.setDeviceType(Constants.ZERO);
         log.setName("鍙戦�佸箍鎾挱鎶ュ唴瀹�");
         return  log;
     }
 
-    public static PlatformBroadcastLog dealLedContentBiz(String hkNo,String hkName, String content,int speed,int color) {
+    public static PlatformBroadcastLog dealLedContentBiz(Integer platformId,String hkNo,String hkName, String content,int speed,int color) {
         PlatformBroadcastLog log = new PlatformBroadcastLog();
         log.setCreateDate(new Date());
         log.setBizType(Constants.ONE);
@@ -1154,6 +1154,7 @@
         log.setRemark(hkName);
         log.setInfo(content);
         log.setNum(Constants.ONE);
+        log.setObjId(platformId.toString());
 
         TransparentChannelBodyRequest body = new TransparentChannelBodyRequest();
         TransparentChannelHeadRequest head = new TransparentChannelHeadRequest();

--
Gitblit v1.9.3