diff --git a/src/main/java/com/rj/common/DataEnrichmentUtil.java b/src/main/java/com/rj/common/DataEnrichmentUtil.java
index 34bcfa1..2666574 100644
--- a/src/main/java/com/rj/common/DataEnrichmentUtil.java
+++ b/src/main/java/com/rj/common/DataEnrichmentUtil.java
@@ -299,6 +299,26 @@ public class DataEnrichmentUtil {
return saleNameMap;
}
+ /**
+ * 批量获取销售名称映射(使用ServiceManager)
+ */
+ public Map getSalesIdPhoneMap(Collection salesIds) {
+
+ // 批量获取 销售信息
+ Map salePhoneMap;
+ if (!salesIds.isEmpty()) {
+ LambdaQueryWrapper salesQueryWrapper = new LambdaQueryWrapper<>();
+ salesQueryWrapper.in(SalesManagement::getId, salesIds);
+ List sales = serviceManager.getSalesManagementService().list(salesQueryWrapper);
+ salePhoneMap = sales.stream()
+ .collect(Collectors.toMap(SalesManagement::getId, SalesManagement::getLoginAccount));
+ } else {
+ salePhoneMap = new HashMap<>();
+ }
+
+
+ return salePhoneMap;
+ }
/**
* 批量获取客户名称映射(使用ServiceManager)
*/
diff --git a/src/main/java/com/rj/common/PasswordUtil.java b/src/main/java/com/rj/common/PasswordUtil.java
index 18b2f62..83400ff 100644
--- a/src/main/java/com/rj/common/PasswordUtil.java
+++ b/src/main/java/com/rj/common/PasswordUtil.java
@@ -182,6 +182,13 @@ public class PasswordUtil {
+
+
+
+
+
+
+
diff --git a/src/main/java/com/rj/common/Result.java b/src/main/java/com/rj/common/Result.java
index 22e6079..9967238 100644
--- a/src/main/java/com/rj/common/Result.java
+++ b/src/main/java/com/rj/common/Result.java
@@ -4,7 +4,7 @@ package com.rj.common;
/**
* 返回值的标准格式
*/
-public class Result {
+public class Result {
/**
* 状态码
*/
@@ -22,29 +22,29 @@ public class Result {
/**
* 成功 不返回数据
*/
- public static Result ok(){
- return new Result();
+ public static Result ok(){
+ return new Result();
}
/**
* 失败返回自定义消息
*/
- public static Result error(String msg){
- return new Result(-1,msg);
+ public static Result error(String msg){
+ return new Result(-1,msg);
}
/**
* 失败返回系统异常消息
*/
- public static Result error(){
- return new Result(-1,"系统异常");
+ public static Result error(){
+ return new Result(-1,"系统异常");
}
/**
* 成功返回数据
*/
- public static Result ok(Object data){
- return new Result(data);
+ public static Result ok(Object data){
+ return new Result(data);
}
public Result(int code, String msg) {
diff --git a/src/main/java/com/rj/common/ServiceManager.java b/src/main/java/com/rj/common/ServiceManager.java
index 7c941d9..f7dabbd 100644
--- a/src/main/java/com/rj/common/ServiceManager.java
+++ b/src/main/java/com/rj/common/ServiceManager.java
@@ -166,6 +166,13 @@ public class ServiceManager {
+
+
+
+
+
+
+
diff --git a/src/main/java/com/rj/controller/AudioManagementController.java b/src/main/java/com/rj/controller/AudioManagementController.java
index 82d1150..5002a77 100644
--- a/src/main/java/com/rj/controller/AudioManagementController.java
+++ b/src/main/java/com/rj/controller/AudioManagementController.java
@@ -4,10 +4,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.rj.common.DataEnrichmentUtil;
import com.rj.entity.AudioManagement;
-import com.rj.entity.CustomerManagement;
-import com.rj.entity.SalesManagement;
import com.rj.service.IAudioManagementService;
import com.rj.service.IFileUploadService;
+import com.rj.service.MinIOService;
+import com.rj.service.ITtsRequestLogService;
+import com.rj.dto.AsrRequest;
+import com.rj.dto.AsrResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -15,9 +17,12 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import java.io.InputStream;
import java.math.BigDecimal;
import java.time.LocalDateTime;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -44,28 +49,140 @@ public class AudioManagementController {
@Autowired
private IFileUploadService fileUploadService;
+ @Autowired
+ private MinIOService minIOService;
+
+ @Autowired
+ private ITtsRequestLogService ttsRequestLogService;
+
/**
* 新增录音
*/
- @PostMapping("/add")
+ @PostMapping("/uploadAndSubmit")
@Operation(summary = "新增录音", description = "添加新的录音信息")
public ResponseEntity
+ *
+ * @author 系统生成
+ * @since 2025-01-30
+ */
+@Service
+public class CommunicationRecordServiceImpl extends ServiceImpl implements ICommunicationRecordService {
+
+}
diff --git a/src/main/java/com/rj/service/impl/FileUploadServiceImpl.java b/src/main/java/com/rj/service/impl/FileUploadServiceImpl.java
index db86f53..5f7a4e7 100644
--- a/src/main/java/com/rj/service/impl/FileUploadServiceImpl.java
+++ b/src/main/java/com/rj/service/impl/FileUploadServiceImpl.java
@@ -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 uploadAudioFileToMinIO(MultipartFile file, String audioId) throws IOException {
+ Map 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;
+ }
+
/**
* 验证音频文件格式
*/
diff --git a/src/main/java/com/rj/service/sys/impl/MenuServiceImpl.java b/src/main/java/com/rj/service/sys/impl/MenuServiceImpl.java
index 3ed0ada..880c28e 100644
--- a/src/main/java/com/rj/service/sys/impl/MenuServiceImpl.java
+++ b/src/main/java/com/rj/service/sys/impl/MenuServiceImpl.java
@@ -117,6 +117,13 @@ public class MenuServiceImpl extends ServiceImpl implements IM
+
+
+
+
+
+
+
diff --git a/src/main/java/com/rj/service/sys/impl/RoleServiceImpl.java b/src/main/java/com/rj/service/sys/impl/RoleServiceImpl.java
index 63087ce..9071bd8 100644
--- a/src/main/java/com/rj/service/sys/impl/RoleServiceImpl.java
+++ b/src/main/java/com/rj/service/sys/impl/RoleServiceImpl.java
@@ -117,6 +117,13 @@ public class RoleServiceImpl extends ServiceImpl implements IR
+
+
+
+
+
+
+
diff --git a/src/main/java/com/rj/service/sys/impl/UserRoleServiceImpl.java b/src/main/java/com/rj/service/sys/impl/UserRoleServiceImpl.java
index 3bf125e..6695022 100644
--- a/src/main/java/com/rj/service/sys/impl/UserRoleServiceImpl.java
+++ b/src/main/java/com/rj/service/sys/impl/UserRoleServiceImpl.java
@@ -117,6 +117,13 @@ public class UserRoleServiceImpl extends ServiceImpl i
+
+
+
+
+
+
+
diff --git a/src/main/resources/application-audio.yml b/src/main/resources/application-audio.yml
index 560393f..38086e1 100644
--- a/src/main/resources/application-audio.yml
+++ b/src/main/resources/application-audio.yml
@@ -126,6 +126,13 @@ spring:
+
+
+
+
+
+
+
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index a932d98..4060fed 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -103,6 +103,10 @@ spring:
logic-delete-field: deleted
logic-delete-value: 1
logic-not-delete-value: 0
+ jackson:
+ deserialization:
+ # 忽略不能解析的字段。当前端传过来的字段,后端不能解析时直接抛弃。
+ fail-on-unknown-properties: false
knife4j:
diff --git a/src/main/resources/mapper/AudioManagementStatisticsMapper.xml b/src/main/resources/mapper/AudioManagementStatisticsMapper.xml
index ed02d8a..a3bb163 100644
--- a/src/main/resources/mapper/AudioManagementStatisticsMapper.xml
+++ b/src/main/resources/mapper/AudioManagementStatisticsMapper.xml
@@ -103,6 +103,13 @@
+
+
+
+
+
+
+
diff --git a/src/main/resources/mapper/CommunicationRecordMapper.xml b/src/main/resources/mapper/CommunicationRecordMapper.xml
new file mode 100644
index 0000000..38073f8
--- /dev/null
+++ b/src/main/resources/mapper/CommunicationRecordMapper.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ id, customer_name, customer_phone, customer_id, communication_type,
+ communication_time, communication_content, communication_result,
+ owner_name, owner_phone, todo_suggestion, create_time, update_time, status
+
+
+
diff --git a/src/main/resources/static/tts-demo.html b/src/main/resources/static/tts-demo.html
index 8660294..efb1294 100644
--- a/src/main/resources/static/tts-demo.html
+++ b/src/main/resources/static/tts-demo.html
@@ -302,6 +302,13 @@
+
+
+
+
+
+
+
diff --git a/src/test/java/com/rj/service/FaceDetectImageCountTest.java b/src/test/java/com/rj/service/FaceDetectImageCountTest.java
index a198473..64a51b9 100644
--- a/src/test/java/com/rj/service/FaceDetectImageCountTest.java
+++ b/src/test/java/com/rj/service/FaceDetectImageCountTest.java
@@ -240,6 +240,13 @@ public class FaceDetectImageCountTest {
+
+
+
+
+
+
+
diff --git a/src/test/java/com/rj/service/TtsRequestLogShortUrlTest.java b/src/test/java/com/rj/service/TtsRequestLogShortUrlTest.java
index 9c778a7..c67b9d6 100644
--- a/src/test/java/com/rj/service/TtsRequestLogShortUrlTest.java
+++ b/src/test/java/com/rj/service/TtsRequestLogShortUrlTest.java
@@ -181,6 +181,13 @@ public class TtsRequestLogShortUrlTest {
+
+
+
+
+
+
+
diff --git a/src/test/java/com/rj/service/VideoSynthesisTempUrlTest.java b/src/test/java/com/rj/service/VideoSynthesisTempUrlTest.java
index 6f5f8b0..da5d05d 100644
--- a/src/test/java/com/rj/service/VideoSynthesisTempUrlTest.java
+++ b/src/test/java/com/rj/service/VideoSynthesisTempUrlTest.java
@@ -159,6 +159,13 @@ public class VideoSynthesisTempUrlTest {
+
+
+
+
+
+
+
diff --git a/src/test/java/com/rj/service/VideoSynthesisVideoNameTest.java b/src/test/java/com/rj/service/VideoSynthesisVideoNameTest.java
index 896f251..4e42413 100644
--- a/src/test/java/com/rj/service/VideoSynthesisVideoNameTest.java
+++ b/src/test/java/com/rj/service/VideoSynthesisVideoNameTest.java
@@ -134,6 +134,13 @@ public class VideoSynthesisVideoNameTest {
+
+
+
+
+
+
+