TASK:design single中添加单件衣服画布保存

This commit is contained in:
2025-07-29 13:12:20 +08:00
parent 39903f3da6
commit 020cfe9016
11 changed files with 112 additions and 13 deletions

View File

@@ -204,7 +204,7 @@ public class GenerateController {
// @ApiOperation(value = "试用flux")
// @GetMapping("/flux")
public Response<String> flux(@RequestParam("path") String path,
public Response<String> flux(@RequestParam(value = "path", required = false) String path,
@RequestParam("type") int type,
@RequestParam(value = "prompt", required = false) String prompt){
CreditsEventsEnum typeEnum = CreditsEventsEnum.RELIGHT;
@@ -215,6 +215,9 @@ public class GenerateController {
case 2:
typeEnum = CreditsEventsEnum.IMAGE_TO_SKETCH;
break;
case 3:
typeEnum = CreditsEventsEnum.PATTERN;
break;
}
return Response.success(generateService.flux(typeEnum, prompt, path, false));
}

View File

@@ -178,8 +178,9 @@ public class SavedCollectionController {
@ApiOperation(value = "exportSave")
@PostMapping("/exportSave")
public Response<Boolean> exportSave(@RequestParam("file") MultipartFile file, @RequestParam("projectId") Long projectId, @RequestParam("module") String module) {
return Response.success(userLikeGroupService.exportSave(file, projectId, module));
public Response<Boolean> exportSave(@RequestParam("file") MultipartFile file, @RequestParam(value = "projectId", required = false) Long projectId,
@RequestParam("module") String module, @RequestParam(value = "designItemDetailId", required = false) Long designItemDetailId) {
return Response.success(userLikeGroupService.exportSave(file, projectId, module, designItemDetailId));
}
@ApiOperation(value = "exportSearch")

View File

@@ -0,0 +1,7 @@
package com.ai.da.mapper.primary;
import com.ai.da.common.config.mybatis.plus.CommonMapper;
import com.ai.da.mapper.primary.entity.DesignItemDetailCanvas;
public interface DesignItemDetailCanvasMapper extends CommonMapper<DesignItemDetailCanvas> {
}

View File

@@ -0,0 +1,17 @@
package com.ai.da.mapper.primary.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
@TableName("t_design_item_detail_canvas")
public class DesignItemDetailCanvas extends BaseEntity{
private Long designItemDetailId;
private Long exportFileId;
}

View File

@@ -1,11 +1,18 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("查询画布详细")
public class ExportSearchDTO {
// private Long userLikeGroupId;
@ApiModelProperty("画布文件id")
private Long id;
@ApiModelProperty("画布关联项目id")
private Long projectId;
@ApiModelProperty("画布所属模块。canvas | deReconstruction | designItemDetail")
private String module;
}

View File

@@ -65,6 +65,9 @@ public class DesignItemClothesDetailVO {
@ApiModelProperty("局部design")
private PartialDesignDTO partialDesign;
@ApiModelProperty("画布文件id")
private Long canvasId;
public DesignItemClothesDetailVO() {
}

View File

@@ -1,6 +1,7 @@
package com.ai.da.service;
import com.ai.da.mapper.primary.entity.DesignItemDetail;
import com.ai.da.mapper.primary.entity.DesignItemDetailCanvas;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
@@ -20,4 +21,8 @@ public interface DesignItemDetailService extends IService<DesignItemDetail> {
List<DesignItemDetail> selectByDesignItemId(Long designItemId);
void setDesignItemDetailPriority(List<DesignItemDetail> designItemDetailList);
void saveDesignItemDetailCanvas(Long designItemDetailId, Long exportFileId);
DesignItemDetailCanvas getDIDCByDesignItemDetailId(Long designItemDetailId);
}

View File

@@ -44,7 +44,7 @@ public interface UserLikeGroupService extends IService<UserLikeGroup> {
void updateDate(Long id,String timeZone);
Boolean exportSave(MultipartFile file, Long projectId, String module);
Boolean exportSave(MultipartFile file, Long projectId, String module, Long designItemDetailId);
List<ToProductImageResultVO> toProduct(ToProductImageDTO toProductImageDTO);

View File

@@ -2,8 +2,10 @@ package com.ai.da.service.impl;
import com.ai.da.common.config.exception.BusinessException;
import com.ai.da.common.enums.LayersPriorityEnum;
import com.ai.da.mapper.primary.DesignItemDetailCanvasMapper;
import com.ai.da.mapper.primary.DesignItemDetailMapper;
import com.ai.da.mapper.primary.entity.DesignItemDetail;
import com.ai.da.mapper.primary.entity.DesignItemDetailCanvas;
import com.ai.da.service.DesignItemDetailService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -12,7 +14,9 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
import static com.ai.da.common.enums.LayersPriorityEnum.BODY;
@@ -27,6 +31,8 @@ import static com.ai.da.common.enums.LayersPriorityEnum.BODY;
public class DesignItemDetailServiceImpl extends ServiceImpl<DesignItemDetailMapper, DesignItemDetail> implements DesignItemDetailService {
@Resource
private DesignItemDetailMapper designItemDetailMapper;
@Resource
private DesignItemDetailCanvasMapper designItemDetailCanvasMapper;
@Override
@@ -96,4 +102,32 @@ public class DesignItemDetailServiceImpl extends ServiceImpl<DesignItemDetailMap
}
}
}
@Override
public void saveDesignItemDetailCanvas(Long designItemDetailId, Long exportFileId){
// 1. 每件单品只会有一张画布信息
DesignItemDetailCanvas didc = getDIDCByDesignItemDetailId(designItemDetailId);
// 2. 没有,则新增一条
if (Objects.isNull(didc)){
didc = new DesignItemDetailCanvas();
didc.setDesignItemDetailId(designItemDetailId);
didc.setExportFileId(exportFileId);
didc.setCreateTime(LocalDateTime.now());
designItemDetailCanvasMapper.insert(didc);
}
// 3. 有,则更新
else if (Objects.nonNull(didc.getExportFileId()) && !didc.getExportFileId().equals(exportFileId)){
didc.setExportFileId(exportFileId);
didc.setUpdateTime(LocalDateTime.now());
designItemDetailCanvasMapper.updateById(didc);
}
}
@Override
public DesignItemDetailCanvas getDIDCByDesignItemDetailId(Long designItemDetailId){
QueryWrapper<DesignItemDetailCanvas> qw = new QueryWrapper<>();
qw.lambda().eq(DesignItemDetailCanvas::getDesignItemDetailId, designItemDetailId);
return designItemDetailCanvasMapper.selectOne(qw);
}
}

View File

@@ -1438,6 +1438,10 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
}
String preSigned = StringUtil.isNullOrEmpty(o.getPartialDesign()) ? null : minioUtil.getPreSignedUrl(o.getPartialDesign(), CommonConstant.MINIO_IMAGE_EXPIRE_TIME);
d.setPartialDesign(new PartialDesignDTO(o.getPartialDesign(), preSigned));
DesignItemDetailCanvas designItemDetailCanvas = designItemDetailService.getDIDCByDesignItemDetailId(o.getId());
if (Objects.nonNull(designItemDetailCanvas)){
d.setCanvasId(designItemDetailCanvas.getExportFileId());
}
}));
//single 和 Models(模特)时候 系统元素为空
List<DesignItemDetail> filterDetail2 = designItemDetails.stream()

