doum
16 小时以前 af2a56b525dd3b015b34446a2af3e3af3467cd75
最新版本541200007
已删除6个文件
已修改12个文件
279 ■■■■ 文件已修改
admin/.env.production 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/operation/OperCarUseBookParamWindow.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/deviceBroadcast.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/deviceBroadcastChannel.vue 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/whyc_admin/avatar/woman.png 补丁 | 查看 | 原始文档 | blame | 历史
admin/whyc_admin/favicon.ico 补丁 | 查看 | 原始文档 | blame | 历史
admin/whyc_admin/template/cars.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
admin/whyc_admin/template/member.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
admin/whyc_admin/template/oil.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
admin/whyc_admin/template/traintime.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/utils/HttpsUtil.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/resources/bootstrap.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/FetchAudioChannelInfoResponse.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/FetchAudioDeviceInfoResponse.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceServiceImpl.java 149 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDeviceServiceImpl.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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.png
Binary files differ
admin/whyc_admin/favicon.ico
Binary files differ
admin/whyc_admin/template/cars.xlsx
Binary files differ
admin/whyc_admin/template/member.xlsx
Binary files differ
admin/whyc_admin/template/oil.xlsx
Binary files differ
admin/whyc_admin/template/traintime.xlsx
Binary 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) {