From 51548b52baef3e86c9a82af878f83166c00157bb Mon Sep 17 00:00:00 2001 From: xupei Date: Wed, 13 Dec 2023 10:45:52 +0800 Subject: [PATCH] =?UTF-8?q?TASK:designSingle=20=E6=B7=BB=E5=8A=A0=E5=A4=9A?= =?UTF-8?q?=E4=BB=B6=E8=A1=A3=E6=9C=8D=E5=B9=B6=E5=85=81=E8=AE=B8=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E7=9B=B8=E5=90=8C=E7=B1=BB=E5=9E=8B=E7=9A=84=E6=9C=8D?= =?UTF-8?q?=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ai/da/mapper/entity/DesignItemDetail.java | 5 ++ .../entity/TDesignPythonOutfitDetail.java | 5 ++ .../dto/DesignSingleIncludeLayersDTO.java | 1 + .../ai/da/model/dto/DesignSingleItemDTO.java | 7 ++- .../ai/da/model/vo/DesignPythonOutfitVO.java | 2 +- .../java/com/ai/da/python/PythonService.java | 5 +- .../ai/da/python/vo/DesignPythonBasic.java | 2 + .../com/ai/da/python/vo/DesignPythonItem.java | 7 ++- .../service/impl/DesignItemServiceImpl.java | 50 ++++++++++++------- .../ai/da/service/impl/DesignServiceImpl.java | 18 ++++--- .../TDesignPythonOutfitDetailServiceImpl.java | 4 +- src/main/resources/messages_en.properties | 3 +- 12 files changed, 77 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/ai/da/mapper/entity/DesignItemDetail.java b/src/main/java/com/ai/da/mapper/entity/DesignItemDetail.java index e5d30e02..f3a866b9 100644 --- a/src/main/java/com/ai/da/mapper/entity/DesignItemDetail.java +++ b/src/main/java/com/ai/da/mapper/entity/DesignItemDetail.java @@ -84,6 +84,11 @@ public class DesignItemDetail implements Serializable { */ private String printJson; + /** + * item的优先级 + */ + private Integer priority; + /** * 创建时间 */ diff --git a/src/main/java/com/ai/da/mapper/entity/TDesignPythonOutfitDetail.java b/src/main/java/com/ai/da/mapper/entity/TDesignPythonOutfitDetail.java index 678b3e8d..f49ea93e 100644 --- a/src/main/java/com/ai/da/mapper/entity/TDesignPythonOutfitDetail.java +++ b/src/main/java/com/ai/da/mapper/entity/TDesignPythonOutfitDetail.java @@ -86,6 +86,11 @@ public class TDesignPythonOutfitDetail implements Serializable { */ @ApiModelProperty(value = "用户ID") private Long userId; + /** + * 图层优先级 + */ + @ApiModelProperty(value = "图层优先级") + private Integer priority; /** * 创建时间 */ diff --git a/src/main/java/com/ai/da/model/dto/DesignSingleIncludeLayersDTO.java b/src/main/java/com/ai/da/model/dto/DesignSingleIncludeLayersDTO.java index b638b761..6d63d1fe 100644 --- a/src/main/java/com/ai/da/model/dto/DesignSingleIncludeLayersDTO.java +++ b/src/main/java/com/ai/da/model/dto/DesignSingleIncludeLayersDTO.java @@ -14,6 +14,7 @@ public class DesignSingleIncludeLayersDTO { @NotNull(message = "designItemId.cannot.be.empty") private Long designItemId; + @NotNull private List designSingleItemDTOList; @NotNull(message = "isPreview.cannot.be.empty") 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 7f361540..a21cb699 100644 --- a/src/main/java/com/ai/da/model/dto/DesignSingleItemDTO.java +++ b/src/main/java/com/ai/da/model/dto/DesignSingleItemDTO.java @@ -4,12 +4,13 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; import java.util.List; @Data public class DesignSingleItemDTO { - @NotBlank(message = "id.cannot.be.empty") + @NotNull(message = "id.cannot.be.empty") @ApiModelProperty("切换图片对应的id") private Long id; @@ -33,4 +34,8 @@ public class DesignSingleItemDTO { @ApiModelProperty("图层缩放比例") private Float scale; + + @NotNull(message = "priority.cannot.be.empty") + @ApiModelProperty("图层优先级") + private Integer priority; } diff --git a/src/main/java/com/ai/da/model/vo/DesignPythonOutfitVO.java b/src/main/java/com/ai/da/model/vo/DesignPythonOutfitVO.java index 55c5cef7..37711ff1 100644 --- a/src/main/java/com/ai/da/model/vo/DesignPythonOutfitVO.java +++ b/src/main/java/com/ai/da/model/vo/DesignPythonOutfitVO.java @@ -57,7 +57,7 @@ public class DesignPythonOutfitVO { @ApiModelProperty(value = "缩放比例") private Float scale = 1.0f; /** - * 图层优先级 从1开始,优先级数字越大越靠近上层 + * 图层优先级 从10开始,优先级数字越大越靠近上层 */ private Integer priority; } diff --git a/src/main/java/com/ai/da/python/PythonService.java b/src/main/java/com/ai/da/python/PythonService.java index 1a2004a4..3656b518 100644 --- a/src/main/java/com/ai/da/python/PythonService.java +++ b/src/main/java/com/ai/da/python/PythonService.java @@ -1940,11 +1940,12 @@ public class PythonService { designSingleItem.getPath(), designSingleItem.getColor(), resolveDesignSinglePrint(designSingleItem.getPrintObject(), designSingleItem.getPath()), - // todo businessId 待确认 + // businessId designItemDetailId (python端确认没有作用,但是数据库需要存,作用:未知) designSingleItem.getId(), pythonTAllInfoService.getImageIdByPath(designSingleItem.getPath()), designSingleItem.getOffset(), - designSingleItem.getScale())); + designSingleItem.getScale(), + designSingleItem.getPriority())); }); diff --git a/src/main/java/com/ai/da/python/vo/DesignPythonBasic.java b/src/main/java/com/ai/da/python/vo/DesignPythonBasic.java index ef4c96c2..398721c6 100644 --- a/src/main/java/com/ai/da/python/vo/DesignPythonBasic.java +++ b/src/main/java/com/ai/da/python/vo/DesignPythonBasic.java @@ -36,4 +36,6 @@ public class DesignPythonBasic { private Map> body_point_test = Maps.newHashMap(); + private Boolean layer_order = Boolean.TRUE; + } 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 86beb205..efb82472 100644 --- a/src/main/java/com/ai/da/python/vo/DesignPythonItem.java +++ b/src/main/java/com/ai/da/python/vo/DesignPythonItem.java @@ -69,6 +69,10 @@ public class DesignPythonItem { * 图层缩放大小 */ private Float resize_scale; + /** + * 图层优先级 + */ + private Integer priority; public static List OUTWEAR_DRESS_BLOUSE = Arrays.asList(CollectionLevel2TypeEnum.OUTWEAR.getRealName(), @@ -106,7 +110,7 @@ public class DesignPythonItem { this.image_id = image_id; } - public DesignPythonItem(String type, String path, String color, DesignPythonItemPrint print, Long businessId, Long image_id, List offset, Float resize_scale) { + public DesignPythonItem(String type, String path, String color, DesignPythonItemPrint print, Long businessId, Long image_id, List offset, Float resize_scale,Integer priority) { this.type = type; this.path = path; this.color = color; @@ -116,6 +120,7 @@ public class DesignPythonItem { this.image_id = image_id; this.offset = offset; this.resize_scale = resize_scale; + this.priority = priority; } public DesignPythonItem(String type, String path, String color, DesignPythonItemPrint 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 4fb2e1fc..7914f4cc 100644 --- a/src/main/java/com/ai/da/service/impl/DesignItemServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/DesignItemServiceImpl.java @@ -322,11 +322,13 @@ public class DesignItemServiceImpl extends ServiceImpl> typeOffset = designSingleItemDTOList.stream() - .collect(Collectors.toMap(d -> d.getType().toLowerCase(), DesignSingleItemDTO::getOffset)); - List list = setTDesignPythonOutfitDetailList(layers, designId, designPythonOutfit.getId(), userInfo.getId(), typeOffset); + + // 需要将request中的offset也存入数据库,通过priority与image_category将sketch与layers关联 +// Map> typeOffset = designSingleItemDTOList.stream() +// .collect(Collectors.toMap(d -> d.getType().toLowerCase(), DesignSingleItemDTO::getOffset)); + Map> priorityOffset = designSingleItemDTOList.stream() + .collect(Collectors.toMap(DesignSingleItemDTO::getPriority, DesignSingleItemDTO::getOffset)); + List list = setTDesignPythonOutfitDetailList(layers, designId, designPythonOutfit.getId(), userInfo.getId(), priorityOffset); designPythonOutfitDetailService.saveBatch(list); @@ -366,7 +371,7 @@ public class DesignItemServiceImpl extends ServiceImpl setTDesignPythonOutfitDetailList(JSONArray layers, Long designId, Long designPythonOutfitId, Long userId, - Map> typeOffset) { + Map> priorityOffset) { // 设置图层信息; List list = new ArrayList<>(); for (int i = 0; i < layers.size(); i++) { @@ -381,7 +386,8 @@ public class DesignItemServiceImpl extends ServiceImpl> typeOffset = designSingleIncludeLayersDTO.getDesignSingleItemDTOList().stream() - .collect(Collectors.toMap(d -> d.getType().toLowerCase(), DesignSingleItemDTO::getOffset)); + // 通过priority将offset关联到layers +// Map> typeOffset = designSingleIncludeLayersDTO.getDesignSingleItemDTOList().stream() +// .collect(Collectors.toMap(d -> d.getType().toLowerCase(), DesignSingleItemDTO::getOffset)); + Map> priorityOffset = new HashMap<>(); + try{ + priorityOffset = designSingleIncludeLayersDTO.getDesignSingleItemDTOList().stream() + .collect(Collectors.toMap(DesignSingleItemDTO::getPriority, DesignSingleItemDTO::getOffset)); + }catch (IllegalStateException e){ + // priority重复 + log.info("服装的priority重复"); + throw new BusinessException("priority.cannot.be.repeated"); + } + if (!designSingleIncludeLayersDTO.getIsPreview()) { // 更新及保存图层信息 tDesignPythonOutfitDetails = saveDesignSingleItemDetailAndLayers(objects, design.getId(), designSingleIncludeLayersDTO.getDesignItemId(), userInfo, outfit, designSingleIncludeLayersDTO.getTimeZone(), designSingleIncludeLayersDTO.getDesignSingleItemDTOList()); } else { JSONArray layers = outfit.getJSONArray("layers"); - tDesignPythonOutfitDetails = setTDesignPythonOutfitDetailList(layers, designItem.getDesignId(), null, userInfo.getId(), typeOffset); + tDesignPythonOutfitDetails = setTDesignPythonOutfitDetailList(layers, designItem.getDesignId(), null, userInfo.getId(), priorityOffset); } List detailsVO = new ArrayList<>(); tDesignPythonOutfitDetails.forEach(detail -> { String type = detail.getImageCategory().split("_")[0]; - detailsVO.add(designPythonOutfitDetailService.convertToDesignPythonOutfitVO(detail, typeOffset.get(type))); + detailsVO.add(designPythonOutfitDetailService.convertToDesignPythonOutfitVO(detail, null)); }); TDesignPythonOutfit designPythonOutfit = designPythonOutfitService.getByDesignItemId(designSingleIncludeLayersDTO.getDesignItemId()); @@ -576,7 +592,6 @@ public class DesignItemServiceImpl extends ServiceImpl { @@ -589,7 +604,8 @@ public class DesignItemServiceImpl extends ServiceImpl singleItem.getType().toLowerCase().equals(layers.getImageCategory().split("_")[0]) + layers -> (singleItem.getType().toLowerCase().equals(layers.getImageCategory().split("_")[0]) + && singleItem.getPriority().equals(layers.getPriority())) ).collect(Collectors.toList())); body.setLayersObject(layersObject.stream().filter(layers -> layers.getImageCategory().equals("body")).collect(Collectors.toList())); @@ -604,7 +620,7 @@ public class DesignItemServiceImpl extends ServiceImpl designSingleItemDTOList, String timeZone) { - Map designItemDetailTypeIdMap = designItemDetails.stream().collect(Collectors.toMap(DesignItemDetail::getType, DesignItemDetail::getId)); + Map designItemDetailTypeIdMap = designItemDetails.stream().collect(Collectors.toMap(DesignItemDetail::getPriority, DesignItemDetail::getId)); ArrayList designItemDetailPrints = new ArrayList<>(); designSingleItemDTOList.forEach(designSingleItem -> { @@ -617,13 +633,13 @@ public class DesignItemServiceImpl extends ServiceImpl { // 2.1 判断是否第一次添加印花,是:直接添加 - List designItemDetailPrintList = designItemDetailPrintService.getByDesignItemDetailId(designItemDetailTypeIdMap.get(designSingleItem.getType())); + List designItemDetailPrintList = designItemDetailPrintService.getByDesignItemDetailId(designItemDetailTypeIdMap.get(designSingleItem.getPriority())); if (!designItemDetailPrintList.isEmpty()) { // 2.2 否:先删除原始印花,再添加新印花信息 - designItemDetailPrintService.deleteByDesignItemDetailId(designItemDetailTypeIdMap.get(designSingleItem.getType())); + designItemDetailPrintService.deleteByDesignItemDetailId(designItemDetailTypeIdMap.get(designSingleItem.getPriority())); } DesignItemDetailPrint designItemDetailPrint = new DesignItemDetailPrint(); - designItemDetailPrint.setDesignItemDetailId(designItemDetailTypeIdMap.get(designSingleItem.getType())); + designItemDetailPrint.setDesignItemDetailId(designItemDetailTypeIdMap.get(designSingleItem.getPriority())); designItemDetailPrint.setPath(print.getMinIOPath()); designItemDetailPrint.setScale(print.getScale()); designItemDetailPrint.setSingleOrOverall(printObject.getIfSingle() ? "single" : "overall"); diff --git a/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java b/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java index 6b20d23a..1f78c390 100644 --- a/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java @@ -988,7 +988,9 @@ public class DesignServiceImpl extends ServiceImpl impleme .filter(f -> SYS_HAIRSTYLE_SHOES_BODY.contains(f.getType())) .collect(Collectors.toList()); response.setOthers(CopyUtil.copyList(filterDetail2, DesignItemOthersDetailVO.class, (o, d) -> { - d.setId(o.getBusinessId()); + // todo 不确定businessId的作用,暂时取消传递,查看影响 +// d.setId(o.getBusinessId()); + d.setId(0L); d.setPath(minioUtil.getPresignedUrl(o.getPath(), 24 * 60)); d.setMinIOPath(o.getPath()); d.setPrintObject(new DesignPythonItemPrint()); @@ -1125,13 +1127,13 @@ public class DesignServiceImpl extends ServiceImpl impleme throw new BusinessException("layer.information.not.found"); } details.forEach(detail -> { - List offset = new ArrayList<>(); - if (StringUtil.isNullOrEmpty(detail.getOffset()) || detail.getOffset().equals("null")) { - offset = Arrays.asList(0L, 0L); - } else { - offset = Arrays.stream(detail.getOffset().replaceAll("\\[|\\]", "").split(",")).map(s -> Long.parseLong(s.trim())).collect(Collectors.toList()); - } - detailsVO.add(designPythonOutfitDetailService.convertToDesignPythonOutfitVO(detail, offset)); +// List offset = new ArrayList<>(); +// if (StringUtil.isNullOrEmpty(detail.getOffset()) || detail.getOffset().equals("null")) { +// offset = Arrays.asList(0L, 0L); +// } else { +// offset = Arrays.stream(detail.getOffset().replaceAll("\\[|\\]", "").split(",")).map(s -> Long.parseLong(s.trim())).collect(Collectors.toList()); +// } + detailsVO.add(designPythonOutfitDetailService.convertToDesignPythonOutfitVO(detail, null)); }); // 2、将查询出的图层信息填充到designItemDetailVO中 diff --git a/src/main/java/com/ai/da/service/impl/TDesignPythonOutfitDetailServiceImpl.java b/src/main/java/com/ai/da/service/impl/TDesignPythonOutfitDetailServiceImpl.java index af42e80d..a72a2bcb 100644 --- a/src/main/java/com/ai/da/service/impl/TDesignPythonOutfitDetailServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/TDesignPythonOutfitDetailServiceImpl.java @@ -60,7 +60,9 @@ public class TDesignPythonOutfitDetailServiceImpl extends ServiceImpl) JSON.parse(detail.getOffset())); + designPythonOutfitVO.setPriority(Math.abs(detail.getPriority())); +// designPythonOutfitVO.setOffset(CollectionUtil.isEmpty(offset) ? Arrays.asList(0L, 0L) : offset); /*if (!StringUtil.isNullOrEmpty(detail.getImageSize())){ List size = Arrays.stream(detail.getImageSize().replaceAll("\\[|\\]", "").split(",")).map(s -> Long.parseLong(s.trim())).collect(Collectors.toList()); diff --git a/src/main/resources/messages_en.properties b/src/main/resources/messages_en.properties index 3eb5993b..df57ff00 100644 --- a/src/main/resources/messages_en.properties +++ b/src/main/resources/messages_en.properties @@ -128,7 +128,8 @@ layers.does.not.exists=layers does not exists. unknown.generate.type=unknown generate type. the.workspace.lastIndex.not.found=The workspace lastIndex not found. gender.cannot.be.empty=gender cannot be empty. -image.synthesis.failed=Image synthesis failed. +image.synthesis.failed=image synthesis failed. +priority.cannot.be.repeated=priority cannot be repeated. # 可能会报异常 # Informative: