|
|
@@ -320,44 +320,54 @@ public class DoubaoServiceImpl implements DoubaoService {
|
|
|
return new ArrayList<>();
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- public List<SpeakingAIDialogue.DialogueEntry> deleteChatHistory(Long userId, Long assignmentId, String userQuestion, Integer voiceCode) {
|
|
|
- // 构建查询条件,根据 userId 和 assignmentId 查找对话记录
|
|
|
- Query query = Query.query(Criteria.where("userId").is(userId).and("assignmentId").is(assignmentId));
|
|
|
- // 执行删除操作,获取删除的结果
|
|
|
- SpeakingAIDialogue result = mongoTemplate.findAndRemove(query, SpeakingAIDialogue.class);
|
|
|
- // 如果删除操作返回的结果不为空,说明成功删除,返回 true;否则返回 false
|
|
|
- return startChat(userId, assignmentId, userQuestion, voiceCode);
|
|
|
- }
|
|
|
-
|
|
|
- public CompletableFuture<String> saveSigment(Long userId, Long assignmentId, MultipartFile file, Double duration) {
|
|
|
- return CompletableFuture.supplyAsync(() -> {
|
|
|
+ public String saveSigment(Long userId, Long assignmentId, MultipartFile file, Double duration) {
|
|
|
+ // 1. 立即返回响应
|
|
|
+ String immediateResponse = "请求已接收,系统正在处理您的文件";
|
|
|
+ // 2. 在后台异步执行上传和保存操作
|
|
|
+ CompletableFuture.runAsync(() -> {
|
|
|
try {
|
|
|
- // 第一步:上传文件
|
|
|
+ // 上传文件
|
|
|
String filePath = "uploads/" + file.getOriginalFilename();
|
|
|
String url = ossUtil.uploadFile(file.getInputStream(), filePath);
|
|
|
log.info("文件上传成功,URL: {}", url);
|
|
|
- Query query = new Query(Criteria.where("userId").is(userId).and("assignmentId").is(assignmentId));
|
|
|
- // 查询是否存在对应的文档
|
|
|
+
|
|
|
+ // 保存到数据库
|
|
|
+ Query query = new Query(Criteria.where("userId").is(userId)
|
|
|
+ .and("assignmentId").is(assignmentId));
|
|
|
SpeakingAIDialogue dialogue = mongoTemplate.findOne(query, SpeakingAIDialogue.class);
|
|
|
+
|
|
|
if (dialogue == null) {
|
|
|
- throw new MyException(HttpStatus.BAD_REQUEST.value(), HttpStatus.BAD_REQUEST.getReasonPhrase() + ":" + "不存在相应记录");
|
|
|
+ log.error("不存在相应记录 - userId: {}, assignmentId: {}", userId, assignmentId);
|
|
|
+ return;
|
|
|
}
|
|
|
- // 如果文档存在,更新 audioSigment 列表
|
|
|
- Update update = new Update().push("audioSigment", url).push("audioDuration", duration);
|
|
|
+ Update update = new Update()
|
|
|
+ .push("audioSigment", url)
|
|
|
+ .push("audioDuration", duration);
|
|
|
mongoTemplate.updateFirst(query, update, SpeakingAIDialogue.class);
|
|
|
- System.out.println(dialogue);
|
|
|
- return url;
|
|
|
- }catch (IOException e){
|
|
|
- throw new MyException(500 ,e.getMessage()+ " 文件上传失败");
|
|
|
+
|
|
|
+ log.info("后台处理完成 - userId: {}, assignmentId: {}, URL: {}", userId, assignmentId, url);
|
|
|
+ } catch (IOException e) {
|
|
|
+ log.error("后台处理失败 - userId: {}, assignmentId: {}", userId, assignmentId, e);
|
|
|
}
|
|
|
- }).completeOnTimeout(
|
|
|
- "操作超时,请稍后再试",
|
|
|
- 500, // 超时时间(秒)
|
|
|
- TimeUnit.SECONDS
|
|
|
- );
|
|
|
+ }).exceptionally(ex -> {
|
|
|
+ log.error("后台任务执行异常", ex);
|
|
|
+ return null;
|
|
|
+ });
|
|
|
+ return immediateResponse;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<SpeakingAIDialogue.DialogueEntry> deleteChatHistory(Long userId, Long assignmentId, String userQuestion, Integer voiceCode) {
|
|
|
+ // 构建查询条件,根据 userId 和 assignmentId 查找对话记录
|
|
|
+ Query query = Query.query(Criteria.where("userId").is(userId).and("assignmentId").is(assignmentId));
|
|
|
+ // 执行删除操作,获取删除的结果
|
|
|
+ SpeakingAIDialogue result = mongoTemplate.findAndRemove(query, SpeakingAIDialogue.class);
|
|
|
+ // 如果删除操作返回的结果不为空,说明成功删除,返回 true;否则返回 false
|
|
|
+ return startChat(userId, assignmentId, userQuestion, voiceCode);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
@Override
|
|
|
public List<String> getSigment(Long userId, Long assignmentId) {
|
|
|
Query query = new Query(Criteria.where("userId").is(userId).and("assignmentId").is(assignmentId));
|