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:
shahaibo
2023-09-30 13:23:08 +08:00
30 changed files with 631 additions and 197 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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.*;

View File

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

View File

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