Commit 59331b17 by zhangxingmin

push

parent b61f34a1
...@@ -40,12 +40,11 @@ public class ApiRecordingTaskController implements ApiRecordingTaskFeignClient { ...@@ -40,12 +40,11 @@ public class ApiRecordingTaskController implements ApiRecordingTaskFeignClient {
/** /**
* 停止录制并上传视频 * 停止录制并上传视频
* @param taskId * @param taskId 录制任务ID
* @param file
* @return * @return
*/ */
public Result<Map<String, String>> stopRecording(String taskId,MultipartFile file) { public Result<Map<String, String>> stopRecording(String taskId) {
return apiRecordingTaskService.stopRecording(taskId,file); return apiRecordingTaskService.stopRecording(taskId);
} }
/** /**
......
...@@ -4,7 +4,6 @@ package com.yd.communication.api.service; ...@@ -4,7 +4,6 @@ package com.yd.communication.api.service;
import com.yd.common.result.Result; import com.yd.common.result.Result;
import com.yd.communication.feign.request.recording.ApiStartRecordingRequest; import com.yd.communication.feign.request.recording.ApiStartRecordingRequest;
import com.yd.communication.feign.response.recording.ApiQueryRecordingResponse; import com.yd.communication.feign.response.recording.ApiQueryRecordingResponse;
import org.springframework.web.multipart.MultipartFile;
import java.util.Map; import java.util.Map;
...@@ -12,7 +11,7 @@ public interface ApiRecordingTaskService { ...@@ -12,7 +11,7 @@ public interface ApiRecordingTaskService {
Result<String> startRecording(ApiStartRecordingRequest request); Result<String> startRecording(ApiStartRecordingRequest request);
Result<Map<String, String>> stopRecording(String taskId, MultipartFile file); Result<Map<String, String>> stopRecording(String taskId);
Result<ApiQueryRecordingResponse> queryRecording(String taskId); Result<ApiQueryRecordingResponse> queryRecording(String taskId);
} }
package com.yd.communication.api.service.impl; package com.yd.communication.api.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yd.common.enums.CommonEnum; import com.yd.common.enums.CommonEnum;
import com.yd.common.exception.BusinessException; import com.yd.common.exception.BusinessException;
import com.yd.common.result.Result; import com.yd.common.result.Result;
...@@ -13,15 +12,12 @@ import com.yd.communication.feign.response.recording.ApiQueryRecordingResponse; ...@@ -13,15 +12,12 @@ import com.yd.communication.feign.response.recording.ApiQueryRecordingResponse;
import com.yd.communication.service.model.RecordingTask; import com.yd.communication.service.model.RecordingTask;
import com.yd.communication.service.service.ICoOperationLogService; import com.yd.communication.service.service.ICoOperationLogService;
import com.yd.communication.service.service.IRecordingTaskService; import com.yd.communication.service.service.IRecordingTaskService;
import com.yd.oss.feign.client.ApiOssFeignClient; import com.yd.oss.feign.client.ApiChunkedUploadContextFeignClient;
import com.yd.oss.feign.request.ApiUploadFileRequest;
import com.yd.oss.feign.response.ApiUploadResponse;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.HashMap; import java.util.HashMap;
...@@ -36,14 +32,11 @@ public class ApiRecordingTaskServiceImpl implements ApiRecordingTaskService { ...@@ -36,14 +32,11 @@ public class ApiRecordingTaskServiceImpl implements ApiRecordingTaskService {
private IRecordingTaskService iRecordingTaskService; private IRecordingTaskService iRecordingTaskService;
@Resource @Resource
private ApiOssFeignClient apiOssFeignClient; private ApiChunkedUploadContextFeignClient contextFeignClient;
@Resource @Resource
private ICoOperationLogService operationLogService; private ICoOperationLogService operationLogService;
@Resource
private ObjectMapper objectMapper; // 注入 Jackson ObjectMapper
/** /**
* 开始录制 * 开始录制
* @param request * @param request
...@@ -58,9 +51,6 @@ public class ApiRecordingTaskServiceImpl implements ApiRecordingTaskService { ...@@ -58,9 +51,6 @@ public class ApiRecordingTaskServiceImpl implements ApiRecordingTaskService {
LambdaQueryWrapper<RecordingTask> checkWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<RecordingTask> checkWrapper = new LambdaQueryWrapper<>();
checkWrapper.eq(RecordingTask::getBizId, request.getBizId()) checkWrapper.eq(RecordingTask::getBizId, request.getBizId())
.eq(RecordingTask::getStatus, "2"); .eq(RecordingTask::getStatus, "2");
// if (iRecordingTaskService.count(checkWrapper) > 0) {
// throw new BusinessException("该会话已有进行中的录制任务");
// }
RecordingTask task = new RecordingTask(); RecordingTask task = new RecordingTask();
task.setRecordingTaskBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_RECORDING_TASK.getCode())); task.setRecordingTaskBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_RECORDING_TASK.getCode()));
...@@ -68,7 +58,6 @@ public class ApiRecordingTaskServiceImpl implements ApiRecordingTaskService { ...@@ -68,7 +58,6 @@ public class ApiRecordingTaskServiceImpl implements ApiRecordingTaskService {
task.setTaskId(UUID.randomUUID().toString().replace("-", "")); task.setTaskId(UUID.randomUUID().toString().replace("-", ""));
task.setBizType(request.getBizType()); task.setBizType(request.getBizType());
task.setBizId(request.getBizId()); task.setBizId(request.getBizId());
// task.setRoomId(request.getRoomId());
task.setStatus("2"); // 录制中 task.setStatus("2"); // 录制中
task.setStartTime(LocalDateTime.now()); task.setStartTime(LocalDateTime.now());
task.setCreatorId("system"); task.setCreatorId("system");
...@@ -94,16 +83,15 @@ public class ApiRecordingTaskServiceImpl implements ApiRecordingTaskService { ...@@ -94,16 +83,15 @@ public class ApiRecordingTaskServiceImpl implements ApiRecordingTaskService {
/** /**
* 停止录制并上传视频文件到 OSS * 停止录制并上传视频文件到 OSS
* @param taskId * @param taskId 录制任务ID
* @param file
* @return * @return
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Result<Map<String, String>> stopRecording(String taskId, MultipartFile file) { public Result<Map<String, String>> stopRecording(String taskId) {
log.info("停止录制并上传文件: taskId={}, fileName={}", taskId, file.getOriginalFilename()); log.info("停止录制并上传文件: taskId={}", taskId);
// 1. 查询录制任务 // 查询录制任务
LambdaQueryWrapper<RecordingTask> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<RecordingTask> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(RecordingTask::getTaskId, taskId); wrapper.eq(RecordingTask::getTaskId, taskId);
RecordingTask task = iRecordingTaskService.getOne(wrapper); RecordingTask task = iRecordingTaskService.getOne(wrapper);
...@@ -111,64 +99,53 @@ public class ApiRecordingTaskServiceImpl implements ApiRecordingTaskService { ...@@ -111,64 +99,53 @@ public class ApiRecordingTaskServiceImpl implements ApiRecordingTaskService {
throw new BusinessException("录制任务不存在,taskId=" + taskId); throw new BusinessException("录制任务不存在,taskId=" + taskId);
} }
// 2. 构造 OSS 上传请求参数 // 远程调用 OSS 微服务,完成分片上传(合并)
ApiUploadFileRequest uploadRequest = new ApiUploadFileRequest(); String projectBizId = "";
// uploadRequest.setTenantBizId(TenantEnum.YD.getTenantBizId()); Result<Map<String, Object>> finishResult = contextFeignClient.finishChunks(taskId, projectBizId);
// uploadRequest.setProjectBizId(ProjectEnum.SFP_CLIENT.getProjectBizId()); if (finishResult == null || finishResult.getCode() != 200) {
uploadRequest.setObjectBizId(task.getBizId()); String errorMsg = finishResult != null ? finishResult.getMsg() : "OSS服务返回空";
uploadRequest.setObjectType("recording_task"); log.error("完成分片上传失败: {}", errorMsg);
uploadRequest.setObjectTableName("recording_task"); throw new BusinessException("录制文件上传失败: " + errorMsg);
// 3. 将 uploadRequest 转为 JSON 字符串
String requestJson;
try {
requestJson = objectMapper.writeValueAsString(uploadRequest);
} catch (Exception e) {
log.error("序列化请求参数失败", e);
throw new BusinessException("请求参数序列化失败");
}
// 4. 调用新的 Feign 接口(使用 JSON 字符串方式)
Result<ApiUploadResponse> uploadResult = apiOssFeignClient.uploadFileBodyWithJson(file, requestJson);
if (uploadResult == null || uploadResult.getCode() != 200) {
String errorMsg = uploadResult != null ? uploadResult.getMsg() : "上传服务返回空";
log.error("上传文件到OSS失败: {}", errorMsg);
throw new BusinessException("上传文件失败: " + errorMsg);
} }
// 5. 获取上传结果 // 取上传结果
ApiUploadResponse uploadResponse = uploadResult.getData(); Map<String, Object> data = finishResult.getData();
if (uploadResponse == null) { if (data == null) {
throw new BusinessException("上传文件成功但未返回文件信息"); throw new BusinessException("上传成功但未返回文件信息");
} }
String fileUrl = (String) data.get("fileUrl");
// 6. 更新录制任务 Long fileSize = (Long) data.get("fileSize");
task.setFileUrl(uploadResponse.getUrl()); String fileKey = (String) data.get("fileKey");
task.setFileSize(uploadResponse.getFileSize());
task.setStatus("3"); // 更新录制任务
task.setFileFormat(uploadResponse.getFileType()); task.setFileUrl(fileUrl);
task.setFileSize(fileSize);
task.setStatus("3"); // 已录制
// 根据实际文件格式设置,可扩展
task.setFileFormat("webm");
task.setStopTime(LocalDateTime.now()); task.setStopTime(LocalDateTime.now());
iRecordingTaskService.updateById(task); iRecordingTaskService.updateById(task);
// 7. 返回结果 // 返回结果
Map<String, String> result = new HashMap<>(); Map<String, String> result = new HashMap<>();
result.put("taskId", task.getTaskId()); result.put("taskId", task.getTaskId());
result.put("fileUrl", task.getFileUrl()); result.put("fileUrl", fileUrl);
result.put("fileKey", uploadResponse.getFileKey()); result.put("fileKey", fileKey);
log.info("录制文件上传成功,fileUrl={}", task.getFileUrl()); log.info("录制文件上传成功,fileUrl={}", fileUrl);
//生成协同操作日志 // 6. 生成协同操作日志
operationLogService.log( operationLogService.log(
task.getBizId(), task.getBizId(),
"system", "system",
"system", "system",
"system", "system",
"stop_recording", "stop_recording",
String.format("停止录制 taskId=%s, fileUrl=%s", task.getTaskId(), task.getFileUrl()), String.format("停止录制 taskId=%s, fileUrl=%s", task.getTaskId(), fileUrl),
ClientInfoUtils.getDevice(), ClientInfoUtils.getDevice(),
ClientInfoUtils.getClientIp() ClientInfoUtils.getClientIp()
); );
return Result.success(result); return Result.success(result);
} }
......
...@@ -28,13 +28,11 @@ public interface ApiRecordingTaskFeignClient { ...@@ -28,13 +28,11 @@ public interface ApiRecordingTaskFeignClient {
/** /**
* 停止录制并上传视频 * 停止录制并上传视频
* @param taskId 任务ID * @param taskId 录制任务ID
* @param file 视频文件信息
* @return * @return
*/ */
@PostMapping("/stop") @PostMapping("/stop")
Result<Map<String, String>> stopRecording(@RequestParam("taskId") String taskId, Result<Map<String, String>> stopRecording(@RequestParam("taskId") String taskId);
@RequestParam("file") MultipartFile file);
/** /**
* 查询录制信息 * 查询录制信息
......
...@@ -26,7 +26,7 @@ public class ApiRecordingTaskFeignFallbackFactory implements FallbackFactory<Api ...@@ -26,7 +26,7 @@ public class ApiRecordingTaskFeignFallbackFactory implements FallbackFactory<Api
} }
@Override @Override
public Result<Map<String, String>> stopRecording(String taskId, MultipartFile file) { public Result<Map<String, String>> stopRecording(String taskId) {
return null; return null;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment