| | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 媒体服务类 |
| | | */ |
| | |
| | | if (input.getTargetId() == null) { |
| | | return MediaSaveResponse.error("目标ID不能为空"); |
| | | } |
| | | if (input.getUrl() == null || input.getUrl().trim().isEmpty()) { |
| | | return MediaSaveResponse.error("文件URL不能为空"); |
| | | if (input.getPath() == null || input.getPath().trim().isEmpty()) { |
| | | return MediaSaveResponse.error("文件路径不能为空"); |
| | | } |
| | | if (input.getMediaType() == null) { |
| | | return MediaSaveResponse.error("媒体类型不能为空"); |
| | | } |
| | | |
| | | // 创建Media实体 |
| | | Media media = new Media(); |
| | | |
| | | // 将targetType字符串转换为整数 |
| | | Integer targetTypeInt = convertTargetTypeToInt(input.getTargetType()); |
| | | media.setTargetType(targetTypeInt); |
| | | media.setTargetId(input.getTargetId()); |
| | | media.setPath(input.getUrl()); |
| | | media.setThumbPath(input.getThumbUrl()); |
| | | |
| | | Media media; |
| | | boolean isUpdate = false; |
| | | |
| | | // 根据目标类型决定处理策略 |
| | | if (targetTypeInt == 7) { // USER_AVATAR - 头像,需要更新现有记录 |
| | | List<Media> 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.setState(1); // 1表示有效状态 |
| | | media.setDuration(input.getDuration()); |
| | | media.setMediaType(input.getMediaType()); |
| | | |
| | | // 保存到数据库 |
| | | Media savedMedia = mediaRepository.save(media); |
| | | log.info("媒体文件保存成功,ID: {}", savedMedia.getId()); |
| | | log.info("媒体文件{}成功,ID: {}", isUpdate ? "更新" : "保存", savedMedia.getId()); |
| | | |
| | | return MediaSaveResponse.success("媒体文件保存成功", savedMedia.getId()); |
| | | |
| | |
| | | private Integer convertTargetTypeToInt(String targetType) { |
| | | switch (targetType) { |
| | | case "player": |
| | | return 1; |
| | | return 7; // USER_AVATAR - 用户头像 |
| | | case "activity_player": |
| | | return 2; |
| | | return 5; // ACTIVITY_PLAYER_SUBMISSION - 参赛报名资料 |
| | | default: |
| | | throw new IllegalArgumentException("不支持的目标类型: " + targetType); |
| | | } |