TASK:designSingle 添加多件衣服并允许添加相同类型的服装

This commit is contained in:
2023-12-13 10:45:52 +08:00
parent 4e3746cfba
commit 51548b52ba
12 changed files with 77 additions and 32 deletions

View File

@@ -84,6 +84,11 @@ public class DesignItemDetail implements Serializable {
*/
private String printJson;
/**
* item的优先级
*/
private Integer priority;
/**
* 创建时间
*/

View File

@@ -86,6 +86,11 @@ public class TDesignPythonOutfitDetail implements Serializable {
*/
@ApiModelProperty(value = "用户ID")
private Long userId;
/**
* 图层优先级
*/
@ApiModelProperty(value = "图层优先级")
private Integer priority;
/**
* 创建时间
*/

View File

@@ -14,6 +14,7 @@ public class DesignSingleIncludeLayersDTO {
@NotNull(message = "designItemId.cannot.be.empty")
private Long designItemId;
@NotNull
private List<DesignSingleItemDTO> designSingleItemDTOList;
@NotNull(message = "isPreview.cannot.be.empty")

View File

@@ -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;
}

View File

@@ -57,7 +57,7 @@ public class DesignPythonOutfitVO {
@ApiModelProperty(value = "缩放比例")
private Float scale = 1.0f;
/**
* 图层优先级 从1开始优先级数字越大越靠近上层
* 图层优先级 从10开始,优先级数字越大越靠近上层
*/
private Integer priority;
}

View File

@@ -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()));
});

View File

@@ -36,4 +36,6 @@ public class DesignPythonBasic {
private Map<String, List<Integer>> body_point_test = Maps.newHashMap();
private Boolean layer_order = Boolean.TRUE;
}

View File

