Explorar el Código

喇叭修改联调 2022-09-03

donggaosheng hace 3 años
padre
commit
48f7092697

+ 31 - 0
zd-api/zd-api-system/src/main/java/com/zd/system/api/test.java

@@ -0,0 +1,31 @@
+package com.zd.system.api;
+
+import cn.hutool.core.util.NumberUtil;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+public class test {
+    public static void main(String[] args) {
+        String[] urlStr = new String[5];
+        urlStr[0] = "15-31-17.mp4";
+        urlStr[1] = "15-31-29.mp4";
+        urlStr[2] = "15-31-20.mp4";
+        urlStr[3] = "15-31-30.mp4";
+        urlStr[4] = "15-31-15.mp4";
+        List<Map<String,Object>> collect = Arrays.asList(urlStr).stream()
+                .map(a -> {
+                    Map<String,Object> urlMap = new HashMap<String,Object>();
+                    Integer value = Integer.parseInt(a.substring(0, a.lastIndexOf(".")).replaceAll("-", ""));
+                    urlMap.put("key",value);
+                    urlMap.put("value",a);
+                    return urlMap;
+                }).collect(Collectors.toList());
+        Map<String,Object> arrMap = Optional.ofNullable(collect).orElseGet(Collections::emptyList)
+                .stream()
+                .sorted((c, d) -> NumberUtil.compare(Integer.parseInt(d.get("key").toString()),Integer.parseInt(c.get("key").toString())))
+                .collect(Collectors.toList()).get(0);
+
+        System.out.println(arrMap.get("value"));
+    }
+}

+ 1 - 1
zd-modules/zd-camera/src/main/java/com/zd/iot/vmp/storager/dao/DeviceChannelMapper.java

@@ -75,7 +75,7 @@ public interface DeviceChannelMapper {
             "SELECT * FROM device_channel WHERE deviceId in \n" +
             "<foreach collection='deviceIds' index='index' item='item' open='(' separator=',' close=')'>#{item}</foreach> \n"+
             "</script>")
-    List<DeviceChannel> queryChannelByDeviceId(List<String> deviceIds);
+    List<DeviceChannel> queryChannelByDeviceId(@Param("deviceIds") List<String> deviceIds);
 
     @Delete("DELETE FROM device_channel WHERE deviceId=#{deviceId}")
     int cleanChannelsByDeviceId(String deviceId);

+ 1 - 0
zd-modules/zd-speaker/src/main/java/com/zd/speaker/controller/SpeakerController.java

