手动传录音

This commit is contained in:
2026-04-15 23:37:12 +08:00
parent e0e4a60dba
commit 27a55bb0b6
2 changed files with 81 additions and 1 deletions

View File

@@ -8,6 +8,7 @@ import com.rj.common.AudioManagementConstants;
import com.rj.entity.*;
import com.rj.mapper.DeviceManagementMapper;
import com.rj.tenant.TenantContextHolder;
import com.rj.service.IAudioManagementService;
import com.rj.service.IFileUploadService;
import com.rj.service.MinIOService;
import com.rj.service.IYhyAudioUploadLogService;
@@ -57,6 +58,9 @@ public class AudioFileController {
@Autowired
private IFileUploadService fileUploadService;
@Autowired
private IAudioManagementService audioManagementService;
@Value("${app.audio.upload.path:uploads/audio}")
private String uploadPath;
@@ -371,11 +375,27 @@ public class AudioFileController {
Map<String, Object> result = new HashMap<>();
try {
// 先按 yhyV1Push 相同逻辑保存到本地目录优先savePath否则yihangyiUploadPath
String localFileName = determineFileName(file, new HashMap<>(), null);
String localFilePath = saveAudioFileToLocal(file, localFileName, new HashMap<>(), null);
Map<String, Object> uploadResult = fileUploadService.uploadAudioFileAndUpdateRecord(file, audioId);
if ((Boolean) uploadResult.get("success")) {
// 手动上传成功后,把本地落盘信息写回 audio_management 表
AudioManagement audioManagement = audioManagementService.getById(audioId);
if (audioManagement != null) {
audioManagement.setUpdateTime(TimeZoneUtils.now());
audioManagementService.updateById(audioManagement);
// 同步回写 audio_management_segments子表
saveOrUpdateManualUploadSegment(audioManagement, file, localFileName, localFilePath, uploadResult);
} else {
log.warn("手动上传后未找到录音记录无法回写本地路径audioId={}", audioId);
}
result.put("success", true);
result.put("message", "音频文件上传成功");
result.put("localFilePath", localFilePath);
result.put("data", uploadResult);
return ResponseEntity.ok(result);
} else {
@@ -391,6 +411,66 @@ public class AudioFileController {
return ResponseEntity.internalServerError().body(result);
}
}
/**
* 手动上传时,回写 audio_management_segments 子表。
* 若存在相同 parentId + audioFilePath 的记录则更新,否则新建一条分段记录。
*/
private void saveOrUpdateManualUploadSegment(AudioManagement audioManagement,
MultipartFile file,
String localFileName,
String localFilePath,
Map<String, Object> uploadResult) {
try {
LambdaQueryWrapper<AudioManagementSegments> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(AudioManagementSegments::getParentId, audioManagement.getId())
.eq(AudioManagementSegments::getAudioFilePath, localFilePath)
.last("LIMIT 1");
AudioManagementSegments segment = audioManagementSegmentsService.getOne(queryWrapper, false);
LocalDateTime now = TimeZoneUtils.now();
boolean isNew = false;
if (segment == null) {
isNew = true;
segment = new AudioManagementSegments();
segment.setId(UUID.randomUUID().toString());
segment.setParentId(audioManagement.getId());
segment.setTenantId(audioManagement.getTenantId());
segment.setRecordingName(audioManagement.getRecordingName());
segment.setSalesId(audioManagement.getSalesId());
segment.setSalesPhone(audioManagement.getSalesPhone());
segment.setSalesName(audioManagement.getSalesName());
segment.setDealershipId(audioManagement.getDealershipId());
segment.setDealershipName(audioManagement.getDealershipName());
segment.setScenario(audioManagement.getScenario());
segment.setChunkIndex("1");
segment.setCreateTime(now);
segment.setUploadStatus("已上传");
segment.setSyncStatus("未同步");
segment.setIsMerged(false);
}
segment.setAudioFilePath(localFilePath);
segment.setAudioFileOriginalName(file.getOriginalFilename());
segment.setAudioFileExtension(getFileExtension(localFileName));
segment.setAudioFileSize(file.getSize());
segment.setUploadTime(now);
segment.setRecordingTime(audioManagement.getRecordingTime() != null ? audioManagement.getRecordingTime() : now);
AudioManagement fileUrlObj = (AudioManagement)uploadResult.get("audioRecord");
if (fileUrlObj != null) {
segment.setAudioFileUrl(fileUrlObj.getAudioFileUrl());
}
if (isNew) {
audioManagementSegmentsService.save(segment);
} else {
audioManagementSegmentsService.updateById(segment);
}
} catch (Exception e) {
log.error("手动上传后回写audio_management_segments失败audioId={}", audioManagement.getId(), e);
}
}
/**
* 获取音频文件

View File

@@ -42,7 +42,7 @@ public class FileUploadServiceImpl implements IFileUploadService {
@Value("${app.audio.access.url:/api/audio/}")
private String accessUrl;
@Value("${app.audio.max.size:100MB}")
@Value("${app.audio.max.size:10MB}")
private String maxFileSize;
// 支持的音频格式