admin/.env.production
@@ -8,3 +8,4 @@ VUE_APP_AMAP_KEY='045542fc5f436b75e6c911c5c84ff8cd' admin/src/components/operation/OperCarUseBookParamWindow.vue
@@ -117,9 +117,7 @@ <div class="line"> <span>用车时段</span> <span> {{ item.startTime.slice(5, 16) }}至{{ item.endTime.slice(5, 16) }}</span> {{ item.startTime.slice(5, 16) }}至{{ item.endTime.slice(5, 16) }}</span> </div> <div class="line"> <span>目的地</span> admin/src/views/business/deviceBroadcast.vue
@@ -43,7 +43,6 @@ </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" admin/src/views/business/deviceBroadcastChannel.vue
@@ -28,6 +28,16 @@ <el-table-column prop="channelNo" label="通道号"></el-table-column> <el-table-column prop="regionName" label="区域名称"></el-table-column> <el-table-column prop="hkDate" label="同步时间"></el-table-column> <el-table-column label="操作" align="center" min-width="120" fixed="right" > <template slot-scope="{row}"> <el-button type="text" @click="send(row)" icon="el-icon-edit" >发送播报</el-button> </template> </el-table-column> </el-table> <pagination @size-change="handleSizeChange" @@ -37,7 +47,24 @@ </pagination> </template> <!-- 新建/修改 --> <!-- <OperaDeviceWindow ref="operaDeviceWindow" @success="handlePageChange"/>--> <el-dialog :visible.sync="visibleSend" style="z-index: 100000" append-to-body width="50%" height="50%" :title="'发送播报-'+ form.name" > <el-form :model="form" ref="form" > <el-form-item label="播报内容" prop="name" required> <el-input v-model="form.sendInfo" type="textarea" placeholder="请输入播报内容" v-trim/> </el-form-item> </el-form> <template v-slot:footer > <el-button @click="sendBobao()" type="primary" :loading="isWorkSending">确认</el-button> <el-button @click="sendClose()">返回</el-button> </template> </el-dialog> </TableLayout> </template> @@ -45,12 +72,11 @@ 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 }, components: { TableLayout, Pagination }, data () { return { // 搜索 @@ -61,6 +87,14 @@ online: '', type: 3 }, isWorkSending: false, form: { sendInfo: '', id: '', hkId: '', name: '' }, visibleSend: false, options: [] } }, @@ -74,7 +108,36 @@ this.search() }, methods: { changeManufature(e, row) { sendBobao () { if (!this.form.sendInfo) { return } this.$dialog.actionConfirm('确认进行广播播报吗?', '操作确认提醒') .then(() => { this.isWorkSending = true this.api.sendBobao(this.form) .then(res => { this.$tip.apiSuccess(res || '播报请求成功') this.sendClose() }) .catch(e => { }) .finally(() => { this.isWorkSending = false }) }) .catch(() => {}) }, send (row) { this.visibleSend = true this.form = { sendInfo: '', id: row.id, hkId: row.hkId, name: row.name } }, sendClose () { this.visibleSend = false this.isWorkSending = false this.form = { sendInfo: '', id: '', hkId: '', name: '' } }, changeManufature (e, row) { updateEntranceById({ id: row.id, isEntrance: e @@ -84,13 +147,13 @@ this.$dialog.actionConfirm('操作确认提醒', '您确认同步全部信息吗?') .then(() => { this.isWorking.delete = true syncDevices({type: 3}) syncDevices({ type: 3 }) .then(res => { this.$tip.apiSuccess(res || '同步成功') this.search() }) .catch(e => { // this.$tip.apiFailed(e) // this.$tip.apiFailed(e) }) .finally(() => { this.isWorking.delete = false admin/whyc_admin/avatar/woman.pngBinary files differ
admin/whyc_admin/favicon.icoBinary files differ
admin/whyc_admin/template/cars.xlsxBinary files differ
admin/whyc_admin/template/member.xlsxBinary files differ
admin/whyc_admin/template/oil.xlsxBinary files differ
admin/whyc_admin/template/traintime.xlsxBinary files differ
server/system_service/src/main/java/com/doumee/core/utils/HttpsUtil.java
@@ -8,10 +8,7 @@ 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.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.client.methods.*; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.CloseableHttpClient; @@ -55,12 +52,14 @@ httpRequestBase.setConfig(requestConfig); } public static String doPostHk(String host,int port,String UserName,String Password,String url, String Input) { public static String doPutHk(String host,int port,String UserName,String Password,String url, String Input) { try { CloseableHttpResponse responseBody = null; HttpPost httpPost = new HttpPost("http://"+host+":"+port+url); setRequestConfig(httpPost); httpPost.setEntity(new StringEntity(Input, "UTF-8")); 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")); CredentialsProvider credsProvider = new BasicCredentialsProvider(); credsProvider.setCredentials(new AuthScope(host, port), new UsernamePasswordCredentials(UserName, Password)); @@ -69,7 +68,7 @@ String response = ""; // 由客户端执行(发送)Post请求 responseBody = httpClient.execute(httpPost); responseBody = httpClient.execute(httpPut); // 从响应模型中获取响应实体 HttpEntity responseEntity = responseBody.getEntity(); log.error("doPostHk响应状态为:" + responseBody.getStatusLine()); @@ -77,8 +76,8 @@ String redirectLocation = responseBody.getHeaders("Location")[0].getValue(); log.error("doPostHkRedirected to: " + redirectLocation); // 在这里,你可以发送一个新的请求到redirectLocation httpPost.setURI(URI.create(redirectLocation)); CloseableHttpResponse responseBody2 = httpClient.execute(httpPost); httpPut.setURI(URI.create(redirectLocation)); CloseableHttpResponse responseBody2 = httpClient.execute(httpPut); 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
@@ -116,7 +116,7 @@ //同步LED result = hkSyncDeviceService.syncHkLed(param); }else if(Constants.equalsInteger(param.getType(),Constants.THREE)){ //同步广播 //同步广播点 result = hkSyncDeviceService.syncHkBroadcast(param); }else if(Constants.equalsInteger(param.getType(),Constants.FOUR)){ //同步广播 @@ -360,7 +360,7 @@ return ApiResponse.success( deviceService.setBroadcaseBobaoHttp(body)); } @ApiOperation("【海康】广播播报") @PostMapping("/sendBobaoOpenapi") @PostMapping("/sendBobaoOpenApi") public ApiResponse<List<Map<String,Object>>> sendBobaoOpenapi(@RequestBody Device body , HttpServletResponse response) { deviceService.setBroadcaseBobao(body); return ApiResponse.success(null); server/visits/dmvisit_admin/src/main/resources/bootstrap.yml
@@ -1,6 +1,6 @@ spring: profiles: active: dev active: pro application: name: visitsAdmin # 安全配置 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java
@@ -421,7 +421,6 @@ String[] minitorDataSearch= new String[]{"/api/fpms/v2/minitor/data/search","分页查询设备监测历史数据"};//分页查询设备监测历史数据 String[] monitorDataSearch= new String[]{"/api/fpms/v2/monitor/data/search","分页查询设备监测历史数据"};//分页查询设备监测历史数据 String[] fireMonitorData= new String[]{"/api/v2/monitor/fireMonitorData","分页查询设备监测历史数据"};//分页查询设备监测历史数据 String[] userOpenidSave= new String[]{"/api/v1/oa/userOpenId/saveV2","保存用户及openId绑定信息微信公众号"};//保存用户及openId绑定信息微信公众号 String[] userOpenidDel= new String[]{"/api/v1/oa/userOpenId/delete","通过openId或userName等删除绑定信息"};//通过openId或userName等删除绑定信息 String[] temperatureHumidityDataStatistic= new String[]{"/api/v2/public/monitor/sensor/list","消防看板-4温湿度统计"};//消防看板-温湿度 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/FetchAudioChannelInfoResponse.java
@@ -17,6 +17,9 @@ private Integer state ;//Number false 广播点在线状态0-在线 1-离线 private String regionName ;//String false 区域名称 private String volume ;//String false 广播点音量 private String ip ;//String false ip地址 private String port ;//String false 端口 private Integer isMachineSync ;//Number false 是否广播主机数据,1-同步数据,0-本级数据 private Integer isCascadeSync;// Number false 是否广播级联数据,1-同步数据,0-本级数据 server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/FetchAudioDeviceInfoResponse.java
@@ -2,6 +2,8 @@ import lombok.Data; import java.util.List; @Data public class FetchAudioDeviceInfoResponse { @@ -16,5 +18,5 @@ private String deviceCode ;//String false 设备主动注册编码 private String deviceUseType ;//String false 设备功能类型loudspeaker: '网络功放', box: '网络音箱', microphone: '网络寻呼话筒', machine: '广播主机' private String desc ;//String false 广播设备描述信息 private List<FetchAudioChannelInfoResponse> channels; } server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceServiceImpl.java
@@ -271,135 +271,43 @@ } @Override public String setBroadcaseBobaoHttp(Device param){ /* Device model = deviceMapper.selectById(param.getId()); 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); } /* { "command": "start", "TTSContent": "冀G70122,毛重48.68吨,称重结束,请下磅", "audioLevel": 6, "audioOutID": [ 1 ], "audioVolume": 100, "voiceType": "female", "TTSLanguageType": "chinese" }*/ jsonObject.put("command","start"); jsonObject.put("TTSContent",param.getSendInfo()); jsonObject.put("audioLevel",6); jsonObject.put("audioVolume",100); jsonObject.put("TTSLanguageType","chinese"); jsonObject.put("voiceType","female"); jsonObject.put("pace",50); JSONArray a = new JSONArray(); a.add(1); jsonObject.put("audioOutID",a); String params =jsonObject.toJSONString(); log.error("========海康广播播放入参内容 : " + params); String result = HttpsUtil.doPutHk(model.getIp(),Integer.parseInt(StringUtils.defaultString(model.getPort(),"80")),model.getDoorId(), model.getDoorName() ,"/ISAPI/AccessControl/EventCardLinkageCfg/TTSAudio?format=json",params); 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; log.error("========海康广播播放返回内容 : " + result); return result; } @Override public void setLedContent(TransparentChannelSingleRequest model) { @@ -457,7 +365,6 @@ }catch (Exception e){ log.error( "对不起,屏幕内容设置异常"+ device.getName()); } } log.error( "屏幕内容设置=======================结束========" ); } server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDeviceServiceImpl.java
@@ -557,8 +557,12 @@ model.setChannelNo(device.getChannelNo()); model.setChannelInfo(device.getChannelType()); model.setResourceType(device.getAudioChannelType()); model.setIp(device.getIp()); model.setPort(device.getPort()); model.setDoorId(device.getParentDevIndexCode()); model.setStatus(device.getState()); model.setRegionName(device.getRegionName()); model.setRemark(JSONObject.toJSONString(device)); return model; } private Device initBroadcastDeviceDataByHkData(Device model, FetchAudioDeviceInfoResponse device, Date date) { @@ -567,13 +571,17 @@ model.setHkId(device.getDeviceIndexCode()); model.setName(device.getDeviceName()); model.setHkStatus(Constants.ONE); model.setType(Constants.THREE); model.setChannelNo(device.getDeviceCode()); model.setChannelInfo(device.getDeviceType()); model.setType(Constants.FOUR); model.setIp(device.getIp()); model.setPort(device.getPort()); // model.setChannelInfo(device.getDeviceType()); model.setResourceType(device.getDeviceType()); model.setStatus(Constants.ZERO); model.setRemark(device.getDesc()); model.setRegionName(device.getRegionIndexCode()); if(device.getChannels()!=null &&device.getChannels().size()>0){ model.setRegionPathName(device.getChannels().get(0).getRegionName()); } return model; } private Device initDoorDataByHkData(Device model, DoorsInfoResponse door, Date date, List<AcsDeviceInfoResponse> allHkList) {