添加paddle 工具

main
xueqingkun
parent 5201605876
commit 59772a9b9a

@ -59,6 +59,11 @@
<artifactId>hutool-all</artifactId>
<version>5.8.26</version>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>servlet-api</artifactId>
<version>9.0.83</version>
</dependency>
</dependencies>
<build>

@ -1,11 +1,17 @@
package com.supervision.contoller;
import com.supervision.dto.R;
import com.supervision.dto.robot.RobotTalkDTO;
import com.supervision.service.IChatService;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@RestController
@RequestMapping("/chat")
@ -15,7 +21,19 @@ public class ChatController {
private final IChatService chatService;
@PostMapping("/talk")
public String talk(@RequestParam("file") MultipartFile multipartFile) {
return chatService.talk(multipartFile);
public R<RobotTalkDTO> talk(@RequestParam("file") MultipartFile multipartFile) {
RobotTalkDTO talk = chatService.talk(multipartFile);
return R.ok(talk);
}
@GetMapping("/talkList")
public List talkList(String sessionId) {
return new ArrayList();
}
@GetMapping("/getAudio")
public void getAudio(HttpServletResponse response,
@RequestParam("audioId")String audioId) throws IOException {
chatService.getAudio(response,audioId);
}
}

@ -0,0 +1,132 @@
package com.supervision.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.*;
/**
*
*
* @author qimaoyu
*/
@Data
public class R<T> implements Serializable {
private static final long serialVersionUID = 1L;
public static final String TOTAL_COUNT = "total";
public static final String RESULT_LIST = "result";
/**
*
*/
public static final int SUCCESS = 200;
/**
*
*/
public static final int FAIL = 500;
private int code;
private String msg;
private T data;
public static <T> R<T> ok() {
return restResult(null, SUCCESS, null);
}
public static <T> R<T> judgeResult(Boolean bo, String successMessage, String failMessage) {
if (bo) {
return restResult(null, SUCCESS, successMessage);
} else {
return restResult(null, FAIL, failMessage);
}
}
public static <T> R<T> okMsg(String msg) {
return restResult(null, SUCCESS, msg);
}
public static <T> R<T> ok(T data) {
return restResult(data, SUCCESS, null);
}
public static <T> R<T> ok(T data, String msg) {
return restResult(data, SUCCESS, msg);
}
public static <T> R<T> fail() {
return restResult(null, FAIL, null);
}
public static <T> R<T> fail(String msg) {
return restResult(null, FAIL, msg);
}
public static <T> R<T> fail(T data) {
return restResult(data, FAIL, null);
}
public static <T> R<T> fail(int code, String msg) {
return restResult(null, code, msg);
}
private static <T> R<T> restResult(T data, int code, String msg) {
R<T> apiResult = new R<>();
apiResult.setCode(code);
apiResult.setData(data);
apiResult.setMsg(msg);
return apiResult;
}
public static Map<String, Object> buildDataMap(List list) {
Map<String, Object> dataMap = new HashMap<>();
if (list == null) {
dataMap.put(TOTAL_COUNT, 0);
dataMap.put(RESULT_LIST, new ArrayList<>());
} else {
dataMap.put(TOTAL_COUNT, list.size());
dataMap.put(RESULT_LIST, list);
}
return dataMap;
}
public static Map<String, Object> buildDataMap(List list, Long total) {
Map<String, Object> dataMap = new HashMap<>();
dataMap.put(TOTAL_COUNT, total);
dataMap.put(RESULT_LIST, list);
return dataMap;
}
public static Map<String, Object> buildDataMap(Set list) {
Map<String, Object> dataMap = new HashMap<>();
if (list == null) {
dataMap.put(TOTAL_COUNT, 0);
dataMap.put(RESULT_LIST, new ArrayList<>());
} else {
dataMap.put(TOTAL_COUNT, list.size());
dataMap.put(RESULT_LIST, list);
}
return dataMap;
}
public static Map<String, Object> buildDataMap(Object object) {
if (object == null) {
return null;
}
List<Object> resultList = new ArrayList<>();
resultList.add(object);
Map<String, Object> dataMap = new HashMap<>();
dataMap.put(TOTAL_COUNT, resultList.size());
dataMap.put(RESULT_LIST, resultList);
return dataMap;
}
}

@ -0,0 +1,53 @@
package com.supervision.dto.robot;
import lombok.Builder;
import lombok.Data;
import java.io.File;
@Data
@Builder
public class AnswerInfo {
/**
* 1-2-3-4-5- 6- 7-
*/
private Integer contentType;
/**
*
*/
private String message;
/**
*
*/
private Integer audioLength;
/**
* id
*/
private String voiceBaseId;
/**
* base64
*/
private String voiceBase64;
/**
* id
*/
private String byteId;
/**
*
*/
private transient byte[] answerByte;
private transient File answerFile;
}

@ -0,0 +1,29 @@
package com.supervision.dto.robot;
import lombok.Builder;
import lombok.Data;
@Data
@Builder
public class AskInfo {
private String askId;
/**
* 1-2-3-4-5-
*/
private Integer contentType;
/**
*
*/
private String message;
/**
*
*/
private Long audioLength;
}

@ -0,0 +1,29 @@
package com.supervision.dto.robot;
import lombok.Builder;
import lombok.Data;
/**
* DTO
*/
@Data
@Builder
public class RobotTalkDTO {
/**
* id
*/
private String sessionId;
private AskInfo askInfo;
private AnswerInfo answerInfo;
/**
* true-false-
*/
private transient boolean doNext = true;
}

@ -1,8 +1,14 @@
package com.supervision.service;
import com.supervision.dto.robot.RobotTalkDTO;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
public interface IChatService {
String talk(MultipartFile file);
RobotTalkDTO talk(MultipartFile file);
void getAudio(HttpServletResponse response, String audioId) throws IOException;
}

@ -1,23 +1,27 @@
package com.supervision.service.impl;
import cn.hutool.core.codec.Base64;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.parser.Feature;
import com.supervision.dto.paddlespeech.res.TtsResultDTO;
import com.supervision.dto.robot.AnswerInfo;
import com.supervision.dto.robot.AskInfo;
import com.supervision.dto.robot.RobotTalkDTO;
import com.supervision.model.dify.DIFYChatReqInputVO;
import com.supervision.model.dify.DifyChatReqVO;
import com.supervision.model.dify.DifyChatResVO;
import com.supervision.service.IChatService;
import com.supervision.util.AsrUtil;
import com.supervision.util.DifyApiUtil;
import com.supervision.util.TtsUtil;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@Slf4j
@Service
@ -26,23 +30,42 @@ public class ChatServiceImpl implements IChatService {
@Resource
private DifyApiUtil difyApiUtil;
Map<String,String> voiceCache = new HashMap<>();
@Override
public String talk(MultipartFile file) {
public RobotTalkDTO talk(MultipartFile file) {
String talkResult = "";
RobotTalkDTO.RobotTalkDTOBuilder builder = RobotTalkDTO.builder().sessionId("111");
try {
byte[] bytes = file.getBytes();
DifyChatReqVO difyChatReqVO = new DifyChatReqVO();
difyChatReqVO.setUser("admin");
DIFYChatReqInputVO inputs = new DIFYChatReqInputVO();
inputs.setQuery(AsrUtil.asrTransformByBytes(file.getBytes()));
inputs.setQuery(AsrUtil.asrTransformByBytes(bytes));
String askUUid = UUID.randomUUID().toString();
builder.askInfo(AskInfo.builder().contentType(2).message(inputs.getQuery()).audioLength(100L).askId(askUUid).build());
voiceCache.put(askUUid,Base64.encode(bytes));
difyChatReqVO.setInputs(inputs);
String response = difyApiUtil.chat(difyChatReqVO);
log.info("response:{}", response);
TtsResultDTO ttsResultDTO = TtsUtil.ttsTransform(response);
talkResult = JSON.toJSONString(ttsResultDTO);
log.info("ttsResultDTO:{}", JSON.toJSONString(ttsResultDTO));
String voiceBaseId = UUID.randomUUID().toString();
builder.answerInfo(AnswerInfo.builder().contentType(2).message(response).voiceBaseId(voiceBaseId).voiceBase64(ttsResultDTO.getAudio()).build());
voiceCache.put(voiceBaseId,ttsResultDTO.getAudio());
} catch (IOException e) {
throw new RuntimeException(e);
}
return talkResult;
return builder.build();
}
@Override
public void getAudio(HttpServletResponse response, String audioId) throws IOException {
log.info("audioId:{}",audioId);
Base64.decodeToStream(voiceCache.get(audioId), response.getOutputStream(),false);
}
}

Loading…
Cancel
Save