From cf38e7253f9079d2f5badabec82f0f04e1773a59 Mon Sep 17 00:00:00 2001 From: xupei Date: Tue, 25 Feb 2025 11:48:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B1=80=E9=83=A8design?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ai/da/common/constant/CommonConstant.java | 4 ++ .../primary/entity/DesignItemDetail.java | 5 ++ .../ai/da/model/dto/DesignSingleItemDTO.java | 2 + .../com/ai/da/model/dto/PartialDesignDTO.java | 39 ++++++++++++++++ .../model/vo/DesignItemClothesDetailVO.java | 4 ++ .../java/com/ai/da/python/PythonService.java | 3 +- .../com/ai/da/python/vo/DesignPythonItem.java | 8 +++- .../service/impl/DesignItemServiceImpl.java | 46 +++++++++++++++---- src/main/resources/messages_en.properties | 1 + src/main/resources/messages_zh.properties | 2 + 10 files changed, 104 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/ai/da/model/dto/PartialDesignDTO.java diff --git a/src/main/java/com/ai/da/common/constant/CommonConstant.java b/src/main/java/com/ai/da/common/constant/CommonConstant.java index 35ff4504..708bb2e5 100644 --- a/src/main/java/com/ai/da/common/constant/CommonConstant.java +++ b/src/main/java/com/ai/da/common/constant/CommonConstant.java @@ -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"; + + } diff --git a/src/main/java/com/ai/da/mapper/primary/entity/DesignItemDetail.java b/src/main/java/com/ai/da/mapper/primary/entity/DesignItemDetail.java index a2daa110..8ccdb04b 100644 --- a/src/main/java/com/ai/da/mapper/primary/entity/DesignItemDetail.java +++ b/src/main/java/com/ai/da/mapper/primary/entity/DesignItemDetail.java @@ -95,6 +95,11 @@ public class DesignItemDetail implements Serializable { */ private String undividedLayer; + /** + * 局部design 只会有一张图 + */ + private String partialDesign; + /** * 创建时间 */ diff --git a/src/main/java/com/ai/da/model/dto/DesignSingleItemDTO.java b/src/main/java/com/ai/da/model/dto/DesignSingleItemDTO.java index c3ffd2e7..39aa0c9c 100644 --- a/src/main/java/com/ai/da/model/dto/DesignSingleItemDTO.java +++ b/src/main/java/com/ai/da/model/dto/DesignSingleItemDTO.java @@ -65,4 +65,6 @@ public class DesignSingleItemDTO implements Serializable { @ApiModelProperty("mask 的minio地址") private String maskMinioUrl; + private PartialDesignDTO partialDesignDTO; + } diff --git a/src/main/java/com/ai/da/model/dto/PartialDesignDTO.java b/src/main/java/com/ai/da/model/dto/PartialDesignDTO.java new file mode 100644 index 00000000..5d7eff65 --- /dev/null +++ b/src/main/java/com/ai/da/model/dto/PartialDesignDTO.java @@ -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 layers; + + public PartialDesignDTO(String partialDesignMinioPath) { + this.partialDesignMinioPath = partialDesignMinioPath; + } + + public PartialDesignDTO(String partialDesignMinioPath, List layers) { + this.partialDesignMinioPath = partialDesignMinioPath; + this.layers = layers; + } + + public PartialDesignDTO(String partialDesignMinioPath, String partialDesignPath) { + this.partialDesignMinioPath = partialDesignMinioPath; + this.partialDesignPath = partialDesignPath; + } +} diff --git a/src/main/java/com/ai/da/model/vo/DesignItemClothesDetailVO.java b/src/main/java/com/ai/da/model/vo/DesignItemClothesDetailVO.java index 10969e4e..8612a21b 100644 --- a/src/main/java/com/ai/da/model/vo/DesignItemClothesDetailVO.java +++ b/src/main/java/com/ai/da/model/vo/DesignItemClothesDetailVO.java @@ -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() { } diff --git a/src/main/java/com/ai/da/python/PythonService.java b/src/main/java/com/ai/da/python/PythonService.java index 31c9c43a..6e1e75a7 100644 --- a/src/main/java/com/ai/da/python/PythonService.java +++ b/src/main/java/com/ai/da/python/PythonService.java @@ -2731,7 +2731,8 @@ public class PythonService { minioPath, gradientString, /*designSingleItem.getMaskUrl()*/ - null + null, + designSingleItem.getPartialDesignDTO().getPartialDesignMinioPath() )); }); diff --git a/src/main/java/com/ai/da/python/vo/DesignPythonItem.java b/src/main/java/com/ai/da/python/vo/DesignPythonItem.java index 92e3892b..bc63d052 100644 --- a/src/main/java/com/ai/da/python/vo/DesignPythonItem.java +++ b/src/main/java/com/ai/da/python/vo/DesignPythonItem.java @@ -87,6 +87,11 @@ public class DesignPythonItem { */ private String seg_mask_url; + /** + * 局部design + */ + private String partial_design; + public static List 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 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) { diff --git a/src/main/java/com/ai/da/service/impl/DesignItemServiceImpl.java b/src/main/java/com/ai/da/service/impl/DesignItemServiceImpl.java index 0c4159d3..5cfbd8c1 100644 --- a/src/main/java/com/ai/da/service/impl/DesignItemServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/DesignItemServiceImpl.java @@ -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 " + JSONObject.toJSONString(clone)); @@ -516,6 +517,8 @@ public class DesignItemServiceImpl extends ServiceImpl 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 { + 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 setTypeAndUndividedLayer(JSONArray layers){ HashMap categoryAndLayer = new HashMap<>(); @@ -761,6 +788,9 @@ public class DesignItemServiceImpl extends ServiceImpl layers.getImageCategory().equals("body")).collect(Collectors.toList())); diff --git a/src/main/resources/messages_en.properties b/src/main/resources/messages_en.properties index a40e7125..7599e966 100644 --- a/src/main/resources/messages_en.properties +++ b/src/main/resources/messages_en.properties @@ -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: diff --git a/src/main/resources/messages_zh.properties b/src/main/resources/messages_zh.properties index 803945e7..d16d1a1a 100644 --- a/src/main/resources/messages_zh.properties +++ b/src/main/resources/messages_zh.properties @@ -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: