局部design
This commit is contained in:
@@ -80,4 +80,8 @@ public class CommonConstant {
|
|||||||
public static final String TIME_FORMAT_MMM_dd_yyyy = "MMM. dd, yyyy";
|
public static final String TIME_FORMAT_MMM_dd_yyyy = "MMM. dd, yyyy";
|
||||||
|
|
||||||
public static final String AFFILIATE_LINK = "https://www.aida.com.hk?ref=";
|
public static final String AFFILIATE_LINK = "https://www.aida.com.hk?ref=";
|
||||||
|
|
||||||
|
public static final String PARTIAL_DESIGN_FILENAME = "PartialDesign";
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -95,6 +95,11 @@ public class DesignItemDetail implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private String undividedLayer;
|
private String undividedLayer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 局部design 只会有一张图
|
||||||
|
*/
|
||||||
|
private String partialDesign;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建时间
|
* 创建时间
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -65,4 +65,6 @@ public class DesignSingleItemDTO implements Serializable {
|
|||||||
@ApiModelProperty("mask 的minio地址")
|
@ApiModelProperty("mask 的minio地址")
|
||||||
private String maskMinioUrl;
|
private String maskMinioUrl;
|
||||||
|
|
||||||
|
private PartialDesignDTO partialDesignDTO;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
39
src/main/java/com/ai/da/model/dto/PartialDesignDTO.java
Normal file
39
src/main/java/com/ai/da/model/dto/PartialDesignDTO.java
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
package com.ai.da.model.dto;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class PartialDesignDTO implements Serializable {
|
||||||
|
|
||||||
|
@ApiModelProperty("图片的minio地址")
|
||||||
|
private String partialDesignMinioPath;
|
||||||
|
|
||||||
|
@ApiModelProperty("图片网页访问地址")
|
||||||
|
private String partialDesignPath;
|
||||||
|
|
||||||
|
@ApiModelProperty("图片的base64格式")
|
||||||
|
private String partialDesignBase64;
|
||||||
|
|
||||||
|
@ApiModelProperty("图层信息")
|
||||||
|
private List<String> layers;
|
||||||
|
|
||||||
|
public PartialDesignDTO(String partialDesignMinioPath) {
|
||||||
|
this.partialDesignMinioPath = partialDesignMinioPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PartialDesignDTO(String partialDesignMinioPath, List<String> layers) {
|
||||||
|
this.partialDesignMinioPath = partialDesignMinioPath;
|
||||||
|
this.layers = layers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PartialDesignDTO(String partialDesignMinioPath, String partialDesignPath) {
|
||||||
|
this.partialDesignMinioPath = partialDesignMinioPath;
|
||||||
|
this.partialDesignPath = partialDesignPath;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,6 +2,7 @@ package com.ai.da.model.vo;
|
|||||||
|
|
||||||
import com.ai.da.mapper.primary.entity.Gradient;
|
import com.ai.da.mapper.primary.entity.Gradient;
|
||||||
import com.ai.da.model.dto.DesignSinglePrintDTO;
|
import com.ai.da.model.dto.DesignSinglePrintDTO;
|
||||||
|
import com.ai.da.model.dto.PartialDesignDTO;
|
||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -61,6 +62,9 @@ public class DesignItemClothesDetailVO {
|
|||||||
@ApiModelProperty("未分割的图层")
|
@ApiModelProperty("未分割的图层")
|
||||||
private String undividedLayer;
|
private String undividedLayer;
|
||||||
|
|
||||||
|
@ApiModelProperty("局部design")
|
||||||
|
private PartialDesignDTO partialDesign;
|
||||||
|
|
||||||
public DesignItemClothesDetailVO() {
|
public DesignItemClothesDetailVO() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2731,7 +2731,8 @@ public class PythonService {
|
|||||||
minioPath,
|
minioPath,
|
||||||
gradientString,
|
gradientString,
|
||||||
/*designSingleItem.getMaskUrl()*/
|
/*designSingleItem.getMaskUrl()*/
|
||||||
null
|
null,
|
||||||
|
designSingleItem.getPartialDesignDTO().getPartialDesignMinioPath()
|
||||||
));
|
));
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -87,6 +87,11 @@ public class DesignPythonItem {
|
|||||||
*/
|
*/
|
||||||
private String seg_mask_url;
|
private String seg_mask_url;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 局部design
|
||||||
|
*/
|
||||||
|
private String partial_design;
|
||||||
|
|
||||||
public static List<String> OUTWEAR_DRESS_BLOUSE = Arrays.asList(CollectionLevel2TypeEnum.OUTWEAR.getRealName(),
|
public static List<String> OUTWEAR_DRESS_BLOUSE = Arrays.asList(CollectionLevel2TypeEnum.OUTWEAR.getRealName(),
|
||||||
CollectionLevel2TypeEnum.DRESS.getRealName(), CollectionLevel2TypeEnum.BLOUSE.getRealName());
|
CollectionLevel2TypeEnum.DRESS.getRealName(), CollectionLevel2TypeEnum.BLOUSE.getRealName());
|
||||||
|
|
||||||
@@ -140,7 +145,7 @@ public class DesignPythonItem {
|
|||||||
|
|
||||||
public DesignPythonItem(String type, String path, String color, PrintToPython print, Long businessId,
|
public DesignPythonItem(String type, String path, String color, PrintToPython print, Long businessId,
|
||||||
Long image_id, List<Long> offset, Float[] resize_scale, Integer priority, String gradient,
|
Long image_id, List<Long> offset, Float[] resize_scale, Integer priority, String gradient,
|
||||||
String gradientString, String seg_mask_url) {
|
String gradientString, String seg_mask_url, String partial_design) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.path = path;
|
this.path = path;
|
||||||
this.color = color;
|
this.color = color;
|
||||||
@@ -154,6 +159,7 @@ public class DesignPythonItem {
|
|||||||
this.gradient = gradient;
|
this.gradient = gradient;
|
||||||
this.gradientString = gradientString;
|
this.gradientString = gradientString;
|
||||||
this.seg_mask_url = seg_mask_url;
|
this.seg_mask_url = seg_mask_url;
|
||||||
|
this.partial_design = partial_design;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DesignPythonItem(String type, String path, String color, PrintToPython print, String icon, Long businessId, Long image_id) {
|
public DesignPythonItem(String type, String path, String color, PrintToPython print, String icon, Long businessId, Long image_id) {
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.fasterxml.jackson.databind.SerializationFeature;
|
import com.fasterxml.jackson.databind.SerializationFeature;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.mysql.cj.util.StringUtils;
|
|
||||||
import io.netty.util.internal.StringUtil;
|
import io.netty.util.internal.StringUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.SerializationUtils;
|
import org.apache.commons.lang3.SerializationUtils;
|
||||||
@@ -88,9 +87,10 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
|||||||
|
|
||||||
@Value("${minio.bucketName.modifiedSketch}")
|
@Value("${minio.bucketName.modifiedSketch}")
|
||||||
private String modifiedSketchBucket;
|
private String modifiedSketchBucket;
|
||||||
|
|
||||||
@Value("${minio.bucketName.clothing}")
|
@Value("${minio.bucketName.clothing}")
|
||||||
private String clothingBucket;
|
private String clothingBucket;
|
||||||
|
@Value("${minio.bucketName.partialDesign}")
|
||||||
|
private String partialDesignBucket;
|
||||||
@Autowired
|
@Autowired
|
||||||
private RedisUtil redisUtil;
|
private RedisUtil redisUtil;
|
||||||
|
|
||||||
@@ -358,11 +358,7 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
|||||||
}
|
}
|
||||||
designItemDetail.setIconPath(detail.getIcon());
|
designItemDetail.setIconPath(detail.getIcon());
|
||||||
designItemDetail.setUndividedLayer(categoryAndUndividedLayer.get(detail.getType().toLowerCase()));
|
designItemDetail.setUndividedLayer(categoryAndUndividedLayer.get(detail.getType().toLowerCase()));
|
||||||
// 印花存储在design_item_detail_print表中 这里还要存吗?
|
designItemDetail.setPartialDesign(detail.getPartial_design());
|
||||||
// DesignPythonItemPrint printObject = detail.getPrintToPython();
|
|
||||||
// designItemDetail.setPrintPath(Objects.isNull(printObject) ? "" : printObject.getPath());
|
|
||||||
// 当有多个印花后,返回的printObject太长,导致存储到数据库时报错
|
|
||||||
// designItemDetail.setPrintJson(JSON.toJSONString(printObject));
|
|
||||||
designItemDetails.add(designItemDetail);
|
designItemDetails.add(designItemDetail);
|
||||||
});
|
});
|
||||||
// businessId 来自t_sys_file或者t_library
|
// businessId 来自t_sys_file或者t_library
|
||||||
@@ -452,6 +448,11 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
|||||||
log.info("set labelingMask为空,便于日志打印");
|
log.info("set labelingMask为空,便于日志打印");
|
||||||
i.setMaskUrl(null);
|
i.setMaskUrl(null);
|
||||||
}
|
}
|
||||||
|
if (!Objects.isNull(i.getPartialDesignDTO()) &&
|
||||||
|
!StringUtil.isNullOrEmpty(i.getPartialDesignDTO().getPartialDesignBase64())){
|
||||||
|
log.info("set partialDesignBase64为空,便于日志打印");
|
||||||
|
i.getPartialDesignDTO().setPartialDesignBase64(null);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
log.info("designSingle request入参 ==> " + JSONObject.toJSONString(clone));
|
log.info("designSingle request入参 ==> " + JSONObject.toJSONString(clone));
|
||||||
@@ -516,6 +517,8 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
|||||||
// maskBase64ToPath(designSingleIncludeLayersDTO, setNull);
|
// maskBase64ToPath(designSingleIncludeLayersDTO, setNull);
|
||||||
maskBase64ToPath(designSingleIncludeLayersDTO, Boolean.TRUE);
|
maskBase64ToPath(designSingleIncludeLayersDTO, Boolean.TRUE);
|
||||||
|
|
||||||
|
partialDesignBase64ToImage(designSingleIncludeLayersDTO, userId);
|
||||||
|
|
||||||
// 组装入参
|
// 组装入参
|
||||||
DesignPythonObjects objects = pythonService.covertDesignSingleParam(
|
DesignPythonObjects objects = pythonService.covertDesignSingleParam(
|
||||||
designSingleIncludeLayersDTO, design.getSingleOverall(),
|
designSingleIncludeLayersDTO, design.getSingleOverall(),
|
||||||
@@ -556,7 +559,6 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<DesignPythonOutfitVO> detailsVO = new ArrayList<>();
|
List<DesignPythonOutfitVO> detailsVO = new ArrayList<>();
|
||||||
|
|
||||||
tDesignPythonOutfitDetails.forEach(detail -> {
|
tDesignPythonOutfitDetails.forEach(detail -> {
|
||||||
String type = detail.getImageCategory().split("_")[0];
|
String type = detail.getImageCategory().split("_")[0];
|
||||||
detailsVO.add(designPythonOutfitDetailService.convertToDesignPythonOutfitVO(detail, null));
|
detailsVO.add(designPythonOutfitDetailService.convertToDesignPythonOutfitVO(detail, null));
|
||||||
@@ -624,6 +626,31 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void partialDesignBase64ToImage(DesignSingleIncludeLayersDTO designSingleIncludeLayersDTO, Long accountId){
|
||||||
|
designSingleIncludeLayersDTO.getDesignSingleItemDTOList().forEach(item -> {
|
||||||
|
PartialDesignDTO partialDesignDTO = item.getPartialDesignDTO();
|
||||||
|
if (!Objects.isNull(item.getPartialDesignDTO())
|
||||||
|
&& !StringUtil.isNullOrEmpty(item.getPartialDesignDTO().getPartialDesignBase64())){
|
||||||
|
String path ;
|
||||||
|
if (!StringUtil.isNullOrEmpty(partialDesignDTO.getPartialDesignMinioPath())){
|
||||||
|
String sourcePath = partialDesignDTO.getPartialDesignMinioPath();
|
||||||
|
path = sourcePath.substring(sourcePath.indexOf("/") + 1, sourcePath.lastIndexOf("."));
|
||||||
|
}else {
|
||||||
|
path = accountId + "/" + CommonConstant.PARTIAL_DESIGN_FILENAME + "/" + UUID.randomUUID();
|
||||||
|
}
|
||||||
|
// todo 将原图地址作为修改后的图片地址,放在不同的桶
|
||||||
|
String newPath = minioUtil.base64UploadToPath(partialDesignDTO.getPartialDesignBase64(), partialDesignBucket, path);
|
||||||
|
if (StringUtil.isNullOrEmpty(newPath)){
|
||||||
|
log.error("局部design图片上传失败");
|
||||||
|
throw new BusinessException("partial.design.failed");
|
||||||
|
}
|
||||||
|
item.getPartialDesignDTO().setPartialDesignMinioPath(newPath);
|
||||||
|
}else {
|
||||||
|
item.setPartialDesignDTO(new PartialDesignDTO(null));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String, String> setTypeAndUndividedLayer(JSONArray layers){
|
public Map<String, String> setTypeAndUndividedLayer(JSONArray layers){
|
||||||
HashMap<String, String> categoryAndLayer = new HashMap<>();
|
HashMap<String, String> categoryAndLayer = new HashMap<>();
|
||||||
@@ -761,6 +788,9 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
|||||||
&& (flag ? Boolean.TRUE : singleItem.getPriority().equals(layers.getPriority())))
|
&& (flag ? Boolean.TRUE : singleItem.getPriority().equals(layers.getPriority())))
|
||||||
).collect(Collectors.toList()));
|
).collect(Collectors.toList()));
|
||||||
designItemClothesDetailVO.setGradient(singleItem.getGradient());
|
designItemClothesDetailVO.setGradient(singleItem.getGradient());
|
||||||
|
String partialDesignMinioPath = singleItem.getPartialDesignDTO().getPartialDesignMinioPath();
|
||||||
|
String preSignedUrl = StringUtil.isNullOrEmpty(partialDesignMinioPath) ? null : minioUtil.getPreSignedUrl(partialDesignMinioPath, CommonConstant.MINIO_IMAGE_EXPIRE_TIME, true);
|
||||||
|
designItemClothesDetailVO.setPartialDesign(new PartialDesignDTO(partialDesignMinioPath, preSignedUrl));
|
||||||
if (categoryAndUndividedLayer.containsKey(singleItem.getType().toLowerCase())) designItemClothesDetailVO.setUndividedLayer(minioUtil.getPreSignedUrl(categoryAndUndividedLayer.get(singleItem.getType().toLowerCase()), CommonConstant.MINIO_IMAGE_EXPIRE_TIME, true));
|
if (categoryAndUndividedLayer.containsKey(singleItem.getType().toLowerCase())) designItemClothesDetailVO.setUndividedLayer(minioUtil.getPreSignedUrl(categoryAndUndividedLayer.get(singleItem.getType().toLowerCase()), CommonConstant.MINIO_IMAGE_EXPIRE_TIME, true));
|
||||||
body.setLayersObject(layersObject.stream().filter(layers -> layers.getImageCategory().equals("body")).collect(Collectors.toList()));
|
body.setLayersObject(layersObject.stream().filter(layers -> layers.getImageCategory().equals("body")).collect(Collectors.toList()));
|
||||||
|
|
||||||
|
|||||||
@@ -150,6 +150,7 @@ only.original.works.can.participate.in.the.event=Sorry, only original works can
|
|||||||
remaining.credits.insufficient=Your remaining credits are insufficient for this generation. Please recharge.
|
remaining.credits.insufficient=Your remaining credits are insufficient for this generation. Please recharge.
|
||||||
you.haven't.subscribed.to.any.products.yet=You haven't subscribed to any products yet
|
you.haven't.subscribed.to.any.products.yet=You haven't subscribed to any products yet
|
||||||
generate.result.below.standard=The quality of the generated images currently falls below standard. Please consider adjusting your prompt and trying again.
|
generate.result.below.standard=The quality of the generated images currently falls below standard. Please consider adjusting your prompt and trying again.
|
||||||
|
partial.design.failed=Partial design failed, Please try again later.
|
||||||
|
|
||||||
# 可能会报异常
|
# 可能会报异常
|
||||||
# Informative:
|
# Informative:
|
||||||
|
|||||||
@@ -130,6 +130,7 @@ the.workspace.lastIndex.not.found=未找到工作区的lastIndex。
|
|||||||
gender.cannot.be.empty=性别不能为空。
|
gender.cannot.be.empty=性别不能为空。
|
||||||
image.synthesis.failed=图像合成失败。
|
image.synthesis.failed=图像合成失败。
|
||||||
priority.cannot.be.repeated=优先级不能重复。
|
priority.cannot.be.repeated=优先级不能重复。
|
||||||
|
image.modify.failed=图片修改失败,请稍后重试。
|
||||||
slogan.style.cannot.be.empty=标语风格文本不能为空。
|
slogan.style.cannot.be.empty=标语风格文本不能为空。
|
||||||
slogan.image.cannot.be.empty=标语图片不能为空。
|
slogan.image.cannot.be.empty=标语图片不能为空。
|
||||||
questionnaire.filled.out=您已填写过当前问卷。
|
questionnaire.filled.out=您已填写过当前问卷。
|
||||||
@@ -145,6 +146,7 @@ only.original.works.can.participate.in.the.event=抱歉,只有原创作品能
|
|||||||
remaining.credits.insufficient=您的剩余积分不够本次生成消耗,请充值
|
remaining.credits.insufficient=您的剩余积分不够本次生成消耗,请充值
|
||||||
you.haven't.subscribed.to.any.products.yet=您还未订阅任何产品
|
you.haven't.subscribed.to.any.products.yet=您还未订阅任何产品
|
||||||
generate.result.below.standard=当前生成的图像质量低于标准。请考虑调整您的提示词并再次尝试
|
generate.result.below.standard=当前生成的图像质量低于标准。请考虑调整您的提示词并再次尝试
|
||||||
|
partial.design.failed=局部设计失败。请稍后重试。
|
||||||
|
|
||||||
# 可能会报异常
|
# 可能会报异常
|
||||||
# Informative:
|
# Informative:
|
||||||
|
|||||||
Reference in New Issue
Block a user