|
|
@@ -5,6 +5,8 @@ import cn.reghao.jutil.jdk.db.Page;
|
|
|
import cn.reghao.jutil.jdk.db.PageList;
|
|
|
import cn.reghao.jutil.jdk.result.Result;
|
|
|
import cn.reghao.oss.sdk.model.constant.ObjectType;
|
|
|
+import cn.reghao.tnb.account.api.dto.AccountAvatar;
|
|
|
+import cn.reghao.tnb.account.api.iface.AccountQuery;
|
|
|
import cn.reghao.tnb.common.auth.UserContext;
|
|
|
import cn.reghao.tnb.common.db.SelectOption;
|
|
|
import cn.reghao.tnb.content.app.disk.db.mapper.DiskAlbumMapper;
|
|
|
@@ -30,8 +32,11 @@ import java.util.stream.Collectors;
|
|
|
@Slf4j
|
|
|
@Service
|
|
|
public class DiskAlbumService {
|
|
|
+ @DubboReference(check = false, retries = 0, timeout = 60_000)
|
|
|
+ private AccountQuery accountQuery;
|
|
|
@DubboReference(check = false, timeout = 60_000)
|
|
|
private OssService ossService;
|
|
|
+
|
|
|
private final int channelCode = 111;
|
|
|
private final int albumMaxFiles = 1000;
|
|
|
private final int pageSize = 12;
|
|
|
@@ -39,15 +44,17 @@ public class DiskAlbumService {
|
|
|
private final DiskAlbumMapper diskAlbumMapper;
|
|
|
private final DiskAlbumRepository diskAlbumRepository;
|
|
|
private final DiskFileService diskFileService;
|
|
|
+ private DiskShareService diskShareService;
|
|
|
private final IdService idService;
|
|
|
|
|
|
public DiskAlbumService(DiskFileMapper diskFileMapper, DiskAlbumMapper diskAlbumMapper,
|
|
|
DiskAlbumRepository diskAlbumRepository, DiskFileService diskFileService,
|
|
|
- IdService idService) {
|
|
|
+ DiskShareService diskShareService, IdService idService) {
|
|
|
this.diskFileMapper = diskFileMapper;
|
|
|
this.diskAlbumMapper = diskAlbumMapper;
|
|
|
this.diskAlbumRepository = diskAlbumRepository;
|
|
|
this.diskFileService = diskFileService;
|
|
|
+ this.diskShareService = diskShareService;
|
|
|
this.idService = idService;
|
|
|
}
|
|
|
|
|
|
@@ -70,6 +77,11 @@ public class DiskAlbumService {
|
|
|
return Result.fail("album not exist");
|
|
|
}
|
|
|
|
|
|
+ long loginUser = UserContext.getUserId();
|
|
|
+ if (diskAlbum.getCreateBy() != loginUser) {
|
|
|
+ return Result.fail("not album owner");
|
|
|
+ }
|
|
|
+
|
|
|
List<String> existSha256sumList = diskAlbumMapper.findDiskAlbumFiles(albumId).stream()
|
|
|
.map(DiskAlbumFile::getSha256sum)
|
|
|
.collect(Collectors.toList());
|
|
|
@@ -78,7 +90,6 @@ public class DiskAlbumService {
|
|
|
}
|
|
|
|
|
|
Set<String> set = new HashSet<>(existSha256sumList);
|
|
|
- long loginUser = UserContext.getUserId();
|
|
|
int fileType = diskAlbum.getFileType();
|
|
|
|
|
|
List<DiskFile> diskFileList0 = diskFileService.findByFileIds(fileIds);
|
|
|
@@ -137,6 +148,16 @@ public class DiskAlbumService {
|
|
|
* @date 2025-09-04 17:47:19
|
|
|
*/
|
|
|
public Result updateAlbumFilePosition(long albumId, List<String> fileIds) {
|
|
|
+ DiskAlbum diskAlbum = diskAlbumMapper.findDiskAlbum(albumId);
|
|
|
+ if (diskAlbum == null) {
|
|
|
+ return Result.fail("album not exist");
|
|
|
+ }
|
|
|
+
|
|
|
+ long loginUser = UserContext.getUserId();
|
|
|
+ if (diskAlbum.getCreateBy() != loginUser) {
|
|
|
+ return Result.fail("not album owner");
|
|
|
+ }
|
|
|
+
|
|
|
// fileId -> pos
|
|
|
Map<String, Integer> positionMap = new HashMap<>();
|
|
|
int startPos = 1;
|
|
|
@@ -171,11 +192,20 @@ public class DiskAlbumService {
|
|
|
* @date 2025-09-04 17:48:05
|
|
|
*/
|
|
|
public Result deleteAlbumFile(long albumId, List<String> fileIds) {
|
|
|
+ DiskAlbum diskAlbum = diskAlbumMapper.findDiskAlbum(albumId);
|
|
|
+ if (diskAlbum == null) {
|
|
|
+ return Result.fail("album not exist");
|
|
|
+ }
|
|
|
+
|
|
|
+ long loginUser = UserContext.getUserId();
|
|
|
+ if (diskAlbum.getCreateBy() != loginUser) {
|
|
|
+ return Result.fail("not album owner");
|
|
|
+ }
|
|
|
+
|
|
|
Set<String> deletedSha256sumSet = diskFileService.findByFileIds(fileIds).stream()
|
|
|
.map(DiskFile::getSha256sum)
|
|
|
.collect(Collectors.toSet());
|
|
|
|
|
|
- DiskAlbum diskAlbum = diskAlbumMapper.findDiskAlbum(albumId);
|
|
|
int num = diskAlbum.getNum()-deletedSha256sumSet.size();
|
|
|
if (!deletedSha256sumSet.isEmpty()) {
|
|
|
diskAlbumRepository.deleteDiskAlbumFiles(albumId, num, deletedSha256sumSet);
|
|
|
@@ -210,7 +240,15 @@ public class DiskAlbumService {
|
|
|
|
|
|
public List<DiskAlbumInfo> getAlbumList() {
|
|
|
long loginUser = UserContext.getUserId();
|
|
|
- return diskAlbumMapper.findByCreateBy(loginUser).stream().map(diskAlbum -> {
|
|
|
+ List<Long> albumIds = diskShareService.getSharedAlbumIds(loginUser);
|
|
|
+ List<DiskAlbum> sharedAlbums = albumIds.stream().map(diskAlbumMapper::findDiskAlbum)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .peek(this::setSharedAlbumName)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ List<DiskAlbum> userAlbums = diskAlbumMapper.findByCreateBy(loginUser);
|
|
|
+ userAlbums.addAll(sharedAlbums);
|
|
|
+
|
|
|
+ return userAlbums.stream().map(diskAlbum -> {
|
|
|
String coverUrl = "";
|
|
|
try {
|
|
|
String coverFileId = diskAlbum.getCoverFileId();
|
|
|
@@ -222,16 +260,26 @@ public class DiskAlbumService {
|
|
|
}).collect(Collectors.toList());
|
|
|
}
|
|
|
|
|
|
+ private void setSharedAlbumName(DiskAlbum diskAlbum) {
|
|
|
+ long createBy = diskAlbum.getCreateBy();
|
|
|
+ AccountAvatar accountAvatar = accountQuery.getAccountAvatar(createBy);
|
|
|
+ String username = accountAvatar.getUsername();
|
|
|
+ String albumName = String.format("%s(%s的分享)", diskAlbum.getAlbumName(), username);
|
|
|
+ diskAlbum.setAlbumName(albumName);
|
|
|
+ }
|
|
|
+
|
|
|
public DiskAlbumDetail getDiskAlbumDetail(long albumId, int pageNumber) {
|
|
|
long loginUser = UserContext.getUserId();
|
|
|
+ Set<Long> sharedAlbumSet = new HashSet<>(diskShareService.getSharedAlbumIds(loginUser));
|
|
|
DiskAlbum diskAlbum = diskAlbumMapper.findDiskAlbum(albumId);
|
|
|
if (diskAlbum == null) {
|
|
|
return null;
|
|
|
+ } else if (diskAlbum.getCreateBy() != loginUser && !sharedAlbumSet.contains(albumId)) {
|
|
|
+ return null;
|
|
|
}
|
|
|
|
|
|
- long createBy = diskAlbum.getCreateBy();
|
|
|
- if (createBy != loginUser) {
|
|
|
- return null;
|
|
|
+ if (sharedAlbumSet.contains(albumId)) {
|
|
|
+ setSharedAlbumName(diskAlbum);
|
|
|
}
|
|
|
|
|
|
int total = diskAlbumMapper.countDiskAlbumFile(albumId);
|