design single 在用户submit时将上传的图片保存到library
This commit is contained in:
@@ -26,6 +26,9 @@ public class DesignSingleIncludeLayersDTO {
|
|||||||
@ApiModelProperty("进度")
|
@ApiModelProperty("进度")
|
||||||
private String processId;
|
private String processId;
|
||||||
|
|
||||||
|
@ApiModelProperty("性别")
|
||||||
|
private String gender;
|
||||||
|
|
||||||
@NotBlank(message = "timeZone.cannot.be.empty")
|
@NotBlank(message = "timeZone.cannot.be.empty")
|
||||||
@ApiModelProperty("本地时区,比如 'Asia/Tokyo' 东京时间 , 'Asia/Shanghai' 北京时间 由js本地获取")
|
@ApiModelProperty("本地时区,比如 'Asia/Tokyo' 东京时间 , 'Asia/Shanghai' 北京时间 由js本地获取")
|
||||||
private String timeZone;
|
private String timeZone;
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import javax.validation.constraints.NotBlank;
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import javax.validation.constraints.NotEmpty;
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -14,6 +15,14 @@ public class DesignSingleItemDTO {
|
|||||||
@ApiModelProperty("切换图片对应的id")
|
@ApiModelProperty("切换图片对应的id")
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
|
@NotEmpty(message = "changed cannot be empty")
|
||||||
|
@ApiModelProperty("当前服装的id是否被添加随机数")
|
||||||
|
private Boolean changed;
|
||||||
|
|
||||||
|
@NotBlank(message = "designType cannot be empty")
|
||||||
|
@ApiModelProperty("当前图片来源于用户上传还是从library选择 Collection/Library")
|
||||||
|
private String designType;
|
||||||
|
|
||||||
@NotBlank(message = "type.cannot.be.empty")
|
@NotBlank(message = "type.cannot.be.empty")
|
||||||
@ApiModelProperty("生成item实际对应的类型 有:outwear,dress,blouse,skirt,trousers Shoes Hairstyle Earring")
|
@ApiModelProperty("生成item实际对应的类型 有:outwear,dress,blouse,skirt,trousers Shoes Hairstyle Earring")
|
||||||
private String type;
|
private String type;
|
||||||
|
|||||||
@@ -17,6 +17,12 @@ public class DesignItemClothesDetailVO {
|
|||||||
@ApiModelProperty("对应的上游id")
|
@ApiModelProperty("对应的上游id")
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
|
@ApiModelProperty("该id末尾是否被加了随机数")
|
||||||
|
private Boolean changed;
|
||||||
|
|
||||||
|
@ApiModelProperty("该图片来源 Collection / Library")
|
||||||
|
private String designType;
|
||||||
|
|
||||||
@ApiModelProperty("对应的类型 有:Outwear,Dress,Blouse,Skirt,Trousers Shoes Hairstyle Earring Body")
|
@ApiModelProperty("对应的类型 有:Outwear,Dress,Blouse,Skirt,Trousers Shoes Hairstyle Earring Body")
|
||||||
private String type;
|
private String type;
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,9 @@ import java.util.List;
|
|||||||
@ApiModel("design single 印花详情")
|
@ApiModel("design single 印花详情")
|
||||||
public class DesignSinglePrint {
|
public class DesignSinglePrint {
|
||||||
|
|
||||||
|
@ApiModelProperty("印花是用户上传的还是从library中选的 collection/library")
|
||||||
|
private String designType;
|
||||||
|
|
||||||
@ApiModelProperty("印花url")
|
@ApiModelProperty("印花url")
|
||||||
private String path;
|
private String path;
|
||||||
|
|
||||||
|
|||||||
@@ -2578,13 +2578,21 @@ public class PythonService {
|
|||||||
List<DesignPythonItem> response = new ArrayList<>();
|
List<DesignPythonItem> response = new ArrayList<>();
|
||||||
|
|
||||||
designSingleItemList.forEach(designSingleItem -> {
|
designSingleItemList.forEach(designSingleItem -> {
|
||||||
|
Long businessId;
|
||||||
|
if (!designSingleIncludeLayersDTO.getIsPreview() && designSingleItem.getChanged()){
|
||||||
|
String s = String.valueOf(designSingleItem.getId());
|
||||||
|
businessId = Long.parseLong(s.substring(0,s.length() - 3));
|
||||||
|
}else {
|
||||||
|
businessId = designSingleItem.getId();
|
||||||
|
}
|
||||||
response.add(new DesignPythonItem(
|
response.add(new DesignPythonItem(
|
||||||
designSingleItem.getType(),
|
designSingleItem.getType(),
|
||||||
designSingleItem.getPath(),
|
designSingleItem.getPath(),
|
||||||
designSingleItem.getColor(),
|
designSingleItem.getColor(),
|
||||||
resolveDesignSinglePrint(designSingleItem.getPrintObject(), designSingleItem.getPath()),
|
resolveDesignSinglePrint(designSingleItem.getPrintObject(), designSingleItem.getPath()),
|
||||||
// businessId designItemDetailId (python端确认没有作用,但是数据库需要存,作用:未知)
|
// businessId designItemDetailId (python端确认没有作用,但是数据库需要存,作用:未知)
|
||||||
designSingleItem.getId(),
|
// designSingleItem.getId(),
|
||||||
|
businessId,
|
||||||
pythonTAllInfoService.getImageIdByPath(designSingleItem.getPath()),
|
pythonTAllInfoService.getImageIdByPath(designSingleItem.getPath()),
|
||||||
designSingleItem.getOffset(),
|
designSingleItem.getOffset(),
|
||||||
designSingleItem.getScale(),
|
designSingleItem.getScale(),
|
||||||
|
|||||||
@@ -3,11 +3,14 @@ package com.ai.da.service.impl;
|
|||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.ai.da.common.config.exception.BusinessException;
|
import com.ai.da.common.config.exception.BusinessException;
|
||||||
|
import com.ai.da.common.constant.CommonConstant;
|
||||||
import com.ai.da.common.context.UserContext;
|
import com.ai.da.common.context.UserContext;
|
||||||
|
import com.ai.da.common.enums.CollectionLevel1TypeEnum;
|
||||||
import com.ai.da.common.enums.SingleOverallEnum;
|
import com.ai.da.common.enums.SingleOverallEnum;
|
||||||
import com.ai.da.common.enums.SysFileLevel2TypeEnum;
|
import com.ai.da.common.enums.SysFileLevel2TypeEnum;
|
||||||
import com.ai.da.common.utils.CopyUtil;
|
import com.ai.da.common.utils.CopyUtil;
|
||||||
import com.ai.da.common.utils.DateUtil;
|
import com.ai.da.common.utils.DateUtil;
|
||||||
|
import com.ai.da.common.utils.MD5Utils;
|
||||||
import com.ai.da.common.utils.MinioUtil;
|
import com.ai.da.common.utils.MinioUtil;
|
||||||
import com.ai.da.mapper.primary.DesignItemMapper;
|
import com.ai.da.mapper.primary.DesignItemMapper;
|
||||||
import com.ai.da.mapper.primary.entity.*;
|
import com.ai.da.mapper.primary.entity.*;
|
||||||
@@ -30,8 +33,10 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@@ -488,6 +493,8 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
|||||||
// 更新及保存图层信息
|
// 更新及保存图层信息
|
||||||
tDesignPythonOutfitDetails = saveDesignSingleItemDetailAndLayers(objects, design.getId(), designSingleIncludeLayersDTO.getDesignItemId(),
|
tDesignPythonOutfitDetails = saveDesignSingleItemDetailAndLayers(objects, design.getId(), designSingleIncludeLayersDTO.getDesignItemId(),
|
||||||
userInfo, outfit, designSingleIncludeLayersDTO.getTimeZone(), designSingleIncludeLayersDTO.getDesignSingleItemDTOList());
|
userInfo, outfit, designSingleIncludeLayersDTO.getTimeZone(), designSingleIncludeLayersDTO.getDesignSingleItemDTOList());
|
||||||
|
|
||||||
|
saveCollectionElement(designSingleIncludeLayersDTO);
|
||||||
} else {
|
} else {
|
||||||
JSONArray layers = outfit.getJSONArray("layers");
|
JSONArray layers = outfit.getJSONArray("layers");
|
||||||
tDesignPythonOutfitDetails = setTDesignPythonOutfitDetailList(layers, designItem.getDesignId(), null, userInfo.getId(), priorityOffset);
|
tDesignPythonOutfitDetails = setTDesignPythonOutfitDetailList(layers, designItem.getDesignId(), null, userInfo.getId(), priorityOffset);
|
||||||
@@ -537,10 +544,6 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
|||||||
log.error(layer.getImageCategory() + " layer does not exists!");
|
log.error(layer.getImageCategory() + " layer does not exists!");
|
||||||
throw new BusinessException("layers.does.not.exists");
|
throw new BusinessException("layers.does.not.exists");
|
||||||
}
|
}
|
||||||
// Assert.notNull(detail, layer.getImageCategory() + " layer does not exists!");
|
|
||||||
|
|
||||||
/*layer.setImageUrl(detail.getImageUrl());
|
|
||||||
layer.setMaskUrl(detail.getMaskUrl());*/
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// 3、组装python入参
|
// 3、组装python入参
|
||||||
@@ -621,15 +624,21 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
|||||||
designSingleVO.setCurrentFullBodyView(minioUtil.getPresignedUrl(currentFullBodyView, 24 * 60));
|
designSingleVO.setCurrentFullBodyView(minioUtil.getPresignedUrl(currentFullBodyView, 24 * 60));
|
||||||
designSingleVO.setClothes(clothes);
|
designSingleVO.setClothes(clothes);
|
||||||
|
|
||||||
|
// 获取每个单品的id是否被改变过,该状态需要再返回给前端
|
||||||
|
Map<Long, Boolean> idChanged = designSingleItemDTOList.stream().collect(Collectors.toMap(DesignSingleItemDTO::getId, DesignSingleItemDTO::getChanged));
|
||||||
|
// 获取每个单品的designType,该状态需要再返回给前端
|
||||||
|
Map<Long, String> idDesignType = designSingleItemDTOList.stream().collect(Collectors.toMap(DesignSingleItemDTO::getId, DesignSingleItemDTO::getDesignType));
|
||||||
|
|
||||||
boolean flag = singleOrOverall.equals("single");
|
boolean flag = singleOrOverall.equals("single");
|
||||||
designSingleItemDTOList.forEach(singleItem -> {
|
designSingleItemDTOList.forEach(singleItem -> {
|
||||||
DesignItemClothesDetailVO designItemClothesDetailVO = new DesignItemClothesDetailVO();
|
DesignItemClothesDetailVO designItemClothesDetailVO = new DesignItemClothesDetailVO();
|
||||||
designItemClothesDetailVO.setId(singleItem.getId());
|
designItemClothesDetailVO.setId(singleItem.getId());
|
||||||
|
designItemClothesDetailVO.setChanged(idChanged.get(singleItem.getId()));
|
||||||
|
designItemClothesDetailVO.setDesignType(idDesignType.get(singleItem.getId()));
|
||||||
designItemClothesDetailVO.setType(singleItem.getType());
|
designItemClothesDetailVO.setType(singleItem.getType());
|
||||||
designItemClothesDetailVO.setPath(minioUtil.getPresignedUrl(singleItem.getPath(), 24 * 60));
|
designItemClothesDetailVO.setPath(minioUtil.getPresignedUrl(singleItem.getPath(), 24 * 60));
|
||||||
designItemClothesDetailVO.setMinIOPath(singleItem.getPath());
|
designItemClothesDetailVO.setMinIOPath(singleItem.getPath());
|
||||||
designItemClothesDetailVO.setColor(panToneService.getPantoneByRgb(singleItem.getColor()));
|
designItemClothesDetailVO.setColor(panToneService.getPantoneByRgb(singleItem.getColor()));
|
||||||
// designItemClothesDetailVO.setPrintObject(new DesignPythonItemPrint(singleItem.getPrintObject().getPath()));
|
|
||||||
designItemClothesDetailVO.setPrintObject(singleItem.getPrintObject());
|
designItemClothesDetailVO.setPrintObject(singleItem.getPrintObject());
|
||||||
designItemClothesDetailVO.setLayersObject(layersObject.stream().filter(
|
designItemClothesDetailVO.setLayersObject(layersObject.stream().filter(
|
||||||
layers -> (singleItem.getType().toLowerCase().equals(layers.getImageCategory().split("_")[0])
|
layers -> (singleItem.getType().toLowerCase().equals(layers.getImageCategory().split("_")[0])
|
||||||
@@ -703,4 +712,68 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
|||||||
queryWrapper.in("id",designItemIdList);
|
queryWrapper.in("id",designItemIdList);
|
||||||
return designItemMapper.selectList(queryWrapper);
|
return designItemMapper.selectList(queryWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void saveCollectionElement(DesignSingleIncludeLayersDTO designSingleIncludeLayersDTO){
|
||||||
|
|
||||||
|
ArrayList<Library> libraries = new ArrayList<>();
|
||||||
|
// 添加sketch到library
|
||||||
|
designSingleIncludeLayersDTO.getDesignSingleItemDTOList().forEach(designSingleItem -> {
|
||||||
|
|
||||||
|
if (!StringUtil.isNullOrEmpty(designSingleItem.getDesignType()) && designSingleItem.getDesignType().equals("Collection")){
|
||||||
|
String path = minioUtil.getPresignedUrl(designSingleItem.getPath(), CommonConstant.MINIO_IMAGE_EXPIRE_TIME);
|
||||||
|
try {
|
||||||
|
String md5 = MD5Utils.encryptFile(path, false);
|
||||||
|
// 先判断是否需要被加入到library
|
||||||
|
Boolean needAdd = libraryService.checkMd5(CollectionLevel1TypeEnum.SKETCH_BOARD.getRealName(),
|
||||||
|
designSingleItem.getType(),
|
||||||
|
designSingleIncludeLayersDTO.getGender(),
|
||||||
|
md5);
|
||||||
|
// 加入到library
|
||||||
|
if (needAdd){
|
||||||
|
Library library = new Library();
|
||||||
|
library.setAccountId(UserContext.getUserHolder().getId());
|
||||||
|
library.setLevel1Type(CollectionLevel1TypeEnum.SKETCH_BOARD.getRealName());
|
||||||
|
library.setLevel2Type(designSingleItem.getType());
|
||||||
|
library.setLevel3Type(designSingleIncludeLayersDTO.getGender());
|
||||||
|
library.setUrl(designSingleItem.getPath());
|
||||||
|
library.setName(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")));
|
||||||
|
library.setMd5(md5);
|
||||||
|
library.setCreateDate(DateUtil.getByTimeZone(designSingleIncludeLayersDTO.getTimeZone()));
|
||||||
|
libraries.add(library);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加print到library
|
||||||
|
designSingleItem.getPrintObject().getPrints().forEach(print -> {
|
||||||
|
if (!StringUtil.isNullOrEmpty(print.getDesignType()) && print.getDesignType().equals("Collection")){
|
||||||
|
String path = minioUtil.getPresignedUrl(print.getMinIOPath(), CommonConstant.MINIO_IMAGE_EXPIRE_TIME);
|
||||||
|
try {
|
||||||
|
String md5 = MD5Utils.encryptFile(path, false);
|
||||||
|
// 先判断是否已被加入到library
|
||||||
|
Boolean needAdd = libraryService.checkMd5(CollectionLevel1TypeEnum.PRINT_BOARD.getRealName(),
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
md5);
|
||||||
|
// 加入到library
|
||||||
|
if (needAdd){
|
||||||
|
Library library = new Library();
|
||||||
|
library.setAccountId(UserContext.getUserHolder().getId());
|
||||||
|
library.setLevel1Type(CollectionLevel1TypeEnum.PRINT_BOARD.getRealName());
|
||||||
|
library.setUrl(print.getMinIOPath());
|
||||||
|
library.setName(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")));
|
||||||
|
library.setMd5(md5);
|
||||||
|
library.setCreateDate(DateUtil.getByTimeZone(designSingleIncludeLayersDTO.getTimeZone()));
|
||||||
|
libraries.add(library);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} );
|
||||||
|
libraryService.saveBatch(libraries);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -409,7 +409,8 @@ public class LibraryServiceImpl extends ServiceImpl<LibraryMapper, Library> impl
|
|||||||
qw.lambda().eq(Library::getLevel2Type, level2Type);
|
qw.lambda().eq(Library::getLevel2Type, level2Type);
|
||||||
qw.lambda().eq(Library::getLevel3Type, sex);
|
qw.lambda().eq(Library::getLevel3Type, sex);
|
||||||
} else {
|
} else {
|
||||||
qw.lambda().eq(Library::getLevel2Type, sex);
|
// qw.lambda().eq(Library::getLevel2Type, sex);
|
||||||
|
qw.lambda().eq(Library::getLevel3Type, sex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
qw.lambda().eq(Library::getMd5, md5);
|
qw.lambda().eq(Library::getMd5, md5);
|
||||||
|
|||||||
Reference in New Issue
Block a user