diff --git a/common/common-util/pom.xml b/common/common-util/pom.xml
index 28e9ce9..a3ad4ce 100644
--- a/common/common-util/pom.xml
+++ b/common/common-util/pom.xml
@@ -43,5 +43,10 @@
hutool-all
5.7.22
+
+ com.alibaba
+ transmittable-thread-local
+ 2.14.4
+
diff --git a/common/common-util/src/main/java/com/atguigu/tingshu/common/util/AuthContextHolder.java b/common/common-util/src/main/java/com/atguigu/tingshu/common/util/AuthContextHolder.java
index 8cc00f4..87530fe 100644
--- a/common/common-util/src/main/java/com/atguigu/tingshu/common/util/AuthContextHolder.java
+++ b/common/common-util/src/main/java/com/atguigu/tingshu/common/util/AuthContextHolder.java
@@ -1,18 +1,22 @@
package com.atguigu.tingshu.common.util;
+import com.alibaba.ttl.TransmittableThreadLocal;
+
/**
* 获取当前用户信息帮助类
*/
public class AuthContextHolder {
- private static ThreadLocal userId = new ThreadLocal();
+ private static ThreadLocal userId = new TransmittableThreadLocal();
public static void setUserId(Long _userId) {
userId.set(_userId);
}
public static Long getUserId() {
- return userId.get();
+ //return userId.get();
+ //TODO 暂时硬编码为1,后续做完登录验证后再修改
+ return 1L;
}
public static void removeUserId() {
diff --git a/common/common-util/target/classes/com/atguigu/tingshu/common/util/AuthContextHolder.class b/common/common-util/target/classes/com/atguigu/tingshu/common/util/AuthContextHolder.class
index 00fa9ac..d1817e4 100644
Binary files a/common/common-util/target/classes/com/atguigu/tingshu/common/util/AuthContextHolder.class and b/common/common-util/target/classes/com/atguigu/tingshu/common/util/AuthContextHolder.class differ
diff --git a/service/service-album/src/main/java/com/atguigu/tingshu/album/api/AlbumInfoApiController.java b/service/service-album/src/main/java/com/atguigu/tingshu/album/api/AlbumInfoApiController.java
index d1a2406..90b6bdf 100644
--- a/service/service-album/src/main/java/com/atguigu/tingshu/album/api/AlbumInfoApiController.java
+++ b/service/service-album/src/main/java/com/atguigu/tingshu/album/api/AlbumInfoApiController.java
@@ -1,8 +1,15 @@
package com.atguigu.tingshu.album.api;
import com.atguigu.tingshu.album.service.AlbumInfoService;
+import com.atguigu.tingshu.common.result.Result;
+import com.atguigu.tingshu.common.util.AuthContextHolder;
+import com.atguigu.tingshu.vo.album.AlbumInfoVo;
+import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -16,5 +23,19 @@ public class AlbumInfoApiController {
private AlbumInfoService albumInfoService;
+ @Operation(summary = "新建专辑信息")
+ @PostMapping("/albumInfo/saveAlbumInfo")
+ public Result saveAlbumInfo(@Validated @RequestBody AlbumInfoVo albumInfoVo) {
+ Long userId = AuthContextHolder.getUserId();
+ albumInfoService.saveAlbumInfo(albumInfoVo, userId);
+ return Result.ok();
+
+ }
+
+
+
}
+
+
+
diff --git a/service/service-album/src/main/java/com/atguigu/tingshu/album/api/FileUploadApiController.java b/service/service-album/src/main/java/com/atguigu/tingshu/album/api/FileUploadApiController.java
index 3599943..453de31 100644
--- a/service/service-album/src/main/java/com/atguigu/tingshu/album/api/FileUploadApiController.java
+++ b/service/service-album/src/main/java/com/atguigu/tingshu/album/api/FileUploadApiController.java
@@ -1,14 +1,31 @@
package com.atguigu.tingshu.album.api;
+
+import com.atguigu.tingshu.album.service.FileUploadService;
+import com.atguigu.tingshu.common.result.Result;
+import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
@Tag(name = "上传管理接口")
@RestController
@RequestMapping("api/album")
public class FileUploadApiController {
+ @Autowired
+ private FileUploadService fileUploadService;
+ @Operation(summary = "上传文件")
+ @PostMapping("/fileUpload")
+ public Result fileUpload(@RequestParam("file") MultipartFile file) throws IOException {
+ String url = fileUploadService.fileUpload(file);
+
+ return Result.ok(url);
+ }
+
}
diff --git a/service/service-album/src/main/java/com/atguigu/tingshu/album/config/MinioConstantProperties.java b/service/service-album/src/main/java/com/atguigu/tingshu/album/config/MinioConstantProperties.java
index 005c472..aa25641 100644
--- a/service/service-album/src/main/java/com/atguigu/tingshu/album/config/MinioConstantProperties.java
+++ b/service/service-album/src/main/java/com/atguigu/tingshu/album/config/MinioConstantProperties.java
@@ -1,7 +1,9 @@
package com.atguigu.tingshu.album.config;
+import io.minio.MinioClient;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@@ -13,4 +15,13 @@ public class MinioConstantProperties {
private String accessKey;
private String secreKey;
private String bucketName;
+ @Bean
+ public MinioClient minioClient() {
+ return
+ MinioClient.builder()
+ .endpoint(endpointUrl)
+ .credentials(accessKey, secreKey)
+ .build();
+ }
+
}
diff --git a/service/service-album/src/main/java/com/atguigu/tingshu/album/service/AlbumAttributeValueService.java b/service/service-album/src/main/java/com/atguigu/tingshu/album/service/AlbumAttributeValueService.java
new file mode 100644
index 0000000..66c6128
--- /dev/null
+++ b/service/service-album/src/main/java/com/atguigu/tingshu/album/service/AlbumAttributeValueService.java
@@ -0,0 +1,9 @@
+package com.atguigu.tingshu.album.service;
+
+import com.atguigu.tingshu.model.album.AlbumAttributeValue;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springframework.stereotype.Service;
+
+
+public interface AlbumAttributeValueService extends IService {
+}
diff --git a/service/service-album/src/main/java/com/atguigu/tingshu/album/service/AlbumInfoService.java b/service/service-album/src/main/java/com/atguigu/tingshu/album/service/AlbumInfoService.java
index af0d58f..ec87626 100644
--- a/service/service-album/src/main/java/com/atguigu/tingshu/album/service/AlbumInfoService.java
+++ b/service/service-album/src/main/java/com/atguigu/tingshu/album/service/AlbumInfoService.java
@@ -1,9 +1,14 @@
package com.atguigu.tingshu.album.service;
import com.atguigu.tingshu.model.album.AlbumInfo;
+import com.atguigu.tingshu.vo.album.AlbumInfoVo;
import com.baomidou.mybatisplus.extension.service.IService;
public interface AlbumInfoService extends IService {
+ //新建专辑信息
+ void saveAlbumInfo(AlbumInfoVo albumInfoVo, Long userId);
+ //保存专辑的状态
+ void saveAlbumInfoStat(Long albumId, String statType, int statNum);
}
diff --git a/service/service-album/src/main/java/com/atguigu/tingshu/album/service/FileUploadService.java b/service/service-album/src/main/java/com/atguigu/tingshu/album/service/FileUploadService.java
new file mode 100644
index 0000000..d89b885
--- /dev/null
+++ b/service/service-album/src/main/java/com/atguigu/tingshu/album/service/FileUploadService.java
@@ -0,0 +1,11 @@
+package com.atguigu.tingshu.album.service;
+
+
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+
+public interface FileUploadService {
+ String fileUpload(MultipartFile file) throws IOException;
+
+}
diff --git a/service/service-album/src/main/java/com/atguigu/tingshu/album/service/impl/AlbumAttributeValueServiceImpl.java b/service/service-album/src/main/java/com/atguigu/tingshu/album/service/impl/AlbumAttributeValueServiceImpl.java
new file mode 100644
index 0000000..41be6a3
--- /dev/null
+++ b/service/service-album/src/main/java/com/atguigu/tingshu/album/service/impl/AlbumAttributeValueServiceImpl.java
@@ -0,0 +1,11 @@
+package com.atguigu.tingshu.album.service.impl;
+
+import com.atguigu.tingshu.album.mapper.AlbumAttributeValueMapper;
+import com.atguigu.tingshu.album.service.AlbumAttributeValueService;
+import com.atguigu.tingshu.model.album.AlbumAttributeValue;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service
+public class AlbumAttributeValueServiceImpl extends ServiceImpl implements AlbumAttributeValueService {
+}
diff --git a/service/service-album/src/main/java/com/atguigu/tingshu/album/service/impl/AlbumInfoServiceImpl.java b/service/service-album/src/main/java/com/atguigu/tingshu/album/service/impl/AlbumInfoServiceImpl.java
index 6d4de53..30e3e6d 100644
--- a/service/service-album/src/main/java/com/atguigu/tingshu/album/service/impl/AlbumInfoServiceImpl.java
+++ b/service/service-album/src/main/java/com/atguigu/tingshu/album/service/impl/AlbumInfoServiceImpl.java
@@ -1,18 +1,88 @@
package com.atguigu.tingshu.album.service.impl;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
import com.atguigu.tingshu.album.mapper.AlbumInfoMapper;
+import com.atguigu.tingshu.album.mapper.AlbumStatMapper;
+import com.atguigu.tingshu.album.service.AlbumAttributeValueService;
import com.atguigu.tingshu.album.service.AlbumInfoService;
+import com.atguigu.tingshu.common.constant.SystemConstant;
+import com.atguigu.tingshu.model.album.AlbumAttributeValue;
import com.atguigu.tingshu.model.album.AlbumInfo;
+import com.atguigu.tingshu.model.album.AlbumStat;
+import com.atguigu.tingshu.vo.album.AlbumAttributeValueVo;
+import com.atguigu.tingshu.vo.album.AlbumInfoVo;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.stream.Collectors;
@Slf4j
@Service
-@SuppressWarnings({"all"})
+
public class AlbumInfoServiceImpl extends ServiceImpl implements AlbumInfoService {
@Autowired
private AlbumInfoMapper albumInfoMapper;
+ @Autowired
+ private AlbumAttributeValueService albumAttributeValueService;
+
+ @Autowired
+ private AlbumStatMapper albumStatMapper;
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void saveAlbumInfo(AlbumInfoVo albumInfoVo, Long userId) {
+ //1.保存专辑信息
+ //1.1 将专辑VO(视图对象)对象转为专辑PO(持久化对象)对象
+ //将我们上传专辑的那个表中的数据转换成为albumInfo这个持久化对象数据里
+ //相当于把传上来的表变成一个你存大数据的表 albumInfo这表中有大量的数据 比如说专辑的状态 属性等
+ //不是这一个albumInfoVo表能装下的
+
+ //用这个工具要保证两个字段是相同的
+ AlbumInfo albumInfo= BeanUtil.copyProperties(albumInfoVo, AlbumInfo.class);
+ //1.2 封装PO对象中用户ID、免费试听集数、专辑状态
+ //这两张表只有这三个状态是不一样的
+ albumInfo.setUserId(userId);
+ albumInfo.setTracksForFree(5);
+ albumInfo.setStatus(SystemConstant.ALBUM_STATUS_NO_PASS);
+ //1.3 保存专辑,得到专辑ID
+ albumInfoMapper.insert(albumInfo);
+ Long albumId = albumInfo.getId();
+ //2.保存专辑标签信息
+ List albumAttributeValueVoList = albumInfoVo.getAlbumAttributeValueVoList();
+
+ if (CollUtil.isNotEmpty(albumAttributeValueVoList)) {
+ //2.1 将集合泛型从AlbumAttributeValueVo转为AlbumAttributeValue
+ //最一开始是vo类型 你通过stream将泛型
+ List attributeValueList = albumAttributeValueVoList
+ .stream()
+ .map(vo -> {
+ AlbumAttributeValue albumAttributeValue = BeanUtil.copyProperties(vo, AlbumAttributeValue.class);
+ //2.2 为每个专辑标签关系 关联 专辑ID
+ albumAttributeValue.setAlbumId(albumId);
+ return albumAttributeValue;
+ }).collect(Collectors.toList());
+ //2.3 批量保存
+ albumAttributeValueService.saveBatch(attributeValueList);
+ }
+ this.saveAlbumInfoStat(albumId, SystemConstant.ALBUM_STAT_PLAY, 0);
+ this.saveAlbumInfoStat(albumId, SystemConstant.ALBUM_STAT_SUBSCRIBE, 0);
+ this.saveAlbumInfoStat(albumId, SystemConstant.ALBUM_STAT_BUY, 0);
+ this.saveAlbumInfoStat(albumId, SystemConstant.ALBUM_STAT_COMMENT, 0);
+
+ }
+
+ @Override
+ public void saveAlbumInfoStat(Long albumId, String statType, int statNum) {
+ AlbumStat albumStat = new AlbumStat();
+ albumStat.setAlbumId(albumId);
+ albumStat.setStatType(statType);
+ albumStat.setStatNum(statNum);
+ albumStatMapper.insert(albumStat);
+ }
}
diff --git a/service/service-album/src/main/java/com/atguigu/tingshu/album/service/impl/FileUploadServiceImpl.java b/service/service-album/src/main/java/com/atguigu/tingshu/album/service/impl/FileUploadServiceImpl.java
new file mode 100644
index 0000000..a0858c4
--- /dev/null
+++ b/service/service-album/src/main/java/com/atguigu/tingshu/album/service/impl/FileUploadServiceImpl.java
@@ -0,0 +1,68 @@
+package com.atguigu.tingshu.album.service.impl;
+
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.io.FileUtil;
+import com.atguigu.tingshu.album.config.MinioConstantProperties;
+import com.atguigu.tingshu.album.service.FileUploadService;
+import com.atguigu.tingshu.common.execption.GuiguException;
+import io.minio.MinioClient;
+import io.minio.PutObjectArgs;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.imageio.ImageIO;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import java.util.UUID;
+@Slf4j
+@Service
+public class FileUploadServiceImpl implements FileUploadService {
+ @Autowired
+ private MinioClient minioClient;
+
+ @Autowired
+ private MinioConstantProperties minioConstantProperties;
+ @Override
+ public String fileUpload(MultipartFile file) throws IOException {
+
+
+ //1.业务校验 检验图片是否合法
+ BufferedImage bufferedImage = ImageIO.read(file.getInputStream());
+ if (bufferedImage == null){
+ throw new GuiguException(500,"上传文件类型错误");
+ }
+ //2.检查图片上传的大小是否合理
+ int width = bufferedImage.getWidth();
+ int height = bufferedImage.getHeight();
+ if(width>900||height>900){
+ throw new GuiguException(500,"上传图片过大");
+ }
+ //3.将图片文件上传MINIO 规范:日期/文件唯一命名.后缀
+ //3.1 生成日期作为文件夹名称
+ String folderName = DateUtil.today();
+ //3.2 生成文件唯一名称
+ String extName = FileUtil.extName(file.getOriginalFilename());
+ String objectName = "/" + folderName + "/" + UUID.randomUUID().toString() + "." + extName;
+ //3.上传文件
+ try {
+ minioClient.putObject(
+ PutObjectArgs.builder().bucket(minioConstantProperties.getBucketName()).object(objectName).stream(
+ file.getInputStream(), file.getSize(), -1)
+ .contentType(file.getContentType())
+ .build());
+ } catch (Exception e) {
+ log.error("上传文件到MINIO失败:{}", e.getMessage());
+ throw new GuiguException(500, "上传文件到MINIO失败");
+ }
+
+
+ //4.拼接MINIO文件在线地址
+ return minioConstantProperties.getEndpointUrl() + "/" + minioConstantProperties.getBucketName() + objectName;
+ }
+
+
+ }
+
diff --git a/service/service-album/target/classes/com/atguigu/tingshu/album/api/AlbumInfoApiController.class b/service/service-album/target/classes/com/atguigu/tingshu/album/api/AlbumInfoApiController.class
index e0da897..5087ba4 100644
Binary files a/service/service-album/target/classes/com/atguigu/tingshu/album/api/AlbumInfoApiController.class and b/service/service-album/target/classes/com/atguigu/tingshu/album/api/AlbumInfoApiController.class differ
diff --git a/service/service-album/target/classes/com/atguigu/tingshu/album/api/FileUploadApiController.class b/service/service-album/target/classes/com/atguigu/tingshu/album/api/FileUploadApiController.class
index 716f19f..d974a50 100644
Binary files a/service/service-album/target/classes/com/atguigu/tingshu/album/api/FileUploadApiController.class and b/service/service-album/target/classes/com/atguigu/tingshu/album/api/FileUploadApiController.class differ
diff --git a/service/service-album/target/classes/com/atguigu/tingshu/album/config/MinioConstantProperties.class b/service/service-album/target/classes/com/atguigu/tingshu/album/config/MinioConstantProperties.class
index 0f099c0..6ecd94b 100644
Binary files a/service/service-album/target/classes/com/atguigu/tingshu/album/config/MinioConstantProperties.class and b/service/service-album/target/classes/com/atguigu/tingshu/album/config/MinioConstantProperties.class differ
diff --git a/service/service-album/target/classes/com/atguigu/tingshu/album/service/AlbumInfoService.class b/service/service-album/target/classes/com/atguigu/tingshu/album/service/AlbumInfoService.class
index 1ba3190..a74047c 100644
Binary files a/service/service-album/target/classes/com/atguigu/tingshu/album/service/AlbumInfoService.class and b/service/service-album/target/classes/com/atguigu/tingshu/album/service/AlbumInfoService.class differ
diff --git a/service/service-album/target/classes/com/atguigu/tingshu/album/service/impl/AlbumInfoServiceImpl.class b/service/service-album/target/classes/com/atguigu/tingshu/album/service/impl/AlbumInfoServiceImpl.class
index 3a8e8ce..cc622c5 100644
Binary files a/service/service-album/target/classes/com/atguigu/tingshu/album/service/impl/AlbumInfoServiceImpl.class and b/service/service-album/target/classes/com/atguigu/tingshu/album/service/impl/AlbumInfoServiceImpl.class differ