From daa88889d037f26a75354465b807077c31727156 Mon Sep 17 00:00:00 2001 From: xupei Date: Thu, 10 Jul 2025 17:50:31 +0800 Subject: [PATCH] =?UTF-8?q?TASK:1=E3=80=81=E5=8D=B0=E8=8A=B1=E5=85=81?= =?UTF-8?q?=E8=AE=B8=E4=BF=AE=E6=94=B9=E5=B9=B6=E4=BF=9D=E5=AD=98=20BUGFIX?= =?UTF-8?q?:=201=E3=80=81=E6=89=B9=E9=87=8F=E7=94=9F=E6=88=90=E6=9C=89?= =?UTF-8?q?=E7=9A=84=E7=B1=BB=E5=9E=8B=E6=B2=A1=E6=9C=89=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E5=BC=80=E5=A7=8B=E6=89=A7=E8=A1=8C=E6=97=B6=E9=97=B4=EF=BC=8C?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E7=BB=93=E6=9D=9F=E6=97=B6=E9=97=B4=E6=9C=89?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ai/da/mapper/primary/entity/Library.java | 13 ++ .../ai/da/model/dto/GenerateModifyDTO.java | 20 ++- .../ai/da/service/impl/DesignServiceImpl.java | 14 +- .../da/service/impl/GenerateServiceImpl.java | 120 ++++++++++++++---- .../impl/UserLikeGroupServiceImpl.java | 1 + 5 files changed, 132 insertions(+), 36 deletions(-) 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 94bbe7ad..2726c67d 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 @@ -84,4 +84,17 @@ 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..9c5fe97a 100644 --- a/src/main/java/com/ai/da/model/dto/GenerateModifyDTO.java +++ b/src/main/java/com/ai/da/model/dto/GenerateModifyDTO.java @@ -4,27 +4,39 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; @ApiModel("修改imageToSketch提取出的sketch") @Data public class GenerateModifyDTO { - @NotNull(message = "image cannot be empty") + @NotBlank(message = "image cannot be empty") @ApiModelProperty(value = "需要保存的图片的base64格式", required = true) private String base64; - @NotNull(message = "gender cannot be empty") + @NotBlank(message = "gender cannot be empty") @ApiModelProperty(value = "sketch所属性别", required = true) private String gender; - @NotNull(message = "category cannot be empty") + @NotBlank(message = "category cannot be empty") @ApiModelProperty(value = "sketch所属分类", required = true) private String category; @NotNull(message = "id cannot be empty") @ApiModelProperty(value = "原图id", required = true) - private String originalId; + private Long originalId; + @NotBlank(message = "original Id Source cannot be empty") + @ApiModelProperty(value = "原图id的来源", required = true) + private String originalIdSource; + + @NotNull(message = "isOverride cannot be empty") @ApiModelProperty("是否覆盖原图") private Boolean isOverride; + + @NotBlank(message = "type cannot be empty") + @ApiModelProperty("类型 Sketchboard || Printboard") + @Pattern(regexp = "Sketchboard|Printboard", message = "type只能填入Sketchboard 或 Printboard") + private String type; } diff --git a/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java b/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java index 72b265b8..d955e6d0 100644 --- a/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java @@ -2588,14 +2588,20 @@ public class DesignServiceImpl extends ServiceImpl impleme public void processDesignBatch(Map designBatchResult) { Object progress = designBatchResult.get("progress"); if (progress instanceof String) { + String taskId = (String) designBatchResult.get("task_id"); + QueryWrapper qw = new QueryWrapper<>(); + qw.lambda().eq(CloudTask::getTaskId, taskId); + List cloudTaskList = cloudTaskMapper.selectList(qw); if (((String) progress).startsWith("0/")) { + if (CollectionUtil.isNotEmpty(cloudTaskList) && Objects.nonNull(cloudTaskList.get(0).getStartTime())) { + CloudTask cloudTask = cloudTaskList.get(0); + cloudTask.setStartTime(LocalDateTime.now()); + cloudTask.setUpdateTime(LocalDateTime.now()); + cloudTaskMapper.updateById(cloudTask); + } return; } if (progress.equals("ok")) { - String taskId = (String) designBatchResult.get("task_id"); - QueryWrapper qw = new QueryWrapper<>(); - qw.lambda().eq(CloudTask::getTaskId, taskId); - List cloudTaskList = cloudTaskMapper.selectList(qw); if (CollectionUtil.isNotEmpty(cloudTaskList)) { CloudTask cloudTask = cloudTaskList.get(0); cloudTask.setCompletedNum(cloudTask.getNums()); 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 78dd3a4b..c7a72d96 100644 --- a/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java @@ -1086,45 +1086,101 @@ public class GenerateServiceImpl extends ServiceImpl i @Override @Transactional(rollbackFor = Exception.class) public GenerateResultVO modifySketch(GenerateModifyDTO generateModifyDTO) { - log.info("修改提取出的sketch,并加入到library"); + log.info("修改生成或library中的sketch或print"); + + // 提取常用参数 Long accountId = UserContext.getUserHolder().getId(); String base64 = generateModifyDTO.getBase64(); String gender = generateModifyDTO.getGender(); String category = generateModifyDTO.getCategory(); + Long originalId = generateModifyDTO.getOriginalId(); + boolean isOverride = generateModifyDTO.getIsOverride(); + boolean isFromLibrary = !StringUtil.isNullOrEmpty(generateModifyDTO.getOriginalIdSource()) + && generateModifyDTO.getOriginalIdSource().equals("Library"); + boolean isSketch = generateModifyDTO.getType().equals(SKETCH_BOARD.getRealName()); - // 将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("\\.[^.]+$", "") + : isSketch + ? accountId + "/sketchboard/" + gender + "/" + category + "/" + UUID.randomUUID() + : accountId + "/printboard/" + UUID.randomUUID(); + + // 上传到MinIO + String minioPath = minioUtil.base64UploadToPath(base64, userBucket, storagePath); + log.info("修改后的图片:{}", minioPath); + + // 保存到数据库并返回结果 + return isFromLibrary + ? handleLibrarySave(accountId, originalId, minioPath, category, gender, isOverride, generateModifyDTO.getType()) + : 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, String type) { + 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, type, 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.setIsLike((byte) 0); - generateDetail.setMd5(MD5Utils.encryptFile(minioUtil.getPreSignedUrl(minioPath, CommonConstant.MINIO_IMAGE_EXPIRE_TIME, true), Boolean.FALSE)); + 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.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); } @Resource @@ -1544,9 +1600,17 @@ public class GenerateServiceImpl extends ServiceImpl i poseTransformationMapper.updateById(poseTransformation); String taskIdBatch = poseTransformation.getTaskIdBatch(); -// QueryWrapper cloudTaskQueryWrapper = new QueryWrapper<>(); -// cloudTaskQueryWrapper.lambda().eq(CloudTask::getTaskId, taskIdBatch); -// CloudTask cloudTask = cloudTaskMapper.selectOne(cloudTaskQueryWrapper); + QueryWrapper cloudTaskQueryWrapper = new QueryWrapper<>(); + cloudTaskQueryWrapper.lambda().eq(CloudTask::getTaskId, taskIdBatch); + CloudTask cloudTask = cloudTaskMapper.selectOne(cloudTaskQueryWrapper); + if (Objects.nonNull(cloudTask) && Objects.nonNull(cloudTask.getStartTime())){ + cloudTask.setStartTime(LocalDateTime.now()); + cloudTask.setUpdateTime(LocalDateTime.now()); + cloudTaskMapper.updateById(cloudTask); + }else if (Objects.nonNull(cloudTask)){ + cloudTask.setUpdateTime(LocalDateTime.now()); + cloudTaskMapper.updateById(cloudTask); + } // if (Objects.nonNull(cloudTask)) { // if (cloudTask.getCompletedNum() == null) { // cloudTask.setCompletedNum(1); diff --git a/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java b/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java index e7eb73db..98bab6ec 100644 --- a/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java @@ -2921,6 +2921,7 @@ public class UserLikeGroupServiceImpl extends ServiceImpl