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="请输入设备连接IP地址" 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: '请输入设备连接IP地址' } ], port: [ { required: true, message: '请输入设备连接端口号' } ], doorId: [ { required: true, message: '请输入设备连接账号' } ], doorName: [ { required: true, message: '请输入设备连接密码' } ], hkId: [ { required: true, message: '请输入设备唯一码' } ] admin/src/views/business/deviceBroadcast.vue
@@ -27,8 +27,20 @@ <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="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'])" @@ -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,6 +127,13 @@ this.search() }, methods: { showPassward (row) { if (!row.showPwd) { this.$set(row, 'showPwd', true) } else { this.$set(row, 'showPwd', false) } }, sendBobao () { if(!this.form.sendInfo){ return 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接口:http://"+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()); 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); } 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); } 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