diff --git a/src/main/java/com/ai/da/mapper/primary/entity/Library.java b/src/main/java/com/ai/da/mapper/primary/entity/Library.java index cc5250a4..3ccb4fab 100644 --- a/src/main/java/com/ai/da/mapper/primary/entity/Library.java +++ b/src/main/java/com/ai/da/mapper/primary/entity/Library.java @@ -80,4 +80,18 @@ public class Library implements Serializable { private Date updateDate; // private Integer isCopy; + + + public Library() { + } + + public Library(Long accountId, String level1Type, String level2Type, String level3Type, String url, String md5, Date createDate) { + this.accountId = accountId; + this.level1Type = level1Type; + this.level2Type = level2Type; + this.level3Type = level3Type; + this.url = url; + this.md5 = md5; + this.createDate = createDate; + } } diff --git a/src/main/java/com/ai/da/model/dto/GenerateModifyDTO.java b/src/main/java/com/ai/da/model/dto/GenerateModifyDTO.java index da56be9c..1f97af3f 100644 --- a/src/main/java/com/ai/da/model/dto/GenerateModifyDTO.java +++ b/src/main/java/com/ai/da/model/dto/GenerateModifyDTO.java @@ -21,9 +21,12 @@ public class GenerateModifyDTO { @ApiModelProperty(value = "sketch所属分类", required = true) private String category; + @ApiModelProperty(value = "originalId的来源 Library || Generate(默认为空)", required = true) + private String originalIdSource; + @NotNull(message = "id cannot be empty") @ApiModelProperty(value = "原图id", required = true) - private String originalId; + private Long originalId; @ApiModelProperty("是否覆盖原图") private Boolean isOverride; diff --git a/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java b/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java index 65cab899..2ec0c181 100644 --- a/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java @@ -894,43 +894,95 @@ public class GenerateServiceImpl extends ServiceImpl i @Transactional(rollbackFor = Exception.class) public GenerateResultVO modifySketch(GenerateModifyDTO generateModifyDTO) { log.info("修改提取出的sketch,并加入到library"); + + // 提取常用参数 Long accountId = UserContext.getUserHolder().getId(); String base64 = generateModifyDTO.getBase64(); - String gender = generateModifyDTO.getGender(); + String gender = generateModifyDTO.getGender().toLowerCase(); String category = generateModifyDTO.getCategory(); + Long originalId = generateModifyDTO.getOriginalId(); + boolean isOverride = generateModifyDTO.getIsOverride(); + boolean isFromLibrary = generateModifyDTO.getOriginalIdSource().equals("Library"); - // 将base64上传到minio - String path; - GenerateDetail originalDetail = generateDetailMapper.selectById(generateModifyDTO.getOriginalId()); - Long generateDetailId = originalDetail.getId(); - if (generateModifyDTO.getIsOverride()){ - path = originalDetail.getUrl().replaceFirst("^[^/]+/", "").replaceFirst("\\.[^.]+$", ""); - }else { - path = accountId + "/sketchboard/" + gender.toLowerCase() + "/" + category + "/" + UUID.randomUUID(); + // 获取原始路径和可能的generateId + PathInfo pathInfo = getOriginalPathAndGenerateId(isFromLibrary, originalId); + + // 确定存储路径 + String storagePath = isOverride + ? pathInfo.originalPath.replaceFirst("^[^/]+/", "").replaceFirst("\\.[^.]+$", "") + : accountId + "/sketchboard/" + gender + "/" + category + "/" + UUID.randomUUID(); + + // 上传到MinIO + String minioPath = minioUtil.base64UploadToPath(base64, userBucket, storagePath); + log.info("修改后的图片:{}", minioPath); + + // 保存到数据库并返回结果 + return isFromLibrary + ? handleLibrarySave(accountId, originalId, minioPath, category, gender, isOverride) + : handleGenerateSave(originalId, pathInfo.generateId, minioPath, category, isOverride); + } + + private static class PathInfo { + String originalPath; + Long generateId; + + PathInfo(String originalPath, Long generateId) { + this.originalPath = originalPath; + this.generateId = generateId; } + } - String minioPath = minioUtil.base64UploadToPath(base64, userBucket, path); + private PathInfo getOriginalPathAndGenerateId(boolean isFromLibrary, Long originalId) { + if (isFromLibrary) { + return new PathInfo(libraryService.getById(originalId).getUrl(), null); + } else { + GenerateDetail detail = generateDetailMapper.selectById(originalId); + return new PathInfo(detail.getUrl(), detail.getGenerateId()); + } + } - log.info("修改后的图片 : {}", minioPath); + private GenerateResultVO handleLibrarySave(Long accountId, Long libraryId, String minioPath, + String category, String gender, boolean isOverride) { + Library library; + if (isOverride) { + library = new Library(); + library.setId(libraryId); + library.setUrl(minioPath); + library.setUpdateDate(new Date()); + libraryService.updateById(library); + } else { + library = new Library(accountId, "Sketchboard", category, gender, minioPath, + MD5Utils.encryptFile(minioUtil.getPreSignedUrl(minioPath, CommonConstant.MINIO_IMAGE_EXPIRE_TIME), false), + new Date()); + libraryService.save(library); + libraryId = library.getId(); + } + return buildResultVO(libraryId, minioPath, category); + } - // 存入db 保存到t_generate_detail - if (!generateModifyDTO.getIsOverride()){ - GenerateDetail generateDetail = new GenerateDetail(); - generateDetail.setGenerateId(originalDetail.getGenerateId()); + private GenerateResultVO handleGenerateSave(Long originalId, Long generateId, String minioPath, + String category, boolean isOverride) { + GenerateDetail generateDetail = new GenerateDetail(); + if (isOverride) { + generateDetail.setId(originalId); + generateDetail.setUrl(minioPath); + generateDetail.setUpdateDate(new Date()); + generateDetailMapper.updateById(generateDetail); + } else { + generateDetail.setGenerateId(generateId); generateDetail.setUrl(minioPath); generateDetail.setIsLike((byte)0); - generateDetail.setMd5(MD5Utils.encryptFile(minioUtil.getPreSignedUrl(minioPath, CommonConstant.MINIO_IMAGE_EXPIRE_TIME, true), Boolean.FALSE)); + generateDetail.setMd5(MD5Utils.encryptFile(minioUtil.getPreSignedUrl(minioPath, + CommonConstant.MINIO_IMAGE_EXPIRE_TIME, true), Boolean.FALSE)); generateDetail.setCreateDate(LocalDateTime.now()); generateDetailMapper.insert(generateDetail); - - generateDetailId = generateDetail.getId(); - }else { - GenerateDetail generateDetail = new GenerateDetail(); - generateDetail.setUrl(minioPath); - generateDetail.setId(generateDetailId); - generateDetailMapper.updateById(generateDetail); + originalId = generateDetail.getId(); } + return buildResultVO(originalId, minioPath, category); + } - return new GenerateResultVO(generateDetailId, minioUtil.getPreSignedUrl(minioPath, CommonConstant.MINIO_IMAGE_EXPIRE_TIME, true), "Success", category); + private GenerateResultVO buildResultVO(Long id, String minioPath, String category) { + String url = minioUtil.getPreSignedUrl(minioPath, CommonConstant.MINIO_IMAGE_EXPIRE_TIME, true); + return new GenerateResultVO(id, url, "Success", category); } }