TASK:moodboard与printboard 图片合成

This commit is contained in:
xupei
2023-11-16 10:33:08 +08:00
parent 9e58ed47ea
commit ee7820ff8b
7 changed files with 118 additions and 42 deletions

View File

@@ -23,6 +23,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Lists;
import io.minio.errors.MinioException;
import io.netty.util.internal.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
@@ -33,6 +34,7 @@ import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
@@ -173,7 +175,8 @@ public class CollectionElementServiceImpl extends ServiceImpl<CollectionElementM
}
@Override
public CollectionGeneratePrintVO generatePrint(CollectionGeneratePrintDTO generatePrintDTO) {
public GenerateCollectionItemVO generatePrint(CollectionGeneratePrintDTO generatePrintDTO) {
Long userId = UserContext.getUserHolder().getId();
String url1 = null;
String url2 = null;
CollectionElement element1 = selectById(generatePrintDTO.getSelect1Id());
@@ -198,19 +201,30 @@ public class CollectionElementServiceImpl extends ServiceImpl<CollectionElementM
}
List<String> printPath = Arrays.asList(url1, url2);
//调取python 接口
String generateUrl = pythonService.generatePrint(printPath);
String generateUrl = pythonService.generatePrint(printPath,userId);
if (StringUtils.isEmpty(generateUrl)) {
throw new BusinessException("generate.interface.exception");
}
//用户信息
AuthPrincipalVo userInfo = UserContext.getUserHolder();
CollectionElement element = resolveData(generateUrl, generatePrintDTO.getTimeZone(), userInfo);
if (!this.save(element)) {
throw new BusinessException("save.collectionElement.failed");
}
CollectionGeneratePrintVO collectionGeneratePrint = CopyUtil.copyObject(element, CollectionGeneratePrintVO.class);
collectionGeneratePrint.setDesignType(DesignTypeEnum.COLLECTION.getRealName());
return collectionGeneratePrint;
// 保存合成信息到generate表
Generate generate = setGenerate(userId, generatePrintDTO.getTimeZone());
generateService.save(generate);
// 保存合成后的信息到generateDetail
GenerateDetail generateDetail = setGenerateDetail(generate.getId(), generateUrl, generatePrintDTO.getTimeZone());
generateDetailMapper.insert(generateDetail);
// CollectionElement element = resolveData(generateUrl, generatePrintDTO.getTimeZone(), userId);
// if (!this.save(element)) {
// throw new BusinessException("save.collectionElement.failed");
// }
// CollectionGeneratePrintVO collectionGeneratePrint = CopyUtil.copyObject(element, CollectionGeneratePrintVO.class);
// collectionGeneratePrint.setUrl(minioUtil.getPresignedUrl(generateUrl, 24 * 60));
// collectionGeneratePrint.setDesignType(DesignTypeEnum.COLLECTION.getRealName());
// return collectionGeneratePrint;
return new GenerateCollectionItemVO(generateDetail.getId(),
minioUtil.getPresignedUrl(generateUrl, 24 * 60),
generateDetail.getIsLike().equals((byte) 0) ? Boolean.FALSE : Boolean.TRUE);
}
@Override
@@ -284,16 +298,23 @@ public class CollectionElementServiceImpl extends ServiceImpl<CollectionElementM
return Boolean.TRUE;
}
private CollectionElement resolveData(String path, String timeZone, AuthPrincipalVo userInfo) {
File file = new File(path);
private CollectionElement resolveData(String path, String timeZone, Long userId){
// File file = new File(path);
String name = path.substring(path.lastIndexOf("/") + 1, path.lastIndexOf("."));
CollectionElement element = new CollectionElement();
element.setAccountId(userInfo.getId());
element.setAccountId(userId);
element.setCollectionId(0L);
element.setName(file.getName());
element.setName(name);
element.setLevel1Type(CollectionLevel1TypeEnum.PRINT_BOARD.getRealName());
element.setUrl(path);
element.setHasPin((byte) 0);
element.setMd5(MD5Utils.encryptFile(path, Boolean.FALSE));
try {
element.setMd5(MD5Utils.encryptFile(minioUtil.download(path)));
} catch (MinioException | IOException e) {
throw new RuntimeException(e);
}
//按时区计算
element.setCreateDate(DateUtil.getByTimeZone(timeZone));
return element;
@@ -774,4 +795,38 @@ public class CollectionElementServiceImpl extends ServiceImpl<CollectionElementM
}
return collectionElement;
}
private Generate setGenerate(Long userId,String timeZone){
Generate generate = new Generate();
generate.setAccountId(userId);
generate.setLevel1Type(CollectionLevel1TypeEnum.PRINT_BOARD.getRealName());
generate.setGenerateType("synthesis");
generate.setModelName("Image Synthesis Model");
generate.setCreateDate(DateUtil.getByTimeZone(timeZone));
return generate;
}
private GenerateDetail setGenerateDetail(Long generateId, String url, String timeZone){
GenerateDetail generateDetail = new GenerateDetail();
generateDetail.setGenerateId(generateId);
generateDetail.setUrl(url);
String md5;
try {
md5 = MD5Utils.encryptFile(minioUtil.download(url));
} catch (MinioException | IOException e) {
throw new RuntimeException(e);
}
// 通过MD5来确认当前图片是否有被like过避免重复like
List<Map<String, Long>> libraryIds = generateDetailMapper.getLibraryIdThroughMD5(md5, CollectionLevel1TypeEnum.PRINT_BOARD.getRealName());
if (libraryIds.isEmpty()){
generateDetail.setIsLike((byte) 0);
}else {
generateDetail.setIsLike((byte) 1);
generateDetail.setLibraryId(libraryIds.get(0).get("library_id"));
}
generateDetail.setMd5(md5);
generateDetail.setCreateDate(DateUtil.getByTimeZone(timeZone));
return generateDetail;
}
}

View File

@@ -185,11 +185,15 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
// 2、将like的图片信息存入library
// 2.1、不能重复喜欢
// 2.1.1 判断该图片是否被喜欢过
Library libraryDetail = libraryService.getById(generateDetail.getLibraryId());
if ( (Objects.nonNull(generateDetail.getLibraryId()) && !generateDetail.getLibraryId().equals(0L))
|| Objects.nonNull(libraryDetail)){
throw new BusinessException("duplicate.likes.are.not.allowed");
}
// todo 2.1.2、判断library中是否有相同MD5的图片
// 2.2、添加到library
AuthPrincipalVo userInfo = UserContext.getUserHolder();
Long accountId = userInfo.getId();