Merge remote-tracking branch 'origin/develop' into develop

# Conflicts:
#	src/main/resources/messages_en.properties
This commit is contained in:
shahaibo
2023-11-07 11:42:37 +08:00
21 changed files with 150 additions and 140 deletions

View File

@@ -2,6 +2,10 @@ package com.ai.da.common.enums;
import lombok.Getter;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Getter
public enum GenerateModeEnum {
@@ -27,4 +31,8 @@ public enum GenerateModeEnum {
this.code = code;
this.value = value;
}
public static List<String> getGenerateModeList(){
return Stream.of(TEXT,IMAGE,TEXT_IMAGE).map(GenerateModeEnum::getValue).collect(Collectors.toList());
}
}

View File

@@ -11,7 +11,6 @@ import com.tencentcloudapi.ses.v20201002.models.SendEmailRequest;
import com.tencentcloudapi.ses.v20201002.models.SendEmailResponse;
import com.tencentcloudapi.ses.v20201002.models.Template;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.Assert;
import java.util.Date;

View File

@@ -2,7 +2,6 @@ package com.ai.da.controller;
import com.ai.da.common.config.exception.BusinessException;
import com.ai.da.common.response.Response;
import com.ai.da.common.utils.FileUtil;
import com.ai.da.common.utils.MD5Utils;
import com.ai.da.model.dto.*;
import com.ai.da.model.vo.*;
@@ -13,12 +12,10 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.List;

View File

