From 759ccbfc701c60800da901d8b5822b3528a5b002 Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期二, 10 三月 2026 11:23:58 +0800
Subject: [PATCH] 更改头部

---
 admin/src/components/business/OperaDeviceDataListWindow.vue                                         |    6 
 server/system_service/src/main/java/com/doumee/core/utils/Constants.java                            |    1 
 admin/src/components/business/OperaDianbiaoDataListWindow.vue                                       |  179 ++++++++++++++
 admin/src/components/business/OperaDeviceDianbiaoWindow.vue                                         |  147 ++++++++++++
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/DeviceData.java           |    4 
 admin/src/views/business/admissionStatistics.vue                                                    |    2 
 server/system_gateway/src/main/resources/application-self.yml                                       |    2 
 admin/src/views/business/carStatistics.vue                                                          |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceServiceImpl.java |  102 ++++++++
 admin/src/views/business/deviceDianbiao.vue                                                         |   70 +++-
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/DeviceService.java          |    3 
 server/visits/device_service/src/main/java/com/doumee/tcp/WaterElectricityUtil.java                 |  109 ++++++++
 server/system_gateway/src/main/resources/bootstrap-dev.yml                                          |    2 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/DeviceCloudController.java         |   22 +
 admin/src/components/business/OperaDeviceDuanluqiWindow.vue                                         |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Device.java               |    3 
 admin/src/api/business/device.js                                                                    |    6 
 admin/.env.development                                                                              |    4 
 18 files changed, 618 insertions(+), 48 deletions(-)

diff --git a/admin/.env.development b/admin/.env.development
index 7c60d0e..e067281 100644
--- a/admin/.env.development
+++ b/admin/.env.development
@@ -3,7 +3,7 @@
 
 VUE_APP_SCREEN_URL_PREFIX  = 'http://192.168.0.7/screen/#/'
 
-#VUE_APP_API_URL  = 'http://localhost:10010'
-VUE_APP_API_URL  = 'http://192.168.0.7/system_gateway'
+VUE_APP_API_URL  = 'http://localhost:10010'
+#VUE_APP_API_URL  = 'http://192.168.0.7/system_gateway'
 
 VUE_APP_AMAP_KEY='045542fc5f436b75e6c911c5c84ff8cd'
diff --git a/admin/src/api/business/device.js b/admin/src/api/business/device.js
index 06e72bf..09d3528 100644
--- a/admin/src/api/business/device.js
+++ b/admin/src/api/business/device.js
@@ -31,6 +31,9 @@
 export function create (data) {
   return request.post('/visitsAdmin/cloudService/business/device/create', data)
 }
