Merge remote-tracking branch 'origin/develop' into develop
# Conflicts: # src/main/resources/messages_en.properties
This commit is contained in:
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -34,7 +34,6 @@ public class GenerateController {
|
||||
return Response.success(generateService.generateCaption(sketchElementId));
|
||||
}
|
||||
|
||||
|
||||
@ApiOperation("通过文字、图片生成图片")
|
||||
@PostMapping("/sketchAndPrint")
|
||||
public Response<GenerateCollectionVO> generateThroughImageText(@Valid @RequestBody GenerateThroughImageTextDTO generateThroughImageTextDTO) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ public class GenerateThroughImageTextDTO {
|
||||
@ApiModelProperty("text image text-image")
|
||||
String generateType;
|
||||
|
||||
/** 暂时没有用上 */
|
||||
@ApiModelProperty("图片是update,还是从library中选择")
|
||||
String designType;
|
||||
|
||||
|
||||
@@ -13,4 +13,7 @@ public class GenerateCollectionItemVO {
|
||||
|
||||
@ApiModelProperty("generate生成图片的url")
|
||||
private String generateItemUrl;
|
||||
|
||||
@ApiModelProperty("生成的图片是否已经被like")
|
||||
private Boolean isLiked = Boolean.FALSE;
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
/**
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
/**
|
||||
* 服务实现类
|
||||
|
||||
@@ -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());*/
|
||||
|
||||
@@ -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")) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
/**
|
||||
* 服务实现类
|
||||
|
||||
@@ -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;
|
||||
|
||||
13
src/main/resources/mapper/GenerateDetailMapper.xml
Normal file
13
src/main/resources/mapper/GenerateDetailMapper.xml
Normal 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>
|
||||
@@ -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!
|
||||
Reference in New Issue
Block a user