新增generate like功能,及新增一次上传多张图片功能
This commit is contained in:
30
src/main/java/com/ai/da/common/enums/GenerateTypeEnum.java
Normal file
30
src/main/java/com/ai/da/common/enums/GenerateTypeEnum.java
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
package com.ai.da.common.enums;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public enum GenerateTypeEnum {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过文本生成
|
||||||
|
*/
|
||||||
|
TEXT(1,"text"),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过图片生成
|
||||||
|
*/
|
||||||
|
IMAGE(2,"image"),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过文本和图片生成
|
||||||
|
*/
|
||||||
|
TEXT_IMAGE(2,"text-image");
|
||||||
|
|
||||||
|
private Integer code;
|
||||||
|
private String value;
|
||||||
|
|
||||||
|
GenerateTypeEnum(int code,String value) {
|
||||||
|
this.code = code;
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
22
src/main/java/com/ai/da/common/enums/ModelNameEnum.java
Normal file
22
src/main/java/com/ai/da/common/enums/ModelNameEnum.java
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
package com.ai.da.common.enums;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public enum ModelNameEnum {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 使用模型0
|
||||||
|
*/
|
||||||
|
MODEL_0("0","model_0");
|
||||||
|
|
||||||
|
|
||||||
|
private String code;
|
||||||
|
private String modelName;
|
||||||
|
|
||||||
|
|
||||||
|
ModelNameEnum(String code,String modelName) {
|
||||||
|
this.code = code;
|
||||||
|
this.modelName = modelName;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,9 +1,11 @@
|
|||||||
package com.ai.da.controller;
|
package com.ai.da.controller;
|
||||||
|
|
||||||
import com.ai.da.common.response.Response;
|
import com.ai.da.common.response.Response;
|
||||||
|
import com.ai.da.model.dto.GenerateLikeDTO;
|
||||||
import com.ai.da.model.dto.GenerateThroughImageTextDTO;
|
import com.ai.da.model.dto.GenerateThroughImageTextDTO;
|
||||||
import com.ai.da.model.vo.GenerateCaptionVO;
|
import com.ai.da.model.vo.GenerateCaptionVO;
|
||||||
import com.ai.da.model.vo.GenerateCollectionVO;
|
import com.ai.da.model.vo.GenerateCollectionVO;
|
||||||
|
import com.ai.da.model.vo.GenerateLikeVO;
|
||||||
import com.ai.da.service.GenerateService;
|
import com.ai.da.service.GenerateService;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
@@ -38,10 +40,10 @@ public class GenerateController {
|
|||||||
return Response.success(generateService.generateThroughImageText(generateThroughImageTextDTO));
|
return Response.success(generateService.generateThroughImageText(generateThroughImageTextDTO));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ApiOperation("喜欢生成的图片")
|
||||||
|
@PostMapping("/like")
|
||||||
|
public Response<GenerateLikeVO> like(@Valid @RequestBody GenerateLikeDTO generateLikeDTO){
|
||||||
|
return Response.success(generateService.generateLike(generateLikeDTO));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,6 +52,16 @@ public class PythonController {
|
|||||||
return Response.success(pythonService.upload(file, operateType));
|
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 = "通过文件类型获取系统文件")
|
@ApiOperation(value = "通过文件类型获取系统文件")
|
||||||
@GetMapping("/getSysFileByLevel2Type")
|
@GetMapping("/getSysFileByLevel2Type")
|
||||||
public Response<List<SysFileVO>> getSysFileByLevel2Type(/*@RequestParam(value = "level2Type",required = false) String level2Type*/) {
|
public Response<List<SysFileVO>> getSysFileByLevel2Type(/*@RequestParam(value = "level2Type",required = false) String level2Type*/) {
|
||||||
|
|||||||
@@ -27,6 +27,11 @@ public class Generate {
|
|||||||
*/
|
*/
|
||||||
private Long accountId;
|
private Long accountId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sketchboard Printboard
|
||||||
|
*/
|
||||||
|
private String level1Type;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 关联collection element id
|
* 关联collection element id
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -32,6 +32,11 @@ public class GenerateDetail {
|
|||||||
*/
|
*/
|
||||||
private String url;
|
private String url;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否喜欢 0:dislike 1:like
|
||||||
|
*/
|
||||||
|
private Byte isLike;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建时间
|
* 创建时间
|
||||||
*/
|
*/
|
||||||
|
|||||||
28
src/main/java/com/ai/da/model/dto/GenerateLikeDTO.java
Normal file
28
src/main/java/com/ai/da/model/dto/GenerateLikeDTO.java
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
package com.ai.da.model.dto;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@ApiModel("Generate like入参")
|
||||||
|
public class GenerateLikeDTO {
|
||||||
|
|
||||||
|
@NotNull(message = "generateDetail id cannot be empty!")
|
||||||
|
@ApiModelProperty("generateDetailId")
|
||||||
|
private Long generateDetailId;
|
||||||
|
|
||||||
|
@NotBlank(message = "level1Type cannot be empty!")
|
||||||
|
@ApiModelProperty("一级类型 Sketchboard Printboard")
|
||||||
|
private String level1Type;
|
||||||
|
|
||||||
|
@ApiModelProperty("当一级类型为Sketchboard时,二级类型 Outwear Dress Blouse Skirt Trousers")
|
||||||
|
private String level2Type;
|
||||||
|
|
||||||
|
@NotBlank(message = "timeZone cannot be empty!")
|
||||||
|
@ApiModelProperty("本地时区,比如 'Asia/Tokyo' 东京时间 , 'Asia/Shanghai' 北京时间 由js本地获取")
|
||||||
|
private String timeZone;
|
||||||
|
}
|
||||||
20
src/main/java/com/ai/da/model/vo/GenerateLikeVO.java
Normal file
20
src/main/java/com/ai/da/model/vo/GenerateLikeVO.java
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
package com.ai.da.model.vo;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@ApiModel("generate like 响应")
|
||||||
|
public class GenerateLikeVO {
|
||||||
|
|
||||||
|
@ApiModelProperty("like的图片加入library的id")
|
||||||
|
private Long libraryId;
|
||||||
|
|
||||||
|
public GenerateLikeVO(Long libraryId) {
|
||||||
|
this.libraryId = libraryId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public GenerateLikeVO() {
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -145,6 +145,28 @@ public class PythonService {
|
|||||||
return null;
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private String calculateFileUrl(PythonToJavaApiOperationTypeEnum operationType) {
|
private String calculateFileUrl(PythonToJavaApiOperationTypeEnum operationType) {
|
||||||
String rootPath = fileProperties.getSys().getPath();
|
String rootPath = fileProperties.getSys().getPath();
|
||||||
String day = DateUtil.dateToStr(new Date(), DateUtil.YYYYMM);
|
String day = DateUtil.dateToStr(new Date(), DateUtil.YYYYMM);
|
||||||
|
|||||||
@@ -1,12 +1,16 @@
|
|||||||
package com.ai.da.service;
|
package com.ai.da.service;
|
||||||
|
|
||||||
|
import com.ai.da.model.dto.GenerateLikeDTO;
|
||||||
import com.ai.da.model.dto.GenerateThroughImageTextDTO;
|
import com.ai.da.model.dto.GenerateThroughImageTextDTO;
|
||||||
import com.ai.da.model.vo.GenerateCaptionVO;
|
import com.ai.da.model.vo.GenerateCaptionVO;
|
||||||
import com.ai.da.model.vo.GenerateCollectionVO;
|
import com.ai.da.model.vo.GenerateCollectionVO;
|
||||||
|
import com.ai.da.model.vo.GenerateLikeVO;
|
||||||
|
|
||||||
public interface GenerateService {
|
public interface GenerateService {
|
||||||
|
|
||||||
GenerateCaptionVO generateCaption(Long sketchElementId);
|
GenerateCaptionVO generateCaption(Long sketchElementId);
|
||||||
|
|
||||||
GenerateCollectionVO generateThroughImageText(GenerateThroughImageTextDTO generateThroughImageTextDTO);
|
GenerateCollectionVO generateThroughImageText(GenerateThroughImageTextDTO generateThroughImageTextDTO);
|
||||||
|
|
||||||
|
GenerateLikeVO generateLike(GenerateLikeDTO generateLikeDTO);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,30 +2,28 @@ package com.ai.da.service.impl;
|
|||||||
|
|
||||||
import cn.hutool.core.lang.Assert;
|
import cn.hutool.core.lang.Assert;
|
||||||
import com.ai.da.common.context.UserContext;
|
import com.ai.da.common.context.UserContext;
|
||||||
|
import com.ai.da.common.enums.CollectionLevel1TypeEnum;
|
||||||
|
import com.ai.da.common.enums.GenerateTypeEnum;
|
||||||
|
import com.ai.da.common.enums.ModelNameEnum;
|
||||||
import com.ai.da.common.utils.DateUtil;
|
import com.ai.da.common.utils.DateUtil;
|
||||||
|
import com.ai.da.common.utils.MD5Utils;
|
||||||
import com.ai.da.mapper.CollectionElementMapper;
|
import com.ai.da.mapper.CollectionElementMapper;
|
||||||
import com.ai.da.mapper.GenerateDetailMapper;
|
import com.ai.da.mapper.GenerateDetailMapper;
|
||||||
import com.ai.da.mapper.GenerateMapper;
|
import com.ai.da.mapper.GenerateMapper;
|
||||||
import com.ai.da.mapper.entity.CollectionElement;
|
import com.ai.da.mapper.entity.*;
|
||||||
import com.ai.da.mapper.entity.Generate;
|
import com.ai.da.model.dto.GenerateLikeDTO;
|
||||||
import com.ai.da.mapper.entity.GenerateDetail;
|
|
||||||
import com.ai.da.model.dto.GenerateThroughImageTextDTO;
|
import com.ai.da.model.dto.GenerateThroughImageTextDTO;
|
||||||
import com.ai.da.model.vo.AuthPrincipalVo;
|
import com.ai.da.model.vo.*;
|
||||||
import com.ai.da.model.vo.GenerateCaptionVO;
|
|
||||||
import com.ai.da.model.vo.GenerateCollectionItemVO;
|
|
||||||
import com.ai.da.model.vo.GenerateCollectionVO;
|
|
||||||
import com.ai.da.python.PythonService;
|
import com.ai.da.python.PythonService;
|
||||||
import com.ai.da.service.GenerateService;
|
import com.ai.da.service.GenerateService;
|
||||||
|
import com.ai.da.service.LibraryService;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import io.netty.util.internal.StringUtil;
|
import io.netty.util.internal.StringUtil;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class GenerateServiceImpl extends ServiceImpl<GenerateMapper,Generate> implements GenerateService {
|
public class GenerateServiceImpl extends ServiceImpl<GenerateMapper,Generate> implements GenerateService {
|
||||||
@@ -36,6 +34,9 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper,Generate> im
|
|||||||
@Resource
|
@Resource
|
||||||
private GenerateDetailMapper generateDetailMapper;
|
private GenerateDetailMapper generateDetailMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private LibraryService libraryService;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private PythonService pythonService;
|
private PythonService pythonService;
|
||||||
|
|
||||||
@@ -67,15 +68,15 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper,Generate> im
|
|||||||
Generate generate = new Generate();
|
Generate generate = new Generate();
|
||||||
generate.setAccountId(accountId);
|
generate.setAccountId(accountId);
|
||||||
generate.setGenerateType(generateType);
|
generate.setGenerateType(generateType);
|
||||||
generate.setModelName(StringUtil.isNullOrEmpty(modelName) ? "0" : modelName);
|
generate.setModelName(StringUtil.isNullOrEmpty(modelName) ? ModelNameEnum.MODEL_0.getCode() : modelName);
|
||||||
generate.setCreateDate(DateUtil.getByTimeZone(generateThroughImageTextDTO.getTimeZone()));
|
generate.setCreateDate(DateUtil.getByTimeZone(generateThroughImageTextDTO.getTimeZone()));
|
||||||
|
|
||||||
int mode = 2;
|
int mode = GenerateTypeEnum.TEXT_IMAGE.getCode();
|
||||||
switch(generateType){
|
switch(generateType){
|
||||||
case "text":
|
case "text":
|
||||||
Assert.notNull(text,"Please input the caption");
|
Assert.notNull(text,"Please input the caption");
|
||||||
generate.setText(text);
|
generate.setText(text);
|
||||||
mode = 1;
|
mode = GenerateTypeEnum.TEXT.getCode();
|
||||||
break;
|
break;
|
||||||
case "image":
|
case "image":
|
||||||
Assert.notNull(elementId,"Please choose a image");
|
Assert.notNull(elementId,"Please choose a image");
|
||||||
@@ -86,19 +87,17 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper,Generate> im
|
|||||||
"Please input the caption and choose a image");
|
"Please input the caption and choose a image");
|
||||||
generate.setText(text);
|
generate.setText(text);
|
||||||
generate.setCollectionElementId(elementId);
|
generate.setCollectionElementId(elementId);
|
||||||
break;
|
default:
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3、将请求信息落库
|
// 3、将请求信息落库
|
||||||
// 3.1 sketch在t_collection_element表中的信息是否需要更新 如 level2Type
|
// 3.1 sketch或print在t_collection_element表中的信息是否需要更新 如 level2Type
|
||||||
CollectionElement collectionElement = null;
|
CollectionElement collectionElement = null;
|
||||||
if(!Objects.isNull(elementId)){
|
if(!Objects.isNull(elementId)){
|
||||||
collectionElement = collectionElementMapper.selectById(elementId);
|
collectionElement = collectionElementMapper.selectById(elementId);
|
||||||
if (StringUtil.isNullOrEmpty(collectionElement.getLevel2Type()) || !(collectionElement.getLevel2Type()).equals(generateThroughImageTextDTO.getLevel2Type()) ){
|
if (StringUtil.isNullOrEmpty(collectionElement.getLevel2Type()) || !(collectionElement.getLevel2Type()).equals(generateThroughImageTextDTO.getLevel2Type()) ){
|
||||||
collectionElement.setLevel2Type(generateThroughImageTextDTO.getLevel2Type());
|
collectionElement.setLevel2Type(generateThroughImageTextDTO.getLevel2Type());
|
||||||
QueryWrapper<CollectionElement> queryWrapper = new QueryWrapper<>();
|
collectionElementMapper.updateById(collectionElement);
|
||||||
queryWrapper.eq("id", elementId);
|
|
||||||
collectionElementMapper.update(collectionElement,queryWrapper);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -134,4 +133,51 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper,Generate> im
|
|||||||
// 6、将模型返回的图片地址返回给前端
|
// 6、将模型返回的图片地址返回给前端
|
||||||
return generateCollectionVO;
|
return generateCollectionVO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GenerateLikeVO generateLike(GenerateLikeDTO generateLikeDTO) {
|
||||||
|
// 1、判断参数是否正确
|
||||||
|
// 1.1 必须参数是否非空
|
||||||
|
if(CollectionLevel1TypeEnum.SKETCH_BOARD.getRealName().equals(generateLikeDTO.getLevel1Type()) ){
|
||||||
|
Assert.isTrue(!StringUtil.isNullOrEmpty(generateLikeDTO.getLevel2Type()),"level2Type cannot be empty");
|
||||||
|
}
|
||||||
|
// 1.2 判断参数是否真实有效
|
||||||
|
Long generateDetailId = generateLikeDTO.getGenerateDetailId();
|
||||||
|
GenerateDetail generateDetail = generateDetailMapper.selectById(generateDetailId);
|
||||||
|
Assert.notNull(generateDetail,"generateItem does not exist");
|
||||||
|
Generate generate = getById(generateDetail.getGenerateId());
|
||||||
|
Assert.isTrue(generateLikeDTO.getLevel1Type().equals(generate.getLevel1Type()),"level1Type does not match");
|
||||||
|
|
||||||
|
// 2、将like的图片信息存入library
|
||||||
|
AuthPrincipalVo userInfo = UserContext.getUserHolder();
|
||||||
|
Long accountId = userInfo.getId();
|
||||||
|
Library library = setLibrary(accountId, generateLikeDTO, generateDetail.getUrl());
|
||||||
|
libraryService.save(library);
|
||||||
|
|
||||||
|
// 3、更新generateDetail表的isLike列
|
||||||
|
updateLikeStatus(generateLikeDTO.getGenerateDetailId(),(byte)1);
|
||||||
|
|
||||||
|
return new GenerateLikeVO(library.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
public Library setLibrary(Long accountId,GenerateLikeDTO generateLikeDTO,String imageUrl){
|
||||||
|
Library library = new Library();
|
||||||
|
library.setAccountId(accountId);
|
||||||
|
library.setLevel1Type(generateLikeDTO.getLevel1Type());
|
||||||
|
library.setLevel2Type(StringUtil.isNullOrEmpty(generateLikeDTO.getLevel2Type()) ? null : generateLikeDTO.getLevel2Type());
|
||||||
|
library.setName(DateUtil.dateToStr(new Date(),DateUtil.YYYY_MM_DD));
|
||||||
|
library.setUrl(imageUrl);
|
||||||
|
library.setMd5(MD5Utils.encryptFile(imageUrl,Boolean.FALSE));
|
||||||
|
library.setCreateDate(DateUtil.getByTimeZone(generateLikeDTO.getTimeZone()));
|
||||||
|
return library;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateLikeStatus(Long generateDetailId,Byte hasLike){
|
||||||
|
QueryWrapper<GenerateDetail> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.eq("id", generateDetailId);
|
||||||
|
|
||||||
|
GenerateDetail generateDetail = new GenerateDetail();
|
||||||
|
generateDetail.setIsLike(hasLike);
|
||||||
|
generateDetailMapper.update(generateDetail,queryWrapper);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user