+export function dianbiaoData(data) {
+  return request.post('/visitsAdmin/cloudService/business/device/dianbiaoData', data)
+}
 
 // 淇敼鏄惁闂ㄧ鍏ュ彛
 export function updateEntranceById (data) {
@@ -42,6 +45,9 @@
 export function duanluqiCmd (data) {
   return request.post('/visitsAdmin/cloudService/business/device/duanluqiCmd', data)
 }
+export function dianbaoCmd (data) {
+  return request.post('/visitsAdmin/cloudService/business/device/dianbaoCmd', data)
+}
 // 鍙戠敓led灞忓唴瀹�
 export function setLedContent (data) {
   return request.post('/visitsAdmin/cloudService/business/hksync/setLedContent', data)
diff --git a/admin/src/components/business/OperaDeviceDataListWindow.vue b/admin/src/components/business/OperaDeviceDataListWindow.vue
index b23d1b4..66f46e7 100644
--- a/admin/src/components/business/OperaDeviceDataListWindow.vue
+++ b/admin/src/components/business/OperaDeviceDataListWindow.vue
@@ -17,8 +17,8 @@
             <div style="flex: 1"><span  class="label">鎺у埗寮�鍏筹細</span>{{model.channelInfo ||'-'}}</div>
           </div>
           <div style="display: flex;margin-top: 20px;">
-            <div style="flex: 1"><span  class="label">MQTT IP锛�</span>{{model.doorNameObj.mqttIp ||''}}</div>
-            <div style="flex: 1"><span  class="label">MQTT绔彛锛�</span>{{model.doorNameObj.mqttPort||''}}</div>
+            <div style="flex: 1"><span  class="label">MQTT IP锛�</span>{{model.doorNameObj?(model.doorNameObj.mqttIp ||''):''}}</div>
+            <div style="flex: 1"><span  class="label">MQTT绔彛锛�</span>{{model.doorNameObj?(model.doorNameObj.mqttPort ||''):''}}</div>
             <div style="flex: 3">
               <span class="label">鏈�杩戞帶鍒舵搷浣滐細</span>
               <span class="orange" >{{model.remark||''}}</span>
@@ -108,7 +108,7 @@
       visible: false,
       title: '',
       activeGroup:0,
-      model:{},
+      model:{doorNameObj:{}},
       groupList: [{ id: 0, name: '鏁版嵁涓婃姤璁板綍', type: 0 }, { id: 1, name: '杩滅▼鎺у埗璁板綍', type: 1 }],
       searchForm: {
         deviceId:  null,
diff --git a/admin/src/components/business/OperaDeviceDianbiaoWindow.vue b/admin/src/components/business/OperaDeviceDianbiaoWindow.vue
new file mode 100644
index 0000000..0a22a1a
--- /dev/null
+++ b/admin/src/components/business/OperaDeviceDianbiaoWindow.vue
@@ -0,0 +1,147 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        :visible.sync="visible"
+        width="65%"
+        :confirm-working="isWorking"
+        @confirm="confirm"
+    >
+        <el-form :model="form" ref="form" :rules="rules">
+          <p class="tip-header" >鍩烘湰淇℃伅</p>
+          <el-form-item label="璁惧鍚嶇О" prop="name">
+            <el-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�" v-trim/>
+          </el-form-item>
+          <el-form-item label="璁惧鍦板潃鍩�" prop="no">
+            <el-input v-model="form.no" placeholder="璇疯緭鍏ヨ澶囨爣璇嗙" v-trim/>
+          </el-form-item>
+          <el-form-item label="璁惧鍙�" prop="doorNo">
+            <el-input v-model="form.doorNo" placeholder="璇疯緭鍏ュ簭鍒楀彿" v-trim/>
+          </el-form-item>
+          <el-form-item label="鍘傚晢" prop="manufature">
+            <el-input v-model="form.manufature" placeholder="璇疯緭鍏ュ巶鍟�" v-trim/>
+          </el-form-item>
+          <el-form-item label="瀹夎浣嶇疆" prop="regionPathName">
+            <el-input v-model="form.regionPathName" placeholder="璇疯緭鍏ヨ澶囦綅缃�" v-trim/>
+          </el-form-item>
+          <el-form-item label="杩炴帴IP" prop="ip">
+            <el-input v-model="form.ip" placeholder="璇疯緭鍏ヨ澶囪繛鎺P鍦板潃" v-trim/>
+          </el-form-item>
+          <el-form-item label="杩炴帴绔彛" prop="port">
+            <el-input v-model="form.port" placeholder="璇疯緭鍏ヨ繛鎺ョ鍙�" v-trim/>
+          </el-form-item>
+          <el-form-item label="鐢垫祦姣�" prop="channelNo">
+            <el-input v-model="form.channelNo" type="number" placeholder="璇疯緭鍏ョ數娴佹瘮" v-trim>
+              <template slot="append">/5A</template>
+            </el-input>
+          </el-form-item>
+          <el-form-item label="瀵嗙爜绛夌骇" prop="pwdLevel">
+            <el-input v-model="form.doorNameObj.pwdLevel" placeholder="璇疯緭鍏ュ瘑鐮佺瓑绾�" v-trim/>
+          </el-form-item>
+          <el-form-item label="瀵嗙爜" prop="pwd">
+            <el-input v-model="form.doorNameObj.pwd" placeholder="璇疯緭鍏ヨ繛鎺ュ瘑鐮�" v-trim/>
+          </el-form-item>
+          <el-form-item label="鎿嶄綔鑰呬唬鐮�" prop="userCode">
+            <el-input v-model="form.doorNameObj.userCode" placeholder="璇疯緭鍏ヨ澶囨搷浣滆�呬唬鐮�" v-trim/>
+          </el-form-item>
+        </el-form>
+    </GlobalWindow>
+</template>
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+  name: 'OperaDeviceDuanluqiWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: null,
+        name: '',
+        regionPathName: '',
+        doorNo: '',
+        no: '',
+        type: 6,
+        ip: '',
+        port: '',
+        level: '',
+        doorName: '',
+        doorId: '',
+        doorNameObj: {
+          pwdLevel: '',
+          pwd: '',
+          userCode: ''
+        },
+        channelInfo: '',
+        manufature: '',
+        channelNo: ''
+      },
+      // 楠岃瘉瑙勫垯
+      rules: {
+        name: [
+          { required: true, message: '璇疯緭鍏ヨ澶囧悕绉�' }
+        ],
+        doorName: [
+          { required: true, message: '璇疯緭鍏ヨ澶囪繛鎺ュ瘑鐮�' }
+        ],
+        channelNo: [
+          { required: true, message: '璇疯緭鍏ュ紑鍏冲簭鍙�' }
+        ],
+        doorNo: [
+          { required: true, message: '璇疯緭鍏ヨ澶囧彿' }
+        ],
+        no: [
+          { required: true, message: '璇疯緭鍏ヨ澶囨爣璇嗙' }
+        ]
+      }
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/device',
+      'field.id': 'id'
+    })
+  },
+  methods: {
+    open (title, target) {
+      this.title = title
+      this.visible = true
+      this.form.doorName = ''
+      this.form.doorNameObj = {
+        userCode: '',
+        pwd: '',
+        pwdLevel: ''
+      }
+      // debugger
+      // 鏂板缓
+      if (target == null) {
+        this.$nextTick(() => {
+          this.$refs.form.resetFields()
+          this.form[this.configData['field.id']] = null
+        })
+        if(!this.form.doorNameObj){
+          this.form.doorNameObj = {
+            pwdLevel: '',
+            pwd: '',
+            userCode: ''
+          }
+        }
+        return
+      }
+      // 缂栬緫
+      this.$nextTick(async () => {
+        if(!target.doorNameObj){
+          target.doorNameObj={
+            pwdLevel: '',
+            pwd: '',
+            userCode: ''}
+        }
+        for (const key in this.form) {
+          this.form[key] = target[key]
+        }
+      })
+    }
+  }
+}
+</script>
diff --git a/admin/src/components/business/OperaDeviceDuanluqiWindow.vue b/admin/src/components/business/OperaDeviceDuanluqiWindow.vue
index 9cd78ab..ea9633b 100644
--- a/admin/src/components/business/OperaDeviceDuanluqiWindow.vue
+++ b/admin/src/components/business/OperaDeviceDuanluqiWindow.vue
@@ -18,7 +18,7 @@
             <el-input v-model="form.doorNo" placeholder="璇疯緭鍏ュ簭鍒楀彿" v-trim/>
           </el-form-item>
           <el-form-item label="鍘傚晢" prop="manufature">
-            <el-input v-model="form.manufature" placeholder="璇疯緭鍏ユ墍鍦ㄤ綅缃�" v-trim/>
+            <el-input v-model="form.manufature" placeholder="璇疯緭鍏ュ巶鍟�" v-trim/>
           </el-form-item>
           <el-form-item label="瀹夎浣嶇疆" prop="regionPathName">
             <el-input v-model="form.regionPathName" placeholder="璇疯緭鍏ヨ澶囦綅缃�" v-trim/>