@@ -207,6 +207,7 @@ public class SpeakerController {
         if(StringUtils.isEmpty(text) || playVo.size()==0){
             return AjaxResult.error("参数有误,请检查参数!");
         }
+        text=text.replace("https","http");
         text=text.replace("https://lab.sxitdlc.com/jdlabSystem/","http://192.168.8.101/jdlabSystem/");
         iSpeakerService.textParseVoiceAppIps(text,playVo);
         Map<String,Object> map=new HashMap<>();

+ 10 - 0
zd-modules/zd-speaker/src/main/java/com/zd/speaker/domain/vo/PlayVo.java

@@ -27,6 +27,8 @@ public class PlayVo {
     private ParamVo params;
     @ApiModelProperty(required = true, notes = "远程端口")
     private int port;
+    @ApiModelProperty(required = true, notes = "设备Ip")
+    private String deviceIp;
 
     public String getSn() {
         return sn;
@@ -93,4 +95,12 @@ public class PlayVo {
     public void setSpeed(Integer speed) {
         this.speed = Optional.ofNullable(speed).orElse(50);
     }
+
+    public String getDeviceIp() {
+        return deviceIp;
+    }
+
+    public void setDeviceIp(String deviceIp) {
+        this.deviceIp = deviceIp;
+    }
 }

+ 1 - 0
zd-modules/zd-speaker/src/main/java/com/zd/speaker/service/ISpeakerService.java

@@ -82,6 +82,7 @@ public interface ISpeakerService {
      */
     void textParseVoiceIps(String texts, List<PlayVo> playVo);
 
+
     /**
      * 文字转音频路径
      * @param texts

+ 61 - 17
zd-modules/zd-speaker/src/main/java/com/zd/speaker/service/impl/SpeakerServiceImpl.java

@@ -30,9 +30,13 @@ import java.util.concurrent.TimeUnit;
 @RefreshScope
 public class SpeakerServiceImpl implements ISpeakerService {
 
-    @Value("${speaker.port:}")
+    @Value("${speaker.port:8080}")
     private String port;
 
+    @Value("${speaker.isOnline:0}")
+    private Integer isOnline;
+
+
     private static Logger logger = LoggerFactory.getLogger(SpeakerServiceImpl.class);
     @Autowired
     private OkHttpRequest okHttpRequest;
@@ -163,13 +167,13 @@ public class SpeakerServiceImpl implements ISpeakerService {
 
     @Override
     public void textParseVoiceIps(String texts, List<PlayVo> playVoList) {
-        commonTextParseVoice(texts, playVoList);
+        commonTextParseVoice(texts,playVoList);
     }
 
     @Override
-    public void textParseVoiceAppIps(String texts, List<PlayVo> playVoList) {
+    public void textParseVoiceAppIps(String texts,List<PlayVo> playVoList) {
         if (playVoList.size() == 1) {
-            commonTextParseVoice(texts, playVoList);
+            commonTextUrlVoice(texts, playVoList);
         } else {
             PlayBatchVo playBatchVo = new PlayBatchVo();
             BeanUtils.copyProperties(playVoList.get(0), playBatchVo);
@@ -182,17 +186,18 @@ public class SpeakerServiceImpl implements ISpeakerService {
             for (PlayVo playVo : playVoList) {
                 snsList.add(playVo.getSn());
             }
+            String deviceIp =playVoList.get(0).getDeviceIp();
             playBatchVo.setSns(snsList.toArray(new String[snsList.size()]));
-            boolean isTrue = invokePost(JSONObject.toJSON(playBatchVo).toString(), 1, 0);
+            boolean isTrue = invokePost(JSONObject.toJSON(playBatchVo).toString(), deviceIp,1, 0);
             if (isTrue) {
-                textParseVoiceAppIps(texts, playVoList);
+                textParseVoiceAppIps(texts,playVoList);
             }
         }
     }
 
     @Override
-    public void textParseUrlAppIpsOrigin(String text, List<PlayVo> playVo) {
-        commonTextParseVoice(text, playVo);
+    public void textParseUrlAppIpsOrigin(String text,List<PlayVo> playVo) {
+        commonTextParseVoice(text,playVo);
     }
 
     @Override
@@ -211,7 +216,6 @@ public class SpeakerServiceImpl implements ISpeakerService {
 
     /**
      * 认证失败刷新token
-     *
      * @param requestStr
      * @return
      */
@@ -231,22 +235,54 @@ public class SpeakerServiceImpl implements ISpeakerService {
         return urlVoList;
     }
 
+    private List<UrlVo> getTextParseUrl(String text,PlayVo playVo) {
+        List<UrlVo> urlVoList = new ArrayList<>();
+        String remoteUrl = remoteAddress.getProtocol() + "://" + remoteAddress.getTtsIp() + ":" + remoteAddress.getTtsPort() + "/tts_xf.single?text=" + text + "&voice_name=xiaoyan&speed=" + playVo.getSpeed() + "&volume=" + playVo.getParams().getVol();
+        UrlVo urlVo = new UrlVo(text.substring(0, 1), remoteUrl);
+        urlVoList.add(urlVo);
+        return urlVoList;
+    }
+
     /**
      * 公共的文字转语音播放
      *
      * @param texts
      * @param playVoList
      */
-    private void commonTextParseVoice(String texts, List<PlayVo> playVoList) {
+    private void commonTextParseVoice(String texts,List<PlayVo> playVoList) {
         for (PlayVo play : playVoList) {
+            String deviceIp=play.getDeviceIp();
+            List<UrlVo> urlVoList = getTextParseUrl(texts,play);
+            if (null != play.getParams()) {
+                play.getParams().setTid(UUID.randomUUID().toString());
+                play.getParams().setUrls(urlVoList);
+            }
+            boolean isTrue = invokePost(JSONObject.toJSON(play).toString(),deviceIp, 0, play.getPort());
+            if (isTrue) {
+                commonTextParseVoice(texts,playVoList);
+                break;
+            }
+        }
+    }
+
+
+    /**
+     * 公共的语音路径播放
+     * commonTextUrlVoice
+     * @param texts
+     * @param playVoList
+     */
+    private void commonTextUrlVoice(String texts,List<PlayVo> playVoList) {
+        for (PlayVo play : playVoList) {
+            String deviceIp=play.getDeviceIp();
             List<UrlVo> urlVoList = getUrlList(texts);
             if (null != play.getParams()) {
                 play.getParams().setTid(UUID.randomUUID().toString());
                 play.getParams().setUrls(urlVoList);
             }
-            boolean isTrue = invokePost(JSONObject.toJSON(play).toString(), 0, play.getPort());
+            boolean isTrue = invokePost(JSONObject.toJSON(play).toString(),deviceIp, 0, play.getPort());
             if (isTrue) {
-                commonTextParseVoice(texts, playVoList);
+                commonTextParseVoice(texts,playVoList);
                 break;
             }
         }
@@ -256,13 +292,21 @@ public class SpeakerServiceImpl implements ISpeakerService {
      * @param body
      * @param type 0是单个,1是批量
      */
-    private boolean invokePost(String body, Integer type, int port) {
+    private boolean invokePost(String body,String deviceIp, Integer type, int port) {
         logger.info("+++++++++++++++++++++++++++" + body + "+++++++++++++++++++++++++");
         String remoteUrlIp = "";
-        if (type == 0) {
-            remoteUrlIp = remoteAddress.getProtocol() + "://" + remoteAddress.getTtsIp() + ":" + port;
-        } else {
-            remoteUrlIp = remoteAddress.getProtocol() + "://" + remoteAddress.getTtsIp() + ":" + remoteAddress.getRemotePort() + "/api/sendtodevice";
+        if(isOnline==1){
+            if (type == 0) {
+                remoteUrlIp = remoteAddress.getProtocol() + "://" + remoteAddress.getTtsIp() + ":" + remoteAddress.getRemotePort();
+            } else {
+                remoteUrlIp = remoteAddress.getProtocol() + "://" + remoteAddress.getTtsIp() + ":" + remoteAddress.getRemotePort() + "/api/sendtodevice";
+            }
+        }else{
+            if (type == 0) {
+                remoteUrlIp = remoteAddress.getProtocol() + "://" + deviceIp + ":" + port;
+            } else {
+                remoteUrlIp = remoteAddress.getProtocol() + "://" + deviceIp + ":" + port + "/api/sendtodevice";
+            }
         }
         String token = getToken();
         String responseStr = okHttpRequest.doPostJson(remoteUrlIp, token, body);

+ 1 - 0
zd-modules/zd-speaker/src/main/resources/application.yml

@@ -36,4 +36,5 @@ spring:
 #ip喇叭控制端口
 speaker:
   port: 8888
+  isOnline: 0  #1表示公网部署,0表示局域网部署