View File

@@ -95,7 +95,7 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
@Resource
private TagsMapper tagsMapper;
@Resource
private DesignItemDetailMapper designItemDetailMapper;
private DesignItemDetailService designItemDetailService;
@Resource
private CollectionElementMapper collectionElementMapper;
@Resource
@@ -153,6 +153,8 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
private PoseTransformationMapper poseTransformationMapper;
@Resource
private ExportFileMapper exportFileMapper;
@Resource
private DesignItemDetailCanvasMapper designItemDetailCanvasMapper;
@Override
public void deleteUserGroup(Long userGroupId) {
@@ -352,13 +354,22 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
}
@Override
public Boolean exportSave(MultipartFile file, Long projectId, String module) {
public Boolean exportSave(MultipartFile file, Long projectId, String module, Long designItemDetailId) {
AuthPrincipalVo userHolder = UserContext.getUserHolder();
if (Objects.isNull(projectId) && !module.equals("designItemDetail")){
log.warn("用户 {} 保存 {} 模块的画布时, projectId为空", userHolder.getId(), module);
throw new BusinessException("project id cannot be empty", ResultEnum.PROMPT.getCode());
}
String upload = minioUtil.upload("aida-users", userHolder.getId() + "/exportFile", file);
QueryWrapper<ExportFile> qw = new QueryWrapper<>();
qw.lambda().eq(ExportFile::getProjectId, projectId);
qw.lambda().eq(ExportFile::getModule, module);
List<ExportFile> exportFiles = exportFileMapper.selectList(qw);
List<ExportFile> exportFiles = null;
if (Objects.nonNull(projectId)){
qw.lambda().eq(ExportFile::getProjectId, projectId);
qw.lambda().eq(ExportFile::getModule, module);
exportFiles = exportFileMapper.selectList(qw);
}
if (CollectionUtil.isNotEmpty(exportFiles)) {
ExportFile exportFile = exportFiles.get(0);
exportFile.setUrl(upload);
@@ -369,6 +380,9 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
exportFile.setModule(module);
exportFile.setUrl(upload);
exportFileMapper.insert(exportFile);
if (Objects.nonNull(designItemDetailId)){
designItemDetailService.saveDesignItemDetailCanvas(designItemDetailId, exportFile.getId());
}
}
return Boolean.TRUE;
}
@@ -432,7 +446,7 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
QueryWrapper<DesignItemDetail> designItemDetailQueryWrapper = new QueryWrapper<>();
designItemDetailQueryWrapper.lambda().eq(DesignItemDetail::getDesignItemId, designItemId);
designItemDetailQueryWrapper.lambda().ne(DesignItemDetail::getType, "Body");
List<DesignItemDetail> designItemDetails = designItemDetailMapper.selectList(designItemDetailQueryWrapper);
List<DesignItemDetail> designItemDetails = designItemDetailService.list(designItemDetailQueryWrapper);
String collect = designItemDetails.stream().map(DesignItemDetail::getType).collect(Collectors.joining(","));
Long designId = tDesignPythonOutfit.getDesignId();
@@ -604,7 +618,7 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
QueryWrapper<DesignItemDetail> designItemDetailQueryWrapper = new QueryWrapper<>();
designItemDetailQueryWrapper.lambda().eq(DesignItemDetail::getDesignItemId, designItemId);
designItemDetailQueryWrapper.lambda().ne(DesignItemDetail::getType, "Body");
List<DesignItemDetail> designItemDetails = designItemDetailMapper.selectList(designItemDetailQueryWrapper);
List<DesignItemDetail> designItemDetails = designItemDetailService.list(designItemDetailQueryWrapper);
String collect = designItemDetails.stream().map(DesignItemDetail::getType).collect(Collectors.joining(","));
Long designId = tDesignPythonOutfit.getDesignId();
@@ -842,7 +856,11 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
@Override
public JSONObject exportSearch(ExportSearchDTO exportSearchDTO) {
QueryWrapper<ExportFile> qw = new QueryWrapper<>();
qw.lambda().eq(ExportFile::getProjectId, exportSearchDTO.getProjectId());
if (Objects.nonNull(exportSearchDTO.getProjectId())){
qw.lambda().eq(ExportFile::getProjectId, exportSearchDTO.getProjectId());
} else if (Objects.nonNull(exportSearchDTO.getId())){
qw.lambda().eq(ExportFile::getId, exportSearchDTO.getId());
}
qw.lambda().eq(ExportFile::getModule, exportSearchDTO.getModule());
List<ExportFile> exportFiles = exportFileMapper.selectList(qw);
if (CollectionUtil.isNotEmpty(exportFiles)) {
@@ -1470,7 +1488,7 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
QueryWrapper<DesignItemDetail> qw = new QueryWrapper<>();
qw.lambda().eq(DesignItemDetail::getDesignItemId, designItemId)
.ne(DesignItemDetail::getType, "Body");
return designItemDetailMapper.selectList(qw);
return designItemDetailService.list(qw);
}
private void saveResultAsPrettyJson(List<List<Map<String, Object>>> result, String filePath) {