From 1cdbf43f29e65d2e9a03b8d6cc04afce2b9a7f56 Mon Sep 17 00:00:00 2001 From: liwq <122639653@qq.com> Date: Wed, 15 Oct 2025 11:30:50 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=20ai=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tashow-module/tashow-module-ai/pom.xml | 2 + .../app/dialog/vo/TranslateReqVo.java | 2 +- .../app/dialog/vo/TranslateRespVo.java | 2 + .../dataobject/dialog/AiDialogMessageDO.java | 4 ++ .../service/dialog/AiDialogServiceImpl.java | 69 ++++++++++++++----- 5 files changed, 61 insertions(+), 18 deletions(-) diff --git a/tashow-module/tashow-module-ai/pom.xml b/tashow-module/tashow-module-ai/pom.xml index 2853a03..685147e 100644 --- a/tashow-module/tashow-module-ai/pom.xml +++ b/tashow-module/tashow-module-ai/pom.xml @@ -70,6 +70,8 @@ com.tashow.cloud tashow-framework-monitor + + diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/app/dialog/vo/TranslateReqVo.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/app/dialog/vo/TranslateReqVo.java index 977d6d6..5032589 100644 --- a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/app/dialog/vo/TranslateReqVo.java +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/app/dialog/vo/TranslateReqVo.java @@ -18,7 +18,7 @@ public class TranslateReqVo { private MultipartFile file; //文件时长 - private Long contentDuration; + private String contentDuration; } diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/app/dialog/vo/TranslateRespVo.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/app/dialog/vo/TranslateRespVo.java index e25ff78..0da9dfc 100644 --- a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/app/dialog/vo/TranslateRespVo.java +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/app/dialog/vo/TranslateRespVo.java @@ -23,6 +23,8 @@ public class TranslateRespVo { private Integer contentType; //消息内容 若消息类型是file 则为文件地址 private String contentText; + //消息内容 若消息类型是file 则为文件地址 + private String fileType; //宠物类型 private String petType; //宠物名称 diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/dal/dataobject/dialog/AiDialogMessageDO.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/dal/dataobject/dialog/AiDialogMessageDO.java index d84ae69..cc26722 100644 --- a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/dal/dataobject/dialog/AiDialogMessageDO.java +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/dal/dataobject/dialog/AiDialogMessageDO.java @@ -36,6 +36,10 @@ public class AiDialogMessageDO { * 文件名 */ private String fileName; + /** + * 文件类型 + */ + private String fileType; /** * 文件时长 */ diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/service/dialog/AiDialogServiceImpl.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/service/dialog/AiDialogServiceImpl.java index 6e963dc..ef4fb19 100644 --- a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/service/dialog/AiDialogServiceImpl.java +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/service/dialog/AiDialogServiceImpl.java @@ -23,7 +23,13 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import org.springframework.web.multipart.MultipartFile; +import javax.sound.sampled.AudioInputStream; +import javax.sound.sampled.AudioSystem; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URL; import java.time.LocalDateTime; import java.util.Comparator; import java.util.List; @@ -75,18 +81,22 @@ public class AiDialogServiceImpl extends ServiceImpl if (messageDO == null) { messageDO = new AiDialogMessageDO(); } - String fileName =StrUtil.isBlank(messageDO.getFileName())?fileReqVo.getFile().getOriginalFilename():messageDO.getFileName(); + String fileName = StrUtil.isBlank(messageDO.getFileName()) ? fileReqVo.getFile().getOriginalFilename() : messageDO.getFileName(); //上传文件获取文件地址 - String fileUrl =StrUtil.isBlank(messageDO.getContentText())? fileServer + fileApi.createFile(fileName,"",fileReqVo.getFile().getBytes()):messageDO.getContentText(); - log.info(fileUrl); + String fileUrl = StrUtil.isBlank(messageDO.getContentText()) ? fileServer + fileApi.createFile(fileName, "", fileReqVo.getFile().getBytes()) : messageDO.getContentText(); //翻译结果 - translate(messageDO,fileUrl, fileName); + translate(messageDO, fileUrl, fileName); //创建消息 持久化消息 - if (messageDO.getId()==null){ + if (messageDO.getId() == null) { messageDO.setFileName(fileName); + messageDO.setFileType(fileReqVo.getFile().getContentType()); messageDO.setDialogId(fileReqVo.getDialogId()); - messageDO.setContentDuration(fileReqVo.getContentDuration()); + //前端无法转换时 后端进行转 + messageDO.setContentDuration( + StrUtil.isBlank(fileReqVo.getContentDuration()) || "Infinity".equals(fileReqVo.getContentDuration()) + ? 0 : Long.parseLong(fileReqVo.getContentDuration()) + ); messageDO.setContentText(fileUrl); messageDO.setContentType(2); @@ -103,18 +113,23 @@ public class AiDialogServiceImpl extends ServiceImpl messageDO.setMessageOrder(aiDialogMessageDO == null ? 1 : aiDialogMessageDO.getMessageOrder() + 1); messageDO.setCreateTime(LocalDateTime.now()); } - int i = messageDO.getId()==null? aiDialogMessageMapper.insert(messageDO):aiDialogMessageMapper.updateById(messageDO); + int i = messageDO.getId() == null ? aiDialogMessageMapper.insert(messageDO) : aiDialogMessageMapper.updateById(messageDO); TranslateRespVo bean = BeanUtils.toBean(messageDO, TranslateRespVo.class); bean.setId(messageDO.getId()); return bean; } + @SneakyThrows + private Long getFileDuration(MultipartFile file) { + AudioInputStream audioStream = AudioSystem.getAudioInputStream(file.getInputStream()); + return (long) (audioStream.getFrameLength() / audioStream.getFormat().getFrameRate()); + } - private AiDialogMessageDO translate(AiDialogMessageDO messageDO,String file, String fileName) { + + private AiDialogMessageDO translate(AiDialogMessageDO messageDO, String file, String fileName) { //调用大模型接口 String result = ""; try { - log.info(translateServer); result = HttpRequest.post(translateServer).form("audio_data", HttpUtil.downloadBytes(file), fileName).timeout(20000) //20秒超时时间 .execute().body(); } catch (Exception e) { @@ -124,7 +139,7 @@ public class AiDialogServiceImpl extends ServiceImpl //数据解析 JSONObject translateResult = JSON.parseObject(result); - if (translateResult.isEmpty() || !translateResult.containsKey("intent_result")|| !translateResult.getBoolean("is_species_sound")) { + if (translateResult.isEmpty() || !translateResult.containsKey("intent_result") || !translateResult.getBoolean("is_species_sound")) { messageDO.setTransStatus(0); messageDO.setTransResult(""); return messageDO; @@ -149,12 +164,32 @@ public class AiDialogServiceImpl extends ServiceImpl } - public static void main(String[] args) { - byte[] bytes = HttpUtil.downloadBytes("http://192.168.1.231:48080/admin-api/infra/file/29/get/c7351abf780f18600c104ec5662d843783ed8c309c01fb427046565217f51102.wav"); - -// File file = new File("http://192.168.1.231:48080/admin-api/infra/file/29/get/c7351abf780f18600c104ec5662d843783ed8c309c01fb427046565217f51102.wav"); - String result = HttpRequest.post("http://43.139.42.137:8000/analyze/audio").form("audio_data", bytes, "aaa").timeout(20000) //20秒超时时间 - .execute().body(); - System.out.println(result); + public static void main(String[] args) throws Exception { + InputStream inputStream = getInputStreamFromUrl("https://petshy.tashowz.com/admin-api/infra/file/29/get/857def513547ec33a105f71108c8ece329cb64dacc3a4779c94b0fcc3398cc32.webm"); + AudioInputStream audioStream = AudioSystem.getAudioInputStream(inputStream); + System.out.println((long) (audioStream.getFrameLength() / audioStream.getFormat().getFrameRate())); +// byte[] bytes = HttpUtil.downloadBytes("http://192.168.1.231:48080/admin-api/infra/file/29/get/c7351abf780f18600c104ec5662d843783ed8c309c01fb427046565217f51102.wav"); +// +//// File file = new File("http://192.168.1.231:48080/admin-api/infra/file/29/get/c7351abf780f18600c104ec5662d843783ed8c309c01fb427046565217f51102.wav"); +// String result = HttpRequest.post("http://43.139.42.137:8000/analyze/audio").form("audio_data", bytes, "aaa").timeout(20000) //20秒超时时间 +// .execute().body(); +// System.out.println(result); } + + + public static InputStream getInputStreamFromUrl(String urlString) throws Exception { + URL url = new URL(urlString); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("GET"); // 可以是GET, POST等 + connection.setConnectTimeout(5000); // 设置连接超时时间 + connection.setReadTimeout(5000); // 设置读取超时时间 + int responseCode = connection.getResponseCode(); // 获取响应码 + if (responseCode == HttpURLConnection.HTTP_OK) { // 状态码200表示成功 + return connection.getInputStream(); + } else { + // 处理错误情况,例如抛出异常或返回null等 + throw new RuntimeException("Failed : HTTP error code : " + responseCode); + } + } + } \ No newline at end of file