TASK:design single部分cv操作前置,新增merge | default两种designType
This commit is contained in:
@@ -43,6 +43,10 @@ public class DesignSingleIncludeLayersDTO implements Serializable {
|
|||||||
@Schema(description = "项目id")
|
@Schema(description = "项目id")
|
||||||
private Long projectId;
|
private Long projectId;
|
||||||
|
|
||||||
|
@NotBlank(message = "designType cannot be empty")
|
||||||
|
@Schema(description = "default -> 新增sketch || merge")
|
||||||
|
private String designType;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "DesignSingleIncludeLayersDTO{" +
|
return "DesignSingleIncludeLayersDTO{" +
|
||||||
|
|||||||
@@ -73,4 +73,10 @@ public class DesignSingleItemDTO implements Serializable {
|
|||||||
@Schema(description = "45")
|
@Schema(description = "45")
|
||||||
private double rotate;
|
private double rotate;
|
||||||
|
|
||||||
|
@Schema(description = "带overall印花未分割图片")
|
||||||
|
private String undividedLayerBase64;
|
||||||
|
|
||||||
|
@Schema(description = "带overall/single印花未分割图片")
|
||||||
|
private String undividedLayerWithSinglePrintBase64;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,17 +20,17 @@ public class PartialDesignDTO implements Serializable {
|
|||||||
@Schema(description = "图片的base64格式")
|
@Schema(description = "图片的base64格式")
|
||||||
private String partialDesignBase64;
|
private String partialDesignBase64;
|
||||||
|
|
||||||
@Schema(description = "图层信息")
|
/* @Schema(description = "图层信息")
|
||||||
private List<String> layers;
|
private List<String> layers;*/
|
||||||
|
|
||||||
public PartialDesignDTO(String partialDesignMinioPath) {
|
public PartialDesignDTO(String partialDesignMinioPath) {
|
||||||
this.partialDesignMinioPath = partialDesignMinioPath;
|
this.partialDesignMinioPath = partialDesignMinioPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PartialDesignDTO(String partialDesignMinioPath, List<String> layers) {
|
/* public PartialDesignDTO(String partialDesignMinioPath, List<String> layers) {
|
||||||
this.partialDesignMinioPath = partialDesignMinioPath;
|
this.partialDesignMinioPath = partialDesignMinioPath;
|
||||||
this.layers = layers;
|
this.layers = layers;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
public PartialDesignDTO(String partialDesignMinioPath, String partialDesignPath) {
|
public PartialDesignDTO(String partialDesignMinioPath, String partialDesignPath) {
|
||||||
this.partialDesignMinioPath = partialDesignMinioPath;
|
this.partialDesignMinioPath = partialDesignMinioPath;
|
||||||
|
|||||||
@@ -2789,7 +2789,7 @@ public class PythonService {
|
|||||||
DesignPythonObject pythonObject = new DesignPythonObject();
|
DesignPythonObject pythonObject = new DesignPythonObject();
|
||||||
designPythonObjects.setProcess_id(designSingleDTO.getProcessId());
|
designPythonObjects.setProcess_id(designSingleDTO.getProcessId());
|
||||||
pythonObject.setItems(coverToDesignSinglePythonItem(designSingleDTO, designLibraryModelPoint, singleOverall));
|
pythonObject.setItems(coverToDesignSinglePythonItem(designSingleDTO, designLibraryModelPoint, singleOverall));
|
||||||
pythonObject.setBasic(coverToSingleBasic(singleOverall, switchCategory, designLibraryModelPoint, previewOrSubmit));
|
pythonObject.setBasic(coverToSingleBasic(singleOverall, switchCategory, designLibraryModelPoint, designSingleDTO.getDesignType()));
|
||||||
objects.add(pythonObject);
|
objects.add(pythonObject);
|
||||||
return designPythonObjects;
|
return designPythonObjects;
|
||||||
}
|
}
|
||||||
@@ -2855,6 +2855,9 @@ public class PythonService {
|
|||||||
designSingleItem.getPartialDesign().getPartialDesignMinioPath());
|
designSingleItem.getPartialDesign().getPartialDesignMinioPath());
|
||||||
resolveDesignElement(designSingleItem.getTrims(), printToPython);
|
resolveDesignElement(designSingleItem.getTrims(), printToPython);
|
||||||
log.info("组装参数【服装:{}的maskUrl: {}】",designSingleItem.getType(), designSingleItem.getMaskUrl());
|
log.info("组装参数【服装:{}的maskUrl: {}】",designSingleItem.getType(), designSingleItem.getMaskUrl());
|
||||||
|
|
||||||
|
String mergeImagePath = !StringUtil.isNullOrEmpty(printToPython.getPartial())
|
||||||
|
? printToPython.getPartial() : designSingleItem.getPath();
|
||||||
response.add(new DesignPythonItem(
|
response.add(new DesignPythonItem(
|
||||||
designSingleItem.getType(),
|
designSingleItem.getType(),
|
||||||
designSingleItem.getPath(),
|
designSingleItem.getPath(),
|
||||||
@@ -2871,7 +2874,8 @@ public class PythonService {
|
|||||||
gradientString,
|
gradientString,
|
||||||
designSingleItem.getMaskUrl(),
|
designSingleItem.getMaskUrl(),
|
||||||
designSingleItem.getTranspose(),
|
designSingleItem.getTranspose(),
|
||||||
designSingleItem.getRotate()
|
designSingleItem.getRotate(),
|
||||||
|
mergeImagePath
|
||||||
));
|
));
|
||||||
|
|
||||||
});
|
});
|
||||||
@@ -3049,7 +3053,7 @@ public class PythonService {
|
|||||||
*/
|
*/
|
||||||
private DesignPythonBasic coverToSingleBasic(String singleOverall, String switchCategory,
|
private DesignPythonBasic coverToSingleBasic(String singleOverall, String switchCategory,
|
||||||
DesignLibraryModelPointVO designLibraryModelPoint,
|
DesignLibraryModelPointVO designLibraryModelPoint,
|
||||||
String previewOrSubmit) {
|
String designType) {
|
||||||
DesignPythonBasic basic = new DesignPythonBasic();
|
DesignPythonBasic basic = new DesignPythonBasic();
|
||||||
basic.setSingle_overall(singleOverall);
|
basic.setSingle_overall(singleOverall);
|
||||||
basic.setSwitch_category(switchCategory);
|
basic.setSwitch_category(switchCategory);
|
||||||
@@ -3061,7 +3065,8 @@ public class PythonService {
|
|||||||
basic.setScale_earrings(0.16);
|
basic.setScale_earrings(0.16);
|
||||||
basic.setBody_point_test(getMap(designLibraryModelPoint));
|
basic.setBody_point_test(getMap(designLibraryModelPoint));
|
||||||
basic.setLayer_order(Boolean.TRUE);
|
basic.setLayer_order(Boolean.TRUE);
|
||||||
basic.setPreview_submit(previewOrSubmit);
|
// basic.setPreview_submit(previewOrSubmit);
|
||||||
|
basic.setDesign_type(designType);
|
||||||
return basic;
|
return basic;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ public class DesignPythonBasic {
|
|||||||
|
|
||||||
private String single_overall;
|
private String single_overall;
|
||||||
|
|
||||||
private String preview_submit;
|
// private String preview_submit;
|
||||||
|
|
||||||
private String switch_category;
|
private String switch_category;
|
||||||
/**
|
/**
|
||||||
@@ -40,4 +40,7 @@ public class DesignPythonBasic {
|
|||||||
|
|
||||||
private Boolean layer_order = Boolean.FALSE;
|
private Boolean layer_order = Boolean.FALSE;
|
||||||
|
|
||||||
|
// default | merge
|
||||||
|
private String design_type = "default";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -97,6 +97,12 @@ public class DesignPythonItem {
|
|||||||
*/
|
*/
|
||||||
private double rotate;
|
private double rotate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 前端处理了print之后的结果图,python对该图进行分割
|
||||||
|
* designType为merge时,该字段必须有值,否则会导致python端没有数据返回
|
||||||
|
*/
|
||||||
|
private String merge_image_path;
|
||||||
|
|
||||||
public static List<String> OUTWEAR_DRESS_BLOUSE = Arrays.asList(CollectionLevel2TypeEnum.OUTWEAR.getRealName(),
|
public static List<String> OUTWEAR_DRESS_BLOUSE = Arrays.asList(CollectionLevel2TypeEnum.OUTWEAR.getRealName(),
|
||||||
CollectionLevel2TypeEnum.DRESS.getRealName(), CollectionLevel2TypeEnum.BLOUSE.getRealName());
|
CollectionLevel2TypeEnum.DRESS.getRealName(), CollectionLevel2TypeEnum.BLOUSE.getRealName());
|
||||||
|
|
||||||
@@ -153,7 +159,8 @@ public class DesignPythonItem {
|
|||||||
|
|
||||||
public DesignPythonItem(String type, String path, String color, PrintToPython print, Long businessId,
|
public DesignPythonItem(String type, String path, String color, PrintToPython print, Long businessId,
|
||||||
Long image_id, List<Long> offset, Float[] resize_scale, Integer priority, String gradient,
|
Long image_id, List<Long> offset, Float[] resize_scale, Integer priority, String gradient,
|
||||||
String gradientString, String seg_mask_url, int[] transpose, double rotate) {
|
String gradientString, String seg_mask_url, int[] transpose, double rotate,
|
||||||
|
String merge_image_path) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.path = path;
|
this.path = path;
|
||||||
this.color = color;
|
this.color = color;
|
||||||
@@ -169,6 +176,7 @@ public class DesignPythonItem {
|
|||||||
this.seg_mask_url = seg_mask_url;
|
this.seg_mask_url = seg_mask_url;
|
||||||
this.transpose = transpose;
|
this.transpose = transpose;
|
||||||
this.rotate = rotate;
|
this.rotate = rotate;
|
||||||
|
this.merge_image_path = merge_image_path;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DesignPythonItem(String type, String path, String color, PrintToPython print, String icon, Long businessId, Long image_id) {
|
public DesignPythonItem(String type, String path, String color, PrintToPython print, String icon, Long businessId, Long image_id) {
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ public interface DesignItemService extends IService<DesignItem> {
|
|||||||
|
|
||||||
DesignSingleVO designSingleIncludeLayers(DesignSingleIncludeLayersDTO designSingleIncludeLayersDTO);
|
DesignSingleVO designSingleIncludeLayers(DesignSingleIncludeLayersDTO designSingleIncludeLayersDTO);
|
||||||
|
|
||||||
Map<String, List<String>> setPriorityAndUndividedLayer(JSONArray layers);
|
Map<String, List<String>> setPriorityAndUndividedLayer(JSONArray layers, DesignSingleIncludeLayersDTO designSingleIncludeLayersDTO);
|
||||||
|
|
||||||
Map<String, String> setTypeAndUndividedLayer(JSONArray layers);
|
Map<String, String> setTypeAndUndividedLayer(JSONArray layers);
|
||||||
|
|
||||||
|
|||||||
@@ -365,7 +365,7 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
|||||||
, JSONObject outfit, String timeZone, List<DesignSingleItemDTO> designSingleItemDTOList
|
, JSONObject outfit, String timeZone, List<DesignSingleItemDTO> designSingleItemDTOList
|
||||||
, Map<String, List<String>> priorityAndUndividedLayer
|
, Map<String, List<String>> priorityAndUndividedLayer
|
||||||
, boolean changeModelFlag
|
, boolean changeModelFlag
|
||||||
, Long modelId, String modelType, boolean isSingleCollectionFlag) {
|
, Long modelId, String modelType, boolean isSingleCollectionFlag, String designType) {
|
||||||
|
|
||||||
DesignItem designItem = new DesignItem();
|
DesignItem designItem = new DesignItem();
|
||||||
// String url = pythonObjects.getObjects().get(0).getBasic().getSave_name();
|
// String url = pythonObjects.getObjects().get(0).getBasic().getSave_name();
|
||||||
@@ -425,9 +425,12 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
|||||||
designItemDetail.setIconPath(detail.getIcon());
|
designItemDetail.setIconPath(detail.getIcon());
|
||||||
// designItemDetail.setUndividedLayer(priorityAndUndividedLayer.get(detail.getType().toLowerCase()));
|
// designItemDetail.setUndividedLayer(priorityAndUndividedLayer.get(detail.getType().toLowerCase()));
|
||||||
if (!detail.getType().equals("Body")) {
|
if (!detail.getType().equals("Body")) {
|
||||||
designItemDetail.setUndividedLayer(priorityAndUndividedLayer.get(detail.getPriority().toString()).get(0));
|
if (!StringUtil.isNullOrEmpty(priorityAndUndividedLayer.get(detail.getPriority().toString()).get(0))) {
|
||||||
|
designItemDetail.setUndividedLayer(priorityAndUndividedLayer.get(detail.getPriority().toString()).getFirst());
|
||||||
|
}
|
||||||
|
if (!StringUtil.isNullOrEmpty(priorityAndUndividedLayer.get(detail.getPriority().toString()).get(1))) {
|
||||||
designItemDetail.setUndividedLayerWithSinglePrint(priorityAndUndividedLayer.get(detail.getPriority().toString()).get(1));
|
designItemDetail.setUndividedLayerWithSinglePrint(priorityAndUndividedLayer.get(detail.getPriority().toString()).get(1));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// 印花存储在design_item_detail_print表中 这里还要存吗?
|
// 印花存储在design_item_detail_print表中 这里还要存吗?
|
||||||
// DesignPythonItemPrint printObject = detail.getPrintToPython();
|
// DesignPythonItemPrint printObject = detail.getPrintToPython();
|
||||||
@@ -481,6 +484,15 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
|||||||
priorityOffset = designSingleItemDTOList.stream()
|
priorityOffset = designSingleItemDTOList.stream()
|
||||||
.collect(Collectors.toMap(DesignSingleItemDTO::getPriority, DesignSingleItemDTO::getOffset));
|
.collect(Collectors.toMap(DesignSingleItemDTO::getPriority, DesignSingleItemDTO::getOffset));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 图层与mask对应关系,衣服前后片的mask是相同的
|
||||||
|
Map<Integer, String> priorityMask = null;
|
||||||
|
// 如果是merge模式 则使用入参中的mask
|
||||||
|
if (designType.equals("merge")) {
|
||||||
|
priorityMask = designSingleItemDTOList.stream()
|
||||||
|
.collect(Collectors.toMap(DesignSingleItemDTO::getPriority, DesignSingleItemDTO::getMaskMinioUrl));
|
||||||
|
}
|
||||||
|
|
||||||
List<TDesignPythonOutfitDetail> list = new ArrayList<>();
|
List<TDesignPythonOutfitDetail> list = new ArrayList<>();
|
||||||
for (int i = 0; i < layers.size(); i++) {
|
for (int i = 0; i < layers.size(); i++) {
|
||||||
JSONObject jsonObject = layers.getJSONObject(i);
|
JSONObject jsonObject = layers.getJSONObject(i);
|
||||||
@@ -502,7 +514,12 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
|||||||
designPythonOutfitDetail.setImageUrl(jsonObject.getString("image_url"));
|
designPythonOutfitDetail.setImageUrl(jsonObject.getString("image_url"));
|
||||||
designPythonOutfitDetail.setImageSize(jsonObject.getString("image_size"));
|
designPythonOutfitDetail.setImageSize(jsonObject.getString("image_size"));
|
||||||
designPythonOutfitDetail.setImageCategory(jsonObject.getString("image_category"));
|
designPythonOutfitDetail.setImageCategory(jsonObject.getString("image_category"));
|
||||||
|
if (designType.equals("merge")) {
|
||||||
|
designPythonOutfitDetail.setMaskUrl(priorityMask.get(Math.abs(priority)));
|
||||||
|
} else {
|
||||||
designPythonOutfitDetail.setMaskUrl(jsonObject.getString("mask_url"));
|
designPythonOutfitDetail.setMaskUrl(jsonObject.getString("mask_url"));
|
||||||
|
}
|
||||||
|
|
||||||
designPythonOutfitDetail.setScale(Objects.isNull(jsonObject.getString("resize_scale")) ? "1.0" : jsonObject.getString("resize_scale"));
|
designPythonOutfitDetail.setScale(Objects.isNull(jsonObject.getString("resize_scale")) ? "1.0" : jsonObject.getString("resize_scale"));
|
||||||
designPythonOutfitDetail.setUserId(userId);
|
designPythonOutfitDetail.setUserId(userId);
|
||||||
if (priorityOffset != null && !priorityOffset.isEmpty()){
|
if (priorityOffset != null && !priorityOffset.isEmpty()){
|
||||||
@@ -708,6 +725,17 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
|||||||
log.info("set partialDesignBase64为空,便于日志打印");
|
log.info("set partialDesignBase64为空,便于日志打印");
|
||||||
i.getPartialDesign().setPartialDesignBase64(null);
|
i.getPartialDesign().setPartialDesignBase64(null);
|
||||||
}
|
}
|
||||||
|
// undividedLayerBase64 undividedLayerWithSinglePrintBase64 置空
|
||||||
|
// 前端合成的未分割的图
|
||||||
|
if (!StringUtil.isNullOrEmpty(i.getUndividedLayerBase64())) {
|
||||||
|
log.info("set UndividedLayerBase64为空,便于日志打印");
|
||||||
|
i.setUndividedLayerBase64(null);
|
||||||
|
}
|
||||||
|
// 前端合成的未分割的图
|
||||||
|
if (!StringUtil.isNullOrEmpty(i.getUndividedLayerWithSinglePrintBase64())) {
|
||||||
|
log.info("set UndividedLayerWithSinglePrintBase64为空,便于日志打印");
|
||||||
|
i.setUndividedLayerWithSinglePrintBase64(null);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
log.info("designSingle request入参 ==> " + JSONObject.toJSONString(clone));
|
log.info("designSingle request入参 ==> " + JSONObject.toJSONString(clone));
|
||||||
@@ -802,7 +830,7 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
|||||||
maskBase64ToPath(designSingleIncludeLayersDTO, setNull);
|
maskBase64ToPath(designSingleIncludeLayersDTO, setNull);
|
||||||
// maskBase64ToPath(designSingleIncludeLayersDTO, Boolean.TRUE);
|
// maskBase64ToPath(designSingleIncludeLayersDTO, Boolean.TRUE);
|
||||||
|
|
||||||
partialDesignBase64ToImage(designSingleIncludeLayersDTO, userId, designSingleIncludeLayersDTO.getIsPreview());
|
partialDesignBase64ToImage(designSingleIncludeLayersDTO, userId, designSingleIncludeLayersDTO.getIsPreview(), designSingleIncludeLayersDTO.getDesignType());
|
||||||
|
|
||||||
// 组装入参
|
// 组装入参
|
||||||
DesignPythonObjects objects = pythonService.covertDesignSingleParam(
|
DesignPythonObjects objects = pythonService.covertDesignSingleParam(
|
||||||
@@ -820,13 +848,13 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
|||||||
JSONObject outfit = data.getJSONObject("0");
|
JSONObject outfit = data.getJSONObject("0");
|
||||||
|
|
||||||
JSONArray layers = outfit.getJSONArray("layers");
|
JSONArray layers = outfit.getJSONArray("layers");
|
||||||
Map<String, List<String>> priorityAndUndividedLayer = setPriorityAndUndividedLayer(layers);
|
Map<String, List<String>> priorityAndUndividedLayer = setPriorityAndUndividedLayer(layers, designSingleIncludeLayersDTO);
|
||||||
if (!designSingleIncludeLayersDTO.getIsPreview()) {
|
if (!designSingleIncludeLayersDTO.getIsPreview()) {
|
||||||
// 更新及保存图层信息
|
// 更新及保存图层信息
|
||||||
tDesignPythonOutfitDetails = saveDesignSingleItemDetailAndLayers(objects, design.getId(), designSingleIncludeLayersDTO.getDesignItemId()
|
tDesignPythonOutfitDetails = saveDesignSingleItemDetailAndLayers(objects, design.getId(), designSingleIncludeLayersDTO.getDesignItemId()
|
||||||
, userId, outfit, designSingleIncludeLayersDTO.getTimeZone()
|
, userId, outfit, designSingleIncludeLayersDTO.getTimeZone()
|
||||||
, designSingleIncludeLayersDTO.getDesignSingleItemDTOList()
|
, designSingleIncludeLayersDTO.getDesignSingleItemDTOList()
|
||||||
, priorityAndUndividedLayer, changeModelFlag, modelId, modelType, isSingleCollectionFlag);
|
, priorityAndUndividedLayer, changeModelFlag, modelId, modelType, isSingleCollectionFlag, designSingleIncludeLayersDTO.getDesignType());
|
||||||
|
|
||||||
saveCollectionElement(designSingleIncludeLayersDTO);
|
saveCollectionElement(designSingleIncludeLayersDTO);
|
||||||
} else {
|
} else {
|
||||||
@@ -921,12 +949,12 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
|||||||
item.setMaskUrl(path);
|
item.setMaskUrl(path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.info("服装{} 的maskUrl为null", item.getType());
|
// log.info("服装{} 的maskUrl为null", item.getType());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void partialDesignBase64ToImage(DesignSingleIncludeLayersDTO designSingleIncludeLayersDTO, Long accountId, boolean preview) {
|
private void partialDesignBase64ToImage(DesignSingleIncludeLayersDTO designSingleIncludeLayersDTO, Long accountId, boolean preview, String designType) {
|
||||||
designSingleIncludeLayersDTO.getDesignSingleItemDTOList().forEach(item -> {
|
designSingleIncludeLayersDTO.getDesignSingleItemDTOList().forEach(item -> {
|
||||||
PartialDesignDTO partialDesignDTO = item.getPartialDesign();
|
PartialDesignDTO partialDesignDTO = item.getPartialDesign();
|
||||||
if (!Objects.isNull(item.getPartialDesign())
|
if (!Objects.isNull(item.getPartialDesign())
|
||||||
@@ -948,21 +976,79 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
|||||||
item.getPartialDesign().setPartialDesignMinioPath(newPath);
|
item.getPartialDesign().setPartialDesignMinioPath(newPath);
|
||||||
} else if (Objects.isNull(item.getPartialDesign())
|
} else if (Objects.isNull(item.getPartialDesign())
|
||||||
|| StringUtil.isNullOrEmpty(item.getPartialDesign().getPartialDesignMinioPath())) {
|
|| StringUtil.isNullOrEmpty(item.getPartialDesign().getPartialDesignMinioPath())) {
|
||||||
|
if (designType.equals("merge")) {
|
||||||
|
log.error("merge模式下,必须提供partialDesign");
|
||||||
|
throw new BusinessException("required.partialDesign");
|
||||||
|
}
|
||||||
item.setPartialDesign(new PartialDesignDTO(null));
|
item.setPartialDesign(new PartialDesignDTO(null));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void undividedLayerBase64ToImage(List<DesignSingleItemDTO> designSingleItemDTOS) {
|
||||||
|
designSingleItemDTOS.forEach(item -> {
|
||||||
|
if (!StringUtil.isNullOrEmpty(item.getUndividedLayerBase64())) {
|
||||||
|
if (item.getUndividedLayerBase64().startsWith("data:image") && !item.getUndividedLayerBase64().startsWith("https://")) {
|
||||||
|
// 将原图地址作为修改后的图片地址,放在不同的桶
|
||||||
|
String filename = "image/image_" + UUID.randomUUID();
|
||||||
|
String path = minioUtil.base64UploadToPath(item.getUndividedLayerBase64(), clothingBucket, filename);
|
||||||
|
log.info("undividedLayer, 新的path为{}", path);
|
||||||
|
if (StringUtil.isNullOrEmpty(path)) {
|
||||||
|
log.error("undividedLayer图片base64上传失败");
|
||||||
|
throw new BusinessException("file.upload.fail");
|
||||||
|
}
|
||||||
|
item.setUndividedLayerBase64(path);
|
||||||
|
} else {
|
||||||
|
item.setUndividedLayerBase64(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!StringUtil.isNullOrEmpty(item.getUndividedLayerWithSinglePrintBase64())) {
|
||||||
|
if (item.getUndividedLayerWithSinglePrintBase64().startsWith("data:image") && !item.getUndividedLayerWithSinglePrintBase64().startsWith("https://")) {
|
||||||
|
// 将原图地址作为修改后的图片地址,放在不同的桶
|
||||||
|
String filename = "image/image_" + UUID.randomUUID();
|
||||||
|
String path = minioUtil.base64UploadToPath(item.getUndividedLayerWithSinglePrintBase64(), clothingBucket, filename);
|
||||||
|
log.info("getUndividedLayerWithSinglePrint, 新的path为{}", path);
|
||||||
|
if (StringUtil.isNullOrEmpty(path)) {
|
||||||
|
log.error("getUndividedLayerWithSinglePrintBase64图片base64上传失败");
|
||||||
|
throw new BusinessException("file.upload.fail");
|
||||||
|
}
|
||||||
|
item.setUndividedLayerWithSinglePrintBase64(path);
|
||||||
|
} else {
|
||||||
|
item.setUndividedLayerWithSinglePrintBase64(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String, List<String>> setPriorityAndUndividedLayer(JSONArray layers) {
|
public Map<String, List<String>> setPriorityAndUndividedLayer(JSONArray layers, DesignSingleIncludeLayersDTO designSingleIncludeLayersDTO) {
|
||||||
|
String designType = "default";
|
||||||
|
if (Objects.nonNull(designSingleIncludeLayersDTO)) {
|
||||||
|
designType = designSingleIncludeLayersDTO.getDesignType();
|
||||||
|
}
|
||||||
HashMap<String, List<String>> priorityAndLayer = new HashMap<>();
|
HashMap<String, List<String>> priorityAndLayer = new HashMap<>();
|
||||||
|
if (designType.equals("default")) {
|
||||||
for (int i = 0; i < layers.size(); i++) {
|
for (int i = 0; i < layers.size(); i++) {
|
||||||
JSONObject jsonObject = layers.getJSONObject(i);
|
JSONObject jsonObject = layers.getJSONObject(i);
|
||||||
String priority = jsonObject.getString("priority");
|
String priority = jsonObject.getString("priority");
|
||||||
String category = jsonObject.getString("image_category").split("_")[0];
|
String category = jsonObject.getString("image_category").split("_")[0];
|
||||||
if (!category.equals("body") && !priorityAndLayer.containsKey(priority))
|
if (!category.equals("body") && !priorityAndLayer.containsKey(priority)) {
|
||||||
|
// pattern_overall_image_url | pattern_print_image_url 这俩字段来源有俩,merge模式下,来自前端,default模式下,来自python
|
||||||
priorityAndLayer.put(priority, Arrays.asList(jsonObject.getString("pattern_overall_image_url"), jsonObject.getString("pattern_print_image_url")));
|
priorityAndLayer.put(priority, Arrays.asList(jsonObject.getString("pattern_overall_image_url"), jsonObject.getString("pattern_print_image_url")));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (designSingleIncludeLayersDTO.getIsPreview()) {
|
||||||
|
// 如果是预览,则不处理、不存储前端传过来的数据
|
||||||
|
return priorityAndLayer;
|
||||||
|
}
|
||||||
|
undividedLayerBase64ToImage(designSingleIncludeLayersDTO.getDesignSingleItemDTOList());
|
||||||
|
for (DesignSingleItemDTO designSingleItemDTO : designSingleIncludeLayersDTO.getDesignSingleItemDTOList()) {
|
||||||
|
priorityAndLayer.put(designSingleItemDTO.getPriority().toString(), Arrays.asList(designSingleItemDTO.getUndividedLayerBase64(), designSingleItemDTO.getUndividedLayerWithSinglePrintBase64()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return priorityAndLayer;
|
return priorityAndLayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1119,9 +1205,13 @@ public class DesignItemServiceImpl extends ServiceImpl<DesignItemMapper, DesignI
|
|||||||
designItemClothesDetailVO.setPartialDesign(new PartialDesignDTO(partialDesignMinioPath, preSignedUrl));
|
designItemClothesDetailVO.setPartialDesign(new PartialDesignDTO(partialDesignMinioPath, preSignedUrl));
|
||||||
|
|
||||||
if (priorityAndUndividedLayer.containsKey(singleItem.getPriority().toString())) {
|
if (priorityAndUndividedLayer.containsKey(singleItem.getPriority().toString())) {
|
||||||
designItemClothesDetailVO.setUndividedLayer(minioUtil.getPreSignedUrl(priorityAndUndividedLayer.get(singleItem.getPriority().toString()).get(0), CommonConstant.MINIO_IMAGE_EXPIRE_TIME, true));
|
if (!StringUtil.isNullOrEmpty(priorityAndUndividedLayer.get(singleItem.getPriority().toString()).get(0))) {
|
||||||
|
designItemClothesDetailVO.setUndividedLayer(minioUtil.getPreSignedUrl(priorityAndUndividedLayer.get(singleItem.getPriority().toString()).getFirst(), CommonConstant.MINIO_IMAGE_EXPIRE_TIME, true));
|
||||||
|
}
|
||||||
|
if (!StringUtil.isNullOrEmpty(priorityAndUndividedLayer.get(singleItem.getPriority().toString()).get(1))) {
|
||||||
designItemClothesDetailVO.setUndividedLayerWithSinglePrint(minioUtil.getPreSignedUrl(priorityAndUndividedLayer.get(singleItem.getPriority().toString()).get(1), CommonConstant.MINIO_IMAGE_EXPIRE_TIME, true));
|
designItemClothesDetailVO.setUndividedLayerWithSinglePrint(minioUtil.getPreSignedUrl(priorityAndUndividedLayer.get(singleItem.getPriority().toString()).get(1), CommonConstant.MINIO_IMAGE_EXPIRE_TIME, true));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
body.setLayersObject(layersObject.stream().filter(layers -> layers.getImageCategory().equals("body")).collect(Collectors.toList()));
|
body.setLayersObject(layersObject.stream().filter(layers -> layers.getImageCategory().equals("body")).collect(Collectors.toList()));
|
||||||
|
|
||||||
clothes.add(designItemClothesDetailVO);
|
clothes.add(designItemClothesDetailVO);
|
||||||
|
|||||||
@@ -715,7 +715,7 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
|
|||||||
(existing, replacement) -> replacement));
|
(existing, replacement) -> replacement));
|
||||||
Map<String, String> typeAndUndividedLayer = designItemService.setTypeAndUndividedLayer(layers);
|
Map<String, String> typeAndUndividedLayer = designItemService.setTypeAndUndividedLayer(layers);
|
||||||
log.info("all typeLayers Map:{}", typeAndUndividedLayer);
|
log.info("all typeLayers Map:{}", typeAndUndividedLayer);
|
||||||
Map<String, List<String>> priorityAndUndividedLayer = designItemService.setPriorityAndUndividedLayer(layers);
|
Map<String, List<String>> priorityAndUndividedLayer = designItemService.setPriorityAndUndividedLayer(layers, null);
|
||||||
for (DesignPythonItem detail : item.getItems()) {
|
for (DesignPythonItem detail : item.getItems()) {
|
||||||
if (null == detail) {
|
if (null == detail) {
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -214,6 +214,7 @@ the.subscription.end.date.can.be.extended.only.not.reduced=The subscription end
|
|||||||
total.sub-account.quota.cannot.be.lower.than.existing.sub-accounts=Total sub-account quota cannot be lower than existing sub-accounts.
|
total.sub-account.quota.cannot.be.lower.than.existing.sub-accounts=Total sub-account quota cannot be lower than existing sub-accounts.
|
||||||
the.credit.limit.set.cannot.be.lower.than.the.amount.of.credits.already.used=The credit limit set cannot be lower than the amount of credits already used.
|
the.credit.limit.set.cannot.be.lower.than.the.amount.of.credits.already.used=The credit limit set cannot be lower than the amount of credits already used.
|
||||||
administrator.user.is.already.bound.to.different.organization=This administrator user is already bound to a subscription plan of a different organization.
|
administrator.user.is.already.bound.to.different.organization=This administrator user is already bound to a subscription plan of a different organization.
|
||||||
|
required.partialDesign='partialDesign' (base64 or path) is required when updating an individual outfit.
|
||||||
|
|
||||||
# 可能会报异常
|
# 可能会报异常
|
||||||
# Informative:
|
# Informative:
|
||||||
|
|||||||
@@ -210,6 +210,7 @@ the.subscription.end.date.can.be.extended.only.not.reduced=订阅的到期时间
|
|||||||
total.sub-account.quota.cannot.be.lower.than.existing.sub-accounts=设置的子账号总数量不能低于现存已添加的子账号数量
|
total.sub-account.quota.cannot.be.lower.than.existing.sub-accounts=设置的子账号总数量不能低于现存已添加的子账号数量
|
||||||
the.credit.limit.set.cannot.be.lower.than.the.amount.of.credits.already.used=设置的积分上限不能低于已使用的积分量
|
the.credit.limit.set.cannot.be.lower.than.the.amount.of.credits.already.used=设置的积分上限不能低于已使用的积分量
|
||||||
administrator.user.is.already.bound.to.different.organization=该管理员用户已与其他组织的订阅计划绑定
|
administrator.user.is.already.bound.to.different.organization=该管理员用户已与其他组织的订阅计划绑定
|
||||||
|
required.partialDesign=修改单套搭配必须提供'partialDesign'(base64 或 path)
|
||||||
|
|
||||||
# 可能会报异常
|
# 可能会报异常
|
||||||
# Informative:
|
# Informative:
|
||||||
|
|||||||
Reference in New Issue
Block a user