@@ -69,6 +69,10 @@ public class DesignPythonItem {
* 图层缩放大小
*/
private Float resize_scale;
/**
* 图层优先级
*/
private Integer priority;
public static List<String> 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<Long> offset, Float resize_scale) {
public DesignPythonItem(String type, String path, String color, DesignPythonItemPrint print, Long businessId, Long image_id, List<Long> 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) {

View File

@@ -322,11 +322,13 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
designItemDetail.setDesignId(designId);
designItemDetail.setDesignItemId(designItemId);
designItemDetail.setCollectionElementId(detail.getElementId());
designItemDetail.setPriority(detail.getPriority());
designItemDetail.setCreateDate(DateUtil.getByTimeZone(timeZone));
if (SysFileLevel2TypeEnum.BODY.getRealName().equals(detail.getType())) {
designItemDetail.setPath(detail.getBody_path());
//BODY不关联businessId
designItemDetail.setBusinessId(0L);
designItemDetail.setPriority(0);
}
designItemDetail.setIconPath(detail.getIcon());
DesignPythonItemPrint printObject = detail.getPrint();
@@ -354,10 +356,13 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
// 7、将新生成的图层信息存入designPythonOutfitDetail表
JSONArray layers = outfit.getJSONArray("layers");
// 需要将request中的offset也存入数据库通过type与image_category将sketch与layers关联
Map<String, List<Long>> typeOffset = designSingleItemDTOList.stream()
.collect(Collectors.toMap(d -> d.getType().toLowerCase(), DesignSingleItemDTO::getOffset));
List<TDesignPythonOutfitDetail> list = setTDesignPythonOutfitDetailList(layers, designId, designPythonOutfit.getId(), userInfo.getId(), typeOffset);
// 需要将request中的offset也存入数据库通过priority与image_category将sketch与layers关联
// Map<String, List<Long>> typeOffset = designSingleItemDTOList.stream()
// .collect(Collectors.toMap(d -> d.getType().toLowerCase(), DesignSingleItemDTO::getOffset));
Map<Integer, List<Long>> priorityOffset = designSingleItemDTOList.stream()
.collect(Collectors.toMap(DesignSingleItemDTO::getPriority, DesignSingleItemDTO::getOffset));
List<TDesignPythonOutfitDetail> list = setTDesignPythonOutfitDetailList(layers, designId, designPythonOutfit.getId(), userInfo.getId(), priorityOffset);
designPythonOutfitDetailService.saveBatch(list);
@@ -366,7 +371,7 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
public List<TDesignPythonOutfitDetail> setTDesignPythonOutfitDetailList(JSONArray layers, Long designId,
Long designPythonOutfitId, Long userId,
Map<String, List<Long>> typeOffset) {
Map<Integer, List<Long>> priorityOffset) {
// 设置图层信息;
List<TDesignPythonOutfitDetail> list = new ArrayList<>();
for (int i = 0; i < layers.size(); i++) {
@@ -381,7 +386,8 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
designPythonOutfitDetail.setMaskUrl(jsonObject.getString("mask_url"));
designPythonOutfitDetail.setScale(Objects.isNull(jsonObject.getString("resize_scale")) ? "1.0" : jsonObject.getString("resize_scale"));
designPythonOutfitDetail.setUserId(userId);
designPythonOutfitDetail.setOffset(String.valueOf(typeOffset.get(jsonObject.getString("image_category").split("_")[0])));
designPythonOutfitDetail.setOffset(String.valueOf(priorityOffset.get(Math.abs(Integer.parseInt(jsonObject.getString("priority"))))));
designPythonOutfitDetail.setPriority((Integer) jsonObject.get("priority"));
list.add(designPythonOutfitDetail);
}
return list;
@@ -458,23 +464,33 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
throw new BusinessException("python response data is null");
}
JSONObject outfit = data.getJSONObject("0");
// 通过type将offset关联到layers
Map<String, List<Long>> typeOffset = designSingleIncludeLayersDTO.getDesignSingleItemDTOList().stream()
.collect(Collectors.toMap(d -> d.getType().toLowerCase(), DesignSingleItemDTO::getOffset));
// 通过priority将offset关联到layers
// Map<String, List<Long>> typeOffset = designSingleIncludeLayersDTO.getDesignSingleItemDTOList().stream()
// .collect(Collectors.toMap(d -> d.getType().toLowerCase(), DesignSingleItemDTO::getOffset));
Map<Integer, List<Long>> 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<DesignPythonOutfitVO> 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<DesignItemMapper, DesignI
designSingleVO.setDesignItemUrl(designItemUrl);
// 当前全身图
designSingleVO.setCurrentFullBodyView(minioUtil.getPresignedUrl(currentFullBodyView, 24 * 60));
;
designSingleVO.setClothes(clothes);
designSingleItemDTOList.forEach(singleItem -> {
@@ -589,7 +604,8 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
// designItemClothesDetailVO.setPrintObject(new DesignPythonItemPrint(singleItem.getPrintObject().getPath()));
designItemClothesDetailVO.setPrintObject(singleItem.getPrintObject());
designItemClothesDetailVO.setLayersObject(layersObject.stream().filter(
layers -> 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<DesignItemMapper, DesignI
List<DesignSingleItemDTO> designSingleItemDTOList,
String timeZone) {
Map<String, Long> designItemDetailTypeIdMap = designItemDetails.stream().collect(Collectors.toMap(DesignItemDetail::getType, DesignItemDetail::getId));
Map<Integer, Long> designItemDetailTypeIdMap = designItemDetails.stream().collect(Collectors.toMap(DesignItemDetail::getPriority, DesignItemDetail::getId));
ArrayList<DesignItemDetailPrint> designItemDetailPrints = new ArrayList<>();
designSingleItemDTOList.forEach(designSingleItem -> {
@@ -617,13 +633,13 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
// 2、有印花添加到list
printObject.getPrints().forEach(print -> {
// 2.1 判断是否第一次添加印花,是:直接添加
List<DesignItemDetailPrint> designItemDetailPrintList = designItemDetailPrintService.getByDesignItemDetailId(designItemDetailTypeIdMap.get(designSingleItem.getType()));
List<DesignItemDetailPrint> 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");

View File

@@ -988,7 +988,9 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> 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<DesignMapper, Design> impleme
throw new BusinessException("layer.information.not.found");
}
details.forEach(detail -> {
List<Long> 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<Long> 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中

View File

@@ -60,7 +60,9 @@ public class TDesignPythonOutfitDetailServiceImpl extends ServiceImpl<TDesignPyt
designPythonOutfitVO.setMaskUrl(StringUtil.isNullOrEmpty(detail.getMaskUrl()) ? null : minIoUtil.getPresignedUrl(detail.getMaskUrl(), 24 * 60));
designPythonOutfitVO.setMaskMinioUrl(StringUtil.isNullOrEmpty(detail.getMaskUrl()) ? null : detail.getMaskUrl());
designPythonOutfitVO.setScale(Float.parseFloat(detail.getScale()));
designPythonOutfitVO.setOffset(CollectionUtil.isEmpty(offset) ? Arrays.asList(0L, 0L) : offset);
designPythonOutfitVO.setOffset(StringUtil.isNullOrEmpty(detail.getOffset()) ? Arrays.asList(0L, 0L) : (List<Long>) 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<Long> size = Arrays.stream(detail.getImageSize().replaceAll("\\[|\\]", "").split(",")).map(s -> Long.parseLong(s.trim())).collect(Collectors.toList());