From 6e3d13f32301eaa8af392f95b6f7966e06c5fcde Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期五, 06 三月 2026 09:58:30 +0800
Subject: [PATCH] 最新版本541200007

---
 server/system_service/src/main/java/com/doumee/core/utils/HttpsUtil.java                            |   21 ++--
 admin/src/views/business/deviceBroadcast.vue                                                        |   54 +++++++---
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/DeviceService.java          |    1 
 admin/src/components/business/OperaDeviceBroadcastWindow.vue                                        |   30 +++++
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java         |    7 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceServiceImpl.java |  134 ++++++++++++++++++++++++++
 6 files changed, 218 insertions(+), 29 deletions(-)

diff --git a/admin/src/components/business/OperaDeviceBroadcastWindow.vue b/admin/src/components/business/OperaDeviceBroadcastWindow.vue
index 5f6ae87..c7a4027 100644
--- a/admin/src/components/business/OperaDeviceBroadcastWindow.vue
+++ b/admin/src/components/business/OperaDeviceBroadcastWindow.vue
@@ -15,6 +15,18 @@
           <el-form-item label="璁惧搴忓垪鍙�" prop="no">
             <el-input v-model="form.no" 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="doorId">
+            <el-input v-model="form.doorId" placeholder="璇疯緭鍏ヨ澶囪繛鎺ヨ处鍙�" v-trim/>
+          </el-form-item>
+          <el-form-item label="杩炴帴瀵嗙爜" prop="doorName">
+            <el-input v-model="form.doorName" type="password"  maxlength="30" show-password></el-input>
+          </el-form-item>
           <el-form-item label="鎵�鍦ㄤ綅缃�" prop="regionPathName">
             <el-input v-model="form.regionPathName" placeholder="璇疯緭鍏ユ墍鍦ㄤ綅缃�" v-trim/>
           </el-form-item>
@@ -38,13 +50,29 @@
         name: '',
         regionPathName: '',
         no: '',
