完成在小程序端的功能

This commit is contained in:
zhonghua1
2026-01-05 21:42:48 +08:00
parent 8f35c605d1
commit 34cd6275b7
4 changed files with 44 additions and 9 deletions

View File

@@ -8,6 +8,7 @@ import com.rj.dto.AsrResponse;
import com.rj.entity.AudioManagementSegments;
import com.rj.service.IAudioManagementSegmentsService;
import com.rj.service.ITtsRequestLogService;
import com.rj.tenant.TenantContextHolder;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -236,7 +237,7 @@ public class AudioManagementSegmentsController {
LambdaUpdateWrapper<AudioManagementSegments> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(AudioManagementSegments::getId, id);
boolean success = audioManagementSegmentsService.update(updateEntity, updateWrapper);
boolean success = audioManagementSegmentsService.updateNoTenant(updateEntity, updateWrapper);
if (!success) {
result.put("success", false);
@@ -263,15 +264,29 @@ public class AudioManagementSegmentsController {
}
// TODO 2: 启用异步线程处理转文本
// 获取租户ID优先从segment对象获取如果没有则从当前线程的租户上下文获取
final String tenantId = segment.getTenantId() != null
? segment.getTenantId()
: TenantContextHolder.getTenantId();
final String finalPresignedUrl = presignedUrl;
final String segmentId = id;
final String audioFileName = segment.getAudioFileOriginalName();
CompletableFuture.runAsync(() -> {
try {
log.info("开始异步转文本处理ID: {}", segmentId);
// 在异步线程中设置租户上下文
if (tenantId != null && !tenantId.trim().isEmpty()) {
TenantContextHolder.setTenantId(tenantId);
log.info("异步线程中设置租户ID: {}, segmentId: {}", tenantId, segmentId);
} else {
log.warn("租户ID为空segmentId: {}", segmentId);
}
log.info("开始异步转文本处理ID: {}, tenantId: {}", segmentId, tenantId);
AsrRequest asrRequest = new AsrRequest();
asrRequest.setAudioUrl(finalPresignedUrl);
asrRequest.setAudioName(segment.getAudioFileOriginalName());
asrRequest.setAudioName(audioFileName);
asrRequest.setModel("paraformer-v2"); // 使用默认模型
asrRequest.setFormat("wav"); // 默认格式
asrRequest.setSampleRate(16000); // 默认采样率
@@ -290,19 +305,26 @@ public class AudioManagementSegmentsController {
LambdaUpdateWrapper<AudioManagementSegments> textUpdateWrapper = new LambdaUpdateWrapper<>();
textUpdateWrapper.eq(AudioManagementSegments::getId, segmentId);
// 使用正常的update方法因为已经设置了租户上下文
boolean updateSuccess = audioManagementSegmentsService.update(textUpdateEntity, textUpdateWrapper);
if (updateSuccess) {
log.info("转文本结果保存成功ID: {}, 文本长度: {}", segmentId, asrResponse.getText().length());
log.info("转文本结果保存成功ID: {}, tenantId: {}, 文本长度: {}", segmentId, tenantId, asrResponse.getText().length());
} else {
log.error("转文本结果保存失败ID: {}", segmentId);
log.error("转文本结果保存失败ID: {}, tenantId: {}", segmentId, tenantId);
}
} else {
String errorMsg = asrResponse != null ? asrResponse.getMessage() : "ASR响应为空";
log.error("转文本失败ID: {}, error: {}", segmentId, errorMsg);
log.error("转文本失败ID: {}, tenantId: {}, error: {}", segmentId, tenantId, errorMsg);
}
} catch (Exception e) {
log.error("异步转文本处理异常ID: {}, error: {}", segmentId, e.getMessage(), e);
log.error("异步转文本处理异常ID: {}, tenantId: {}, error: {}", segmentId, tenantId, e.getMessage(), e);
} finally {
// 清理租户上下文,防止线程复用导致租户串用
TenantContextHolder.clear();
log.debug("清理异步线程租户上下文segmentId: {}", segmentId);
}
});

View File

@@ -1,5 +1,7 @@
package com.rj.service;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.rj.entity.AudioManagementSegments;
@@ -12,5 +14,8 @@ import com.rj.entity.AudioManagementSegments;
*/
public interface IAudioManagementSegmentsService extends IService<AudioManagementSegments> {
@InterceptorIgnore(tenantLine = "true") // 禁用多租户拦截
public boolean updateNoTenant(AudioManagementSegments entity,
LambdaUpdateWrapper<AudioManagementSegments> updateWrapper) ;
}

View File

@@ -1,5 +1,7 @@
package com.rj.service.impl;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.rj.entity.AudioManagementSegments;
import com.rj.mapper.AudioManagementSegmentsMapper;
@@ -17,6 +19,12 @@ import org.springframework.stereotype.Service;
public class AudioManagementSegmentsServiceImpl
extends ServiceImpl<AudioManagementSegmentsMapper, AudioManagementSegments>
implements IAudioManagementSegmentsService {
@Override
@InterceptorIgnore(tenantLine = "true") // 禁用多租户拦截
public boolean updateNoTenant(AudioManagementSegments entity,
LambdaUpdateWrapper<AudioManagementSegments> updateWrapper) {
return super.update(entity, updateWrapper);
}
}

View File

@@ -383,7 +383,7 @@ public class TtsRequestLogServiceImpl implements ITtsRequestLogService {
try {
// 从transcriptionUrl下载识别结果
String transcriptionResult = downloadTranscriptionResult(taskResult.getTranscriptionUrl());
log.info("transcriptionResult: {}" , transcriptionResult);
// log.info("transcriptionResult: {}" , transcriptionResult);
if (transcriptionResult != null && !transcriptionResult.trim().isEmpty()) {
// 解析transcription结果JSON