From 34089d10f94021996bc8f2a147c50a798784424d Mon Sep 17 00:00:00 2001 From: zjb Date: Mon, 5 Feb 2024 00:56:35 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=9C=9F=E5=88=8A=20desc:=E6=9C=9F?= =?UTF-8?q?=E5=88=8A=E6=B7=BB=E5=8A=A0=E5=9B=BE=E7=89=87=E5=92=8C=E6=8F=8F?= =?UTF-8?q?=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- luoo_tag/pom.xml | 5 ++ .../src/main/java/com/luoo/tag/pojo/Tag.java | 10 +++ .../java/com/luoo/tag/pojo/TagCreateReq.java | 6 ++ .../main/java/com/luoo/tag/pojo/TagDTO.java | 6 ++ .../java/com/luoo/tag/pojo/TagUpdateReq.java | 6 ++ .../com/luoo/tag/service/TagS3Service.java | 74 +++++++++++++++++++ .../java/com/luoo/tag/service/TagService.java | 28 ++++++- 7 files changed, 133 insertions(+), 2 deletions(-) create mode 100644 luoo_tag/src/main/java/com/luoo/tag/service/TagS3Service.java diff --git a/luoo_tag/pom.xml b/luoo_tag/pom.xml index 0ecea77..4d39336 100644 --- a/luoo_tag/pom.xml +++ b/luoo_tag/pom.xml @@ -59,6 +59,11 @@ com.h2database h2 + + + software.amazon.awssdk + s3 + app diff --git a/luoo_tag/src/main/java/com/luoo/tag/pojo/Tag.java b/luoo_tag/src/main/java/com/luoo/tag/pojo/Tag.java index 3c1b4ee..75e5fa6 100644 --- a/luoo_tag/src/main/java/com/luoo/tag/pojo/Tag.java +++ b/luoo_tag/src/main/java/com/luoo/tag/pojo/Tag.java @@ -53,6 +53,16 @@ public class Tag implements Serializable { */ private Integer state; + /** + * 说明文案 + */ + private String desc; + + /** + * 图片路径 + */ + private String image; + /** * 创建人用户ID */ diff --git a/luoo_tag/src/main/java/com/luoo/tag/pojo/TagCreateReq.java b/luoo_tag/src/main/java/com/luoo/tag/pojo/TagCreateReq.java index 0771443..ec044c6 100644 --- a/luoo_tag/src/main/java/com/luoo/tag/pojo/TagCreateReq.java +++ b/luoo_tag/src/main/java/com/luoo/tag/pojo/TagCreateReq.java @@ -24,4 +24,10 @@ public class TagCreateReq implements Serializable { @ApiModelProperty(value = "标签英文名") @NotBlank(message = "标签英文名称必填") private String nameEn; + + @ApiModelProperty(value = "文案") + private String desc; + + @ApiModelProperty(value = "图片路径") + private String image; } diff --git a/luoo_tag/src/main/java/com/luoo/tag/pojo/TagDTO.java b/luoo_tag/src/main/java/com/luoo/tag/pojo/TagDTO.java index 1492497..9b002db 100644 --- a/luoo_tag/src/main/java/com/luoo/tag/pojo/TagDTO.java +++ b/luoo_tag/src/main/java/com/luoo/tag/pojo/TagDTO.java @@ -31,6 +31,12 @@ public class TagDTO implements Serializable { @ApiModelProperty(value = "标签状态 0=禁用,1=启用") private Integer state; + @ApiModelProperty(value = "说明文案") + private String desc; + + @ApiModelProperty(value = "图片") + private String image; + @ApiModelProperty(value = "子标签数量") private Long childTagCount = 0L; diff --git a/luoo_tag/src/main/java/com/luoo/tag/pojo/TagUpdateReq.java b/luoo_tag/src/main/java/com/luoo/tag/pojo/TagUpdateReq.java index a65a3b5..326306a 100644 --- a/luoo_tag/src/main/java/com/luoo/tag/pojo/TagUpdateReq.java +++ b/luoo_tag/src/main/java/com/luoo/tag/pojo/TagUpdateReq.java @@ -31,4 +31,10 @@ public class TagUpdateReq implements Serializable { @ApiModelProperty(value = "标签英文名") @NotBlank(message = "标签英文名称必填") private String nameEn; + + @ApiModelProperty(value = "文案") + private String desc; + + @ApiModelProperty(value = "图片路径") + private String image; } diff --git a/luoo_tag/src/main/java/com/luoo/tag/service/TagS3Service.java b/luoo_tag/src/main/java/com/luoo/tag/service/TagS3Service.java new file mode 100644 index 0000000..0641673 --- /dev/null +++ b/luoo_tag/src/main/java/com/luoo/tag/service/TagS3Service.java @@ -0,0 +1,74 @@ +package com.luoo.tag.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import software.amazon.awssdk.http.SdkHttpResponse; +import software.amazon.awssdk.services.s3.S3Client; +import software.amazon.awssdk.services.s3.model.CopyObjectRequest; +import software.amazon.awssdk.services.s3.model.CopyObjectResponse; +import util.IdWorker; + +import javax.annotation.Resource; + +/** + * ClassName: TagImageUtil + * Description: TagImageUtil + * Date: 2024-02-04 + * + * @author zjb + */ +@Service +public class TagS3Service { + + @Resource + private S3Client s3Client; + + + public static final String DOT = "."; + public static final String TAG_RESOURCE_PREFIX = "http://cdn.indie.cn/tag/"; + public static final String BUCKET = "indie"; + public static final String TEMP_KEY_PREFIX = "temp/"; + + + public String moveTagImage(String srcKey, String oldImage, String tagId) { + String image = oldImage; + String suffix = image.substring(image.lastIndexOf(DOT)); + String destKeySuffix = String.format("%s%s", tagId, suffix); + String destKey = TAG_RESOURCE_PREFIX + destKeySuffix; + int copy = copy(BUCKET, srcKey, destKey); + if (copy > 0) { + return destKeySuffix; + } + return null; + } + + /** + * s3复制文件 + * + * @param bucket 桶 + * @param srcKey 源key + * @param destKey 目标key + * @return - + */ + public int copy(String bucket, String srcKey, String destKey) { + try { + CopyObjectRequest copyObjectRequest = CopyObjectRequest.builder() + .sourceBucket(bucket).sourceKey(srcKey).destinationBucket(bucket).destinationKey(destKey).build(); + CopyObjectResponse copyObjectResponse = s3Client.copyObject(copyObjectRequest); + SdkHttpResponse sdkHttpResponse = copyObjectResponse.sdkHttpResponse(); + if (!sdkHttpResponse.isSuccessful()) { + return -1; + } else { + return 1; + } + } catch (Exception e) { + return -1; + } finally { + s3Client.close(); + } + } + + public static String getSrcKey(String srcFullPath) { + return srcFullPath.substring(srcFullPath.indexOf(TEMP_KEY_PREFIX)); + } +} diff --git a/luoo_tag/src/main/java/com/luoo/tag/service/TagService.java b/luoo_tag/src/main/java/com/luoo/tag/service/TagService.java index 25abbef..9ff24c6 100644 --- a/luoo_tag/src/main/java/com/luoo/tag/service/TagService.java +++ b/luoo_tag/src/main/java/com/luoo/tag/service/TagService.java @@ -40,6 +40,7 @@ public class TagService { private final AdminUserClient userClient; private final JournalTagDao journalTagDao; private final SongTagDao songTagDao; + private final TagS3Service tagS3Service; /** @@ -99,8 +100,15 @@ public class TagService { tag.setLevel(StringUtils.isBlank(parentId) ? TagLevelEnum.L1.getCode() : TagLevelEnum.L2.getCode()); tag.setState(TagStateEnum.ENABLE.getCode()); LocalDateTime now = LocalDateTime.now(); - tag.setCreateTime(now); - tag.setUpdateTime(now); + tag.setCreateTime(now); + tag.setUpdateTime(now); + if (null != createReq.getImage() && !createReq.getImage().isEmpty()) { + tag.setImage(tagS3Service.moveTagImage( + TagS3Service.getSrcKey(createReq.getImage()), createReq.getImage(), tag.getId() + )); + } + + // // UserInfo userInfo = RequestContext.get(); // tag.setCreatorId(userInfo.getId()); @@ -113,6 +121,7 @@ public class TagService { * @param updateReq 更新参数 */ public void update(TagUpdateReq updateReq){ + // TODO: 添加desc和image String id = updateReq.getId(); Optional tagOptional = tagDao.findById(id); AssertUtil.mustTrue(tagOptional.isPresent(), "标签记录不存在"); @@ -134,6 +143,21 @@ public class TagService { tag.setNameEn(updateReq.getNameEn()); tag.setUpdateTime(LocalDateTime.now()); // tag.setUpdaterId(RequestContext.get().getId()); + + String srcKey = null; + if (null == updateReq.getImage()) { + tag.setImage(null); + } + if (updateReq.getImage().contains(TagS3Service.TEMP_KEY_PREFIX)) { + srcKey = updateReq.getImage().substring(updateReq.getImage().indexOf(TagS3Service.TEMP_KEY_PREFIX)); + } + if (StringUtils.isNotBlank(srcKey)) { + tag.setImage( + tagS3Service.moveTagImage(srcKey, updateReq.getImage(), id) + ); + } + + tagDao.save(tag); }