Merge remote-tracking branch 'origin/develop' into dev_shb
# Conflicts: # src/main/java/com/ai/da/mapper/entity/SysFile.java
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
package com.ai.da.service;
|
||||
|
||||
import com.ai.da.mapper.entity.DesignItemDetailPrint;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface DesignItemDetailPrintService extends IService<DesignItemDetailPrint> {
|
||||
List<DesignItemDetailPrint> getByDesignItemDetailId(Long designItemDetailId);
|
||||
|
||||
void deleteByDesignItemDetailId(Long designItemDetailId);
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.ai.da.service.impl;
|
||||
|
||||
import com.ai.da.mapper.DesignItemDetailPrintMapper;
|
||||
import com.ai.da.mapper.entity.DesignItemDetailPrint;
|
||||
import com.ai.da.mapper.entity.TDesignPythonOutfitDetail;
|
||||
import com.ai.da.service.DesignItemDetailPrintService;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class DesignItemDetailPrintServiceImpl extends ServiceImpl<DesignItemDetailPrintMapper, DesignItemDetailPrint> implements DesignItemDetailPrintService {
|
||||
|
||||
|
||||
@Override
|
||||
public List<DesignItemDetailPrint> getByDesignItemDetailId(Long designItemDetailId){
|
||||
QueryWrapper<DesignItemDetailPrint> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("design_item_detail_id",designItemDetailId);
|
||||
|
||||
return baseMapper.selectList(queryWrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteByDesignItemDetailId(Long designItemDetailId){
|
||||
UpdateWrapper<DesignItemDetailPrint> updateWrapper = new UpdateWrapper<>();
|
||||
updateWrapper.eq("design_item_detail_id", designItemDetailId);
|
||||
updateWrapper.set("is_deleted",(byte)1);
|
||||
|
||||
baseMapper.update(null,updateWrapper);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import com.ai.da.mapper.DesignItemDetailMapper;
|
||||
import com.ai.da.mapper.entity.DesignItemDetail;
|
||||
import com.ai.da.service.DesignItemDetailService;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -39,9 +40,15 @@ public class DesignItemDetailServiceImpl extends ServiceImpl<DesignItemDetailMap
|
||||
|
||||
@Override
|
||||
public int deleteByDesignItemId(Long designItemId) {
|
||||
QueryWrapper<DesignItemDetail> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("design_item_id", designItemId);
|
||||
return designItemDetailMapper.delete(queryWrapper);
|
||||
// QueryWrapper<DesignItemDetail> queryWrapper = new QueryWrapper<>();
|
||||
// queryWrapper.eq("design_item_id", designItemId);
|
||||
// DesignItemDetail designItemDetail = new DesignItemDetail();
|
||||
// designItemDetail.setIsDeleted((byte)1);
|
||||
|
||||
UpdateWrapper<DesignItemDetail> updateWrapper = new UpdateWrapper<>();
|
||||
updateWrapper.eq("design_item_id", designItemId);
|
||||
updateWrapper.set("is_deleted",(byte)1);
|
||||
return designItemDetailMapper.update(null,updateWrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -10,14 +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.*;
|
||||
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;
|
||||
@@ -25,12 +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.springframework.beans.factory.annotation.Value;
|
||||
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.*;
|
||||
@@ -68,9 +66,9 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
||||
@Resource
|
||||
private PanToneService panToneService;
|
||||
@Resource
|
||||
private DesignItemDetailPrintService designItemDetailPrintService;
|
||||
@Resource
|
||||
private MinioUtil minioUtil;
|
||||
@Value("${minio.bucketName.results}")
|
||||
private String bucketName;
|
||||
|
||||
@Override
|
||||
public Long saveOne(DesignItem designItem) {
|
||||
@@ -281,22 +279,20 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
||||
}
|
||||
|
||||
private List<TDesignPythonOutfitDetail> saveDesignSingleItemDetailAndLayers(DesignPythonObjects pythonObjects
|
||||
, Long designId,Long designItemId, Long collectionId, AuthPrincipalVo userInfo
|
||||
, JSONObject outfit, String timeZone){
|
||||
, Long designId,Long designItemId, AuthPrincipalVo userInfo
|
||||
, JSONObject outfit, String timeZone,List<DesignSingleItemDTO> designSingleItemDTOList){
|
||||
|
||||
DesignItem designItem = new DesignItem();
|
||||
String url = pythonObjects.getObjects().get(0).getBasic().getSave_name();
|
||||
// String url = pythonObjects.getObjects().get(0).getBasic().getSave_name();
|
||||
designItem.setUpdateDate(DateUtil.getByTimeZone(timeZone));
|
||||
designItem.setDesignUrl(url);
|
||||
designItem.setDesignUrl(outfit.getString("synthesis_url"));
|
||||
designItem.setId(designItemId);
|
||||
|
||||
//更新item
|
||||
// 1、更新designItem
|
||||
updateById(designItem);
|
||||
//删除itemDetail
|
||||
// 2、删除designItemDetail(逻辑删除)
|
||||
designItemDetailService.deleteByDesignItemId(designItemId);
|
||||
|
||||
List<DesignItemDetail> designItemDetails = Lists.newArrayList();
|
||||
// 保存designItem
|
||||
// 3、保存新的designItemDetail
|
||||
pythonObjects.getObjects().get(0).getItems().forEach(detail ->{
|
||||
if(null == detail){
|
||||
return;
|
||||
@@ -315,23 +311,28 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
||||
designItemDetail.setIconPath(detail.getIcon());
|
||||
DesignPythonItemPrint printObject = detail.getPrint();
|
||||
designItemDetail.setPrintPath(Objects.isNull(printObject)? "" :printObject.getPath());
|
||||
designItemDetail.setPrintJson(JSON.toJSONString(printObject));
|
||||
// 当有多个印花后,返回的printObject太长,导致存储到数据库时报错
|
||||
// designItemDetail.setPrintJson(JSON.toJSONString(printObject));
|
||||
designItemDetails.add(designItemDetail);
|
||||
});
|
||||
// todo businessId
|
||||
// businessId 来自t_sys_file或者t_library
|
||||
designItemDetailService.saveBatch(designItemDetails);
|
||||
|
||||
// 覆盖designPythonOutfit表中的模特全身图
|
||||
// 4、保存印花信息到designItemDetailPrint
|
||||
List<DesignItemDetailPrint> designItemDetailPrints = setDesignItemDetailPrintList(designItemDetails, designSingleItemDTOList, timeZone);
|
||||
designItemDetailPrintService.saveBatch(designItemDetailPrints);
|
||||
|
||||
// 5、覆盖designPythonOutfit表中的模特全身图
|
||||
TDesignPythonOutfit designPythonOutfit = new TDesignPythonOutfit();
|
||||
designPythonOutfit.setDesignUrl(outfit.getString("synthesis_url"));
|
||||
designPythonOutfit.setId(designPythonOutfitService.getByDesignItemId(designItemId).getId());
|
||||
designPythonOutfit.setUpdateDate(LocalDateTime.now(ZoneId.of(timeZone)));
|
||||
designPythonOutfitService.updateById(designPythonOutfit);
|
||||
|
||||
// 删除designPythonOutfitDetail表中原始的图层信息
|
||||
// 6、删除designPythonOutfitDetail表中原始的图层信息(逻辑删除)
|
||||
designPythonOutfitDetailService.deleteByDesignPythonOutfitId(designPythonOutfit.getId());
|
||||
|
||||
// 将新生成的图层信息存入designPythonOutfitDetail表
|
||||
// 7、将新生成的图层信息存入designPythonOutfitDetail表
|
||||
JSONArray layers = outfit.getJSONArray("layers");
|
||||
List<TDesignPythonOutfitDetail> list = setTDesignPythonOutfitDetailList(layers, designId, designPythonOutfit.getId(), userInfo.getId());
|
||||
|
||||
@@ -353,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);
|
||||
}
|
||||
@@ -378,6 +380,7 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
||||
Assert.notNull(designItem,"design item does not exists!");
|
||||
Design design = designService.getById(designItem.getDesignId());
|
||||
Assert.notNull(design,"design does not exists!");
|
||||
|
||||
DesignLibraryModelPointVO designLibraryModelPointVO = null;
|
||||
// 设置模特
|
||||
if (Objects.nonNull(design.getTemplateId())){
|
||||
@@ -388,18 +391,21 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
||||
designLibraryModelPointVO = collectionElementService.calculateTemplatePoint(modelPoint,library.getHigh(),library.getWidth(),library.getUrl());
|
||||
}
|
||||
|
||||
// 组装入参
|
||||
DesignPythonObjects objects =pythonService.covertDesignSingleParam(
|
||||
designSingleIncludeLayersDTO,design.getSingleOverall(),design.getSwitchCategory(),designLibraryModelPointVO);
|
||||
JSONObject jsonObject = pythonService.designNew(objects);
|
||||
// preview -> 不存数据库 submit -> 存数据库
|
||||
List<TDesignPythonOutfitDetail> tDesignPythonOutfitDetails;
|
||||
JSONObject data = jsonObject.getJSONObject("data");
|
||||
// todo 空指针
|
||||
if (data == null) {
|
||||
throw new BusinessException("python response data is null");
|
||||
}
|
||||
JSONObject outfit = data.getJSONObject("0");
|
||||
if (!designSingleIncludeLayersDTO.getIsPreview()){
|
||||
// 更新及保存图层信息
|
||||
tDesignPythonOutfitDetails = saveDesignSingleItemDetailAndLayers(objects, design.getId(), designSingleIncludeLayersDTO.getDesignItemId(),
|
||||
design.getCollectionId(), userInfo, outfit, designSingleIncludeLayersDTO.getTimeZone());
|
||||
userInfo, outfit, designSingleIncludeLayersDTO.getTimeZone(),designSingleIncludeLayersDTO.getDesignSingleItemDTOList());
|
||||
}else {
|
||||
JSONArray layers = outfit.getJSONArray("layers");
|
||||
tDesignPythonOutfitDetails = setTDesignPythonOutfitDetailList(layers,designItem.getDesignId(),null,userInfo.getId());
|
||||
@@ -412,11 +418,70 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
||||
});
|
||||
|
||||
TDesignPythonOutfit designPythonOutfit = designPythonOutfitService.getByDesignItemId(designSingleIncludeLayersDTO.getDesignItemId());
|
||||
// todo designPythonOutFit 空指针
|
||||
return assembleDesignSingleResponse(designItem.getId(),minioUtil.splitThenGetPreviewUrl(designPythonOutfit.getDesignUrl(),480),
|
||||
Assert.notNull(designItem,"design item detail layers does not exists!");
|
||||
|
||||
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){
|
||||
@@ -430,9 +495,13 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
||||
|
||||
designSingleItemDTOList.forEach(singleItem -> {
|
||||
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(new DesignPythonItemPrint(singleItem.getPrintObject().getPath()));
|
||||
designItemClothesDetailVO.setPrintObject(singleItem.getPrintObject());
|
||||
designItemClothesDetailVO.setLayersObject(layersObject.stream().filter(
|
||||
layers -> singleItem.getType().toLowerCase().equals(layers.getImageCategory().split("_")[0])
|
||||
).collect(Collectors.toList()));
|
||||
@@ -444,4 +513,58 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
||||
|
||||
return designSingleVO;
|
||||
}
|
||||
|
||||
private List<DesignItemDetailPrint> setDesignItemDetailPrintList(List<DesignItemDetail> designItemDetails,
|
||||
List<DesignSingleItemDTO> designSingleItemDTOList,
|
||||
String timeZone){
|
||||
|
||||
Map<String, Long> designItemDetailTypeIdMap = designItemDetails.stream().collect(Collectors.toMap(DesignItemDetail::getType, DesignItemDetail::getId));
|
||||
ArrayList<DesignItemDetailPrint> designItemDetailPrints = new ArrayList<>();
|
||||
|
||||
designSingleItemDTOList.forEach(designSingleItem -> {
|
||||
// 1、判断有无印花,无印花则跳过
|
||||
DesignSinglePrintDTO printObject = designSingleItem.getPrintObject();
|
||||
if (printObject.getIfSingle().equals(Boolean.FALSE)
|
||||
&& CollectionUtil.isEmpty(printObject.getPrints()) ){
|
||||
return;
|
||||
}else {
|
||||
// 2、有印花,添加到list
|
||||
printObject.getPrints().forEach(print -> {
|
||||
// 2.1 判断是否第一次添加印花,是:直接添加
|
||||
List<DesignItemDetailPrint> designItemDetailPrintList = designItemDetailPrintService.getByDesignItemDetailId(designItemDetailTypeIdMap.get(designSingleItem.getType()));
|
||||
if (!designItemDetailPrintList.isEmpty()){
|
||||
// 2.2 否:先删除原始印花,再添加新印花信息
|
||||
designItemDetailPrintService.deleteByDesignItemDetailId(designItemDetailTypeIdMap.get(designSingleItem.getType()));
|
||||
}
|
||||
DesignItemDetailPrint designItemDetailPrint = new DesignItemDetailPrint();
|
||||
designItemDetailPrint.setDesignItemDetailId(designItemDetailTypeIdMap.get(designSingleItem.getType()));
|
||||
designItemDetailPrint.setPath(print.getPath());
|
||||
designItemDetailPrint.setScale(print.getScale());
|
||||
designItemDetailPrint.setSingleOrOverall(printObject.getIfSingle() ? "single" : "overall");
|
||||
designItemDetailPrint.setCreateDate(LocalDateTime.now(ZoneId.of(timeZone)));
|
||||
// single模式下才有position、angle和priority
|
||||
if (designItemDetailPrint.getSingleOrOverall().equals("single")){
|
||||
designItemDetailPrint.setPosition(print.getLocation().toString());
|
||||
designItemDetailPrint.setAngle(print.getAngle());
|
||||
designItemDetailPrint.setPriority(print.getPriority());
|
||||
}
|
||||
designItemDetailPrints.add(designItemDetailPrint);
|
||||
});
|
||||
}
|
||||
});
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,6 +84,8 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
|
||||
private PanToneService panToneService;
|
||||
@Resource
|
||||
private PythonTAllInfoService pythonTAllInfoService;
|
||||
@Resource
|
||||
private DesignItemDetailPrintService designItemDetailPrintService;
|
||||
|
||||
@Resource
|
||||
private TDesignPythonOutfitMapper designPythonOutfitMapper;
|
||||
@@ -834,16 +836,25 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
|
||||
List<DesignItemDetail> filterDetail = designItemDetails.stream()
|
||||
.filter(f -> OUTWEAR_DRESS_BLOUSE.contains(f.getType()) || SKIRT_TROUSERS.contains(f.getType()))
|
||||
.collect(Collectors.toList());
|
||||
response.setClothes(CopyUtil.copyList(filterDetail, DesignItemClothesDetailVO.class, (o, d) -> {
|
||||
d.setId(o.getBusinessId());
|
||||
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()));
|
||||
String printJson = o.getPrintJson();
|
||||
if (StringUtils.isEmpty(printJson)) {
|
||||
d.setPrintObject(new DesignPythonItemPrint(o.getPrintPath(),
|
||||
CollectionLevel1TypeEnum.PRINT_BOARD.getRealName(), 0.3f, Boolean.FALSE));
|
||||
} else {
|
||||
d.setPrintObject(JSON.parseObject(printJson, DesignPythonItemPrint.class));
|
||||
// 根据designItemDetailId获取印花
|
||||
List<DesignItemDetailPrint> prints = designItemDetailPrintService.getByDesignItemDetailId(o.getId());
|
||||
// 判断有无印花
|
||||
if (CollectionUtil.isNotEmpty(prints)){
|
||||
// 有印花
|
||||
d.setPrintObject(convertToDesignSinglePrintDTO(prints));
|
||||
}
|
||||
// String printJson = o.getPrintJson();
|
||||
// if (StringUtils.isEmpty(printJson)) {
|
||||
// d.setPrintObject(new DesignPythonItemPrint(o.getPrintPath(),
|
||||
// CollectionLevel1TypeEnum.PRINT_BOARD.getRealName(), 0.3f, Boolean.FALSE));
|
||||
// } else {
|
||||
// d.setPrintObject(JSON.parseObject(printJson, DesignPythonItemPrint.class));
|
||||
// }
|
||||
}));
|
||||
//single 和 Models(模特)时候 系统元素为空
|
||||
List<DesignItemDetail> filterDetail2 = designItemDetails.stream()
|
||||
@@ -852,10 +863,12 @@ 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,
|
||||
minIoUtil.splitThenGetPreviewUrl(designItem.getDesignUrl(),480),
|
||||
minIoUtil.splitThenGetPreviewUrl(designPythonOutfit.getDesignUrl(),480),
|
||||
editResponseColor(designItemDetails,response));
|
||||
}
|
||||
|
||||
@@ -898,50 +911,36 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
|
||||
return design.getId();
|
||||
}
|
||||
|
||||
/**
|
||||
* 避免多次连接数据,所这里一次查多条颜色并利用designItemDetailId保持颜色与vo的对应关系
|
||||
* @param designItemDetails
|
||||
* @param designItemDetailVO
|
||||
* @return
|
||||
*/
|
||||
private DesignItemDetailVO editResponseColor(List<DesignItemDetail> designItemDetails, DesignItemDetailVO designItemDetailVO) {
|
||||
/*designItemDetails.forEach(d -> {
|
||||
if (!StringUtil.isNullOrEmpty(d.getColor())){
|
||||
PantoneVO pantoneByRgb = panToneService.getPantoneByRgb(d.getColor());
|
||||
DesignItemClothesDetailVO clothesDetailVO = designItemDetailVO.getClothes().stream()
|
||||
.filter(v -> v.getId().equals(d.getBusinessId()))
|
||||
.findFirst().orElse(null);
|
||||
if (Objects.nonNull(clothesDetailVO)){
|
||||
clothesDetailVO.setColor(pantoneByRgb);
|
||||
} else {
|
||||
DesignItemOthersDetailVO othersDetailVO = designItemDetailVO.getOthers().stream()
|
||||
.filter(v -> v.getId().equals(d.getBusinessId()))
|
||||
.findFirst().orElse(null);
|
||||
|
||||
if (Objects.nonNull(othersDetailVO)) {
|
||||
othersDetailVO.setColor(pantoneByRgb);
|
||||
}
|
||||
}
|
||||
}
|
||||
});*/
|
||||
|
||||
HashMap<Long, String> businessIdColor = new HashMap<>();
|
||||
// 使用designItemDetailId做映射
|
||||
HashMap<Long, String> designItemDetailIdColor = new HashMap<>();
|
||||
designItemDetails.forEach(designItemDetail -> {
|
||||
if (!StringUtil.isNullOrEmpty(designItemDetail.getColor())) {
|
||||
businessIdColor.put(designItemDetail.getBusinessId(), designItemDetail.getColor());
|
||||
designItemDetailIdColor.put(designItemDetail.getId(), designItemDetail.getColor());
|
||||
}
|
||||
});
|
||||
|
||||
Map<String, PantoneVO> pantoneByRgbBatch = panToneService.getPantoneByRgbBatch(new ArrayList<>(businessIdColor.values()));
|
||||
Map<String, PantoneVO> pantoneByRgbBatch = panToneService.getPantoneByRgbBatch(new ArrayList<>(designItemDetailIdColor.values()));
|
||||
|
||||
designItemDetailVO.getClothes().forEach(c -> {
|
||||
PantoneVO pantoneVO = pantoneByRgbBatch.get(businessIdColor.get(c.getId()));
|
||||
PantoneVO pantoneVO = pantoneByRgbBatch.get(designItemDetailIdColor.get(c.getId()));
|
||||
c.setColor(pantoneVO);
|
||||
});
|
||||
|
||||
designItemDetailVO.getOthers().forEach(o -> {
|
||||
PantoneVO pantoneVO = pantoneByRgbBatch.get(businessIdColor.get(o.getId()));
|
||||
PantoneVO pantoneVO = pantoneByRgbBatch.get(designItemDetailIdColor.get(o.getId()));
|
||||
o.setColor(pantoneVO);
|
||||
});
|
||||
|
||||
return designItemDetailVO;
|
||||
}
|
||||
|
||||
|
||||
private DesignItemDetailVO editDesignItemLayer(Boolean flag, TDesignPythonOutfit designPythonOutfit, String designItemUrl, DesignItemDetailVO designItemDetailVO) {
|
||||
ArrayList<DesignPythonOutfitVO> detailsVO = new ArrayList<>();
|
||||
|
||||
@@ -976,6 +975,50 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
|
||||
} else {
|
||||
designItemDetailVO.setDesignItemUrl(designItemUrl);
|
||||
}
|
||||
|
||||
return designItemDetailVO;
|
||||
}
|
||||
|
||||
private DesignSinglePrintDTO convertToDesignSinglePrintDTO(List<DesignItemDetailPrint> designItemDetailPrints){
|
||||
DesignSinglePrintDTO designSinglePrintDTO = new DesignSinglePrintDTO();
|
||||
List<DesignSinglePrint> prints = new ArrayList<>();
|
||||
|
||||
// 只有一个印花
|
||||
if (designItemDetailPrints.size() == 1){
|
||||
DesignItemDetailPrint detailPrint = designItemDetailPrints.get(0);
|
||||
DesignSinglePrint designSinglePrint = new DesignSinglePrint();
|
||||
// overall 模式下只需要返回印花url和scale
|
||||
if (detailPrint.getSingleOrOverall().equals("overall")){
|
||||
designSinglePrintDTO.setIfSingle(Boolean.FALSE);
|
||||
}else {
|
||||
designSinglePrintDTO.setIfSingle(Boolean.TRUE);
|
||||
designSinglePrint.setLocation(JSONArray.parseArray(detailPrint.getPosition(),Double.class));
|
||||
designSinglePrint.setScale(detailPrint.getScale());
|
||||
designSinglePrint.setAngle(detailPrint.getAngle());
|
||||
designSinglePrint.setPriority(detailPrint.getPriority());
|
||||
}
|
||||
designSinglePrint.setPath(minIoUtil.splitThenGetPreviewUrl(detailPrint.getPath(),480));
|
||||
designSinglePrint.setMinIOPath(detailPrint.getPath());
|
||||
designSinglePrint.setScale(detailPrint.getScale());
|
||||
prints.add(designSinglePrint);
|
||||
}else {
|
||||
// single模式下多个印花
|
||||
designSinglePrintDTO.setIfSingle(Boolean.TRUE);
|
||||
designItemDetailPrints.forEach(print -> {
|
||||
if (print.getSingleOrOverall().equals("single")){
|
||||
prints.add(new DesignSinglePrint(
|
||||
minIoUtil.splitThenGetPreviewUrl(print.getPath(),480),
|
||||
print.getPath(),
|
||||
JSONArray.parseArray(print.getPosition(),Double.class),
|
||||
print.getScale(),
|
||||
print.getAngle(),
|
||||
print.getPriority()));
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
designSinglePrintDTO.setPrints(prints);
|
||||
return designSinglePrintDTO;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import com.ai.da.common.enums.*;
|
||||
import com.ai.da.common.response.PageBaseResponse;
|
||||
import com.ai.da.common.utils.CopyUtil;
|
||||
import com.ai.da.common.utils.DateUtil;
|
||||
import com.ai.da.common.utils.FileUtil;
|
||||
import com.ai.da.common.utils.MinioUtil;
|
||||
import com.ai.da.mapper.LibraryMapper;
|
||||
import com.ai.da.mapper.entity.*;
|
||||
|
||||
@@ -87,6 +87,7 @@ public class PanToneServiceImpl extends ServiceImpl<PanToneMapper, PanTone> impl
|
||||
});
|
||||
List<ColorLookupTable> colorValueList = colorLoopUpTableService.getByColorValueList(values);
|
||||
colorValueList.forEach(colorValue ->{
|
||||
// 不同的colorValue可能会有相同的colorIndex
|
||||
colorIndexRgb.put(colorValue.getColorIndex(),colorValueRgb.get(colorValue.getColorValue()));
|
||||
});
|
||||
|
||||
@@ -98,7 +99,15 @@ public class PanToneServiceImpl extends ServiceImpl<PanToneMapper, PanTone> impl
|
||||
|
||||
HashMap<String, PantoneVO> colorPantoneVO = new HashMap<>();
|
||||
pantoneVOS.forEach(pantoneVO -> {
|
||||
colorPantoneVO.put(colorIndexRgb.get(pantoneVO.getId()),pantoneVO);
|
||||
int colorIndex = pantoneVO.getId();
|
||||
List<ColorLookupTable> collect = colorValueList.stream().filter(colorValue -> colorValue.getColorIndex().equals(colorIndex)).collect(Collectors.toList());
|
||||
if (collect.size() > 1){
|
||||
for (ColorLookupTable colorLookupTable : collect) {
|
||||
colorPantoneVO.put(colorValueRgb.get(colorLookupTable.getColorValue()), pantoneVO);
|
||||
}
|
||||
}else if (collect.size() == 1){
|
||||
colorPantoneVO.put(colorIndexRgb.get(pantoneVO.getId()),pantoneVO);
|
||||
}
|
||||
});
|
||||
|
||||
return colorPantoneVO;
|
||||
|
||||
@@ -3,12 +3,14 @@ package com.ai.da.service.impl;
|
||||
import com.ai.da.common.utils.CopyUtil;
|
||||
import com.ai.da.common.utils.MinioUtil;
|
||||
import com.ai.da.mapper.TDesignPythonOutfitDetailMapper;
|
||||
import com.ai.da.mapper.entity.DesignItemDetail;
|
||||
import com.ai.da.mapper.entity.TDesignPythonOutfitDetail;
|
||||
import com.ai.da.model.vo.DesignPythonOutfitVO;
|
||||
import com.ai.da.model.vo.TDesignPythonOutfitDetailVO;
|
||||
import com.ai.da.service.ITDesignPythonOutfitDetailService;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import io.netty.util.internal.StringUtil;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
@@ -52,24 +54,22 @@ public class TDesignPythonOutfitDetailServiceImpl extends ServiceImpl<TDesignPyt
|
||||
DesignPythonOutfitVO designPythonOutfitVO = CopyUtil.copyObject(detail,DesignPythonOutfitVO.class);
|
||||
designPythonOutfitVO.setPosition(StringUtil.isNullOrEmpty(detail.getPosition()) ? null : (List<Long>) JSON.parse(detail.getPosition()));
|
||||
designPythonOutfitVO.setImageSize(StringUtil.isNullOrEmpty(detail.getImageSize()) ? null : (List<Long>) JSON.parse(detail.getImageSize()));
|
||||
if (detail.getImageCategory().equals("body")){
|
||||
designPythonOutfitVO.setImageUrl(StringUtil.isNullOrEmpty(detail.getImageUrl()) ? null : minIoUtil.splitThenGetPreviewUrl(detail.getImageUrl(),480));
|
||||
}else {
|
||||
designPythonOutfitVO.setImageUrl(StringUtil.isNullOrEmpty(detail.getImageUrl()) ? null : minIoUtil.splitThenGetPreviewUrl(detail.getImageUrl(),480));
|
||||
}
|
||||
designPythonOutfitVO.setImageUrl(StringUtil.isNullOrEmpty(detail.getImageUrl()) ? null : minIoUtil.splitThenGetPreviewUrl(detail.getImageUrl(),480));
|
||||
designPythonOutfitVO.setMaskUrl(StringUtil.isNullOrEmpty(detail.getMaskUrl()) ? null : minIoUtil.splitThenGetPreviewUrl(detail.getMaskUrl(),480));
|
||||
return designPythonOutfitVO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteByDesignPythonOutfitId(Long designPythonOutfitId){
|
||||
QueryWrapper<TDesignPythonOutfitDetail> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("design_python_outfit_id",designPythonOutfitId);
|
||||
// QueryWrapper<TDesignPythonOutfitDetail> queryWrapper = new QueryWrapper<>();
|
||||
// queryWrapper.eq("design_python_outfit_id",designPythonOutfitId);
|
||||
// TDesignPythonOutfitDetail tDesignPythonOutfitDetail = new TDesignPythonOutfitDetail();
|
||||
// tDesignPythonOutfitDetail.setIsDeleted(1);
|
||||
UpdateWrapper<TDesignPythonOutfitDetail> updateWrapper = new UpdateWrapper<>();
|
||||
updateWrapper.eq("design_python_outfit_id", designPythonOutfitId);
|
||||
updateWrapper.set("is_deleted",(byte)1);
|
||||
|
||||
TDesignPythonOutfitDetail tDesignPythonOutfitDetail = new TDesignPythonOutfitDetail();
|
||||
tDesignPythonOutfitDetail.setIsDeleted(1);
|
||||
|
||||
baseMapper.update(tDesignPythonOutfitDetail,queryWrapper);
|
||||
baseMapper.update(null,updateWrapper);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user