diff --git a/admin/src/components/business/OperaDianbiaoDataListWindow.vue b/admin/src/components/business/OperaDianbiaoDataListWindow.vue
new file mode 100644
index 0000000..20ef9f7
--- /dev/null
+++ b/admin/src/components/business/OperaDianbiaoDataListWindow.vue
@@ -0,0 +1,179 @@
+<template>
+  <GlobalWindow
+      :title="title"
+      width="100%"
+      :visible.sync="visible"
+  >
+    <TableLayout >
+      <!-- 鎼滅储琛ㄥ崟 -->
+      <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+        <div  style="display: block;margin-bottom: 60px;padding: 20px; border: 1px solid #f2f2f2;">
+          <div style="display: block;font-size: 16px;font-weight: 600;margin-bottom: 20px;">璁惧淇℃伅</div>
+          <div style="display: flex;">
+            <div style="flex: 1"><span class="label">鍚嶇О锛�</span>{{model.name ||''}}</div>
+            <div style="flex: 1"><span  class="label">鍦板潃鍩燂細</span>{{model.no ||''}}</div>
+            <div style="flex: 1"><span  class="label">璁惧鍙凤細</span>{{model.doorNo ||'-'}}</div>
+          </div>
+          <div style="display: flex;margin-top: 20px;">
+            <div style="flex: 1"><span  class="label">IP锛�</span>{{ model.ip ||'' }}</div>
+            <div style="flex: 1"><span  class="label">绔彛锛�</span>{{ model.port ||''}}</div>
+            <div style="flex: 3">
+              <span class="label">鏈�杩戞帶鍒舵搷浣滐細</span>
+              <span class="orange" >{{model.remark||''}}</span>
+            </div>
+          </div>
+        </div>
+        <div class="platgroup_tabs">
+          <div class="tab" :class="{ active: activeGroup === item.id }" @click="groupClick(item)"
+               v-for="(item, i) in groupList" :key="i">
+            {{ item.name }}
+          </div>
+        </div>
+      </el-form>
+      <!-- 琛ㄦ牸鍜屽垎椤� -->
+      <template  v-slot:table-wrap>
+        <el-table
+            v-if="activeGroup===0"
+            :height="tableHeightNew"
+            v-loading="isWorking.search"
+            :data="tableData.list"
+            stripe>
+          <el-table-column prop="happenTime" label="璇诲彇鏃堕棿" min-width="150px"></el-table-column>
+          <el-table-column prop="val1" label="鐢佃兘锛圞WH锛�" min-width="120px"></el-table-column>
+          <el-table-column prop="val2" label="鐘舵��" min-width="120px">
+            <template slot-scope="{row}">
+              <span v-if=" row.val2 === '0000'" class="green">鍚堥椄</span>
+              <span  v-else-if=" row.val2 === '0050'" class="red">鍒嗛椄</span>
+              <span v-else>-</span>
+            </template>
+          </el-table-column>
+          <el-table-column prop="val3" label="鐢佃〃鏃堕棿" min-width="120px"></el-table-column>
+        </el-table>
+        <el-table
+            v-if="activeGroup===1"
+            :height="tableHeightNew"
+            v-loading="isWorking.search"
+            :data="tableData.list"
+            stripe>
+          <el-table-column prop="createDate" label="鎿嶄綔鏃堕棿" min-width="150px"></el-table-column>
+          <el-table-column prop="val4" label="鎿嶄綔浜�" min-width="100px" ></el-table-column>
+          <el-table-column prop="val3" label="鎿嶄綔鍐呭" min-width="100px">
+            <template slot-scope="{row}">
+                <span v-if=" row.val3 === '銆愬悎闂搞��'" class="green">{{row.val3||''}}</span>
+                <span  v-else-if=" row.val3 === '銆愬垎闂搞��'" class="red">{{row.val3||''}}</span>
+                <span v-else>{{row.val3||''}}</span>
+            </template>
+          </el-table-column>
+          <el-table-column prop="val2" label="鍐呭" min-width="300px" show-overflow-tooltip></el-table-column>
+        </el-table>
+        <pagination
+            @size-change="handleSizeChange"
+            @current-change="handlePageChange"
+            :pagination="tableData.pagination"
+        >
+        </pagination>
+      </template>
+    </TableLayout>
+    <template   v-slot:footer>
+      <el-button @click="visible=false">杩斿洖</el-button>
+    </template>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+  name: 'OperaJkSketchCustomerWindow',
+  extends: BaseTable,
+  components: { GlobalWindow, TableLayout, Pagination },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      visible: false,
+      title: '',
+      activeGroup:0,
+      model:{doorNameObj:{}},
+      groupList: [{ id: 0, name: '鏁版嵁涓婃姤璁板綍', type: 0 }, { id: 1, name: '杩滅▼鎺у埗璁板綍', type: 1 }],
+      searchForm: {
+        deviceId:  null,
+        val1: '',
+        dataType:0
+      }
+    }
+  },
+  created () {
+    this.config({
+      module: '璁惧鏁版嵁淇℃伅琛�',
+      api: '/business/deviceData',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+  },
+  methods: {
+    groupClick (item) {
+      this.activeGroup = item.id
+      this.searchForm.val1 = ''
+      this.searchForm.dataType = item.type
+      this.search()
+    },
+    open (title, row) {
+      this.title = title +' 銆�'+ (row.name)+'銆�'
+      this.searchForm.deviceId = row.id
+      if(!row.doorNameObj) {
+        row.doorNameObj = {}
+      }
+      this.model=row
+      this.visible = true
+      this.tableData = {
+        // 宸查�変腑鐨勬暟鎹�
+        selectedRows: [],
+        // 鎺掑簭鐨勫瓧娈�
+        sorts: [],
+        // 褰撳墠椤垫暟鎹�
+        list: [],
+        // 鍒嗛〉
+        pagination: {
+          pageIndex: 1,
+          pageSize: 10,
+          total: 0
+        }
+      }
+      this.groupClick(this.groupList[0])
+    }
+  }
+}
+</script>
+<style>
+.platgroup_tabs {
+  flex: 1;
+  display: flex;
+  border-bottom: 1px solid #dfe2e8;
+  margin-bottom:30px;
+
+  .tab {
+    color: #666666;
+    margin-right: 40px;
+    cursor: pointer;
+    padding-bottom: 18px;
+    border-bottom: 2px solid #fff;
+  }
+
+  .active {
+    font-weight: 500;
+    font-size: 15px;
+    color: #2080f7;
+    border-bottom: 2px solid $primary-color;
+  }
+}
+.label{
+/*  width: 80px;
+  text-align: right;*/
+  color: rgb(102, 102, 102);
+  display: inline-block;
+
+}
+</style>
diff --git a/admin/src/views/business/admissionStatistics.vue b/admin/src/views/business/admissionStatistics.vue
index 36a9199..34da772 100644
--- a/admin/src/views/business/admissionStatistics.vue
+++ b/admin/src/views/business/admissionStatistics.vue
@@ -502,7 +502,7 @@
 
   .main_table {
     display: flex;
-    align-items: start;
+    align-items: flex-start;
     justify-content: space-between;
     margin-top: 10px;
     .main_table_list {
diff --git a/admin/src/views/business/carStatistics.vue b/admin/src/views/business/carStatistics.vue
index b74dce4..6fca623 100644
--- a/admin/src/views/business/carStatistics.vue
+++ b/admin/src/views/business/carStatistics.vue
@@ -526,7 +526,7 @@
 
   .main_table {
     display: flex;
-    align-items: start;
+    align-items: flex-start;
     justify-content: space-between;
     margin-top: 10px;
     .main_table_list {
diff --git a/admin/src/views/business/deviceDianbiao.vue b/admin/src/views/business/deviceDianbiao.vue
index f1483af..f87c701 100644
--- a/admin/src/views/business/deviceDianbiao.vue
+++ b/admin/src/views/business/deviceDianbiao.vue
@@ -31,7 +31,9 @@
               <el-table-column prop="name" label="鍚嶇О" fixed min-width="150" align="center"></el-table-column>
               <el-table-column prop="no" label="鐢佃〃鍦板潃鍩�" min-width="100" align="center" ></el-table-column>
               <el-table-column prop="doorNo" label="璁惧鍙�"  min-width="120" align="center" show-overflow-tooltip></el-table-column>
+<!--
               <el-table-column prop="channelNo" label="寮�鍏冲簭鍙�" align="center" min-width="100"></el-table-column>
+-->
               <el-table-column prop="manufature" label="鍘傚晢" align="center" min-width="100" show-overflow-tooltip></el-table-column>
               <el-table-column prop="regionPathName" align="center"  min-width="100" label="鎵�鍦ㄤ綅缃�"></el-table-column>
               <el-table-column prop="ip" label="IP"  min-width="150" align="center" show-overflow-tooltip ></el-table-column>
@@ -43,6 +45,17 @@
                   </el-switch>
                 </template>
               </el-table-column>
+              <el-table-column prop="doorNameObj.pwdLevel" label="瀵嗙爜绛夌骇" align="center" min-width="150"></el-table-column>
+              <el-table-column prop="doorNameObj.pwd" label="瀵嗙爜" align="center">
+                <template slot-scope="{row}">
+                  <span :class=" 'blue'">{{row.showPwd?row.doorNameObj.pwd:'******'}}</span>
+                  <el-button  style="margin-left: 10px" v-if="row.doorNameObj.pwd!=null"
+                              @click.native.p.prevent="showPassward(row)" type="text">
+                    <i class="el-icon-view" :class="row.showPwd?'red':'blue'" :title="row.showPwd?'闅愯棌':'鏄剧ず'"></i>
+                  </el-button>
+                </template>
+              </el-table-column>
+              <el-table-column prop="doorNameObj.userCode" label="鎿嶄綔鑰呬唬鐮�" align="center" min-width="150"></el-table-column>
               <el-table-column prop="editDate" label="鏈�杩戞洿鏂版椂闂�" align="center" min-width="150"></el-table-column>
               <el-table-column
                   label="鎿嶄綔"
@@ -55,6 +68,7 @@
                     <el-button type="text" @click="$refs.operaDeviceDataWindow.open('鏌ョ湅鐢佃〃鏁版嵁', row)" icon="el-icon-view" v-permissions="['business:device:update']">鏁版嵁</el-button>
                     <el-button type="text" @click="send(row,1)" icon="el-icon-circle-check"  v-permissions="['business:device:update']">寮�闂�</el-button>
                     <el-button type="text" class="red" @click="send(row,0)" icon="el-icon-circle-close"  v-permissions="['business:device:update']">鍏抽椄</el-button>
+                    <el-button type="text" class="red" @click="readData(row)" icon="el-icon-circle-close"  v-permissions="['business:device:update']">璇诲彇鏁版嵁</el-button>
                     <el-button type="text" class="red" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:device:delete']">鍒犻櫎</el-button>
                   </template>
                 </el-table-column>
@@ -78,19 +92,20 @@
             <b class="green" v-if="form.status ===1">寮�闂�</b>
             <b class="red" v-else>鍏抽椄</b>
           </el-form-item>
-          <el-form-item label="寮�鍏冲簭鍙�" prop="channelNo">
-            <el-input v-model="form.channelNo" type="text" placeholder="璇疯緭鍏ュ紑鍏冲簭鍙� 锛屽涓敤鑻辨枃閫楀彿闅斿紑锛屽 1,2,3" v-trim/>
+          <el-form-item label="鏈夋晥鏃堕棿" prop="cmdDate">
+            <el-date-picker type="datetime" v-model="form.cmdDate" value-format="yyyy-MM-dd HH:mm:ss"
+                            placeholder="璇烽�夋嫨鏈夋晥鏃堕棿"   />
           </el-form-item>
-          <p class="tip-warn" style="width: 100%;"><i class="el-icon-warning"></i>璁惧鍘熷寮�鍏冲簭鍙蜂俊鎭細{{form.channelNo1}}锛屾帶鍒跺涓紑鍏筹紝璇风敤鑻辨枃閫楀彿闅斿紑锛屽 1,2;</p>
+          <p class="tip-warn" style="width: 100%;"><i class="el-icon-warning"></i></p>
         </el-form>
         <template  v-slot:footer  >
-          <el-button @click="sendAction()" type="primary" v-if="form.status === 1" :loading="isWorkSending">纭寮�闂�</el-button>
-          <el-button @click="sendAction()" type="danger" v-if="form.status !== 1" :loading="isWorkSending">纭鍏抽椄</el-button>
+          <el-button @click="sendAction(0)" type="primary" v-if="form.status === 1" :loading="isWorkSending">纭寮�闂�</el-button>
+          <el-button @click="sendAction(1)" type="danger" v-if="form.status !== 1" :loading="isWorkSending">纭鍏抽椄</el-button>
           <el-button @click="sendClose()">杩斿洖</el-button>
         </template>
       </el-dialog>
         <!-- 鏂板缓/淇敼 -->
-    <OperaDeviceDuanluqiWindow ref="operaDeviceWindow" @success="handlePageChange"/>
+    <OperaDeviceDianbiaoWindow ref="operaDeviceWindow" @success="handlePageChange"/>
     <OperaDeviceDataListWindow ref="operaDeviceDataWindow" @success="handlePageChange"/>
     </TableLayout>
 </template>
@@ -98,12 +113,12 @@
 import BaseTable from '@/components/base/BaseTable'
 import TableLayout from '@/layouts/TableLayout'
 import Pagination from '@/components/common/Pagination'
-import OperaDeviceDataListWindow from '@/components/business/OperaDeviceDataListWindow'
-import OperaDeviceDuanluqiWindow from '@/components/business/OperaDeviceDuanluqiWindow'
+import OperaDeviceDataListWindow from '@/components/business/OperaDianbiaoDataListWindow'
+import OperaDeviceDianbiaoWindow from '@/components/business/OperaDeviceDianbiaoWindow'
 export default {
   name: 'DeviceDuanluqi',
   extends: BaseTable,
-  components: { TableLayout, Pagination, OperaDeviceDuanluqiWindow ,OperaDeviceDataListWindow},
+  components: { TableLayout, Pagination, OperaDeviceDianbiaoWindow, OperaDeviceDataListWindow },
   data () {
     return {
       // 鎼滅储
@@ -116,15 +131,14 @@
       isWorkSending: false,
       form: {
         id: '',
-        name: '',
-        channelNo: '',
-        channelNo1: '',
-        status: null
+        status: null,
+        name:null,
+        cmdDate: null
       },
       visibleSend: false,
       options: [],
       rules: {
-        channelNo: [{ required: true, message: '璇疯緭鍏ラ渶瑕佹搷浣滅殑寮�鍏冲簭鍙�', trigger: 'blur' }],
+        cmdDate: [{ required: true, message: '璇烽�夋嫨鎿嶄綔鏈夋晥鏃堕棿' }]
       }
     }
   },
@@ -151,17 +165,16 @@
         this.$set(row, 'showPwd', false)
       }
     },
-    sendAction () {
-      if (!this.form.channelNo) {
-        return
-      }
+    sendAction (status) {
+      this.form.status = status
       this.$dialog.actionConfirm('纭杩涜鐢佃〃銆�' + (this.form.status === 1 ? '寮�闂�' : '鍏抽椄') + '銆戞搷浣滃悧锛�', '鎿嶄綔纭鎻愰啋')
         .then(() => {
+          console.log(this.form)
           this.isWorkSending = true
-          this.api.duanluqiCmd(this.form)
+          this.api.dianbaoCmd(this.form)
             .then(res => {
               this.$tip.apiSuccess(res || '璇锋眰鎴愬姛')
-              this.sendClose()
+              this.handlePageChange()
             })
             .catch(e => {
             })
@@ -171,16 +184,27 @@
         })
         .catch(() => {})
     },
+    readData (row) {
+      this.api.dianbiaoData({ id: row.id })
+        .then(res => {
+          this.$tip.apiSuccess(res || '璇锋眰鎴愬姛')
+          this.handlePageChange()
+        })
+        .catch(e => {
+        })
+        .finally(() => {
+          this.isWorkSending = false
+        })
+    },
     send (row, type) {
       this.visibleSend = true
-      this.form = { id: row.id, name: row.name, channelNo: row.channelNo, status: type ,channelNo1:row.channelNo}
+      this.form = { id: row.id, name: row.name, cmdDate: null, status: type}
     },
     sendClose () {
       this.visibleSend = false
       this.isWorkSending = false
-      this.form = { id: '', name: '', channelNo: '', status: '',channelNo1:'' }
+      this.form = { id: '', name: '', status: '', cmdDate: '' }
     }
-
   }
 }
 </script>
diff --git a/server/system_gateway/src/main/resources/application-self.yml b/server/system_gateway/src/main/resources/application-self.yml
index 26ca5d9..68fad7b 100644
--- a/server/system_gateway/src/main/resources/application-self.yml
+++ b/server/system_gateway/src/main/resources/application-self.yml
@@ -1,7 +1,7 @@
 spring:
   # 鏁版嵁婧愰厤缃�
   datasource:
-    url: jdbc:mysql://localhost:3306/antaiwuliu?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
+    url: jdbc:mysql://localhost:3306/dmvisits?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
     username: root
     password: Titi@168.com
     driver-class-name: com.mysql.cj.jdbc.Driver
diff --git a/server/system_gateway/src/main/resources/bootstrap-dev.yml b/server/system_gateway/src/main/resources/bootstrap-dev.yml
index a375799..35a1647 100644
--- a/server/system_gateway/src/main/resources/bootstrap-dev.yml
+++ b/server/system_gateway/src/main/resources/bootstrap-dev.yml
@@ -7,7 +7,7 @@
       discovery:
         server-addr: http://192.168.0.7:8848 #閰嶇疆Nacos鍦板潃
 #        namespace: dmvisit
-        namespace: wuhu_visit_dev
+        namespace: dm_visits_test
         username: nacos
         password: nacos
     gateway:
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 9edb8e1..b076d05 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
@@ -314,6 +314,7 @@
         public static final  int broadcaset = 3;
         public static final  int broadcasetChannel = 4;
         public static final  int duanluqi = 5;
+        public static final  int dianbiao = 6;
     }
 
     /**
diff --git a/server/visits/device_service/src/main/java/com/doumee/tcp/WaterElectricityUtil.java b/server/visits/device_service/src/main/java/com/doumee/tcp/WaterElectricityUtil.java
index ebbfc0f..7b1f654 100644
--- a/server/visits/device_service/src/main/java/com/doumee/tcp/WaterElectricityUtil.java
+++ b/server/visits/device_service/src/main/java/com/doumee/tcp/WaterElectricityUtil.java
@@ -60,6 +60,7 @@
         return (byte) (sum & 0xFF);
     }
 
+
     public static byte[] getRequestParam(int feCount, byte[] address, byte control, byte[] data) throws IOException {
 
         ///FEFEFE    68  999999999999    68  01  02  65  F3C1  16
@@ -170,6 +171,17 @@
         return hexResult;
 
     }
+    private static String addByte(String value, byte add) {
+        byte b = (byte) Integer.parseInt(value, 16);
+        int result = (b & 0xFF) + (add & 0xFF);
+        // 纭繚缁撴灉鍦�0-255鑼冨洿鍐咃紙澶勭悊璐熸暟锛�
+        if (result < 0) {
+            result += 256;
+        }
+        String hexResult = String.format("%02X", result & 0xFF);
+        return hexResult;
+
+    }
 
 
     private static String[] parseSub33Reverse(String msg, int n) {
@@ -240,6 +252,83 @@
         map.put("total", total);
     }
 
+    /**
+     * 鐢佃〃璺抽椄銆佸悎闂�
+     * @param ip
+     * @param port
+     * @param addressBuf
+     * @param type 锛�0璺抽椄 1鍚堥椄锛�
+     * @param date 鏈夋晥鎴鏃堕棿
+     * @throws IOException
+     */
+    private static boolean electricityControl(String ip, int port, byte[] addressBuf,int type,  String date)   {
+        /**
+         * N1涓烘帶鍒跺懡浠ょ被鍨嬶紝N1=1AH浠h〃璺抽椄4D锛孨1=1BH浠h〃鍚堥椄4F鍏佽N2淇濈暀
+         * 鏉冮檺瀵嗙爜鎿嶄綔浠g爜锛歅AP2P1P0C3C2C1C0(02/223203/111111H)
+         * 4F
+         * TCP/IP鐩存帴鍚堥椄鎸囦护[2026骞�03鏈�09鏃� 10:57:39]
+         * Tx ->FEFEFEFE68615121010000681C1035366555776655444F33568843433659E016
+         * TCP/IP鐩存帴鍚堥椄鎸囦护[2026骞�03鏈�09鏃� 10:57:40]
+         * Rx <-FEFEFEFE68615121010000689C004016
+         * 鐩存帴鍚堥椄鎵ц鎴愬姛锛� 9C
+         */
+        try {
+            byte control = 0x1C;
+            byte n1 =  0x4D;
+            if(type==1){
+                n1 =  0x4F;
+            }
+//        byte[] data0 = {0x02, 0x03, 0x32, 0x22,0x44,0x33,0x22,0x11};
+            byte[] data = {0x35, 0x36, 0x65, 0x55,0x77,0x66,0x55,0x44,n1,0x33,0,0,0,0,0,0};
+            byte[] data2 = getDateBytes(date);
+            for (int i = 0; i < data2.length; i++) {
+                data[10+i]=data2[i];
+            }
+            byte[] bufReq = getRequestParam(4, addressBuf, control, data);
+            String reqt = bytesToHex(bufReq);
+            System.out.println(reqt);
+            byte[] respBuf = readDeviceData(ip, port, bufReq);
+            String resp = bytesToHex(respBuf);
+            System.out.println(resp);
+            //FEFEFEFE68379707010000689C004216
+             String msg = resp.substring(24, 26);
+             return msg.equals("9C");
+        }catch (Exception e){
+
+        }
+        return  false;
+    }
+
+    private static byte[] getDateBytes(String dateStr) {
+//        String dateStr = new SimpleDateFormat("yyyyMMddHHmmss").format(date);
+        dateStr = dateStr.substring(2);
+        // 1. 楠岃瘉杈撳叆
+        if (dateStr == null || dateStr.length() != 12) {
+            throw new IllegalArgumentException("鏃堕棿蹇呴』鏄�12浣嶅崄杩涘埗鏁�");
+        }
+        if (!dateStr.matches("\\d{12}")) {
+            throw new IllegalArgumentException("鏃堕棿蹇呴』鍏ㄩ儴鏄暟瀛�");
+        }
+        // 2. 鍑嗗缁撴灉鏁扮粍锛�6瀛楄妭锛�
+        byte[] result = new byte[6];
+        // 3. 浠庡彸鍚戝乏姣�2浣嶄竴缁勫鐞嗭紙灏忕搴忥級
+        byte add = 0x33;
+        for (int i = 0; i < 6; i++) {
+            // 璁$畻鍦ㄥ瓧绗︿覆涓殑浣嶇疆锛堜粠鍙冲悜宸︼級
+            int strIndex = 10 - (i * 2);  // 鍥犱负瑕佸彇涓や綅锛屾墍浠ユ槸10,8,6,4,2,0
+            String twoDigits = dateStr.substring(strIndex, strIndex + 2);
+            // 灏嗕袱浣嶅崄杩涘埗鏁拌浆鎹负BCD瀛楄妭
+            // 渚嬪锛�"25" -> 0x25
+            int t = Integer.parseInt(twoDigits, 16);
+            int t1 =   ( t& 0xFF) + (add & 0xFF);
+            System.out.println(t1+":");
+            result[i] =(byte) t1 ;
+        }
+        // 娉ㄦ剰锛氫笂闈㈢殑寰幆椤哄簭宸茬粡鏄皬绔簭锛宺esult[0]瀛樼殑鏄渶浣庝袱浣�
+        return result;
+    }
+
+
     private static void electricityStatus(String ip, int port, byte[] addressBuf, Map<String, Object> map) throws IOException {
         byte control = 0x11;
         byte[] data = {0x36, 0x38, 0x33, 0x37};
@@ -266,8 +355,10 @@
         String ts = hexToBinary1(nArr);
         String time = "20"+ts.substring(0,6)+ts.substring(8);
         Date date = getDateByStr(time);
+        System.out.println( formatData(date));
 //        String resp = "FEFEFEFE   68  615121010000    68  91  06  36383337    3333    7916";
-        map.put("currentTime", formatData(date));
+        map.put("time", date);
+//        map.put("currentTime", formatData(date));
     }
     public static Date getDateByStr(String date)  {
         TimeZone tz = TimeZone.getTimeZone("Asia/Shanghai");
@@ -296,7 +387,7 @@
         return null;
     }
 
-    public static Map<String, Object> electricity(String ip, int port, String address) throws IOException {
+    public static Map<String, Object> electricityData(String ip, int port, String address) throws IOException {
         Map<String, Object> r = new HashMap<>();
         byte[] addressBuf = convertToBCDAddress(address);
         electricityTotal(ip, port, addressBuf, r);
@@ -304,7 +395,11 @@
         electricityTime(ip, port, addressBuf, r);
         return r;
     }
-
+    public static boolean electricityAct(String ip, int port, String address,int type,String dateStr) {
+        Map<String, Object> r = new HashMap<>();
+        byte[] addressBuf = convertToBCDAddress(address);
+       return electricityControl(ip,port,addressBuf,type,dateStr);
+    }
     private static String hexToBinary(String hex) {
         StringBuilder sb = new StringBuilder();
         for (char c : hex.toCharArray()) {
@@ -328,7 +423,6 @@
         }
         return sb.toString();
     }
-
 
     private static String addHex(String hex1, String hex2) {
         int num1 = Integer.parseInt(hex1.replace("0x", ""), 16);
@@ -494,9 +588,10 @@
     public static void main(String[] args) throws IOException {
 //        testWater();
 //        electricityTest();
-        water("192.168.1.78",1030,"000152462599");
-        Map<String, Object> map = electricity("192.168.1.78", 1030, "000001215161");
-        System.out.println(JSONObject.toJSONString(map));
+//        water("192.168.1.78",1030,"000152462599");
+//        Map<String, Object> map = electricityData("192.168.1.78", 1030, "000001215161");
+//        System.out.println(JSONObject.toJSONString(map));
+        electricityAct("192.168.1.78", 1030, "000001215161",0,"20260309162655");
 //        FEFEFE6899254652010068810 843C3333433333333   E9 16
 //        FEFEFE6899254652010068810 84  3C3333433333333E916
 
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/DeviceCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/DeviceCloudController.java
index eb3991d..9734238 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/DeviceCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/DeviceCloudController.java
@@ -49,7 +49,7 @@
     }
     @ApiOperation("淇敼鏄惁闂ㄧ鍏ュ彛")
     @PostMapping("/updateEntranceById")
-    @CloudRequiredPermission("business:company:update")
+    @CloudRequiredPermission("business:device:update")
     public ApiResponse updateStatusById(@RequestBody Device param,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
         Device d = new Device();
         d.setId(param.getId());
@@ -61,7 +61,7 @@
     }
     @ApiOperation("淇敼鏄惁绯荤粺浣跨敤")
     @PostMapping("/updateUsedById")
-    @CloudRequiredPermission("business:company:update")
+    @CloudRequiredPermission("business:device:update")
     public ApiResponse updateUsedById(@RequestBody Device param,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
         Device d = new Device();
         d.setId(param.getId());
@@ -73,12 +73,28 @@
     }
     @ApiOperation("鎵ц鏂矾鍣ㄥ紑鍏抽椄鎿嶄綔")
     @PostMapping("/duanluqiCmd")
-    @CloudRequiredPermission("business:company:update")
+    @CloudRequiredPermission("business:device:update")
     public ApiResponse duanluqiCmd(@RequestBody Device param,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
         param.setLoginUserInfo(this.getLoginUser(token));
         deviceService.duanluqiCmd(param);
         return ApiResponse.success(null);
     }
+    @ApiOperation("鎵ц鐢佃〃寮�鍏抽椄鎿嶄綔")
+    @PostMapping("/dianbaoCmd")
+    @CloudRequiredPermission("business:device:update")
+    public ApiResponse dianbaoCmd(@RequestBody Device param,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+        param.setLoginUserInfo(this.getLoginUser(token));
+        deviceService.dianbaoCmd(param);
+        return ApiResponse.success(null);
+    }
+    @ApiOperation("璇诲彇鐢佃〃鏁版嵁锛堢數鑳姐�佹椂闂村拰鐘舵�侊級")
+    @PostMapping("/dianbiaoData")
+    @CloudRequiredPermission("business:device:update")
+    public ApiResponse dianbiaoData(@RequestBody Device param,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+        param.setLoginUserInfo(this.getLoginUser(token));
+        deviceService.dianbiaoData(param);
+        return ApiResponse.success(null);
+    }
 
     @ApiOperation("鎵归噺鍒犻櫎")
     @GetMapping("/delete/batch")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Device.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Device.java
index 88110bc..43103b2 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Device.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Device.java
@@ -159,6 +159,9 @@
     @ApiModelProperty(value = "鎾姤鍐呭")
     @TableField(exist = false)
     private String sendInfo;
+    @ApiModelProperty(value = "杩滅▼鎿嶄綔鏃堕棿鍙傛暟")
+    @TableField(exist = false)
+    private Date cmdDate;
     @ApiModelProperty(value = "閰嶇疆鍙傛暟")
     @TableField(exist = false)
     private JSONObject doorNameObj;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/DeviceData.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/DeviceData.java
index 11ba7cf..124324c 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/DeviceData.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/DeviceData.java
@@ -88,8 +88,8 @@
     @ExcelColumn(name="灞炴�у��7")
     private String val7;
 
-    @ApiModelProperty(value = "鏁版嵁鏉ユ簮 0mqtt涓婃姤缁煎悎鐘舵�� 1杩滅▼鎺у埗 ", example = "1")
-    @ExcelColumn(name="鏁版嵁鏉ユ簮 0mqtt涓婃姤缁煎悎鐘舵�� 1杩滅▼鎺у埗")
+    @ApiModelProperty(value = "鏁版嵁鏉ユ簮 0mqtt涓婃姤缁煎悎鐘舵�� 1杩滅▼鎺у埗 2TCP璇诲彇鏁版嵁 ", example = "1")
+    @ExcelColumn(name="鏁版嵁鏉ユ簮 0mqtt涓婃姤缁煎悎鐘舵�� 1杩滅▼鎺у埗 2TCP璇诲彇鏁版嵁")
     private Integer dataType;
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/DeviceService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/DeviceService.java
index 3aef46e..9aad33a 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/DeviceService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/DeviceService.java
@@ -119,4 +119,7 @@
 
     void autoCloseCmdTimer();
     void startCheckDuanluqiSubjob();
+
+    void dianbaoCmd(Device param);
+    void dianbiaoData(Device param);
 }
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 e8b905c..f86d06c 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
@@ -26,6 +26,7 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.doumee.service.business.impl.hksync.HkSyncPushServiceImpl;
+import com.doumee.tcp.WaterElectricityUtil;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -33,6 +34,7 @@
 import org.eclipse.paho.client.mqttv3.MqttMessage;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import java.util.*;
@@ -73,7 +75,9 @@
         model.setIsdeleted(Constants.ZERO);
         model.setEditDate(new Date());
         model.setCreateDate(model.getEditDate());
-        if(model.getDoorNameObj()!=null && Constants.equalsInteger(model.getType(),Constants.DEVICE_TYPE.duanluqi)){
+        if(model.getDoorNameObj()!=null &&
+                (Constants.equalsInteger(model.getType(),Constants.DEVICE_TYPE.duanluqi)
+                ||Constants.equalsInteger(model.getType(),Constants.DEVICE_TYPE.dianbiao))){
             model.setDoorName(JSONObject.toJSONString(model.getDoorNameObj()));
             if(StringUtils.isNotBlank(model.getLevel())){
                 if(getNumberByStr(model.getLevel()) <300){
@@ -115,7 +119,9 @@
     public void updateById(Device device) {
         device.setEdirot(device.getLoginUserInfo().getId()+"");
         device.setEditDate(new Date());
-        if(device.getDoorNameObj()!=null && Constants.equalsInteger(device.getType(),Constants.DEVICE_TYPE.duanluqi)){
+        if(device.getDoorNameObj()!=null &&
+                (Constants.equalsInteger(device.getType(),Constants.DEVICE_TYPE.duanluqi)
+                        ||Constants.equalsInteger(device.getType(),Constants.DEVICE_TYPE.dianbiao))){
             device.setDoorName(JSONObject.toJSONString(device.getDoorNameObj()));
         }
         Device model = deviceMapper.selectById(device.getId());
@@ -322,7 +328,9 @@
         IPage<Device> result = deviceMapper.selectPage(page, queryWrapper);
         if(result!=null){
             for(Device d : result.getRecords()){
-                if(StringUtils.isNotBlank(d.getDoorName()) &&Constants.equalsInteger(d.getType(),Constants.DEVICE_TYPE.duanluqi)){
+                if(StringUtils.isNotBlank(d.getDoorName())
+                        && (Constants.equalsInteger(d.getType(),Constants.DEVICE_TYPE.duanluqi)||
+                        Constants.equalsInteger(d.getType(),Constants.DEVICE_TYPE.dianbiao))){
                     try {
                         //鏂矾鍣ㄨ澶囧弬鏁�
                         d.setDoorNameObj(JSONObject.parseObject(d.getDoorName()));
@@ -404,6 +412,94 @@
         dealDuanluqiCmd(model,param,"device_");
 
     }
+    @Override
+    public  void dianbaoCmd(Device param){
+        Device model = deviceMapper.selectById(param.getId());
+        if(model ==null && Constants.equalsInteger(param.getType(),Constants.DEVICE_TYPE.dianbiao)){
+            throw  new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if (param.getStatus() == null || param.getCmdDate() == null
+            ||param.getCmdDate().getTime() <= System.currentTimeMillis()) {
+            //濡傛灉鏄紑闂�
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+
+        boolean r ;
+        String date = DateUtil.formatDate(new Date(),"yyyyMMddHHmmss");
+        if(Constants.equalsInteger(param.getStatus(),Constants.ONE)) {
+            //濡傛灉鏄紑闂�
+           r = WaterElectricityUtil.electricityAct(param.getIp(),Integer.parseInt(param.getPort()),param.getNo(),0,date);
+        }else {
+            //濡傛灉鏄悎闂�
+            r = WaterElectricityUtil.electricityAct(param.getIp(),Integer.parseInt(param.getPort()),param.getNo(),1,date);
+        }
+        if(!r){
+            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"杩滅▼鎺у埗鐢佃〃澶辫触锛岃绋嶅悗閲嶈瘯锛�");
+        }
+        String curremak = "銆�"+param.getLoginUserInfo().getRealname()
+                +"銆戜簬"+ DateUtil.getPlusTime2(new Date()) +"杩涜浜�"+(Constants.equalsInteger(param.getStatus(),Constants.ONE)?"銆愬悎闂搞��":"銆愬垎闂搞��")+"鎿嶄綔,寮�鍏炽��"+param.getChannelNo()+"銆戯紱";
+        deviceMapper.update(null,new UpdateWrapper<Device>().lambda()
+                .set(Device::getRemark,curremak)
+                .set(Device::getEditDate,new Date())
+                .set(Device::getEdirot,param.getLoginUserInfo().getId())
+                .eq(Device::getId,param.getId()));
+        DeviceData data = new DeviceData();
+        data.setCreateDate(new Date());
+        data.setEditDate(new Date());
+        data.setCreator(param.getLoginUserInfo().getId());
+        data.setEditor(param.getLoginUserInfo().getId());
+        data.setDeviceId(param.getId()+"");
+        data.setDataType(Constants.ONE);//
+        data.setVal1("杩滅▼鎺у埗");
+        data.setVal2(curremak);
+        data.setHappenTime(DateUtil.getPlusTime2(data.getCreateDate()));
+        data.setVal3((Constants.equalsInteger(param.getStatus(),Constants.ONE)?"銆愬悎闂搞��":"銆愬垎闂搞��"));
+        data.setVal4(param.getLoginUserInfo().getRealname());
+        data.setVal5(param.getChannelNo());
+        deviceDataMapper.insert(data);
+
+    }
+    @Override
+    @Transactional
+    public  void dianbiaoData(Device param){
+        Device model = deviceMapper.selectById(param.getId());
+        if(model ==null && Constants.equalsInteger(param.getType(),Constants.DEVICE_TYPE.dianbiao)){
+            throw  new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        try {
+            Map<String, Object>  readData=  WaterElectricityUtil.electricityData(model.getIp(),Integer.parseInt(model.getPort()),model.getNo());
+            if(readData!=null){
+                String curremak = "銆�"+param.getLoginUserInfo().getRealname()
+                        +"銆戜簬"+ DateUtil.getPlusTime2(new Date()) +"杩涜浜嗘暟鎹鍙栨搷浣�";
+                Date time =(Date) readData.get("time");
+                String total = (Double) readData.get("total")+"";
+                String status =  (String) readData.get("status");
+                model.setHkDate(new Date());//鏈�杩戝悓姝ユ椂闂�
+                model.setOnline(Constants.ONE);//鏍囪瘑璁惧鍦ㄧ嚎
+                model.setRemark(curremak);
+
+                DeviceData data = new DeviceData();
+                data.setCreateDate(new Date());
+                data.setEditDate(new Date());
+                data.setCreator(param.getLoginUserInfo().getId());
+                data.setEditor(param.getLoginUserInfo().getId());
+                data.setDeviceId(param.getId()+"");
+                data.setDataType(Constants.ZERO);//
+                data.setVal1(total);
+                data.setVal2(status);
+                data.setHappenTime(DateUtil.getPlusTime2(data.getCreateDate()));
+                data.setVal3(DateUtil.getPlusTime2(time));
+                data.setVal4(param.getLoginUserInfo().getRealname());
+                data.setVal5(param.getNo());//鍦板潃鍩�
+                deviceDataMapper.insert(data);
+                deviceMapper.updateById(model);
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+            log.error("鐢佃〃鏁版嵁璇诲彇澶辫触锛�"+e.getMessage());
+            throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"璇诲彇鐢佃〃鏁版嵁澶辫触锛�");
+        }
+    }
 
     private void dealDuanluqiCmd(Device model, Device param,String clientIndex) {
         MqttConfig config = getMqttConfigByParam(model,clientIndex);

--
Gitblit v1.9.3