design detail 新增接口--编辑图层的位置、大小
This commit is contained in:
@@ -6,6 +6,7 @@ import com.ai.da.model.dto.DesignSingleIncludeLayersDTO;
|
||||
import com.ai.da.model.vo.*;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -47,4 +48,6 @@ public interface DesignItemService extends IService<DesignItem> {
|
||||
|
||||
DesignSingleVO designSingleIncludeLayers(DesignSingleIncludeLayersDTO designSingleIncludeLayersDTO);
|
||||
|
||||
ComposeLayersVO editLayersPositionAndScale(EditLayersPositionAndScaleVO positionAndScaleVO) throws IOException;
|
||||
|
||||
}
|
||||
|
||||
@@ -10,15 +10,10 @@ import com.ai.da.common.utils.DateUtil;
|
||||
import com.ai.da.common.utils.MinioUtil;
|
||||
import com.ai.da.mapper.DesignItemMapper;
|
||||
import com.ai.da.mapper.entity.*;
|
||||
import com.ai.da.model.dto.DesignSingleDTO;
|
||||
import com.ai.da.model.dto.DesignSingleIncludeLayersDTO;
|
||||
import com.ai.da.model.dto.DesignSingleItemDTO;
|
||||
import com.ai.da.model.dto.DesignSinglePrintDTO;
|
||||
import com.ai.da.model.dto.*;
|
||||
import com.ai.da.model.vo.*;
|
||||
import com.ai.da.python.PythonService;
|
||||
import com.ai.da.python.vo.DesignPythonItem;
|
||||
import com.ai.da.python.vo.DesignPythonItemPrint;
|
||||
import com.ai.da.python.vo.DesignPythonObjects;
|
||||
import com.ai.da.python.vo.*;
|
||||
import com.ai.da.service.*;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
@@ -26,11 +21,14 @@ import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.google.common.collect.Lists;
|
||||
import io.netty.util.internal.StringUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.checkerframework.checker.units.qual.A;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.IOException;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.util.*;
|
||||
@@ -356,6 +354,7 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
||||
designPythonOutfitDetail.setImageSize(jsonObject.getString("image_size"));
|
||||
designPythonOutfitDetail.setImageCategory(jsonObject.getString("image_category"));
|
||||
designPythonOutfitDetail.setMaskUrl(jsonObject.getString("mask_url"));
|
||||
designPythonOutfitDetail.setScale(Objects.isNull(jsonObject.getString("scale")) ? null : jsonObject.getString("scale"));
|
||||
designPythonOutfitDetail.setUserId(userId);
|
||||
list.add(designPythonOutfitDetail);
|
||||
}
|
||||
@@ -421,10 +420,68 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
||||
TDesignPythonOutfit designPythonOutfit = designPythonOutfitService.getByDesignItemId(designSingleIncludeLayersDTO.getDesignItemId());
|
||||
Assert.notNull(designItem,"design item detail layers does not exists!");
|
||||
|
||||
return assembleDesignSingleResponse(designItem.getId(),minioUtil.splitThenGetPreviewUrl(designPythonOutfit.getDesignUrl(),480),
|
||||
return assembleDesignSingleResponse(designItem.getId(),
|
||||
minioUtil.splitThenGetPreviewUrl(designPythonOutfit.getDesignUrl(),480),
|
||||
designSingleIncludeLayersDTO.getDesignSingleItemDTOList(),detailsVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ComposeLayersVO editLayersPositionAndScale(EditLayersPositionAndScaleVO positionAndScaleVO) throws IOException {
|
||||
ComposeLayersVO designItemLayer = positionAndScaleVO.getLayers();
|
||||
// 1、校验designItem是是否存在
|
||||
DesignItem designItem = selectById(designItemLayer.getDesignItemId());
|
||||
Assert.notNull(designItem,"designItem does not exists!");
|
||||
|
||||
// 2、校验layers是否存在
|
||||
designItemLayer.getLayers().forEach(layer -> {
|
||||
TDesignPythonOutfitDetail detail = designPythonOutfitDetailService.getById(layer.getId());
|
||||
Assert.notNull(detail,layer.getImageCategory() + " layer does not exists!");
|
||||
|
||||
layer.setImageUrl(detail.getImageUrl());
|
||||
layer.setMaskUrl(detail.getMaskUrl());
|
||||
});
|
||||
|
||||
// 3、组装python入参
|
||||
List<OutfitDetailPythonItem> outfitDetailPythonItems = convertToOutfitDetailPythonItemList(designItemLayer.getLayers());
|
||||
|
||||
// 4、合成图层
|
||||
String synthesisUrl = pythonService.composeLayers(outfitDetailPythonItems);
|
||||
designItemLayer.setDesignItemUrl(minioUtil.splitThenGetPreviewUrl(synthesisUrl,480));
|
||||
|
||||
// 5、更新数据库,根据designItemId更新designItemUrl
|
||||
designItem.setUpdateDate(DateUtil.getByTimeZone(positionAndScaleVO.getTimeZone()));
|
||||
designItem.setDesignUrl(synthesisUrl);
|
||||
designItem.setId(designItemLayer.getDesignItemId());
|
||||
updateById(designItem);
|
||||
|
||||
// 6、将图层信息position和scale更新到t_design_python_outfit_detail表
|
||||
ArrayList<TDesignPythonOutfitDetail> details = new ArrayList<>();
|
||||
designItemLayer.getLayers().forEach(layer -> {
|
||||
TDesignPythonOutfitDetail layerDetail = new TDesignPythonOutfitDetail();
|
||||
layerDetail.setPosition(layer.getPosition().toString());
|
||||
layerDetail.setScale(layer.getScale().toString());
|
||||
layerDetail.setId(layer.getId());
|
||||
details.add(layerDetail);
|
||||
});
|
||||
designPythonOutfitDetailService.updateBatchById(details);
|
||||
|
||||
// 7、返回图层及合成图信息
|
||||
designItemLayer.getLayers().forEach(layer -> {
|
||||
ArrayList<Long> imageSize = new ArrayList<>();
|
||||
for (int i = 0; i < layer.getImageSize().size(); i++) {
|
||||
imageSize.add((long) (layer.getImageSize().get(i) * layer.getScale()));
|
||||
}
|
||||
layer.setImageSize(imageSize);
|
||||
if (!StringUtil.isNullOrEmpty(layer.getImageUrl())){
|
||||
layer.setImageUrl(minioUtil.splitThenGetPreviewUrl(layer.getImageUrl(),480));
|
||||
}
|
||||
if (!StringUtil.isNullOrEmpty(layer.getMaskUrl())){
|
||||
layer.setMaskUrl(minioUtil.splitThenGetPreviewUrl(layer.getMaskUrl(),480));
|
||||
}
|
||||
});
|
||||
return designItemLayer;
|
||||
}
|
||||
|
||||
private DesignSingleVO assembleDesignSingleResponse(Long designItemId,String designItemUrl,
|
||||
List<DesignSingleItemDTO> designSingleItemDTOList,
|
||||
List<DesignPythonOutfitVO> layersObject){
|
||||
@@ -440,6 +497,8 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
||||
DesignItemClothesDetailVO designItemClothesDetailVO = new DesignItemClothesDetailVO();
|
||||
designItemClothesDetailVO.setId(singleItem.getId());
|
||||
designItemClothesDetailVO.setType(singleItem.getType());
|
||||
designItemClothesDetailVO.setPath(minioUtil.splitThenGetPreviewUrl(singleItem.getPath(),480));
|
||||
designItemClothesDetailVO.setMinIOPath(singleItem.getPath());
|
||||
designItemClothesDetailVO.setColor(panToneService.getPantoneByRgb(singleItem.getColor()));
|
||||
// designItemClothesDetailVO.setPrintObject(new DesignPythonItemPrint(singleItem.getPrintObject().getPath()));
|
||||
designItemClothesDetailVO.setPrintObject(singleItem.getPrintObject());
|
||||
@@ -496,4 +555,16 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
||||
return designItemDetailPrints;
|
||||
}
|
||||
|
||||
private List<OutfitDetailPythonItem> convertToOutfitDetailPythonItemList(List<DesignPythonOutfitVO> layers){
|
||||
ArrayList<OutfitDetailPythonItem> composeLayerPythonItem = new ArrayList<>();
|
||||
layers.forEach(layer -> {
|
||||
composeLayerPythonItem.add(new OutfitDetailPythonItem(layer.getImageCategory(),
|
||||
layer.getPosition(),
|
||||
layer.getImageSize(),
|
||||
layer.getScale(),
|
||||
layer.getImageUrl(),
|
||||
layer.getMaskUrl()));
|
||||
});
|
||||
return composeLayerPythonItem;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -837,6 +837,8 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
|
||||
.collect(Collectors.toList());
|
||||
response.setClothes(CopyUtil.copyList(filterDetail,DesignItemClothesDetailVO.class,(o,d)->{
|
||||
d.setId(o.getId());
|
||||
d.setPath(minIoUtil.splitThenGetPreviewUrl(o.getPath(),480));
|
||||
d.setMinIOPath(o.getPath());
|
||||
d.setLevel1Type(converTypeToLevel1(o.getType()));
|
||||
// 根据designItemDetailId获取印花
|
||||
List<DesignItemDetailPrint> prints = designItemDetailPrintService.getByDesignItemDetailId(o.getId());
|
||||
@@ -860,6 +862,8 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
|
||||
.collect(Collectors.toList());
|
||||
response.setOthers(CopyUtil.copyList(filterDetail2, DesignItemOthersDetailVO.class, (o, d) -> {
|
||||
d.setId(o.getBusinessId());
|
||||
d.setPath(minIoUtil.splitThenGetPreviewUrl(o.getPath(),480));
|
||||
d.setMinIOPath(o.getPath());
|
||||
d.setPrintObject(new DesignPythonItemPrint());
|
||||
}));
|
||||
return editDesignItemLayer(flag,designPythonOutfit,
|
||||
@@ -992,7 +996,8 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
|
||||
designSinglePrint.setAngle(detailPrint.getAngle());
|
||||
designSinglePrint.setPriority(detailPrint.getPriority());
|
||||
}
|
||||
designSinglePrint.setPath(detailPrint.getPath());
|
||||
designSinglePrint.setPath(minIoUtil.splitThenGetPreviewUrl(detailPrint.getPath(),480));
|
||||
designSinglePrint.setMinIOPath(detailPrint.getPath());
|
||||
designSinglePrint.setScale(detailPrint.getScale());
|
||||
prints.add(designSinglePrint);
|
||||
}else {
|
||||
@@ -1000,7 +1005,9 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
|
||||
designSinglePrintDTO.setIfSingle(Boolean.TRUE);
|
||||
designItemDetailPrints.forEach(print -> {
|
||||
if (print.getSingleOrOverall().equals("single")){
|
||||
prints.add(new DesignSinglePrint(print.getPath(),
|
||||
prints.add(new DesignSinglePrint(
|
||||
minIoUtil.splitThenGetPreviewUrl(print.getPath(),480),
|
||||
print.getPath(),
|
||||
JSONArray.parseArray(print.getPosition(),Double.class),
|
||||
print.getScale(),
|
||||
print.getAngle(),
|
||||
|
||||
Reference in New Issue
Block a user