Merge branch 'dev/dev_xp' into dev/dev
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 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;
|
||||
|
||||
/**
|
||||
* 局部design 只会有一张图
|
||||
*/
|
||||
private String partialDesign;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
|
||||
@@ -65,4 +65,6 @@ public class DesignSingleItemDTO implements Serializable {
|
||||
@ApiModelProperty("mask 的minio地址")
|
||||
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.model.dto.DesignSinglePrintDTO;
|
||||
import com.ai.da.model.dto.PartialDesignDTO;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
@@ -61,6 +62,9 @@ public class DesignItemClothesDetailVO {
|
||||
@ApiModelProperty("未分割的图层")
|
||||
private String undividedLayer;
|
||||
|
||||
@ApiModelProperty("局部design")
|
||||
private PartialDesignDTO partialDesign;
|
||||
|
||||
public DesignItemClothesDetailVO() {
|
||||
}
|
||||
|
||||
|
||||
@@ -2731,7 +2731,8 @@ public class PythonService {
|
||||
minioPath,
|
||||
gradientString,
|
||||
/*designSingleItem.getMaskUrl()*/
|
||||
null
|
||||
null,
|
||||
designSingleItem.getPartialDesignDTO().getPartialDesignMinioPath()
|
||||
));
|
||||
|
||||
});
|
||||
|
||||
@@ -87,6 +87,11 @@ public class DesignPythonItem {
|
||||
*/
|
||||
private String seg_mask_url;
|
||||
|
||||
/**
|
||||
* 局部design
|
||||
*/
|
||||
private String partial_design;
|
||||
|
||||
public static List<String> OUTWEAR_DRESS_BLOUSE = Arrays.asList(CollectionLevel2TypeEnum.OUTWEAR.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,
|
||||
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.path = path;
|
||||
this.color = color;
|
||||
@@ -154,6 +159,7 @@ public class DesignPythonItem {
|
||||
this.gradient = gradient;
|
||||
this.gradientString = gradientString;
|
||||
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) {
|
||||
|
||||
@@ -26,7 +26,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.SerializationFeature;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.mysql.cj.util.StringUtils;
|
||||
import io.netty.util.internal.StringUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.SerializationUtils;
|
||||
@@ -88,9 +87,10 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
||||
|
||||
@Value("${minio.bucketName.modifiedSketch}")
|
||||
private String modifiedSketchBucket;
|
||||
|
||||
@Value("${minio.bucketName.clothing}")
|
||||
private String clothingBucket;
|
||||
@Value("${minio.bucketName.partialDesign}")
|
||||
private String partialDesignBucket;
|
||||
@Autowired
|
||||
private RedisUtil redisUtil;
|
||||
|
||||
@@ -358,11 +358,7 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
||||
}
|
||||
designItemDetail.setIconPath(detail.getIcon());
|
||||
designItemDetail.setUndividedLayer(categoryAndUndividedLayer.get(detail.getType().toLowerCase()));
|
||||
// 印花存储在design_item_detail_print表中 这里还要存吗?
|
||||
// DesignPythonItemPrint printObject = detail.getPrintToPython();
|
||||
// designItemDetail.setPrintPath(Objects.isNull(printObject) ? "" : printObject.getPath());
|
||||
// 当有多个印花后,返回的printObject太长,导致存储到数据库时报错
|
||||
// designItemDetail.setPrintJson(JSON.toJSONString(printObject));
|
||||
designItemDetail.setPartialDesign(detail.getPartial_design());
|
||||
designItemDetails.add(designItemDetail);
|
||||
});
|
||||
// businessId 来自t_sys_file或者t_library
|
||||
@@ -452,6 +448,11 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
||||
log.info("set labelingMask为空,便于日志打印");
|
||||
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));
|
||||
@@ -516,6 +517,8 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
||||
// maskBase64ToPath(designSingleIncludeLayersDTO, setNull);
|
||||
maskBase64ToPath(designSingleIncludeLayersDTO, Boolean.TRUE);
|
||||
|
||||
partialDesignBase64ToImage(designSingleIncludeLayersDTO, userId);
|
||||
|
||||
// 组装入参
|
||||
DesignPythonObjects objects = pythonService.covertDesignSingleParam(
|
||||
designSingleIncludeLayersDTO, design.getSingleOverall(),
|
||||
@@ -556,7 +559,6 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
||||
}
|
||||
|
||||
List<DesignPythonOutfitVO> detailsVO = new ArrayList<>();
|
||||
|
||||
tDesignPythonOutfitDetails.forEach(detail -> {
|
||||
String type = detail.getImageCategory().split("_")[0];
|
||||
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
|
||||
public Map<String, String> setTypeAndUndividedLayer(JSONArray layers){
|
||||
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())))
|
||||
).collect(Collectors.toList()));
|
||||
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));
|
||||
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.
|
||||
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.
|
||||
partial.design.failed=Partial design failed, Please try again later.
|
||||
|
||||
# 可能会报异常
|
||||
# Informative:
|
||||
|
||||
@@ -130,6 +130,7 @@ the.workspace.lastIndex.not.found=未找到工作区的lastIndex。
|
||||
gender.cannot.be.empty=性别不能为空。
|
||||
image.synthesis.failed=图像合成失败。
|
||||
priority.cannot.be.repeated=优先级不能重复。
|
||||
image.modify.failed=图片修改失败,请稍后重试。
|
||||
slogan.style.cannot.be.empty=标语风格文本不能为空。
|
||||
slogan.image.cannot.be.empty=标语图片不能为空。
|
||||
questionnaire.filled.out=您已填写过当前问卷。
|
||||
@@ -145,6 +146,7 @@ only.original.works.can.participate.in.the.event=抱歉,只有原创作品能
|
||||
remaining.credits.insufficient=您的剩余积分不够本次生成消耗,请充值
|
||||
you.haven't.subscribed.to.any.products.yet=您还未订阅任何产品
|
||||
generate.result.below.standard=当前生成的图像质量低于标准。请考虑调整您的提示词并再次尝试
|
||||
partial.design.failed=局部设计失败。请稍后重试。
|
||||
|
||||
# 可能会报异常
|
||||
# Informative:
|
||||
|
||||
Reference in New Issue
Block a user