录音管理功能联调

This commit is contained in:
spllzh
2025-10-25 23:07:07 +08:00
parent 6801f06db5
commit c14476dc92
34 changed files with 1254 additions and 58 deletions

View File

@@ -0,0 +1,16 @@
package com.rj.service;
import com.rj.entity.CommunicationRecord;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 沟通记录表 服务类
* </p>
*
* @author 系统生成
* @since 2025-01-30
*/
public interface ICommunicationRecordService extends IService<CommunicationRecord> {
}

View File

@@ -49,4 +49,12 @@ public interface IFileUploadService {
* @return 是否存在
*/
boolean audioFileExists(String audioId);
/**
* 使用MinIO上传音频文件
* @param file 音频文件
* @param audioId 录音ID
* @return 上传结果
*/
Map<String, Object> uploadAudioFileToMinIO(MultipartFile file, String audioId) throws IOException;
}

View File

@@ -110,6 +110,13 @@ public interface ICustomerProfileAnalysisService extends IService<CustomerProfil

View File

@@ -145,6 +145,13 @@ public class CustomerProfileAnalysisServiceImpl extends ServiceImpl<CustomerProf

View File

@@ -0,0 +1,20 @@
package com.rj.service.impl;
import com.rj.entity.CommunicationRecord;
import com.rj.mapper.CommunicationRecordMapper;
import com.rj.service.ICommunicationRecordService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 沟通记录表 服务实现类
* </p>
*
* @author 系统生成
* @since 2025-01-30
*/
@Service
public class CommunicationRecordServiceImpl extends ServiceImpl<CommunicationRecordMapper, CommunicationRecord> implements ICommunicationRecordService {
}

View File

@@ -3,6 +3,7 @@ package com.rj.service.impl;
import com.rj.entity.AudioManagement;
import com.rj.service.IFileUploadService;
import com.rj.service.IAudioManagementService;
import com.rj.service.MinIOService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -32,6 +33,9 @@ public class FileUploadServiceImpl implements IFileUploadService {
@Autowired
private IAudioManagementService audioManagementService;
@Autowired
private MinIOService minIOService;
@Value("${app.audio.upload.path:uploads/audio}")
private String uploadPath;
@@ -74,31 +78,39 @@ public class FileUploadServiceImpl implements IFileUploadService {
return result;
}
// 创建上传目录
Path uploadDir = Paths.get(uploadPath);
if (!Files.exists(uploadDir)) {
Files.createDirectories(uploadDir);
// 直接上传到MinIO不保存到本地
log.info("开始上传文件到MinIO...");
String fileUrl = minIOService.uploadFile(file);
log.info("文件上传成功URL: {}", fileUrl);
// 获取录音记录并更新
AudioManagement audio = audioManagementService.getById(audioId);
if (audio != null) {
// 更新录音记录的文件信息
String fileExtension = getFileExtension(originalFilename);
audio.setAudioFileUrl(fileUrl);
audio.setAudioFileSize(file.getSize());
audio.setAudioFileOriginalName(originalFilename);
audio.setAudioFileExtension(fileExtension);
audio.setUploadTime(java.time.LocalDateTime.now());
audio.setUpdateTime(java.time.LocalDateTime.now());
// 保存更新
audioManagementService.updateById(audio);
log.info("录音记录更新成功audioId={}", audioId);
} else {
log.warn("未找到对应的录音记录audioId={}", audioId);
}
// 生成文件名
String fileExtension = getFileExtension(originalFilename);
String fileName = audioId+"_"+UUID.randomUUID() + "." + fileExtension;
Path filePath = uploadDir.resolve(fileName);
// 保存文件
Files.copy(file.getInputStream(), filePath);
// 生成访问URL
String fileUrl = accessUrl + fileName;
result.put("success", true);
result.put("message", "文件上传成功");
result.put("fileName", fileName);
result.put("fileUrl", fileUrl);
result.put("fileSize", file.getSize());
result.put("originalName", originalFilename);
log.info("音频文件上传成功audioId={}, fileName={}, size={}", audioId, fileName, file.getSize());
log.info("音频文件上传成功audioId={}, minioUrl={}, size={}", audioId, fileUrl, file.getSize());
} catch (Exception e) {
log.error("音频文件上传失败audioId={}, error={}", audioId, e.getMessage(), e);
@@ -240,6 +252,55 @@ public class FileUploadServiceImpl implements IFileUploadService {
return files != null && files.length > 0;
}
@Override
public Map<String, Object> uploadAudioFileToMinIO(MultipartFile file, String audioId) throws IOException {
Map<String, Object> result = new HashMap<>();
try {
// 验证文件
if (file == null || file.isEmpty()) {
result.put("success", false);
result.put("message", "文件不能为空");
return result;
}
// 验证文件大小
long maxSize = parseFileSize(maxFileSize);
if (file.getSize() > maxSize) {
result.put("success", false);
result.put("message", "文件大小超过限制,最大允许 " + maxFileSize);
return result;
}
// 验证文件格式
String originalFilename = file.getOriginalFilename();
if (!isValidAudioFormat(originalFilename)) {
result.put("success", false);
result.put("message", "不支持的音频格式,支持的格式:" + String.join(", ", SUPPORTED_AUDIO_FORMATS));
return result;
}
// 使用MinIO上传文件
String minioUrl = minIOService.uploadFile(file);
result.put("success", true);
result.put("message", "文件上传到MinIO成功");
result.put("fileUrl", minioUrl);
result.put("fileSize", file.getSize());
result.put("originalName", originalFilename);
result.put("audioId", audioId);
log.info("音频文件上传到MinIO成功audioId={}, minioUrl={}, size={}", audioId, minioUrl, file.getSize());
} catch (Exception e) {
log.error("音频文件上传到MinIO失败audioId={}, error={}", audioId, e.getMessage(), e);
result.put("success", false);
result.put("message", "文件上传到MinIO失败" + e.getMessage());
}
return result;
}
/**
* 验证音频文件格式
*/

View File

@@ -117,6 +117,13 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements IM

View File

@@ -117,6 +117,13 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IR

View File

@@ -117,6 +117,13 @@ public class UserRoleServiceImpl extends ServiceImpl<UserRoleMapper, UserRole> i