From 7755e9ba6ca8ce58cc0a58578ddc1d965aba380a Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期三, 14 八月 2024 18:13:23 +0800
Subject: [PATCH] 最新版本

---
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/PlatformMapper.java                                 |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Platform.java                                 |   22 +
 admin/src/views/business/deviceBroadcast.vue                                                                            |  121 ++++++
 admin/src/components/business/OperaPlatformWindow.vue                                                                   |  199 ++++++-----
 admin/src/views/business/deviceLed.vue                                                                                  |  121 ++++++
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/LedRecordsRequest.java          |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/LedRecordsInfoResponse.java     |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformServiceImpl.java                   |   13 
 admin/src/api/platform/platformGroup.js                                                                                 |   45 ++
 admin/src/views/platform/platform.vue                                                                                   |   43 +-
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceServiceImpl.java                     |    2 
 admin/src/utils/form.js                                                                                                 |   10 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/HkSyncService.java                          |    7 
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/HkSyncController.java                                 |    3 
 admin/src/views/business/device.vue                                                                                     |    6 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java                              |    6 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java                             |   14 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java          |   13 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java                                  |    8 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/PlatformStatusInfoResponse.java |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Device.java                                   |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPlatformsServiceImpl.java     |   44 ++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDeviceServiceImpl.java        |  321 +++++++++++++++++
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformGroupCloudController.java                      |   10 
 24 files changed, 869 insertions(+), 152 deletions(-)

diff --git a/admin/src/api/platform/platformGroup.js b/admin/src/api/platform/platformGroup.js
new file mode 100644
index 0000000..87cdd5a
--- /dev/null
+++ b/admin/src/api/platform/platformGroup.js
@@ -0,0 +1,45 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/visitsAdmin/cloudService/business/platformGroup/page', data, {
+    trim: true
+  })
+}
+export function allList (data) {
+  return request.post('/visitsAdmin/cloudService/business/platformGroup/list', data, {
+    trim: true
+  })
+}
+
+// 瀵煎嚭Excel
+export function exportExcel (data) {
+  return request.post('/visitsAdmin/cloudService/business/platformGroup/exportExcel', data, {
+    trim: true,
+    download: true
+  })
+}
+
+// 鍒涘缓
+export function create (data) {
+  return request.post('/visitsAdmin/cloudService/business/platformGroup/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+  return request.post('/visitsAdmin/cloudService/business/platformGroup/updateById', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+  return request.get(`/visitsAdmin/cloudService/business/platformGroup/delete/${id}`)
+}
+
+// 鎵归噺鍒犻櫎
+export function deleteByIdInBatch (ids) {
+  return request.get('/visitsAdmin/cloudService/business/platformGroup/delete/batch', {
+    params: {
+      ids
+    }
+  })
+}
diff --git a/admin/src/components/business/OperaPlatformWindow.vue b/admin/src/components/business/OperaPlatformWindow.vue
index 753000b..de11275 100644
--- a/admin/src/components/business/OperaPlatformWindow.vue
+++ b/admin/src/components/business/OperaPlatformWindow.vue
@@ -1,88 +1,60 @@
 <template>
   <GlobalWindow
     :title="title"
+    width="50%"
     :visible.sync="visible"
     :confirm-working="isWorking"
     @confirm="confirm"
   >
     <el-form :model="form" ref="form" :rules="rules">
-      <el-form-item label="鍒涘缓浜虹紪鐮�" prop="creator">
-        <el-input v-model="form.creator" placeholder="璇疯緭鍏ュ垱寤轰汉缂栫爜" v-trim/>
+      <el-form-item label="鏈堝彴鍚嶇О锛�"  >
+       <span>{{form.name}}</span>
       </el-form-item>
-      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
-        <el-date-picker v-model="form.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�"></el-date-picker>
+      <el-form-item label="鏈堝彴缂栫爜锛�" prop="code">
+        <el-input v-model="form.code" placeholder="璇疯緭鍏ユ湀鍙扮紪鐮�" v-trim/>
+       <span class="tip-warn"><i class="el-icon-warning"></i>璇存槑锛氬搴擶MS绯荤粺涓殑缂栫爜</span>
       </el-form-item>
-      <el-form-item label="鏇存柊浜虹紪鐮�" prop="editor">
-        <el-input v-model="form.editor" placeholder="璇疯緭鍏ユ洿鏂颁汉缂栫爜" v-trim/>
+      <el-form-item label="鎵�灞炴湀鍙板垎缁勶細" prop="groupId">
+        <el-select v-model="form.groupId"  >
+          <el-option
+              v-for="item in groupList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id">
+          </el-option>
+        </el-select>
       </el-form-item>
-      <el-form-item label="鏇存柊鏃堕棿" prop="editDate">
-        <el-date-picker v-model="form.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ洿鏂版椂闂�"></el-date-picker>
+      <el-form-item label="骞挎挱璁惧锛�" prop="broadcastIds">
+        <el-select v-model="form.broadcastIds" multiple >
+          <el-option
+              v-for="item in broadcastList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id">
+          </el-option>
+        </el-select>
       </el-form-item>
-      <el-form-item label="鏄惁鍒犻櫎0鍚� 1鏄�" prop="isdeleted">
-        <el-input v-model="form.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀垹闄�0鍚� 1鏄�" v-trim/>
+      <el-form-item label="LED璁惧锛�" prop="ledIds">
+        <el-select v-model="form.ledIds" multiple >
+          <el-option
+              v-for="item in ledList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id">
+          </el-option>
+        </el-select>
       </el-form-item>
-      <el-form-item label="鍚嶇О" prop="name">
-        <el-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�" v-trim/>
+      <el-form-item label="鍚屾椂浣滀笟鏁伴噺锛�" prop="workingNum" >
+        <el-input type="number" v-model="form.workingNum" placeholder="璇疯緭鍏ュ悓鏃朵綔涓氭暟閲�" v-trim/>
       </el-form-item>
-      <el-form-item label="澶囨敞" prop="remark">
-        <el-input v-model="form.remark" placeholder="璇疯緭鍏ュ娉�" v-trim/>
+      <el-form-item label="鏈堝彴浣滀笟鏁堢巼(涓囧彧/灏忔椂)锛�" prop="workRate">
+        <el-input type="number"  v-model="form.workRate" placeholder="璇疯緭鍏ユ湀鍙颁綔涓氭晥鐜�(涓囧彧/灏忔椂)" v-trim/>
       </el-form-item>
-      <el-form-item label="鐘舵�� 0鍚敤 1绂佺敤" prop="status">
-        <el-input v-model="form.status" placeholder="璇疯緭鍏ョ姸鎬� 0鍚敤 1绂佺敤" v-trim/>
+      <el-form-item label="浣滀笟瓒呮椂鎶ヨ鏃堕棿(鍒嗛挓)锛�" prop="waitCallTime">
+        <el-input type="number"  v-model="form.waitCallTime" placeholder="璇疯緭鍏ヤ綔涓氳秴鏃舵姤璀︽椂闂�(鍒嗛挓)" v-trim/>
       </el-form-item>
-      <el-form-item label="鎺掑簭鐮�" prop="sortnum">
-        <el-input v-model="form.sortnum" placeholder="璇疯緭鍏ユ帓搴忕爜" v-trim/>
-      </el-form-item>
-      <el-form-item label="鎵�灞炴湀鍙板垎閽熺紪鐮侊紙g鍏宠仈platform_group)" prop="groupId">
-        <el-input v-model="form.groupId" placeholder="璇疯緭鍏ユ墍灞炴湀鍙板垎閽熺紪鐮侊紙g鍏宠仈platform_group)" v-trim/>
-      </el-form-item>
-      <el-form-item label="宸ヤ綔寮�濮嬫椂闂�" prop="startTime">
-        <el-input v-model="form.startTime" placeholder="璇疯緭鍏ュ伐浣滃紑濮嬫椂闂�" v-trim/>
-      </el-form-item>
-      <el-form-item label="宸ヤ綔缁撴潫鏃堕棿" prop="endTime">
-        <el-input v-model="form.endTime" placeholder="璇疯緭鍏ュ伐浣滅粨鏉熸椂闂�" v-trim/>
-      </el-form-item>
-      <el-form-item label="鍚屾椂浣滀笟鏁伴噺" prop="workingNum">
-        <el-input v-model="form.workingNum" placeholder="璇疯緭鍏ュ悓鏃朵綔涓氭暟閲�" v-trim/>
-      </el-form-item>
-      <el-form-item label="绛夊緟鏁欏ソ鏃堕棿(绉掞級" prop="wariCallTime">
-        <el-input v-model="form.wariCallTime" placeholder="璇疯緭鍏ョ瓑寰呮暀濂芥椂闂�(绉掞級" v-trim/>
-      </el-form-item>
-      <el-form-item label="鍋滅暀瓒呮椂鎶ヨ鏃堕棿(绉掞級" prop="alermTime">
-        <el-input v-model="form.alermTime" placeholder="璇疯緭鍏ュ仠鐣欒秴鏃舵姤璀︽椂闂�(绉掞級" v-trim/>
-      </el-form-item>
-      <el-form-item label="鏈�鍚庝簨浠舵帹閫佹椂闂�" prop="lastEventTime">
-        <el-date-picker v-model="form.lastEventTime" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ渶鍚庝簨浠舵帹閫佹椂闂�"></el-date-picker>
-      </el-form-item>
-      <el-form-item label="鐩戞帶鐐瑰悕绉帮紝澶氫釜鐢ㄨ嫳鏂囬�楀彿闅斿紑" prop="deviceNames">
-        <el-input v-model="form.deviceNames" placeholder="璇疯緭鍏ョ洃鎺х偣鍚嶇О锛屽涓敤鑻辨枃閫楀彿闅斿紑" v-trim/>
-      </el-form-item>
-      <el-form-item label="鏈堝彴灞忓箷鍚嶇О锛屽涓敤鑻辨枃閫楀彿闅斿紑" prop="screenName">
-        <el-input v-model="form.screenName" placeholder="璇疯緭鍏ユ湀鍙板睆骞曞悕绉帮紝澶氫釜鐢ㄨ嫳鏂囬�楀彿闅斿紑" v-trim/>
-      </el-form-item>
-      <el-form-item label="娴峰悍鏍囪瘑" prop="hkId">
-        <el-input v-model="form.hkId" placeholder="璇疯緭鍏ユ捣搴锋爣璇�" v-trim/>
-      </el-form-item>
-      <el-form-item label="鍏宠仈鎵跨鍏徃" prop="companys">
-        <el-input v-model="form.companys" placeholder="璇疯緭鍏ュ叧鑱旀壙绉熷叕鍙�" v-trim/>
-      </el-form-item>
-      <el-form-item label="X鍧愭爣" prop="xpos">
-        <el-input v-model="form.xpos" placeholder="璇疯緭鍏鍧愭爣" v-trim/>
-      </el-form-item>
-      <el-form-item label="Y鍧愭爣" prop="ypos">
-        <el-input v-model="form.ypos" placeholder="璇疯緭鍏鍧愭爣" v-trim/>
-      </el-form-item>
-      <el-form-item label="瀹藉害" prop="width">
-        <el-input v-model="form.width" placeholder="璇疯緭鍏ュ搴�" v-trim/>
-      </el-form-item>
-      <el-form-item label="楂樺害" prop="height">
-        <el-input v-model="form.height" placeholder="璇疯緭鍏ラ珮搴�" v-trim/>
-      </el-form-item>
-      <el-form-item label="瑙掑害" prop="angle">
-        <el-input v-model="form.angle" placeholder="璇疯緭鍏ヨ搴�" v-trim/>
-      </el-form-item>
-      <el-form-item label="娴峰悍鏍囪瘑鍚屾鏃堕棿" prop="hkData">
-        <el-date-picker v-model="form.hkData" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ捣搴锋爣璇嗗悓姝ユ椂闂�"></el-date-picker>
+      <el-form-item label="鍋滅暀瓒呮椂鎶ヨ鏃堕棿(鍒嗛挓锛夛細" prop="alermTime">
+        <el-input type="number"  v-model="form.alermTime" placeholder="璇疯緭鍏ヨ杈撳叆鍋滅暀瓒呮椂鎶ヨ鏃堕棿(鍒嗛挓)" v-trim/>
       </el-form-item>
     </el-form>
   </GlobalWindow>
@@ -91,6 +63,9 @@
 <script>
 import BaseOpera from '@/components/base/BaseOpera'
 import GlobalWindow from '@/components/common/GlobalWindow'
+import { numRuleGtZero } from '@/utils/form'
+import { allList } from '@/api/platform/platformGroup'
+import { getList as deviceList } from '@/api/business/device'
 export default {
   name: 'OperaPlatformWindow',
   extends: BaseOpera,
@@ -98,37 +73,25 @@
   data () {
     return {
       // 琛ㄥ崟鏁版嵁
+      groupList: [],
+      broadcastList: [],
+      ledList: [],
       form: {
         id: null,
-        creator: '',
-        createDate: '',
-        editor: '',
-        editDate: '',
-        isdeleted: '',
+        ledIds: null,
+        broadcastIds: null,
         name: '',
-        remark: '',
-        status: '',
-        sortnum: '',
         groupId: '',
         startTime: '',
         endTime: '',
-        workingNum: '',
-        wariCallTime: '',
-        alermTime: '',
-        lastEventTime: '',
-        deviceNames: '',
-        screenName: '',
-        hkId: '',
-        companys: '',
-        xpos: '',
-        ypos: '',
-        width: '',
-        height: '',
-        angle: '',
-        hkData: ''
+        workingNum: 1,
+        workRate: '',
+        waitCallTime: '',
+        alermTime: ''
       },
       // 楠岃瘉瑙勫垯
       rules: {
+        workingNum: [{ required: true, validator: numRuleGtZero, message: '璇疯緭鍏ュ悓鏃朵綔涓氭暟閲�,蹇呴』澶т簬0! ', trigger: 'blur' }]
       }
     }
   },
@@ -137,6 +100,60 @@
       api: '/platform/platform',
       'field.id': 'id'
     })
