Commit 59331b17 by zhangxingmin

push

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