手动传录音
This commit is contained in:
@@ -8,6 +8,7 @@ import com.rj.common.AudioManagementConstants;
|
|||||||
import com.rj.entity.*;
|
import com.rj.entity.*;
|
||||||
import com.rj.mapper.DeviceManagementMapper;
|
import com.rj.mapper.DeviceManagementMapper;
|
||||||
import com.rj.tenant.TenantContextHolder;
|
import com.rj.tenant.TenantContextHolder;
|
||||||
|
import com.rj.service.IAudioManagementService;
|
||||||
import com.rj.service.IFileUploadService;
|
import com.rj.service.IFileUploadService;
|
||||||
import com.rj.service.MinIOService;
|
import com.rj.service.MinIOService;
|
||||||
import com.rj.service.IYhyAudioUploadLogService;
|
import com.rj.service.IYhyAudioUploadLogService;
|
||||||
@@ -57,6 +58,9 @@ public class AudioFileController {
|
|||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private IFileUploadService fileUploadService;
|
private IFileUploadService fileUploadService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IAudioManagementService audioManagementService;
|
||||||
|
|
||||||
@Value("${app.audio.upload.path:uploads/audio}")
|
@Value("${app.audio.upload.path:uploads/audio}")
|
||||||
private String uploadPath;
|
private String uploadPath;
|
||||||
@@ -371,11 +375,27 @@ public class AudioFileController {
|
|||||||
Map<String, Object> result = new HashMap<>();
|
Map<String, Object> result = new HashMap<>();
|
||||||
|
|
||||||
try {
|
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);
|
Map<String, Object> uploadResult = fileUploadService.uploadAudioFileAndUpdateRecord(file, audioId);
|
||||||
|
|
||||||
if ((Boolean) uploadResult.get("success")) {
|
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("success", true);
|
||||||
result.put("message", "音频文件上传成功");
|
result.put("message", "音频文件上传成功");
|
||||||
|
result.put("localFilePath", localFilePath);
|
||||||
result.put("data", uploadResult);
|
result.put("data", uploadResult);
|
||||||
return ResponseEntity.ok(result);
|
return ResponseEntity.ok(result);
|
||||||
} else {
|
} else {
|
||||||
@@ -391,6 +411,66 @@ public class AudioFileController {
|
|||||||
return ResponseEntity.internalServerError().body(result);
|
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/}")
|
@Value("${app.audio.access.url:/api/audio/}")
|
||||||
private String accessUrl;
|
private String accessUrl;
|
||||||
|
|
||||||
@Value("${app.audio.max.size:100MB}")
|
@Value("${app.audio.max.size:10MB}")
|
||||||
private String maxFileSize;
|
private String maxFileSize;
|
||||||
|
|
||||||
// 支持的音频格式
|
// 支持的音频格式
|
||||||
|
|||||||
Reference in New Issue
Block a user