+  },
+  methods: {
+    /**
+     * 鎵撳紑绐楀彛
+     * @title 绐楀彛鏍囬
+     * @target 缂栬緫鐨勫璞�
+     */
+    open (title, target) {
+      this.title = title
+      this.visible = true
+      // 鏂板缓
+      if (target == null) {
+        this.$nextTick(() => {
+          this.$refs.form.resetFields()
+          this.form[this.configData['field.id']] = null
+          this.form.company = []
+        })
+        return
+      }
+      // 缂栬緫
+      this.$nextTick(() => {
+        for (const key in this.form) {
+          this.form[key] = target[key]
+        }
+        this.form.workingNum = this.form.workingNum || 1
+      })
+      this.loadGroupList()
+      this.loadLedList()
+      this.loadBroadcastList()
+    },
+    loadGroupList () {
+      allList({})
+        .then(res => {
+          this.groupList = res || []
+        })
+    },
+    loadLedList () {
+      deviceList({ type: 2 })
+        .then(res => {
+          this.ledList = res || []
+        })
+    },
+    loadBroadcastList () {
+      deviceList({ type: 3 })
+        .then(res => {
+          this.broadcastList = res || []
+        })
+    }
   }
 }
 </script>
+<style scoped>
+.labelTip{
+  font-size: 12px;
+  color: #666666;
+}
+</style>
diff --git a/admin/src/utils/form.js b/admin/src/utils/form.js
index bb53d89..5ca6e9d 100644
--- a/admin/src/utils/form.js
+++ b/admin/src/utils/form.js
@@ -26,7 +26,15 @@
 
 export function numRule (rule, value, callback) {
   // debugger
-  if (value == null || value < 0 || !value) {
+  if (value == null || !value || value < 0) {
+    callback(new Error())
+  } else {
+    callback()
+  }
+}
+export function numRuleGtZero (rule, value, callback) {
+  // debugger
+  if (value == null || !value || value <= 0) {
     callback(new Error())
   } else {
     callback()
diff --git a/admin/src/views/business/device.vue b/admin/src/views/business/device.vue
index 701414d..0ffb767 100644
--- a/admin/src/views/business/device.vue
+++ b/admin/src/views/business/device.vue
@@ -80,7 +80,6 @@
 import Pagination from '@/components/common/Pagination'
 import OperaDeviceWindow from '@/components/business/OperaDeviceWindow'
 import { syncDevices, updateEntranceById } from '@/api/business/device'
-import { memberSync } from '@/api/business/member'
 export default {
   name: 'Device',
   extends: BaseTable,
@@ -92,7 +91,8 @@
         doorName: '',
         regionPathName: '',
         isEntrance: '',
-        online: ''
+        online: '',
+        type:0
       },
       options: []
     }
@@ -117,7 +117,7 @@
       this.$dialog.actionConfirm('鎿嶄綔纭鎻愰啋', '鎮ㄧ‘璁ゅ悓姝ュ叏閮ㄤ俊鎭悧锛�')
         .then(() => {
           this.isWorking.delete = true
-          syncDevices({})
+          syncDevices({type:0})
             .then(res => {
               this.$tip.apiSuccess(res || '鍚屾鎴愬姛')
               this.search()
diff --git a/admin/src/views/business/deviceBroadcast.vue b/admin/src/views/business/deviceBroadcast.vue
new file mode 100644
index 0000000..f5a4e65
--- /dev/null
+++ b/admin/src/views/business/deviceBroadcast.vue
@@ -0,0 +1,121 @@
+<template>
+    <TableLayout :permissions="['business:device:query']">
+        <!-- 鎼滅储琛ㄥ崟 -->
+        <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+            <el-form-item label="鍚嶇О" prop="name">
+                <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ悕绉�" @keypress.enter.native="search"></el-input>
+            </el-form-item>
+            <section>
+                <el-button type="primary" @click="search">鎼滅储</el-button>
+                <el-button @click="reset">閲嶇疆</el-button>
+            </section>
+        </el-form>
+        <!-- 琛ㄦ牸鍜屽垎椤� -->
+        <template v-slot:table-wrap>
+            <ul class="toolbar">
+                <li><el-button type="primary" @click="synchronousData">鍚屾</el-button></li>
+            </ul>
+            <el-table
+                v-loading="isWorking.search"
+                :data="tableData.list"
+                stripe
+            >
+                <el-table-column prop="name" label="璁惧鍚嶇О"></el-table-column>
+                <el-table-column prop="doorName" label="闂ㄧ鐐瑰悕绉�"></el-table-column>
+                <el-table-column prop="regionPathName" label="鍖哄煙鍚嶇О"></el-table-column>
+                <el-table-column prop="doorNo" label="闂ㄧ鐐圭紪鍙�"></el-table-column>
+                <el-table-column prop="manufature" label="鍘傚晢"></el-table-column>
+                <el-table-column prop="online" label="鍦ㄧ嚎鐘舵��">
+                    <template slot-scope="{row}">
+                        <span v-if="row.online == 0">绂荤嚎</span>
+                        <span v-if="row.online == 1">鍦ㄧ嚎</span>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="ip" label="璁惧ip"></el-table-column>
+                <el-table-column prop="port" label="璁惧绔彛"></el-table-column>
+                <el-table-column label="鏄惁鍥尯鍏ュ彛">
+                    <template slot-scope="{row}">
+                        <el-switch
+                            @change="changeManufature($event, row)"
+                            v-model="row.isEntrance"
+                            active-color="#13ce66"
+                            inactive-color="#ff4949"
+                            :active-value="1"
+                            :inactive-value="0">
+                        </el-switch>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="no" label="璁惧鍙�"></el-table-column>
+            </el-table>
+            <pagination
+                @size-change="handleSizeChange"
+                @current-change="handlePageChange"
+                :pagination="tableData.pagination"
+            >
+            </pagination>
+        </template>
+        <!-- 鏂板缓/淇敼 -->
+<!--        <OperaDeviceWindow ref="operaDeviceWindow" @success="handlePageChange"/>-->
+    </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaDeviceWindow from '@/components/business/OperaDeviceWindow'
+import { syncDevices, updateEntranceById } from '@/api/business/device'
+export default {
+  name: 'Device',
+  extends: BaseTable,
+  components: { TableLayout, Pagination, OperaDeviceWindow },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        doorName: '',
+        regionPathName: '',
+        isEntrance: '',
+        online: '',
+        type: 3
+      },
+      options: []
+    }
+  },
+  created () {
+    this.config({
+      module: '璁惧淇℃伅琛�',
+      api: '/business/device',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+  },
+  methods: {
+    changeManufature(e, row) {
+      updateEntranceById({
+        id: row.id,
+        isEntrance: e
+      })
+    },
+    synchronousData () {
+      this.$dialog.actionConfirm('鎿嶄綔纭鎻愰啋', '鎮ㄧ‘璁ゅ悓姝ュ叏閮ㄤ俊鎭悧锛�')
+        .then(() => {
+          this.isWorking.delete = true
+          syncDevices({type: 3})
+            .then(res => {
+              this.$tip.apiSuccess(res || '鍚屾鎴愬姛')
+              this.search()
+            })
+            .catch(e => {
+              this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.isWorking.delete = false
+            })
+        })
+        .catch(() => {})
+    }
+  }
+}
+</script>
diff --git a/admin/src/views/business/deviceLed.vue b/admin/src/views/business/deviceLed.vue
new file mode 100644
index 0000000..05737ca
--- /dev/null
+++ b/admin/src/views/business/deviceLed.vue
@@ -0,0 +1,121 @@
+<template>
+    <TableLayout :permissions="['business:device:query']">
+        <!-- 鎼滅储琛ㄥ崟 -->
+        <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+            <el-form-item label="鍚嶇О" prop="name">
+                <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ悕绉�" @keypress.enter.native="search"></el-input>
+            </el-form-item>
+            <section>
+                <el-button type="primary" @click="search">鎼滅储</el-button>
+                <el-button @click="reset">閲嶇疆</el-button>
+            </section>
+        </el-form>
+        <!-- 琛ㄦ牸鍜屽垎椤� -->
+        <template v-slot:table-wrap>
+            <ul class="toolbar">
+                <li><el-button type="primary" @click="synchronousData">鍚屾</el-button></li>
+            </ul>
+            <el-table
+                v-loading="isWorking.search"
+                :data="tableData.list"
+                stripe
+            >
+                <el-table-column prop="name" label="璁惧鍚嶇О"></el-table-column>
+                <el-table-column prop="doorName" label="闂ㄧ鐐瑰悕绉�"></el-table-column>
+                <el-table-column prop="regionPathName" label="鍖哄煙鍚嶇О"></el-table-column>
+                <el-table-column prop="doorNo" label="闂ㄧ鐐圭紪鍙�"></el-table-column>
+                <el-table-column prop="manufature" label="鍘傚晢"></el-table-column>
+                <el-table-column prop="online" label="鍦ㄧ嚎鐘舵��">
+                    <template slot-scope="{row}">
+                        <span v-if="row.online == 0">绂荤嚎</span>
+                        <span v-if="row.online == 1">鍦ㄧ嚎</span>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="ip" label="璁惧ip"></el-table-column>
+                <el-table-column prop="port" label="璁惧绔彛"></el-table-column>
+                <el-table-column label="鏄惁鍥尯鍏ュ彛">
+                    <template slot-scope="{row}">
+                        <el-switch
+                            @change="changeManufature($event, row)"
+                            v-model="row.isEntrance"
+                            active-color="#13ce66"
+                            inactive-color="#ff4949"
+                            :active-value="1"
+                            :inactive-value="0">
+                        </el-switch>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="no" label="璁惧鍙�"></el-table-column>
+            </el-table>
+            <pagination
+                @size-change="handleSizeChange"
+                @current-change="handlePageChange"
+                :pagination="tableData.pagination"
+            >
+            </pagination>
+        </template>
+        <!-- 鏂板缓/淇敼 -->
+<!--        <OperaDeviceWindow ref="operaDeviceWindow" @success="handlePageChange"/>-->
+    </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaDeviceWindow from '@/components/business/OperaDeviceWindow'
+import { syncDevices, updateEntranceById } from '@/api/business/device'
+export default {
+  name: 'Device',
+  extends: BaseTable,
+  components: { TableLayout, Pagination, OperaDeviceWindow },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        doorName: '',
+        regionPathName: '',
+        isEntrance: '',
+        online: '',
+        type:2
+      },
+      options: []
+    }
+  },
+  created () {
+    this.config({
+      module: '璁惧淇℃伅琛�',
+      api: '/business/device',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+  },
+  methods: {
+    changeManufature(e, row) {
+      updateEntranceById({
+        id: row.id,
+        isEntrance: e
+      })
+    },
+    synchronousData () {
+      this.$dialog.actionConfirm('鎿嶄綔纭鎻愰啋', '鎮ㄧ‘璁ゅ悓姝ュ叏閮ㄤ俊鎭悧锛�')
+        .then(() => {
+          this.isWorking.delete = true
+          syncDevices({type:2})
+            .then(res => {
+              this.$tip.apiSuccess(res || '鍚屾鎴愬姛')
+              this.search()
+            })
+            .catch(e => {
+              this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.isWorking.delete = false
+            })
+        })
+        .catch(() => {})
+    }
+  }
+}
+</script>
diff --git a/admin/src/views/platform/platform.vue b/admin/src/views/platform/platform.vue
index 19d6d74..a06f52b 100644
--- a/admin/src/views/platform/platform.vue
+++ b/admin/src/views/platform/platform.vue
@@ -25,21 +25,28 @@
         @selection-change="handleSelectionChange"
       >
         <el-table-column type="selection" width="55"></el-table-column>
-        <el-table-column prop="name" label="鏈堝彴鍚嶇О" min-width="100px"></el-table-column>
-        <el-table-column prop="hkId" label="鏈堝彴缂栫爜" min-width="100px"></el-table-column>
-        <el-table-column prop="groupName" label="鎵�灞炴湀鍙扮粍" min-width="100px"></el-table-column>
-        <el-table-column prop="workingNum" label="鍚屾椂鍙彿杞﹁締鏁�" min-width="100px"></el-table-column>
-        <el-table-column prop="alermTime" label="鍋滅暀瓒呮椂鎶ヨ鏃堕棿(鍒嗛挓锛�" min-width="100px">
-          <template scope="{row}">{{row.alermTime?(row.alermTime/60):'-'}}</template>
+        <el-table-column prop="name" label="鏈堝彴鍚嶇О" fixed min-width="100px"></el-table-column>
+        <el-table-column prop="code" label="鏈堝彴缂栫爜" fixed min-width="100px"></el-table-column>
+        <el-table-column prop="groupName" label="鎵�灞炴湀鍙扮粍" fixed min-width="100px"></el-table-column>
+        <el-table-column prop="workingNum" label="鍚屾椂鍙彿杞﹁締鏁�" min-width="120px"></el-table-column>
+        <el-table-column prop="alermTime" label="鍋滅暀瓒呮椂鎶ヨ鏃堕棿(鍒嗛挓锛�" min-width="180px">
+          <template scope="{row}">{{row.alermTime?(row.alermTime):'-'}}</template>
         </el-table-column>
-        <el-table-column prop="waitCallTime" label="浣滀笟瓒呮椂鎶ヨ鏃堕棿(鍒嗛挓锛�" min-width="100px">
-          <template scope="{row}"> {{row.waitCallTime?(row.alermTime/60):'-'}}</template>
+        <el-table-column prop="waitCallTime" label="浣滀笟瓒呮椂鎶ヨ鏃堕棿(鍒嗛挓锛�" min-width="180px">
+          <template scope="{row}"> {{row.waitCallTime?(row.alermTime):'-'}}</template>
         </el-table-column>
-        <el-table-column prop="workRate" label="鏈堝彴浣滀笟鏁堢巼(涓囧彧/灏忔椂)" min-width="100px"></el-table-column>
-        <el-table-column prop="status" label="鐘舵��" min-width="100px"></el-table-column>
-        <el-table-column prop="broadcastName" label="鍏宠仈骞挎挱" min-width="100px"></el-table-column>
-        <el-table-column prop="ledName" label="鍏宠仈LED" min-width="100px"></el-table-column>
-        <el-table-column prop="hkDate" label="鍚屾鏃堕棿" min-width="100px"></el-table-column>
+        <el-table-column prop="workRate" label="鏈堝彴浣滀笟鏁堢巼(涓囧彧/灏忔椂)" min-width="180px"></el-table-column>
+        <el-table-column prop="status" label="鐘舵��" min-width="100px">
+          <template scope="{row}">
+            <span v-if="row.status == 0">鏃犺溅</span>
+            <span v-if="row.status == 1">鏈夎溅</span>
+            <span v-if="row.status == 2">瓒呮椂鍋滈潬</span>
+            <span v-if="row.status == 3">閿欒鍋滈潬</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="broadcastNames" label="鍏宠仈骞挎挱" min-width="100px"></el-table-column>
+        <el-table-column prop="ledNames" label="鍏宠仈LED" min-width="100px"></el-table-column>
+        <el-table-column prop="hkDate" label="鍚屾鏃堕棿" min-width="140px"></el-table-column>
         <el-table-column
           v-if="containPermissions(['business:platform:update', 'business:platform:delete'])"
           label="鎿嶄綔"
@@ -70,8 +77,6 @@
 import SearchFormCollapse from '@/components/common/SearchFormCollapse'
 import Pagination from '@/components/common/Pagination'
 import OperaPlatformWindow from '@/components/business/OperaPlatformWindow'
-import { syncDevices, updateEntranceById } from '@/api/business/device'
-import { syncPlatforms } from '@/api/platform/platform'
 export default {
   name: 'Platform',
   extends: BaseTable,
@@ -96,12 +101,6 @@
     this.search()
   },
   methods: {
-    changeManufature (e, row) {
-      updateEntranceById({
-        id: row.id,
-        isEntrance: e
-      })
-    },
     syncData () {
       this.$dialog.actionConfirm('鎿嶄綔纭鎻愰啋', '鎮ㄧ‘璁ゅ悓姝ュ叏閮ㄤ俊鎭悧锛�')
         .then(() => {
@@ -124,7 +123,7 @@
       this.$dialog.actionConfirm('鎿嶄綔纭鎻愰啋', '鎮ㄧ‘璁ゅ悓姝ュ叏閮ㄤ俊鎭悧锛�')
         .then(() => {
           this.isWorking.working = true
-          this.api.syncPlatforms({})
+          this.api.syncPlatformStatus({})
             .then(res => {
               this.$tip.apiSuccess(res || '鍚屾鎴愬姛')
               this.search()
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/HkSyncController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/HkSyncController.java
index 2af227f..144d6dc 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/HkSyncController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/HkSyncController.java
@@ -8,6 +8,7 @@
 import com.doumee.core.haikang.model.param.request.event.parks.EventPlatWorkstatusRequest;
 import com.doumee.core.haikang.model.param.request.event.visit.EventVisitRequest;
 import com.doumee.core.model.ApiResponse;
+import com.doumee.dao.business.model.Device;
 import com.doumee.service.business.impl.hksync.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -58,7 +59,7 @@
     @ApiOperation("銆愭捣搴枫�戝叏閲忓悓姝ラ棬绂佽澶囨帴鍙�")
     @PostMapping("/syncDevices")
     @RequiresPermissions("business:hksync:device")
-    public ApiResponse syncHkDevices(@RequestBody AcsDeviceListRequest param) {
+    public ApiResponse syncHkDevices(@RequestBody Device param) {
         String result = hkSyncDeviceService.syncHkDevices(param);
         return ApiResponse.success(result);
     }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java
index 256358f..48c67b6 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java
@@ -9,6 +9,7 @@
 import com.doumee.core.haikang.model.param.request.event.visit.EventVisitRequest;
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.Device;
 import com.doumee.service.business.impl.hksync.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -59,8 +60,17 @@
     @ApiOperation("銆愭捣搴枫�戝叏閲忓悓姝ラ棬绂佽澶囨帴鍙�")
     @PostMapping("/syncDevices")
     @CloudRequiredPermission("business:hksync:device")
-    public ApiResponse syncHkDevices(@RequestBody AcsDeviceListRequest param,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
-        String result = hkSyncDeviceService.syncHkDevices(param);
+    public ApiResponse syncHkDevices(@RequestBody Device param, @RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+        String result = null;
+        if(Constants.equalsInteger(param.getType(),Constants.ZERO)){
+             result = hkSyncDeviceService.syncHkDevices(param);
+        }else if(Constants.equalsInteger(param.getType(),Constants.TWO)){
+            //鍚屾LED
+            result = hkSyncDeviceService.syncHkLed(param);
+        }else if(Constants.equalsInteger(param.getType(),Constants.THREE)){
+            //鍚屾骞挎挱
+            result = hkSyncDeviceService.syncHkBroadcast(param);
+        }
         return ApiResponse.success(result);
     }
     @PreventRepeat
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformGroupCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformGroupCloudController.java
index b8c30f1..150f083 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformGroupCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformGroupCloudController.java
@@ -16,6 +16,8 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
 /**
  * @author 姹熻箘韫�
  * @since 2024/04/28 16:06
@@ -64,8 +66,16 @@
     @PostMapping("/page")
     @CloudRequiredPermission("business:platformgroup:query")
     public ApiResponse<PageData<PlatformGroup>> findPage (@RequestBody PageWrap<PlatformGroup> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+        pageWrap.getModel().setIsdeleted(Constants.ZERO);
         return ApiResponse.success(platformGroupService.findPage(pageWrap));
     }
+    @ApiOperation("鏌ヨ鍒楄〃")
+    @PostMapping("/list")
+    @CloudRequiredPermission("business:platformgroup:query")
+    public ApiResponse<List<PlatformGroup>> list (@RequestBody PlatformGroup pageWrap, @RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+        pageWrap.setIsdeleted(Constants.ZERO);
+        return ApiResponse.success(platformGroupService.findList(pageWrap));
+    }
 
     @ApiOperation("瀵煎嚭Excel")
     @PostMapping("/exportExcel")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java
index ef6947a..019195d 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java
@@ -10,6 +10,7 @@
 import com.hikvision.artemis.sdk.ArtemisHttpUtil;
 import com.hikvision.artemis.sdk.config.ArtemisConfig;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpResponse;
 import org.apache.tomcat.util.bcel.Const;
@@ -625,11 +626,14 @@
 	}
 	/**
 	 * 鑾峰彇鏈堝彴鐘舵��
-	 * @param body
 	 * @return
 	 */
 	public static String platformStatus(String param) {
-		return startDoPostStringArtemis(HKConstants.InterfacePath.platformStatus+"?platformIds="+param,null);
+		if(StringUtils.isNotBlank(param)){
+			return startDoPostStringArtemis(HKConstants.InterfacePath.platformStatus+"?platformIds="+param,null);
+		}else{
+			return startDoPostStringArtemis(HKConstants.InterfacePath.platformStatus,null);
+		}
 	}
 	/**
 	 * 鑾峰彇鏈堝彴缁勪欢閰嶇疆鐨凩ED璁惧娓呭崟
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/LedRecordsRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/LedRecordsRequest.java
index 6485703..f1ae6ec 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/LedRecordsRequest.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/LedRecordsRequest.java
@@ -4,5 +4,6 @@
 
 @Data
 public class LedRecordsRequest {
-
+    private Integer  pageNo		;//String	true	鍒嗛〉椤电爜
+    private Integer  pageSize		;//String	true	鍒嗛〉澶у皬
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/LedRecordsInfoResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/LedRecordsInfoResponse.java
index 071ff26..84197ed 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/LedRecordsInfoResponse.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/LedRecordsInfoResponse.java
@@ -7,4 +7,5 @@
 @Data
 public class LedRecordsInfoResponse {
 
+    private String indexCode;
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/PlatformStatusInfoResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/PlatformStatusInfoResponse.java
index d3c8834..4b050a5 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/PlatformStatusInfoResponse.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/PlatformStatusInfoResponse.java
@@ -8,7 +8,7 @@
 public class PlatformStatusInfoResponse {
 
 
- private String  platformtId	;//String	false	鏈堝彴ID
+ private String  platformId	;//String	false	鏈堝彴ID
  private String  cameraIndexcode	;//String	false	鏈堝彴鍏宠仈鐩戞帶鐐�
  private String  plateNo	;//String	false	杞︾墝鍙�
  private String  name;//	String	false	鏈堝彴鍚嶇О
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java
index a4f6d22..a185029 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java
@@ -1097,13 +1097,13 @@
      *鐢ㄤ簬璁剧疆骞挎挱鐨勮嚜瀹氭挱鏀惧拰鍋滄
      * @return
      */
-    public  static  BaseResponse<BaseListPageResponse<LedRecordsInfoResponse>>   customBroadcast(CustomBroadcastRequest param){
+    public  static  BaseResponse    customBroadcast(CustomBroadcastRequest param){
         log.info("銆愭捣搴风敤浜庤缃箍鎾殑鑷畾鎾斁鍜屽仠姝€��================寮�濮�===="+JSONObject.toJSONString(param));
         try {
             String res = HKTools.customBroadcast(JSONObject.toJSONString(param));
             TypeReference typeReference =
-                    new TypeReference< BaseResponse<BaseListPageResponse<LedRecordsInfoResponse>> >(){};
-            BaseResponse<BaseListPageResponse<LedRecordsInfoResponse>>   result = JSONObject.parseObject(res, typeReference.getType());
+                    new TypeReference< BaseResponse>(){};
+            BaseResponse    result = JSONObject.parseObject(res, typeReference.getType());
             logResult(result,"娴峰悍鐢ㄤ簬璁剧疆骞挎挱鐨勮嚜瀹氭挱鏀惧拰鍋滄");
             return  result;
         }catch (Exception e){
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/PlatformMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/PlatformMapper.java
index eb6c8c2..95a25af 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/PlatformMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/PlatformMapper.java
@@ -2,11 +2,12 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.Platform;
+import com.github.yulichang.base.MPJBaseMapper;
 
 /**
  * @author 姹熻箘韫�
  * @date 2024/06/28 10:03
  */
-public interface PlatformMapper extends BaseMapper<Platform> {
+public interface PlatformMapper extends MPJBaseMapper<Platform> {
 
 }
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 ee69b57..1209387 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
@@ -71,8 +71,8 @@
     @ExcelColumn(name="鎺掑簭鐮�")
     private Integer sortnum;
 
-    @ApiModelProperty(value = "绫诲瀷 0闂ㄧ 1杞﹀簱", example = "1")
-    @ExcelColumn(name="绫诲瀷 0闂ㄧ 1杞﹀簱")
+    @ApiModelProperty(value = "绫诲瀷 0闂ㄧ 1杞﹀簱 2LED 3骞挎挱", example = "1")
+    @ExcelColumn(name="绫诲瀷 0闂ㄧ 1杞﹀簱 2LED 3骞挎挱")
     private Integer type;
     @ApiModelProperty(value = "鏄惁鍥尯鍑哄叆鍙� 0涓嶆槸 1鏄�", example = "1")
     @ExcelColumn(name="鏄惁鍥尯鍑哄叆鍙� 0涓嶆槸 1鏄�")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Platform.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Platform.java
index 5dc5399..ca20201 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Platform.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Platform.java
@@ -52,13 +52,16 @@
     @ApiModelProperty(value = "鍚嶇О")
     @ExcelColumn(name="鍚嶇О")
     private String name;
+    @ApiModelProperty(value = "缂栫爜")
+    @ExcelColumn(name="缂栫爜")
+    private String code;
 
     @ApiModelProperty(value = "澶囨敞")
     @ExcelColumn(name="澶囨敞")
     private String remark;
 
-    @ApiModelProperty(value = "鐘舵�� 0鍚敤 1绂佺敤", example = "1")
-    @ExcelColumn(name="鐘舵�� 0鍚敤 1绂佺敤")
+    @ApiModelProperty(value = "鏈堝彴鐘舵�� 0-鏃犺溅 1-鏈夎溅 2-瓒呮椂鍋滈潬 3-閿欒鍋滈潬", example = "1")
+    @ExcelColumn(name="鏈堝彴鐘舵�� 0-鏃犺溅 1-鏈夎溅 2-瓒呮椂鍋滈潬 3-閿欒鍋滈潬")
     private Integer status;
 
     @ApiModelProperty(value = "鎺掑簭鐮�", example = "1")
@@ -143,5 +146,20 @@
     @ApiModelProperty(value = "led鍚嶇О", example = "1")
     @TableField(exist = false)
     private String ledName;
+    @ApiModelProperty(value = "鍒嗙粍鍚嶇О", example = "1")
+    @TableField(exist = false)
+    private String groupName;
+    @ApiModelProperty(value = "鍏宠仈LED缂栫爜闆嗗悎锛岃嫳鏂囬�楀彿闅斿紑", example = "1")
+    @TableField(exist = false)
+    private String ledIds;
+    @ApiModelProperty(value = "鍏宠仈骞挎挱缂栫爜闆嗗悎锛岃嫳鏂囬�楀彿闅斿紑", example = "1")
+    @TableField(exist = false)
+    private String broadcaseIds;
+    @ApiModelProperty(value = "鍏宠仈LED鍚嶇О闆嗗悎锛岃嫳鏂囬�楀彿闅斿紑", example = "1")
+    @TableField(exist = false)
+    private String ledNames;
+    @ApiModelProperty(value = "鍏宠仈骞挎挱缂栧悕绉伴泦鍚堬紝鑻辨枃閫楀彿闅斿紑", example = "1")
+    @TableField(exist = false)
+    private String broadcaseNames;
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/HkSyncService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/HkSyncService.java
index cbd7cb7..46ac584 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/HkSyncService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/HkSyncService.java
@@ -7,6 +7,7 @@
 import com.doumee.core.haikang.model.param.request.event.parks.EventPlatWorkstatusRequest;
 import com.doumee.core.haikang.model.param.request.event.visit.EventVisitRequest;
 import com.doumee.core.haikang.model.param.respose.AppointmentInfoResponse;
+import com.doumee.dao.business.model.Device;
 import com.doumee.dao.business.model.ParkBook;
 import io.swagger.models.auth.In;
 
@@ -24,7 +25,7 @@
      * @param param
      * @return
      */
-    String syncHkDevices(AcsDeviceListRequest param);
+    String syncHkDevices(Device param);
 
     /**
      * 鍚屾娴峰悍鍋滆溅搴�
@@ -89,4 +90,8 @@
     void dealWorkstatusEvent(EventPlatWorkstatusRequest param, HttpServletResponse response);
 
     void dealCarstatusEvent(EventPlatCarstatusRequest param, HttpServletResponse response);
+
+    String syncHkLed(Device param);
+
+    String syncHkBroadcast(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 12f2c3e..3617b81 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
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.DeviceMapper;
 import com.doumee.dao.business.model.Device;
@@ -102,6 +103,7 @@
     public PageData<Device> findPage(PageWrap<Device> pageWrap) {
         IPage<Device> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
         QueryWrapper<Device> queryWrapper = new QueryWrapper<>();
+        pageWrap.getModel().setIsdeleted(Constants.ZERO);
         Utils.MP.blankToNull(pageWrap.getModel());
         if (pageWrap.getModel().getId() != null) {
             queryWrapper.lambda().eq(Device::getId, pageWrap.getModel().getId());
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformServiceImpl.java
index 486115c..552bbf5 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformServiceImpl.java
@@ -2,14 +2,17 @@
 
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.PlatformMapper;
 import com.doumee.dao.business.model.Platform;
+import com.doumee.dao.business.model.PlatformGroup;
 import com.doumee.service.business.PlatformService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -87,9 +90,13 @@
     @Override
     public PageData<Platform> findPage(PageWrap<Platform> pageWrap) {
         IPage<Platform> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<Platform> queryWrapper = new QueryWrapper<>();
+        MPJLambdaWrapper<Platform> queryWrapper = new MPJLambdaWrapper<>();
+        queryWrapper.selectAll(Platform.class)
+                    .selectAs(PlatformGroup::getName,Platform::getGroupName)
+                    .leftJoin(PlatformGroup.class,PlatformGroup::getId,Platform::getGroupId);
         Utils.MP.blankToNull(pageWrap.getModel());
-        queryWrapper.lambda()
+        pageWrap.getModel().setIsdeleted(Constants.ZERO);
+        queryWrapper
                 .eq(pageWrap.getModel().getId() != null, Platform::getId, pageWrap.getModel().getId())
                 .eq(pageWrap.getModel().getCreator() != null, Platform::getCreator, pageWrap.getModel().getCreator())
                 .ge(pageWrap.getModel().getCreateDate() != null, Platform::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()))
@@ -126,7 +133,7 @@
                 queryWrapper.orderByAsc(sortData.getProperty());
             }
         }
-        return PageData.from(platformMapper.selectPage(page, queryWrapper));
+        return PageData.from(platformMapper.selectJoinPage(page,Platform.class, queryWrapper));
     }
 
     @Override
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java
index 4209984..78e7198 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java
@@ -69,8 +69,17 @@
      * @return
      */
     @Override
-//    @Async
-    public String syncHkDevices(AcsDeviceListRequest param){
+    public String syncHkDevices(Device param){
+
+        return null;
+    }
+    @Override
+    public String syncHkLed(Device param){
+
+        return null;
+    }
+    @Override
+    public String syncHkBroadcast(Device param){
 
         return null;
     }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDeviceServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDeviceServiceImpl.java
index 4e05b11..bf185ed 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDeviceServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDeviceServiceImpl.java
@@ -2,16 +2,15 @@
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.aliyun.tea.TeaException;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.haikang.model.HKConstants;
 import com.doumee.core.haikang.model.param.BaseListPageResponse;
 import com.doumee.core.haikang.model.param.BaseResponse;
-import com.doumee.core.haikang.model.param.request.AcsDeviceListRequest;
-import com.doumee.core.haikang.model.param.request.AcsDeviceStatusListRequest;
-import com.doumee.core.haikang.model.param.request.DoorsListRequest;
-import com.doumee.core.haikang.model.param.request.ParkListRequest;
+import com.doumee.core.haikang.model.param.request.*;
 import com.doumee.core.haikang.model.param.respose.*;
 import com.doumee.core.haikang.service.HKService;
 import com.doumee.core.utils.Constants;
@@ -46,7 +45,7 @@
      */
     @Override
 //    @Async
-    public String syncHkDevices(AcsDeviceListRequest param){
+    public String syncHkDevices(Device param){
         if(Constants.DEALING_HK_SYNCDEVICE){
             throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鍚屾浠诲姟姝e湪鎵ц鍝︼紝璇风◢鍚庢煡鐪嬬粨鏋滐紒") ;
         }
@@ -57,13 +56,14 @@
             List<Device> editList = new ArrayList<>();
             Date date = new Date();
             //鏌ヨ鍏ㄩ儴闂ㄧ璁惧鏁版嵁
-            List<Device> allList = deviceMapper.selectList(null);
+            List<Device> allList = deviceMapper.selectList(new QueryWrapper<Device>().lambda()
+                    .eq(Device::getType,Constants.ZERO));
             List<DoorsInfoResponse> allDoors = getAllDoorList();
             List<AcsDeviceInfoResponse> allHkList = getAllDeViceList();
             /**
              * 鑾峰彇澧炲垹鏀规暟鎹泦鍚�
              */
-            getDataChangeList(allList,allDoors,allHkList,addList,editList,deleteList,date);
+            getDataChangeList(allList,allDoors,allHkList,addList,editList,deleteList,date );
             if(deleteList.size()>0){
                 //閫昏緫鍒犻櫎
                 for(Device d : deleteList){
@@ -86,6 +86,146 @@
             Constants.DEALING_HK_SYNCDEVICE =false;
         }
     }
+    /**
+     * 鍚屾娴峰悍闂ㄧ璁惧鏁版嵁
+     * @param param
+     * @return
+     */
+    @Override
+//    @Async
+    public String syncHkLed(Device param){
+        if(Constants.DEALING_HK_SYNCDEVICE){
+            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鍚屾浠诲姟姝e湪鎵ц鍝︼紝璇风◢鍚庢煡鐪嬬粨鏋滐紒") ;
+        }
+        Constants.DEALING_HK_SYNCDEVICE =true;
+        try {
+            List<Device> deleteList = new ArrayList<>();
+            List<Device> addList = new ArrayList<>();
+            List<Device> editList = new ArrayList<>();
+            Date date = new Date();
+            //鏌ヨ鍏ㄩ儴闂ㄧ璁惧鏁版嵁
+            List<Device> allList = deviceMapper.selectList(new QueryWrapper<Device>().lambda()
+                    .eq(Device::getType,Constants.TWO));
+            List<LedRecordsInfoResponse> allHkList = getAllLedList();
+            /**
+             * 鑾峰彇澧炲垹鏀规暟鎹泦鍚�
+             */
+            getLedDataChangeList(allList,allHkList,addList,editList,deleteList,date);
+            if(deleteList.size()>0){
+                //閫昏緫鍒犻櫎
+                for(Device d : deleteList){
+                    deviceMapper.updateById(d);
+                }
+            }
+            if(addList.size()>0){
+                deviceMapper.insert(addList);
+            }
+            if(editList.size()>0){
+                for(Device d : editList){
+                    deviceMapper.updateById(d);
+                }
+            }
+            return "鍚屾鏁版嵁锛氭柊澧炪��"+addList.size()+"銆戞潯锛屾洿鏂般��"+editList.size()+"銆戞潯锛屽垹闄ゃ��"+deleteList.size()+"銆戞潯";
+        }catch (Exception e){
+            e.printStackTrace();
+            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "鍚屾澶辫触锛�");
+        }finally {
+            Constants.DEALING_HK_SYNCDEVICE =false;
+        }
+    }
+
+    private void getLedDataChangeList(List<Device> allList, List<LedRecordsInfoResponse> allHkList, List<Device> addList, List<Device> editList, List<Device> deleteList, Date date) {
+        if(allHkList!=null && allHkList.size()>0){
+            //鑾峰彇娴峰悍鍏ㄩ儴闂ㄧ缁勬暟鎹�
+            for(LedRecordsInfoResponse device : allHkList){
+                Device model = getExistedLed(device,allList);
+                if(model !=null){
+                    //濡傛灉宸插瓨鍦紝鍒欐洿鏂版暟鎹�
+                    model =  initLedDataByHkData(model,device,date);
+                    editList.add(model);
+                }else{
+                    //濡傛灉涓嶅瓨鍦紝鍒欐柊澧炴暟鎹�
+                    model = new Device();
+                    model =  initLedDataByHkData(model,device,date);
+                    model.setIsEntrance(Constants.ZERO);
+                    addList.add(model);
+                }
+            }
+        }
+        //鍒ゆ柇鑾峰彇鍒犻櫎鐨勯棬绂佽澶囷紝閫昏緫鍒犻櫎
+        getDeleteLedList(allList,allHkList,deleteList,date);
+    }
+
+    /**
+     * 鍚屾娴峰悍闂ㄧ璁惧鏁版嵁
+     * @param param
+     * @return
+     */
+    @Override
+//    @Async
+    public String syncHkBroadcast(Device param){
+        if(Constants.DEALING_HK_SYNCDEVICE){
+            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鍚屾浠诲姟姝e湪鎵ц鍝︼紝璇风◢鍚庢煡鐪嬬粨鏋滐紒") ;
+        }
+        Constants.DEALING_HK_SYNCDEVICE =true;
+        try {
+            List<Device> deleteList = new ArrayList<>();
+            List<Device> addList = new ArrayList<>();
+            List<Device> editList = new ArrayList<>();
+            Date date = new Date();
+            //鏌ヨ鍏ㄩ儴骞挎挱鐐硅澶囨暟鎹�
+            List<Device> allList = deviceMapper.selectList(new QueryWrapper<Device>().lambda()
+                    .eq(Device::getType,Constants.THREE));
+            List<FetchAudioChannelInfoResponse> allHkList = getAllBroadcastList();
+            /**
+             * 鑾峰彇澧炲垹鏀规暟鎹泦鍚�
+             */
+            getBroadcastDataChangeList(allList,allHkList,addList,editList,deleteList,date);
+            if(deleteList.size()>0){
+                //閫昏緫鍒犻櫎
+                for(Device d : deleteList){
+                    deviceMapper.updateById(d);
+                }
+            }
+            if(addList.size()>0){
+                deviceMapper.insert(addList);
+            }
+            if(editList.size()>0){
+                for(Device d : editList){
+                    deviceMapper.updateById(d);
+                }
+            }
+            return "鍚屾鏁版嵁锛氭柊澧炪��"+addList.size()+"銆戞潯锛屾洿鏂般��"+editList.size()+"銆戞潯锛屽垹闄ゃ��"+deleteList.size()+"銆戞潯";
+        }catch (Exception e){
+            e.printStackTrace();
+            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "鍚屾澶辫触锛�");
+        }finally {
+            Constants.DEALING_HK_SYNCDEVICE =false;
+        }
+    }
+
+    private void getBroadcastDataChangeList(List<Device> allList, List<FetchAudioChannelInfoResponse> allHkList, List<Device> addList, List<Device> editList, List<Device> deleteList, Date date) {
+        if(allHkList!=null && allHkList.size()>0){
+            //鑾峰彇娴峰悍鍏ㄩ儴闂ㄧ缁勬暟鎹�
+            for(FetchAudioChannelInfoResponse device : allHkList){
+                Device model = getExistedBroadcast(device,allList);
+                if(model !=null){
+                    //濡傛灉宸插瓨鍦紝鍒欐洿鏂版暟鎹�
+                    model =  initBroadcastDataByHkData(model,device,date);
+                    editList.add(model);
+                }else{
+                    //濡傛灉涓嶅瓨鍦紝鍒欐柊澧炴暟鎹�
+                    model = new Device();
+                    model =  initBroadcastDataByHkData(model,device,date);
+                    model.setIsEntrance(Constants.ZERO);
+                    addList.add(model);
+                }
+            }
+        }
+        //鍒ゆ柇鑾峰彇鍒犻櫎鐨勯棬绂佽澶囷紝閫昏緫鍒犻櫎
+        getDeleteBroadcastList(allList,allHkList,deleteList,date);
+    }
+
     @Override
 //    @Async
     public void getAscDeviceStatus(){
@@ -177,6 +317,73 @@
         }
         return  allDoorList;
     }
+
+    /**
+     * 鑾峰彇鍏ㄩ儴骞挎挱鐐规暟鎹�
+     * @return
+     */
+    public  List<FetchAudioChannelInfoResponse>  getAllBroadcastList(){
+        List<FetchAudioChannelInfoResponse> allDoorList = new ArrayList<>();
+        Date date = new Date();
+        boolean hasNext = true;
+        int curTotal = 0;
+        int curPage = 1;
+        while (hasNext){
+            //鍒嗛〉閬嶅巻寰幆鏌ヨ鎵�鏈夐棬绂佽澶囨暟鎹�
+            FetchAudioChannelRequest param = new FetchAudioChannelRequest();
+            param.setPageNo(curPage);
+            param.setPageSize(100);
+            BaseResponse<BaseListPageResponse<FetchAudioChannelInfoResponse>>  response = HKService.fetchAudioChannel(param);
+            if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){
+                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝娴峰悍鍚屾鏁版嵁澶辫触~");
+            }
+            BaseListPageResponse<FetchAudioChannelInfoResponse> r = response.getData();
+            curTotal += 100;
+            if(curTotal >= r.getTotal()){
+                hasNext = false;
+            }
+            if(r.getList() == null || r.getList().size()==0){
+                hasNext =false;
+            }else{
+                allDoorList.addAll(r.getList());
+            }
+            curPage++;
+        }
+        return  allDoorList;
+    }
+    /**
+     * 鑾峰彇鍏ㄩ儴LED鏁版嵁
+     * @return
+     */
+    public  List<LedRecordsInfoResponse>  getAllLedList(){
+        List<LedRecordsInfoResponse> allDoorList = new ArrayList<>();
+        Date date = new Date();
+        boolean hasNext = true;
+        int curTotal = 0;
+        int curPage = 1;
+        while (hasNext){
+            //鍒嗛〉閬嶅巻寰幆鏌ヨ鎵�鏈夐棬绂佽澶囨暟鎹�
+            LedRecordsRequest param = new LedRecordsRequest();
+            param.setPageNo(curPage);
+            param.setPageSize(100);
+            BaseResponse<BaseListPageResponse<LedRecordsInfoResponse>>    response = HKService.ledRecords(param);
+            if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){
+                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝娴峰悍鍚屾鏁版嵁澶辫触~");
+            }
+            BaseListPageResponse<LedRecordsInfoResponse> r = response.getData();
+            curTotal += 100;
+            if(curTotal >= r.getTotal()){
+                hasNext = false;
+            }
+            if(r.getList() == null || r.getList().size()==0){
+                hasNext =false;
+            }else{
+                allDoorList.addAll(r.getList());
+            }
+            curPage++;
+        }
+        return  allDoorList;
+    }
     public  List<AscDeviceStatusInfoResponse>  getAllDeviceStatusList(){
         List<AscDeviceStatusInfoResponse> allDoorList = new ArrayList<>();
         Date date = new Date();
@@ -207,7 +414,13 @@
         return  allDoorList;
     }
 
-    private void getDataChangeList(List<Device> allList, List<DoorsInfoResponse> hkDoorList , List<AcsDeviceInfoResponse> allHkList, List<Device> addList, List<Device> editList,List<Device> deleteList, Date date) {
+    private void getDataChangeList(List<Device> allList,
+                                   List<DoorsInfoResponse> hkDoorList ,
+                                   List<AcsDeviceInfoResponse> allHkList,
+                                   List<Device> addList,
+                                   List<Device> editList,
+                                   List<Device> deleteList,
+                                   Date date ) {
         if(hkDoorList!=null && hkDoorList.size()>0){
             //鑾峰彇娴峰悍鍏ㄩ儴闂ㄧ缁勬暟鎹�
             for(DoorsInfoResponse device : hkDoorList){
@@ -229,6 +442,30 @@
         getDeleteDoorList(allList,hkDoorList,deleteList,date);
     }
 
+    private Device initLedDataByHkData(Device model, LedRecordsInfoResponse door, Date date) {
+        model.setIsdeleted(Constants.ZERO);
+        model.setHkId(door.getIndexCode());
+        model.setHkDate(date);
+        model.setHkStatus(Constants.ONE);
+        model.setType(Constants.TWO);
+        model.setRemark(JSONObject.toJSONString(door));
+        model.setDoorId(door.getIndexCode());
+        return  model;
+    }
+    private Device initBroadcastDataByHkData(Device model, FetchAudioChannelInfoResponse device, Date date) {
+        model.setIsdeleted(Constants.ZERO);
+        model.setHkDate(date);
+        model.setHkId(device.getAudioChannelIndexCode());
+        model.setName(device.getAudioChannelName());
+        model.setHkStatus(Constants.ONE);
+        model.setType(Constants.THREE);
+        model.setChannelNo(device.getChannelNo());
+        model.setChannelInfo(device.getChannelType());
+        model.setResourceType(device.getAudioChannelType());
+        model.setStatus(device.getState());
+        model.setRegionName(device.getRegionName());
+        return  model;
+    }
     private Device initDoorDataByHkData(Device model, DoorsInfoResponse door, Date date, List<AcsDeviceInfoResponse> allHkList) {
         AcsDeviceInfoResponse device = getDeviceByDoorid(door.getParentIndexCode(),allHkList);
         model.setIsdeleted(Constants.ZERO);
@@ -356,6 +593,28 @@
         }
         return  null;
     }
+    private Device getExistedLed(LedRecordsInfoResponse device, List<Device> allList) {
+        if(allList.size()>0){
+            for(Device r : allList){
+                if(StringUtils.equals(r.getHkId(), device.getIndexCode())){
+                    //琛ㄧず鏈垹闄�
+                    return  r;
+                }
+            }
+        }
+        return  null;
+    }
+    private Device getExistedBroadcast(FetchAudioChannelInfoResponse device, List<Device> allList) {
+        if(allList.size()>0){
+            for(Device r : allList){
+                if(StringUtils.equals(r.getHkId(), device.getAudioChannelIndexCode())){
+                    //琛ㄧず鏈垹闄�
+                    return  r;
+                }
+            }
+        }
+        return  null;
+    }
     private Device getExistedDevice(AcsDeviceInfoResponse device, List<Device> allList) {
         if(allList.size()>0){
             for(Device r : allList){
@@ -390,6 +649,28 @@
             }
         }
     }
+    private void getDeleteLedList(List<Device> allList,  List<LedRecordsInfoResponse> allHkList,List<Device> deleteList ,Date date) {
+        if(allList!=null && allList.size()>0){
+            for(Device device : allList){
+                if(isDeletedLedDevice(device,allHkList)){
+                    device.setIsdeleted(Constants.ONE);
+                    device.setEditDate(date);
+                    deleteList.add(device);
+                }
+            }
+        }
+    }
+    private void getDeleteBroadcastList(List<Device> allList,  List<FetchAudioChannelInfoResponse> allHkList,List<Device> deleteList ,Date date) {
+        if(allList!=null && allList.size()>0){
+            for(Device device : allList){
+                if(isDeletedBroadcastDevice(device,allHkList)){
+                    device.setIsdeleted(Constants.ONE);
+                    device.setEditDate(date);
+                    deleteList.add(device);
+                }
+            }
+        }
+    }
 
     private boolean isDeletedDoorDevice(Device device, List<DoorsInfoResponse> allHkList) {
         if(allHkList.size()>0){
@@ -403,6 +684,30 @@
         return  true;
 
     }
+    private boolean isDeletedLedDevice(Device device, List<LedRecordsInfoResponse> allHkList) {
+        if(allHkList.size()>0){
+            for(LedRecordsInfoResponse r : allHkList){
+                if(StringUtils.equals(device.getDoorId(), r.getIndexCode())){
+                    //琛ㄧず鏈垹闄�
+                    return  false;
+                }
+            }
+        }
+        return  true;
+
+    }
+    private boolean isDeletedBroadcastDevice(Device device, List<FetchAudioChannelInfoResponse> allHkList) {
+        if(allHkList.size()>0){
+            for(FetchAudioChannelInfoResponse r : allHkList){
+                if(StringUtils.equals(device.getDoorId(), r.getAudioChannelIndexCode())){
+                    //琛ㄧず鏈垹闄�
+                    return  false;
+                }
+            }
+        }
+        return  true;
+
+    }
     private boolean isDeletedDevice(Device device, List<AcsDeviceInfoResponse> allHkList) {
         if(allHkList.size()>0){
             for(AcsDeviceInfoResponse r : allHkList){
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPlatformsServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPlatformsServiceImpl.java
index fdefd55..c0fceca 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPlatformsServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPlatformsServiceImpl.java
@@ -13,14 +13,18 @@
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.DateUtil;
 import com.doumee.dao.business.DeviceMapper;
+import com.doumee.dao.business.PlatformDeviceMapper;
 import com.doumee.dao.business.PlatformMapper;
 import com.doumee.dao.business.model.Device;
 import com.doumee.dao.business.model.Platform;
+import com.doumee.dao.business.model.PlatformDevice;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Date;
 import java.util.List;
 
@@ -34,6 +38,8 @@
 
     @Autowired
     private PlatformMapper platformMapper;
+    @Autowired
+    private PlatformDeviceMapper platformDeviceMapper;
 
     /**
      * 鍚屾娴峰悍鏈堝彴鏁版嵁
@@ -41,7 +47,7 @@
      * @return
      */
     @Override
-//    @Async
+    @Transactional
     public String syncPlatforms(PlatformsListRequest param){
         if(Constants.DEALING_HK_SYNCPLATFORM){
             throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鍚屾浠诲姟姝e湪鎵ц鍝︼紝璇风◢鍚庢煡鐪嬬粨鏋滐紒") ;
@@ -51,6 +57,7 @@
             List<Platform> deleteList = new ArrayList<>();
             List<Platform> addList = new ArrayList<>();
             List<Platform> editList = new ArrayList<>();
+            List<PlatformDevice> deviceList = new ArrayList<>();
             Date date = new Date();
             //鏌ヨ鍏ㄩ儴闂ㄧ璁惧鏁版嵁
             List<Platform> allList = platformMapper.selectList(null);
@@ -58,15 +65,15 @@
             /**
              * 鑾峰彇澧炲垹鏀规暟鎹泦鍚�
              */
-            getDataChangeList(allList,allHkList,addList,editList,deleteList,date);
+            getDataChangeList(allList,allHkList,addList,deviceList,editList,deleteList,date);
             if(deleteList.size()>0){
                 //閫昏緫鍒犻櫎
                 for(Platform d : deleteList){
                     platformMapper.updateById(d);
                 }
             }
-            if(addList.size()>0){
-                platformMapper.insert(addList);
+            if(deviceList.size()>0){
+                platformDeviceMapper.insert(deviceList);
             }
             if(editList.size()>0){
                 for(Platform d : editList){
@@ -100,7 +107,7 @@
                     platformMapper.update(null,new UpdateWrapper<Platform>().lambda()
                             .set(Platform::getStatus,d.getStatus())
                             .set(Platform::getEditDate,date)
-                            .eq(Platform::getHkId,d.getPlatformtId()));
+                            .eq(Platform::getHkId,d.getPlatformId()));
                 }
             }
         }catch (Exception e){
@@ -144,7 +151,8 @@
     }
     private void getDataChangeList(List<Platform> allList,
                                    List<PlatformListInfoResponse> allHkList,
-                                   List<Platform> addList,
+                                   List<Platform> addList ,
+                                   List<PlatformDevice> deviceList,
                                    List<Platform> editList,
                                    List<Platform> deleteList, Date date) {
         if(allHkList!=null && allHkList.size()>0){
@@ -155,16 +163,39 @@
                     //濡傛灉宸插瓨鍦紝鍒欐洿鏂版暟鎹�
                     model =  initDataByHkData(model,device,date);
                     editList.add(model);
+                    //娓呯┖鐩戞帶鐐规暟鎹�
+                    platformDeviceMapper.delete(new UpdateWrapper<PlatformDevice>().lambda()
+                            .eq(PlatformDevice::getPlatformId,model.getId()));
+                    deviceList.addAll(getCameraList(device.getCameras(),model));
                 }else{
                     //濡傛灉涓嶅瓨鍦紝鍒欐柊澧炴暟鎹�
                     model = new Platform();
                     model =  initDataByHkData(model,device,date);
+                    platformMapper.insert(model);
                     addList.add(model);
+                    deviceList.addAll(getCameraList(device.getCameras(),model));
                 }
             }
         }
         //鍒ゆ柇鑾峰彇鍒犻櫎鐨勯棬绂佽澶囷紝閫昏緫鍒犻櫎
         getDeleteList(allList,allHkList,deleteList,date);
+    }
+
+    private List<PlatformDevice> getCameraList(List<PlatformCameraInfoResponse> cameras, Platform model) {
+        List<PlatformDevice> list = new ArrayList<>();
+        if(cameras!=null || cameras.size()>0){
+            for(PlatformCameraInfoResponse param :cameras){
+                PlatformDevice d = new PlatformDevice();
+                d.setCreateDate(model.getCreateDate());
+                d.setPlatformId(model.getId());
+                d.setIsdeleted(Constants.ZERO);
+                d.setDeviceId(param.getCameraIdompan());
+                d.setName(param.getCameraName());
+                d.setType(Constants.ONE);
+                list.add(d);
+            }
+        }
+        return list;
     }
 
     /**
@@ -176,6 +207,7 @@
      */
     private Platform initDataByHkData(Platform model, PlatformListInfoResponse device,Date date ) {
         model.setIsdeleted(Constants.ZERO);
+        model.setCreateDate(date);
         model.setHkDate(date);
         model.setHkId(device.getPlatformId());
         model.setCreateDate(DateUtil.getISO8601DateByStr(device.getCreateTime()));

--
Gitblit v1.9.3