-        type: 4
+        type: 4,
+        ip: '',
+        port: '',
+        doorId: '',
+        doorName:''
       },
       // 楠岃瘉瑙勫垯
       rules: {
         name: [
           { required: true, message: '璇疯緭鍏ヨ澶囧悕绉�' }
         ],
+        ip: [
+          { required: true, message: '璇疯緭鍏ヨ澶囪繛鎺P鍦板潃' }
+        ],
+        port: [
+          { required: true, message: '璇疯緭鍏ヨ澶囪繛鎺ョ鍙e彿' }
+        ],
+        doorId: [
+          { required: true, message: '璇疯緭鍏ヨ澶囪繛鎺ヨ处鍙�' }
+        ],
+        doorName: [
+          { required: true, message: '璇疯緭鍏ヨ澶囪繛鎺ュ瘑鐮�' }
+        ],
         hkId: [
           { required: true, message: '璇疯緭鍏ヨ澶囧敮涓�鐮�' }
         ]
diff --git a/admin/src/views/business/deviceBroadcast.vue b/admin/src/views/business/deviceBroadcast.vue
index 9e54ee3..baf4669 100644
--- a/admin/src/views/business/deviceBroadcast.vue
+++ b/admin/src/views/business/deviceBroadcast.vue
@@ -25,18 +25,30 @@
             >
               <el-table-column type="selection" width="55"></el-table-column>
               <el-table-column label="搴忓彿"  width="55" fixed><template slot-scope="scope" >{{scope.$index+1}}</template></el-table-column>
-                <el-table-column prop="name" label="鍚嶇О"></el-table-column>
-                <el-table-column prop="hkId" label="鍞竴鏍囪瘑"  ></el-table-column>
-                <el-table-column prop="no" label="搴忓垪鍙�"  ></el-table-column>
-                <el-table-column prop="regionPathName" label="鎵�鍦ㄤ綅缃�"></el-table-column>
-                <el-table-column prop="editDate" label="鏈�杩戞洿鏂版椂闂�"></el-table-column>
-                <el-table-column
-                    v-if="containPermissions(['business:devicerole:update', 'business:devicerole:delete'])"
-                    label="鎿嶄綔"
-                    align="center"
-                    min-width="120"
-                    fixed="right"
-                >
+              <el-table-column prop="name" label="鍚嶇О"></el-table-column>
+              <el-table-column prop="hkId" label="鍞竴鏍囪瘑"  ></el-table-column>
+              <el-table-column prop="regionPathName" label="鎵�鍦ㄤ綅缃�"></el-table-column>
+              <el-table-column prop="no" label="搴忓垪鍙�"  ></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 prop="doorId" label="璐﹀彿"></el-table-column>
+              <el-table-column prop="doorName" label="瀵嗙爜" align="center">
+                <template slot-scope="{row}">
+                  <span :class=" 'blue'">{{row.showPwd?row.doorName:'******'}}</span>
+                  <el-button  style="margin-left: 10px" v-if="row.doorName!=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="editDate" label="鏈�杩戞洿鏂版椂闂�"></el-table-column>
+              <el-table-column
+                  v-if="containPermissions(['business:devicerole:update', 'business:devicerole:delete'])"
+                  label="鎿嶄綔"
+                  align="center"
+                  min-width="120"
+                  fixed="right"
+              >
                   <template slot-scope="{row}">
                     <el-button type="text" @click="$refs.operaDeviceWindow.open('缂栬緫骞挎挱', row)" icon="el-icon-edit" v-permissions="['business:device:update']">缂栬緫</el-button>
                     <el-button type="text" @click="send(row)" icon="el-icon-edit"  v-permissions="['business:device:update']">鍙戦�佹挱鎶�</el-button>
@@ -79,6 +91,7 @@
 import TableLayout from '@/layouts/TableLayout'
 import Pagination from '@/components/common/Pagination'
 import OperaDeviceBroadcastWindow from '@/components/business/OperaDeviceBroadcastWindow'
+import { syncDevices } from '@/api/business/device'
 export default {
   name: 'Device',
   extends: BaseTable,
@@ -114,11 +127,18 @@
     this.search()
   },
   methods: {
+    showPassward (row) {
+      if (!row.showPwd) {
+        this.$set(row, 'showPwd', true)
+      } else {
+        this.$set(row, 'showPwd', false)
+      }
+    },
     sendBobao () {
-      if(!this.form.sendInfo){
+      if (!this.form.sendInfo) {
         return
       }
-      this.$dialog.actionConfirm('纭杩涜骞挎挱鎾姤鍚楋紵','鎿嶄綔纭鎻愰啋')
+      this.$dialog.actionConfirm('纭杩涜骞挎挱鎾姤鍚楋紵', '鎿嶄綔纭鎻愰啋')
         .then(() => {
           this.isWorkSending = true
           this.api.sendBobao(this.form)
@@ -143,17 +163,17 @@
       this.isWorkSending = false
       this.form = { sendInfo: '', id: '', hkId: '', name: '' }
     },
-     synchronousData () {
+    synchronousData () {
       this.$dialog.actionConfirm('鎿嶄綔纭鎻愰啋', '鎮ㄧ‘璁ゅ悓姝ュ叏閮ㄤ俊鎭悧锛�')
         .then(() => {
           this.isWorking.delete = true
-          syncDevices({type: 4})
+          syncDevices({ type: 4 })
             .then(res => {
               this.$tip.apiSuccess(res || '鍚屾鎴愬姛')
               this.search()
             })
             .catch(e => {
-             //  this.$tip.apiFailed(e)
+              //  this.$tip.apiFailed(e)
             })
             .finally(() => {
               this.isWorking.delete = false
diff --git a/server/system_service/src/main/java/com/doumee/core/utils/HttpsUtil.java b/server/system_service/src/main/java/com/doumee/core/utils/HttpsUtil.java
index e11da63..244f654 100644
--- a/server/system_service/src/main/java/com/doumee/core/utils/HttpsUtil.java
+++ b/server/system_service/src/main/java/com/doumee/core/utils/HttpsUtil.java
@@ -8,7 +8,10 @@
 import org.apache.http.client.ClientProtocolException;
 import org.apache.http.client.CredentialsProvider;
 import org.apache.http.client.config.RequestConfig;
-import org.apache.http.client.methods.*;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpDelete;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.methods.HttpRequestBase;
 import org.apache.http.entity.StringEntity;
 import org.apache.http.impl.client.BasicCredentialsProvider;
 import org.apache.http.impl.client.CloseableHttpClient;
@@ -52,14 +55,12 @@
         httpRequestBase.setConfig(requestConfig);
     }
 
-    public static String doPutHk(String host,int port,String UserName,String Password,String url, String Input) {
+    public static String doPostHk(String host,int port,String UserName,String Password,String url, String Input) {
         try {
             CloseableHttpResponse responseBody = null;
-            HttpPut httpPut = new HttpPut("http://"+host+":"+port+url);
-            log.error("====================娴峰悍isapi鎺ュ彛锛歨ttp://"+host+":"+port+url);
-            httpPut.setHeader("Content-Type", "application/json");
-            setRequestConfig(httpPut);
-            httpPut.setEntity(new StringEntity(Input, "UTF-8"));
+            HttpPost httpPost = new HttpPost("http://"+host+":"+port+url);
+            setRequestConfig(httpPost);
+            httpPost.setEntity(new StringEntity(Input, "UTF-8"));
             CredentialsProvider credsProvider = new BasicCredentialsProvider();
             credsProvider.setCredentials(new AuthScope(host, port),
                     new UsernamePasswordCredentials(UserName, Password));
@@ -68,7 +69,7 @@
             String response = "";
 
             // 鐢卞鎴风鎵ц(鍙戦��)Post璇锋眰
-            responseBody = httpClient.execute(httpPut);
+            responseBody = httpClient.execute(httpPost);
             // 浠庡搷搴旀ā鍨嬩腑鑾峰彇鍝嶅簲瀹炰綋
             HttpEntity responseEntity = responseBody.getEntity();
             log.error("doPostHk鍝嶅簲鐘舵�佷负:" + responseBody.getStatusLine());
@@ -76,8 +77,8 @@
                 String redirectLocation = responseBody.getHeaders("Location")[0].getValue();
                 log.error("doPostHkRedirected to: " + redirectLocation);
                 // 鍦ㄨ繖閲岋紝浣犲彲浠ュ彂閫佷竴涓柊鐨勮姹傚埌redirectLocation
-                httpPut.setURI(URI.create(redirectLocation));
-                CloseableHttpResponse responseBody2 = httpClient.execute(httpPut);
+                httpPost.setURI(URI.create(redirectLocation));
+                CloseableHttpResponse responseBody2 = httpClient.execute(httpPost);
                 log.error("doPostHk閲嶅畾鍚戝悗鍝嶅簲鐘舵�佷负:" + responseBody2.getStatusLine());
                 HttpEntity responseEntity2 = responseBody2.getEntity();
                 log.error("doPostHk閲嶅畾鍚戝悗鍝嶅簲鍐呭闀垮害涓�:" + responseEntity2.getContentLength());
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 37a5584..4edb06e 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
@@ -356,7 +356,12 @@
     }
     @ApiOperation("銆愭捣搴枫�戝箍鎾挱鎶�")
     @PostMapping("/sendBobao")
-    public ApiResponse<List<Map<String,Object>>> setBroadcaseBobao(@RequestBody Device body  , HttpServletResponse response) {
+    public ApiResponse<String> setBroadcaseBobao(@RequestBody Device body  , HttpServletResponse response) {
+        return ApiResponse.success( deviceService.setBroadcaseBobaoHttp(body));
+    }
+    @ApiOperation("銆愭捣搴枫�戝箍鎾挱鎶�")
+    @PostMapping("/sendBobaoOpenapi")
+    public ApiResponse<List<Map<String,Object>>> sendBobaoOpenapi(@RequestBody Device body  , HttpServletResponse response) {
         deviceService.setBroadcaseBobao(body);
         return ApiResponse.success(null);
     }
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 840dbda..ceced8e 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
@@ -108,4 +108,5 @@
     void allLedDefualtContent();
 
     void setBroadcaseBobao(Device body);
+    String setBroadcaseBobaoHttp(Device body);
 }
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 86fa98a..0415313 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
@@ -1,5 +1,6 @@
 package com.doumee.service.business.impl;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.doumee.biz.system.SystemDictDataBiz;
@@ -10,6 +11,7 @@
 import com.doumee.core.haikang.model.param.request.CustomBroadcastRequest;
 import com.doumee.core.haikang.model.param.request.TransparentChannelSingleRequest;
 import com.doumee.core.haikang.service.HKService;
+import com.doumee.core.utils.HttpsUtil;
 import com.doumee.dao.business.*;
 import com.doumee.dao.business.model.*;
 import com.doumee.service.business.third.model.LoginUserInfo;
@@ -268,6 +270,138 @@
         }
     }
     @Override
+    public String setBroadcaseBobaoHttp(Device param){
+       /* Device model = deviceMapper.selectById(param.getId());
+        if(model ==null && Constants.equalsInteger(param.getType(),Constants.FOUR)){
+            throw  new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        String input = "";
+        JSONObject objext = new JSONObject();
+
+        //閲嶆柊涓嬪彂璁″垝
+        JSONObject jsonObject = new JSONObject();
+        //绗竴灞�
+        JSONArray firstJsonArray = new JSONArray();
+        JSONObject downJson = new JSONObject();
+        downJson.put("terminalID",1);
+        //涓嶅~榛樿瀵规墍鏈夐�氶亾涓嬪彂
+        JSONArray audioJsonArray = new JSONArray();
+        audioJsonArray.add(1);
+        downJson.put("audioOutID",audioJsonArray);
+        firstJsonArray.add(downJson);
+        jsonObject.put("TerminalInfoList",firstJsonArray);
+        //绗竴灞傛暟缁�
+        JSONArray allJsonArray = new JSONArray();
+        //鏁扮粍涓璞�
+        for (WaterTimingBroadcastDO waterTimingBroadcastDO : searchList) {
+            JSONObject downArrayData = new JSONObject();
+            downArrayData.put("audioOutID",audioJsonArray);
+            downArrayData.put("enabled",true);
+            downArrayData.put("planSchemeID",waterTimingBroadcastDO.getName());
+            JSONObject executeJson = new JSONObject();
+            executeJson.put("startTime", getDateStringByZones(waterTimingBroadcastDO.getStartDate()));
+            executeJson.put("stopTime",getDateStringByZones(waterTimingBroadcastDO.getEndDate()));
+            if (Constant.ONE.equals(waterTimingBroadcastDO.getPeriodType())){
+                //鏃ヨ鍒�
+                JSONArray executeJsonArray = new JSONArray();
+                JSONObject executeJsonDataItem = new JSONObject();
+                executeJsonDataItem.put("beginTime",waterTimingBroadcastDO.getStartTime()+"+08:00");
+                executeJsonDataItem.put("endTime",waterTimingBroadcastDO.getEndTime()+"+08:00");
+                executeJsonDataItem.put("playMode","loop");
+                executeJsonDataItem.put("playNowTime","");
+                executeJsonDataItem.put("planSchemeExecID",0);
+                JSONObject secondDownOperationJson = new JSONObject();
+                if (Constant.ONE.equals(waterTimingBroadcastDO.getContentType())){
+                    //鏂囨湰
+                    secondDownOperationJson.put("audioSource","speechSynthesis");
+                    secondDownOperationJson.put("speechSynthesisContent",waterTimingBroadcastDO.getContent());
+                }else if (Constant.TWO.equals(waterTimingBroadcastDO.getContentType())){
+                    //闊抽
+                    secondDownOperationJson.put("audioSource","customAudio");
+                    String json = waterTimingBroadcastDO.getJson();
+                    JSONObject jsonData = JSONObject.parseObject(json);
+                    List<Integer> hkAudioIds = new ArrayList<>();
+                    hkAudioIds.add(jsonData.getIntValue(waterDeviceDO.getIp()));
+                    secondDownOperationJson.put("customAudioID",hkAudioIds);
+                }
+                secondDownOperationJson.put("audioLevel",5);
+                //璇█绫诲瀷
+                secondDownOperationJson.put("TTSLanguageType","chinese");
+                secondDownOperationJson.put("voiceType","female");
+                secondDownOperationJson.put("audioVolume",100);
+                executeJsonDataItem.put("Operation",secondDownOperationJson);
+                executeJsonArray.add(executeJsonDataItem);
+                executeJson.put("dailyScheduleList",executeJsonArray);
+            }else {
+                //鍛ㄨ鍒�
+                JSONArray executeJsonArray = new JSONArray();
+                List<String> executeTime = new ArrayList<>();
+                if (Constant.ONE.equals(waterTimingBroadcastDO.getPeriodType())){
+                    //鏃ヨ鍒� 寰幆涓�娆�
+                    executeTime.add("1");
+                }else if (Constant.TWO.equals(waterTimingBroadcastDO.getPeriodType())){
+                    //鍛ㄨ鍒掑涓�涓懆鍑�
+                    executeTime = Arrays.asList(waterTimingBroadcastDO.getExecuteTime().split(","));
+                }
+                for (String s : executeTime) {
+                    JSONObject executeJsonData = new JSONObject();
+                    if (Constant.TWO.equals(waterTimingBroadcastDO.getPeriodType())){
+                        //鍛ㄨ鍒掑涓�涓懆鍑�
+                        executeJsonData.put("dayOfWeek",Integer.parseInt(s));
+                    }
+                    JSONArray executeJsonDataArray = new JSONArray();
+                    JSONObject executeJsonDataItem = new JSONObject();
+                    executeJsonDataItem.put("beginTime",waterTimingBroadcastDO.getStartTime()+"+08:00");
+                    executeJsonDataItem.put("endTime",waterTimingBroadcastDO.getEndTime()+"+08:00");
+                    executeJsonDataItem.put("playMode","loop");
+                    executeJsonDataItem.put("playNowTime","");
+                    executeJsonDataItem.put("planSchemeExecID",0);
+                    JSONObject secondDownOperationJson = new JSONObject();
+                    if (Constant.ONE.equals(waterTimingBroadcastDO.getContentType())){
+                        //鏂囨湰
+                        secondDownOperationJson.put("audioSource","speechSynthesis");
+                        secondDownOperationJson.put("speechSynthesisContent",waterTimingBroadcastDO.getContent());
+                    }else if (Constant.TWO.equals(waterTimingBroadcastDO.getContentType())){
+                        //闊抽
+                        secondDownOperationJson.put("audioSource","customAudio");
+                        String json = waterTimingBroadcastDO.getJson();
+                        JSONObject jsonData = JSONObject.parseObject(json);
+                        List<Integer> hkAudioIds = new ArrayList<>();
+                        hkAudioIds.add(jsonData.getIntValue(waterDeviceDO.getIp()));
+                        secondDownOperationJson.put("customAudioID",hkAudioIds);
+                    }
+                    secondDownOperationJson.put("audioLevel",5);
+                    //璇█绫诲瀷
+                    secondDownOperationJson.put("TTSLanguageType","chinese");
+                    secondDownOperationJson.put("voiceType","female");
+                    secondDownOperationJson.put("audioVolume",10);
+                    executeJsonDataItem.put("Operation",secondDownOperationJson);
+                    executeJsonDataArray.add(executeJsonDataItem);
+                    executeJsonData.put("scheduleList",executeJsonDataArray);
+                    executeJsonArray.add(executeJsonData);
+
+                }
+                executeJson.put("weeklyScheduleList",executeJsonArray);
+            }
+
+            if (Constant.ONE.equals(waterTimingBroadcastDO.getPeriodType())){
+                //鏃ヨ鍒�
+                downArrayData.put("dailyScheduleInfo",executeJson);
+            }else {
+                //鍛ㄨ鍒�
+                downArrayData.put("weklyScheduleInfo",executeJson);
+            }
+            allJsonArray.add(downArrayData);
+        }
+        jsonObject.put("broadcastPlanSchemeList",allJsonArray);
+        log.info("娴峰悍鎾斁璁″垝涓嬪彂鍏ュ弬鍐呭 : " + jsonObject);
+
+        String result = HttpsUtil.doPostHk(param.getIp(),Integer.parseInt(StringUtils.defaultString(param.getPort(),"80"))
+                ,"/ISAPI/VideoIntercom/broadcast/AddPlanScheme?format=json",param.getDoorId(), param.getDoorName(),jsonObject.toJSONString());
+        return result;*/
+        return  null;
+    }
+    @Override
     public void setLedContent(TransparentChannelSingleRequest model) {
         Device device = findById(model.getDeviceId());
         if(device == null

--
Gitblit v1.9.3