@@ -34,7 +34,6 @@ public class GenerateController {
return Response.success(generateService.generateCaption(sketchElementId));
}
@ApiOperation("通过文字、图片生成图片")
@PostMapping("/sketchAndPrint")
public Response<GenerateCollectionVO> generateThroughImageText(@Valid @RequestBody GenerateThroughImageTextDTO generateThroughImageTextDTO) {

View File

@@ -1,7 +1,5 @@
package com.ai.da.controller;
import cn.hutool.core.lang.Assert;
import cn.hutool.system.UserInfo;
import com.ai.da.common.config.FileProperties;
import com.ai.da.common.config.exception.BusinessException;
import com.ai.da.common.context.UserContext;
@@ -17,7 +15,6 @@ import com.ai.da.model.vo.*;
import com.ai.da.service.LibraryModelPointService;
import com.ai.da.service.LibraryService;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;

View File

@@ -7,7 +7,6 @@ import com.ai.da.mapper.entity.Library;
import com.ai.da.model.dto.ChatFlushDTO;
import com.ai.da.model.dto.ChatRobotLibraryDTO;
import com.ai.da.model.dto.ChatSendDTO;
import com.ai.da.model.vo.ChatRobotLibraryVO;
import com.ai.da.model.vo.ChatRobotVO;
import com.ai.da.model.vo.PythonLibraryVo;
import com.ai.da.model.vo.SysFileVO;
@@ -21,7 +20,6 @@ import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import javax.annotation.Resource;
import java.math.BigDecimal;
@@ -57,15 +55,15 @@ public class PythonController {
return Response.success(pythonService.upload(file, operateType));
}
@ApiOperation(value = "python服务保存多张图片到java服务")
@PostMapping("/saveMultiGeneratePicture")
public Response<List<String>> uploadMultiple(@RequestParam("files") MultipartFile[] files,
@ApiParam("操作类型 generatePrint ->生成印花 " +
"designCollection ->设计collection generateAdvancedDesign ->生成高级design" +
"generateSketch -> 生成草图")
@RequestParam(value = "operateType") String operateType) {
return Response.success(pythonService.upload(files, operateType));
}
// @ApiOperation(value = "python服务保存多张图片到java服务")
// @PostMapping("/saveMultiGeneratePicture")
// public Response<List<String>> uploadMultiple(@RequestParam("files") MultipartFile[] files,
// @ApiParam("操作类型 generatePrint ->生成印花 " +
// "designCollection ->设计collection generateAdvancedDesign ->生成高级design" +
// "generateSketch -> 生成草图")
// @RequestParam(value = "operateType") String operateType) {
// return Response.success(pythonService.upload(files, operateType));
// }
@ApiOperation(value = "通过文件类型获取系统文件")
@GetMapping("/getSysFileByLevel2Type")

View File

@@ -3,12 +3,10 @@ package com.ai.da.controller;
import com.ai.da.common.config.exception.BusinessException;
import com.ai.da.common.context.UserContext;
import com.ai.da.common.response.PageBaseResponse;
import com.ai.da.common.response.PageResponse;
import com.ai.da.common.response.Response;
import com.ai.da.common.utils.CopyUtil;
import com.ai.da.common.utils.MinioUtil;
import com.ai.da.mapper.entity.Account;
import com.ai.da.mapper.entity.Collection;
import com.ai.da.mapper.entity.UserLikeGroup;
import com.ai.da.model.dto.*;
import com.ai.da.model.vo.*;
@@ -21,15 +19,12 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;
import java.util.List;
import java.util.Map;

View File

@@ -3,5 +3,15 @@ package com.ai.da.mapper;
import com.ai.da.common.config.mybatis.plus.CommonMapper;
import com.ai.da.mapper.entity.GenerateDetail;
import java.util.List;
import java.util.Map;
public interface GenerateDetailMapper extends CommonMapper<GenerateDetail> {
/**
* 查找相同MD5相同level1Type 被like过的图片的libraryId
* @param md5 图片的MD5值
* @param level1Type levelType
* @return libraryId
*/
List<Map<String,Long>> getLibraryIdThroughMD5(String md5, String level1Type);
}

View File

@@ -20,6 +20,7 @@ public class GenerateThroughImageTextDTO {
@ApiModelProperty("text image text-image")
String generateType;
/** 暂时没有用上 */
@ApiModelProperty("图片是update还是从library中选择")
String designType;

View File

@@ -13,4 +13,7 @@ public class GenerateCollectionItemVO {
@ApiModelProperty("generate生成图片的url")
private String generateItemUrl;
@ApiModelProperty("生成的图片是否已经被like")
private Boolean isLiked = Boolean.FALSE;
}

View File

@@ -145,26 +145,26 @@ public class PythonService {
return null;
}
@Transactional
public List<String> upload(MultipartFile[] files, String operateType) {
List<String> paths = new ArrayList<>();
//用户信息
PythonToJavaApiOperationTypeEnum operationType = PythonToJavaApiOperationTypeEnum.uploadOf(operateType);
Assert.notNull(operationType, "unknown operateType " + operateType + "!");
String path = calculateFileUrl(operationType);
for (MultipartFile file : files) {
File generateFile = FileUtil.upload2(file, path);
Assert.notNull(generateFile, "An error occurred while processing the file, please try again later");
String linuxDomain = fileProperties.getLinuxDomain();
if (!StringUtils.isEmpty(linuxDomain)) {
//linux 系统
String oldPath = fileProperties.getSys().getPath();
paths.add(generateFile.getAbsolutePath().replace(oldPath, linuxDomain));
}
}
return paths;
}
// @Transactional
// public List<String> upload(MultipartFile[] files, String operateType) {
// List<String> paths = new ArrayList<>();
// //用户信息
// PythonToJavaApiOperationTypeEnum operationType = PythonToJavaApiOperationTypeEnum.uploadOf(operateType);
// Assert.notNull(operationType, "unknown operateType " + operateType + "!");
// String path = calculateFileUrl(operationType);
// for (MultipartFile file : files) {
// File generateFile = FileUtil.upload2(file, path);
// Assert.notNull(generateFile, "An error occurred while processing the file!");
//
// String linuxDomain = fileProperties.getLinuxDomain();
// if (!StringUtils.isEmpty(linuxDomain)) {
// //linux 系统
// String oldPath = fileProperties.getSys().getPath();
// paths.add(generateFile.getAbsolutePath().replace(oldPath, linuxDomain));
// }
// }
// return paths;
// }
private String calculateFileUrl(PythonToJavaApiOperationTypeEnum operationType) {

View File

@@ -5,14 +5,11 @@ import com.ai.da.common.config.FileProperties;
import com.ai.da.common.config.exception.BusinessException;
import com.ai.da.common.context.UserContext;
import com.ai.da.common.enums.*;
import com.ai.da.common.response.PageBaseResponse;
import com.ai.da.common.utils.*;
import com.ai.da.mapper.CollectionElementMapper;
import com.ai.da.mapper.GenerateDetailMapper;
import com.ai.da.mapper.entity.*;
import com.ai.da.mapper.entity.Collection;
import com.ai.da.model.dto.*;
import com.ai.da.model.enums.MalePosition;
import com.ai.da.model.enums.ModelType;
import com.ai.da.model.enums.Sex;
import com.ai.da.model.vo.*;
@@ -26,24 +23,17 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Lists;
import io.netty.util.internal.StringUtil;
import javafx.scene.chart.ValueAxis;
import lombok.extern.slf4j.Slf4j;
import org.bouncycastle.LICENSE;
import org.bouncycastle.cms.CMSAuthenticatedGenerator;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.reactive.AbstractReactiveTransactionManager;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import sun.applet.resources.MsgAppletViewer;
import javax.annotation.Resource;
import java.io.File;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collector;
import java.util.stream.Collectors;
/**

View File

@@ -9,17 +9,13 @@ import com.ai.da.common.utils.MinioUtil;
import com.ai.da.mapper.CollectionMapper;
import com.ai.da.mapper.entity.Collection;
import com.ai.da.mapper.entity.CollectionElement;
import com.ai.da.model.dto.CollectionColorDTO;
import com.ai.da.model.vo.CollectionColorVO;
import com.ai.da.model.vo.CollectionElementVO;
import com.ai.da.model.vo.UserLikeCollectionVO;
import com.ai.da.service.CollectionElementService;
import com.ai.da.service.CollectionService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Maps;
import io.netty.util.internal.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

View File

@@ -1,43 +1,15 @@
package com.ai.da.service.impl;
import com.ai.da.common.config.FileProperties;
import com.ai.da.common.config.exception.BusinessException;
import com.ai.da.common.context.UserContext;
import com.ai.da.common.enums.CollectionLevel2TypeEnum;
import com.ai.da.common.enums.DesignTypeEnum;
import com.ai.da.common.enums.LibraryLevel1TypeEnum;
import com.ai.da.common.enums.LibraryTopTypeEnum;
import com.ai.da.common.response.PageBaseResponse;
import com.ai.da.common.utils.CopyUtil;
import com.ai.da.common.utils.DateUtil;
import com.ai.da.common.utils.FileUtil;
import com.ai.da.mapper.DesignHistoryMapper;
import com.ai.da.mapper.LibraryMapper;
import com.ai.da.mapper.entity.Design;
import com.ai.da.mapper.entity.DesignHistory;
import com.ai.da.mapper.entity.Library;
import com.ai.da.model.dto.LibraryUpdateDTO;
import com.ai.da.model.dto.LibraryUploadDTO;
import com.ai.da.model.dto.QueryLibraryPageServiceDTO;
import com.ai.da.model.vo.*;
import com.ai.da.service.DesignHistoryService;
import com.ai.da.service.LibraryModelPointService;
import com.ai.da.service.LibraryService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.base.Function;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.io.File;
import java.util.*;
import java.util.stream.Collectors;
/**
* 服务实现类

View File

@@ -25,7 +25,6 @@ import com.google.common.collect.Lists;
import io.netty.util.internal.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import javax.annotation.Resource;
import java.io.IOException;
@@ -414,10 +413,6 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
DesignLibraryModelPointVO designLibraryModelPointVO = null;
// 设置模特
if (Objects.nonNull(design.getTemplateId())) {
// LibraryModelPoint modelPoint = libraryModelPointService.getById(design.getTemplateId());
// Assert.notNull(modelPoint,"template does not exists!");
// Library library = libraryService.getById(modelPoint.getRelationId());
// Assert.notNull(library,"template does not exists!");
String modelUrl;
Integer high;
Integer width;
@@ -479,7 +474,7 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
});
TDesignPythonOutfit designPythonOutfit = designPythonOutfitService.getByDesignItemId(designSingleIncludeLayersDTO.getDesignItemId());
Assert.notNull(designItem, "design item detail layers does not exists!");
// Assert.notNull(designItem, "design item detail layers does not exists!");
return assembleDesignSingleResponse(designItem.getId(),
minioUtil.getPresignedUrl(designPythonOutfit.getDesignUrl(), 24 * 60),
@@ -493,14 +488,22 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
ComposeLayersVO designItemLayer = positionAndScaleVO.getLayers();
// 1、校验designItem是是否存在
DesignItem designItem = selectById(designItemLayer.getDesignItemId());
Assert.notNull(designItem, "designItem does not exists!");
if (Objects.isNull(designItem)){
throw new BusinessException("design.item.does.not.exist");
}
TDesignPythonOutfit designPythonOutfit = designPythonOutfitService.getByDesignItemId(designItemLayer.getDesignItemId());
Assert.notNull(designPythonOutfit, "layers does not exists!");
if (Objects.isNull(designPythonOutfit)){
throw new BusinessException("layers.does.not.exists");
}
// 2、校验layers是否存在
designItemLayer.getLayers().forEach(layer -> {
TDesignPythonOutfitDetail detail = designPythonOutfitDetailService.getById(layer.getId());
Assert.notNull(detail, layer.getImageCategory() + " layer does not exists!");
if (Objects.isNull(detail)){
log.error(layer.getImageCategory() + " layer does not exists!");
throw new BusinessException("layers.does.not.exists");
}
// Assert.notNull(detail, layer.getImageCategory() + " layer does not exists!");
/*layer.setImageUrl(detail.getImageUrl());
layer.setMaskUrl(detail.getMaskUrl());*/

View File

@@ -29,11 +29,9 @@ import com.google.common.collect.Lists;
import io.netty.util.internal.StringUtil;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;
import org.checkerframework.checker.units.qual.C;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
@@ -841,7 +839,9 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
@Override
public String generateHighDesign(GenerateHighDesignDTO generateHighDesignDTO) {
DesignItem designItem = designItemService.getById(generateHighDesignDTO.getDesignItemId());
Assert.notNull(designItem, "design item does not exist!");
if (Objects.isNull(designItem)){
throw new BusinessException("design.item.does.not.exist");
}
String highUrl = pythonService.generateHighDesign(designItem.getDesignUrl());
//存储
designItemService.updateDesignHighUrl(designItem.getId(), highUrl, generateHighDesignDTO.getTimeZone());
@@ -851,7 +851,9 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
@Override
public Boolean deleteHighDesign(GenerateHighDesignDTO generateHighDesignDTO) {
DesignItem designItem = designItemService.getById(generateHighDesignDTO.getDesignItemId());
Assert.notNull(designItem, "design item does not exist!");
if (Objects.isNull(designItem)){
throw new BusinessException("design.item.does.not.exist");
}
if (StringUtils.isEmpty(designItem.getHighDesignUrl())) {
//并发情况 ,不提示 直接返回
return Boolean.TRUE;
@@ -1057,7 +1059,10 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
if (flag) {
// 1、判断designPythonOutfitId查出的图层信息是否为空不允许为空系统内部错误
List<TDesignPythonOutfitDetail> details = designPythonOutfitDetailService.getDetailByDesignPythonOutfitId(designPythonOutfit.getId());
Assert.notEmpty(details, "Some errors occurred, please restart the design");
if (Objects.isNull(details)){
log.error("Layer information is empty! DesignPythonOutfitId is " + designPythonOutfit.getId());
throw new BusinessException("layer.information.not.found");
}
details.forEach(detail -> {
List<Long> offset = new ArrayList<>();
if (StringUtil.isNullOrEmpty(detail.getOffset()) || detail.getOffset().equals("null")) {

View File

@@ -1,8 +1,7 @@
package com.ai.da.service.impl;
import cn.hutool.core.lang.Assert;
import com.ai.da.common.config.exception.BusinessException;
import com.ai.da.common.context.UserContext;
import com.ai.da.common.enums.CollectionLevel1TypeEnum;
import com.ai.da.common.enums.GenerateModeEnum;
import com.ai.da.common.enums.ModelNameEnum;
import com.ai.da.common.utils.DateUtil;
@@ -55,9 +54,9 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
@Override
public GenerateCaptionVO generateCaption(Long sketchElementId) {
CollectionElement collectionElement = collectionElementMapper.selectById(sketchElementId);
Assert.notNull(collectionElement, "System error!Please reselect the sketch");
Assert.isTrue("Sketchboard".equals(collectionElement.getLevel1Type()) && !StringUtil.isNullOrEmpty(collectionElement.getUrl())
, "System error!Please reselect the sketch");
if (Objects.isNull(collectionElement)){
throw new BusinessException("the.image.does.not.exist.please.reselect");
}
String url = collectionElement.getUrl();
// String caption = pythonService.generateSketchCaption(url);
GenerateCaptionVO recognized_caption = new GenerateCaptionVO("recognized caption");
@@ -69,22 +68,27 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
public GenerateCollectionVO generateThroughImageText(GenerateThroughImageTextDTO generateThroughImageTextDTO) {
// 1、获取用户信息
AuthPrincipalVo userHolder = UserContext.getUserHolder();
String generateType = generateThroughImageTextDTO.getGenerateType();
Long accountId = userHolder.getId();
if (!GenerateModeEnum.getGenerateModeList().contains(generateType)){
throw new BusinessException("unknown.generate.type");
}
// 2、判断必须入参是否为非空
Generate generate = new Generate();
generate.setAccountId(accountId);
generate.setLevel1Type(generateThroughImageTextDTO.getLevel1Type());
// 当level1type是sketchboard时存数据库需要加上当前性别
generate.setGenerateType(generate.getLevel1Type().equals(SKETCH_BOARD.getRealName()) ?
generateThroughImageTextDTO.getGender() + "_" + generateThroughImageTextDTO.getGenerateType() :
generateThroughImageTextDTO.getGenerateType());
generateType + " (" +generateThroughImageTextDTO.getGender() + ")":
generateType);
generate.setModelName(StringUtil.isNullOrEmpty(generateThroughImageTextDTO.getVersion()) ? ModelNameEnum.MODEL_0.getCode() : generateThroughImageTextDTO.getVersion());
generate.setCreateDate(DateUtil.getByTimeZone(generateThroughImageTextDTO.getTimeZone()));
String text = generateThroughImageTextDTO.getText();
Long elementId = generateThroughImageTextDTO.getCollectionElementId();
validateGeneraType(generate, text, elementId);
validateGeneraType(generate, text, elementId,generateType);
// 3、将请求信息落库
// 3.1 sketch或print在t_collection_element表中的信息是否需要更新 如 level2Type
@@ -94,26 +98,34 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
save(generate);
// 4、向模型发起请求
int mode = GenerateModeEnum.TEXT.getValue().equals(generate.getGenerateType()) ? GenerateModeEnum.TEXT.getCode() : GenerateModeEnum.TEXT_IMAGE.getCode();
int mode = GenerateModeEnum.TEXT.getValue().equals(generateType) ?
GenerateModeEnum.TEXT.getCode() :
GenerateModeEnum.TEXT_IMAGE.getCode();
String category = generateThroughImageTextDTO.getLevel1Type().equals(SKETCH_BOARD.getRealName()) ? "sketch" :
generateThroughImageTextDTO.getLevel1Type().equals(PRINT_BOARD.getRealName()) ? "print" : "moodboard";
List<String> generatedSketchUrl = pythonService.generateSketchOrPrint(accountId, Objects.isNull(elementId) ? null : collectionElement.getUrl(),
category, text, mode, generateThroughImageTextDTO.getVersion(), generateThroughImageTextDTO.getGender());
// List<String> generatedSketchUrl = Arrays.asList("testUrl1","testUrl2","testUrl3","testUrl4");
// 5、处理模型返回的数据
// 5.1 将相应的url保存到数据库
List<GenerateCollectionItemVO> generatedCollectionItems = new ArrayList<>();
generatedSketchUrl.forEach(item -> {
GenerateDetail generateDetail = new GenerateDetail();
GenerateCollectionItemVO generateCollectionItemVO = new GenerateCollectionItemVO();
String md5 = MD5Utils.encryptFile(minioUtil.getPresignedUrl(item, 24 * 60), Boolean.FALSE);
// 通过MD5值和level1Type,判断不同level1Type下相同的图片是否被like过
List<Map<String,Long>> libraryIdList = generateDetailMapper.getLibraryIdThroughMD5(md5, generateThroughImageTextDTO.getLevel1Type());
if (!libraryIdList.isEmpty()){
generateDetail.setIsLike((byte) 1);
generateDetail.setLibraryId(libraryIdList.get(0).get("library_id"));
generateCollectionItemVO.setIsLiked(Boolean.TRUE);
}
generateDetail.setUrl(item);
generateDetail.setGenerateId(generate.getId());
generateDetail.setCreateDate(DateUtil.getByTimeZone(generateThroughImageTextDTO.getTimeZone()));
generateDetail.setMd5(MD5Utils.encryptFile(minioUtil.getPresignedUrl(item, 24 * 60), Boolean.FALSE));
generateDetail.setMd5(md5);
generateDetailMapper.insert(generateDetail);
GenerateCollectionItemVO generateCollectionItemVO = new GenerateCollectionItemVO();
generateCollectionItemVO.setGenerateItemId(generateDetail.getId());
generateCollectionItemVO.setGenerateItemUrl(minioUtil.getPresignedUrl(item, 24 * 60));
generatedCollectionItems.add(generateCollectionItemVO);
@@ -124,19 +136,24 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
return new GenerateCollectionVO(generate.getId(), collectionId, generatedCollectionItems);
}
private void validateGeneraType(Generate generate, String text, Long elementId) {
switch (generate.getGenerateType()) {
private void validateGeneraType(Generate generate, String text, Long elementId,String generateType) {
switch (generateType) {
case "text":
Assert.notNull(text, "Please input the caption");
if (StringUtil.isNullOrEmpty(text)){
throw new BusinessException("please.input.the.caption");
}
generate.setText(text);
break;
case "image":
Assert.notNull(elementId, "Please choose a image");
if (Objects.isNull(elementId)){
throw new BusinessException("please.choose.an.image");
}
generate.setCollectionElementId(elementId);
break;
case "text-image":
Assert.isTrue(!StringUtil.isNullOrEmpty(text) && Objects.nonNull(elementId),
"Please input the caption and choose a image");
if (StringUtil.isNullOrEmpty(text) || Objects.isNull(elementId)){
throw new BusinessException("please.input.the.caption.and.choose.an.image");
}
generate.setText(text);
generate.setCollectionElementId(elementId);
default:
@@ -148,20 +165,27 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
// 1、判断参数是否正确
// 1.1 必须参数是否非空
if (SKETCH_BOARD.getRealName().equals(generateLikeDTO.getLevel1Type())) {
Assert.isTrue(!StringUtil.isNullOrEmpty(generateLikeDTO.getLevel2Type()), "level2Type cannot be empty");
if (StringUtil.isNullOrEmpty(generateLikeDTO.getLevel2Type())){
throw new BusinessException("level2Type.cannot.be.empty");
}
}
// 1.2 判断参数是否真实有效
Long generateDetailId = generateLikeDTO.getGenerateDetailId();
GenerateDetail generateDetail = generateDetailMapper.selectById(generateDetailId);
Assert.notNull(generateDetail, "generateItem does not exist");
if (Objects.isNull(generateDetail)){
throw new BusinessException("generateItem.does.not.exist");
}
Generate generate = getById(generateDetail.getGenerateId());
Assert.isTrue(generateLikeDTO.getLevel1Type().equals(generate.getLevel1Type()), "level1Type does not match");
if (!generateLikeDTO.getLevel1Type().equals(generate.getLevel1Type())){
throw new BusinessException("level1Type.does.not.match");
}
// 2、将like的图片信息存入library
// 2.1、不能重复喜欢
Library libraryDetail = libraryService.getById(generateDetail.getLibraryId());
Assert.isTrue(Objects.isNull(generateDetail.getLibraryId()) || Objects.isNull(libraryDetail),
"Duplicate likes are not allowed");
if (Objects.nonNull(generateDetail.getLibraryId()) || Objects.nonNull(libraryDetail)){
throw new BusinessException("duplicate.likes.are.not.allowed");
}
// 2.2、添加到library
AuthPrincipalVo userInfo = UserContext.getUserHolder();
Long accountId = userInfo.getId();
@@ -178,7 +202,9 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
public Boolean generateDislike(Long generateDetailId, String timeZone) {
// 1、确定generateDetail中是否有这条记录
GenerateDetail generateDetail = generateDetailMapper.selectById(generateDetailId);
Assert.notNull(generateDetail, "generateItem does not exist");
if (Objects.isNull(generateDetail)){
throw new BusinessException("generateItem.does.not.exist");
}
// 2、修改generateDetail表中的isLike、libraryId字段
updateLikeStatus(generateDetailId, (byte) 0, 0L, timeZone);

View File

@@ -1,22 +1,16 @@
package com.ai.da.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.json.JSONUtil;
import com.ai.da.common.config.exception.BusinessException;
import com.ai.da.common.enums.LibraryLevel1TypeEnum;
import com.ai.da.common.enums.SingleOverallEnum;
import com.ai.da.common.utils.CopyUtil;
import com.ai.da.common.utils.DateUtil;
import com.ai.da.mapper.LibraryModelPointMapper;
import com.ai.da.mapper.entity.*;
import com.ai.da.model.dto.DesignSingleDTO;
import com.ai.da.model.dto.DesignSingleItemDTO;
import com.ai.da.model.dto.LibraryModelPointDTO;
import com.ai.da.model.dto.ModelsDotDTO;
import com.ai.da.model.enums.ModelType;
import com.ai.da.model.vo.LibraryModelPointVO;
import com.ai.da.model.vo.LibraryUpdateVo;
import com.ai.da.python.PythonService;
import com.ai.da.python.vo.DesignPythonObjects;
import com.ai.da.service.DesignService;
@@ -27,17 +21,13 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.omg.PortableServer.LIFESPAN_POLICY_ID;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
/**
* 服务实现类

View File

@@ -2,13 +2,10 @@ package com.ai.da.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.ai.da.common.config.exception.BusinessException;
import com.ai.da.common.context.UserContext;
import com.ai.da.common.utils.CopyUtil;
import com.ai.da.common.utils.DateUtil;
import com.ai.da.common.utils.MinioUtil;
import com.ai.da.mapper.TDesignPythonOutfitMapper;
import com.ai.da.mapper.UserLikeGroupMapper;
import com.ai.da.mapper.entity.Account;
import com.ai.da.mapper.entity.TDesignPythonOutfit;
import com.ai.da.mapper.entity.UserLikeGroup;
import com.ai.da.model.vo.*;
@@ -20,7 +17,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import javax.annotation.Resource;
import java.util.Date;

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ai.da.mapper.GenerateDetailMapper">
<select id="getLibraryIdThroughMD5" resultType="java.util.Map">
select a.library_id
from t_generate_detail a
left join t_generate b
on a.generate_id = b.id
where a.md5 = #{md5}
and a.is_like = 1
and b.level1_type = #{level1Type}
</select>
</mapper>

View File

@@ -75,6 +75,11 @@ save.designItemDetail.failed=Save designItemDetail failed!
save.classification.failed=Save classification failed!
update.classification.failed=Update classification failed!
please.input.the.caption=Please input the caption!
please.choose.an.image=Please choose an image!
please.input.the.caption.and.choose.an.image=Please input the caption and choose an image!
duplicate.likes.are.not.allowed=Duplicate likes are not allowed!
layer.information.not.found=Layer information not found!
# 前端传参校验
singleOverall.cannot.be.empty=singleOverall cannot be empty!
colorBoards.cannot.be.empty=colorBoards cannot be empty!
@@ -139,4 +144,11 @@ path.cannot.be.empty=path cannot be empty!
classificationName.cannot.be.empty=classificationName cannot be empty!
classificationName.already.exists=ClassificationName already exists, please change it!
the.classification.you.deleted.has.associated.library=The classification you deleted has associated data, are you sure you want to delete it!
the.model.has.been.referenced.by.the.workspace=The model has been referenced by the workspace, are you sure you want to delete it!
the.model.has.been.referenced.by.the.workspace=The model has been referenced by the workspace, are you sure you want to delete it!
level2Type.cannot.be.empty=level2Type cannot be empty!
generateItem.does.not.exist=generateItem does not exist!
level1Type.does.not.match=level1Type does not match!
the.image.does.not.exist.please.reselect=the image does not exist, please reselect!
design.item.does.not.exist=design item does not exist!
layers.does.not.exists=layers does not exists!
unknown.generate.type=unknown generate type!