package com.rongyichuang.media.service; import com.rongyichuang.media.dto.MediaSaveInput; import com.rongyichuang.media.dto.MediaSaveResponse; import com.rongyichuang.common.entity.Media; import com.rongyichuang.common.repository.MediaRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; /** * 媒体服务类 */ @Service public class MediaV2Service { private static final Logger log = LoggerFactory.getLogger(MediaV2Service.class); @Autowired private MediaRepository mediaRepository; /** * 保存媒体文件信息 * @param input 媒体保存输入 * @return 保存结果 */ public MediaSaveResponse saveMedia(MediaSaveInput input) { try { log.info("开始保存媒体文件,目标类型: {}, 目标ID: {}", input.getTargetType(), input.getTargetId()); // 验证输入参数 if (input.getTargetType() == null || input.getTargetType().trim().isEmpty()) { return MediaSaveResponse.error("目标类型不能为空"); } if (input.getTargetId() == null) { return MediaSaveResponse.error("目标ID不能为空"); } if (input.getPath() == null || input.getPath().trim().isEmpty()) { return MediaSaveResponse.error("文件路径不能为空"); } if (input.getMediaType() == null) { return MediaSaveResponse.error("媒体类型不能为空"); } // 将targetType字符串转换为整数 Integer targetTypeInt = convertTargetTypeToInt(input.getTargetType()); Media media; boolean isUpdate = false; // 根据目标类型决定处理策略 if (targetTypeInt == 7) { // USER_AVATAR - 头像,需要更新现有记录 List existingMedias = mediaRepository.findByTargetTypeAndTargetIdAndState( targetTypeInt, input.getTargetId(), 1); if (!existingMedias.isEmpty()) { // 存在头像记录,更新第一个记录 media = existingMedias.get(0); isUpdate = true; log.info("找到现有头像记录,将进行更新,ID: {}", media.getId()); } else { // 不存在头像记录,创建新记录 media = new Media(); media.setTargetType(targetTypeInt); media.setTargetId(input.getTargetId()); media.setState(1); log.info("未找到现有头像记录,将创建新的头像记录"); } } else { // 其他类型(如附件),总是创建新记录 media = new Media(); media.setTargetType(targetTypeInt); media.setTargetId(input.getTargetId()); media.setState(1); // 1表示有效状态 log.info("创建新的媒体记录,类型: {}", input.getTargetType()); } // 更新或设置媒体信息 media.setPath(input.getPath()); media.setThumbPath(input.getThumbPath()); media.setName(input.getFileName()); media.setFileExt(input.getFileExt()); media.setFileSize(input.getFileSize() != null ? input.getFileSize().intValue() : null); media.setDuration(input.getDuration()); media.setMediaType(input.getMediaType()); // 保存到数据库 Media savedMedia = mediaRepository.save(media); log.info("媒体文件{}成功,ID: {}", isUpdate ? "更新" : "保存", savedMedia.getId()); return MediaSaveResponse.success("媒体文件保存成功", savedMedia.getId()); } catch (Exception e) { log.error("保存媒体文件时发生错误", e); return MediaSaveResponse.error("保存媒体文件失败:" + e.getMessage()); } } /** * 将目标类型字符串转换为整数 * @param targetType 目标类型字符串 * @return 对应的整数值 */ private Integer convertTargetTypeToInt(String targetType) { switch (targetType) { case "player": return 7; // USER_AVATAR - 用户头像 case "activity_player": return 5; // ACTIVITY_PLAYER_SUBMISSION - 参赛报名资料 default: throw new IllegalArgumentException("不支持的目标类型: " + targetType); } } }