手动传录音
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取音频文件
|
||||
|
||||
@@ -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;
|
||||
|
||||
// 支持的音频格式
|
||||
|
||||
Reference in New Issue
Block a user