当附件为图片或视频时,若指定尺寸的缩略图已存在则直接返回缓存, - * 否则生成并持久化后返回。不支持缩略图的附件类型返回 {@code null}。
- * - * @param source 源附件(必须已持久化,mimeType 已填充) - * @param requestWidth 请求宽度,{@code null} 表示未指定 - * @param requestHeight 请求高度,{@code null} 表示未指定 - * @return 缩略图附件,不支持时返回 {@code null} - */ - Attachment fetchThumb(Attachment source, Integer requestWidth, Integer requestHeight); - Attachment getByBizId(Attachment.BizType bizType, String bizId); Attachment getByAttachType(Attachment.BizType bizType, String bizId, String attachType); diff --git a/src/main/java/com/imyeyu/api/modules/common/service/AttachmentVariantService.java b/src/main/java/com/imyeyu/api/modules/common/service/AttachmentVariantService.java new file mode 100644 index 0000000..fef1a73 --- /dev/null +++ b/src/main/java/com/imyeyu/api/modules/common/service/AttachmentVariantService.java @@ -0,0 +1,28 @@ +package com.imyeyu.api.modules.common.service; + +import com.imyeyu.api.modules.common.bean.attachment.ThumbnailFitMode; +import com.imyeyu.api.modules.common.entity.Attachment; + +/// 附件缩略图变体服务 +/// +/// @author 夜雨 +/// @since 2026-08-21 +public interface AttachmentVariantService { + + /// 按需获取或创建缩略图附件 + /// + /// @param source 源附件 + /// @param requestWidth 请求宽度 + /// @param requestHeight 请求高度 + /// @param fitMode 缩放模式 + /// @return 缩略图附件 + Attachment fetchThumb(Attachment source, Integer requestWidth, Integer requestHeight, ThumbnailFitMode fitMode); + + /// 删除源附件对应的全部缩略图变体 + /// + /// @param sourceAttachmentId 源附件 ID + void deleteBySourceId(String sourceAttachmentId); + + /// 清理已过期的缩略图变体 + void clearExpired(); +} diff --git a/src/main/java/com/imyeyu/api/modules/common/service/SmsService.java b/src/main/java/com/imyeyu/api/modules/common/service/SmsService.java index 282e1c5..defc3f8 100644 --- a/src/main/java/com/imyeyu/api/modules/common/service/SmsService.java +++ b/src/main/java/com/imyeyu/api/modules/common/service/SmsService.java @@ -1,30 +1,30 @@ -//package com.imyeyu.api.modules.common.service; -// -//import com.e2ins.ms.notify.entity.Notify; -//import com.e2ins.ms.notify.entity.NotifyDetail; -// -///** -// * -// * -// * @author 夜雨 -// * @since 2026-05-14 12:12 -// */ -//public interface SmsService { -// -// /** -// * 创建短信验证码通知 -// * -// * @param detail 通知 -// * @return 通知详情 ID -// */ -// String captchaCreate(Notify detail); -// -// /** -// * 校验短信验证码 -// * -// * @param detailId 通知详情 ID -// * @param captcha 请求验证码 -// * @return 通知详情 -// */ -// NotifyDetail captchaVerify(String detailId, String captcha); -//} +package com.imyeyu.api.modules.common.service; + +import com.imyeyu.api.modules.common.entity.Notify; +import com.imyeyu.api.modules.common.entity.NotifyDetail; + +/** + * + * + * @author 夜雨 + * @since 2026-05-14 12:12 + */ +public interface SmsService { + + /** + * 创建短信验证码通知 + * + * @param detail 通知 + * @return 通知详情 ID + */ + String captchaCreate(Notify detail); + + /** + * 校验短信验证码 + * + * @param detailId 通知详情 ID + * @param captcha 请求验证码 + * @return 通知详情 + */ + NotifyDetail captchaVerify(String detailId, String captcha); +} diff --git a/src/main/java/com/imyeyu/api/modules/common/service/implement/AttachmentServiceImplement.java b/src/main/java/com/imyeyu/api/modules/common/service/implement/AttachmentServiceImplement.java index 9bc93c2..87e1317 100644 --- a/src/main/java/com/imyeyu/api/modules/common/service/implement/AttachmentServiceImplement.java +++ b/src/main/java/com/imyeyu/api/modules/common/service/implement/AttachmentServiceImplement.java @@ -3,19 +3,14 @@ package com.imyeyu.api.modules.common.service.implement; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import com.imyeyu.api.config.dbsource.TimiServerDBConfig; -import com.imyeyu.api.modules.common.bean.attachment.MediaAttach; -import com.imyeyu.api.modules.common.bean.attachment.Metadata; import com.imyeyu.api.modules.common.entity.Attachment; import com.imyeyu.api.modules.common.mapper.AttachmentMapper; import com.imyeyu.api.modules.common.service.AttachmentService; -import com.imyeyu.api.util.JavaCV; +import com.imyeyu.api.modules.common.service.AttachmentVariantService; import com.imyeyu.io.IO; import com.imyeyu.java.TimiJava; -import com.imyeyu.java.bean.CallbackArg; import com.imyeyu.java.bean.timi.TimiCode; import com.imyeyu.java.bean.timi.TimiException; -import com.imyeyu.java.ref.Ref; -import com.imyeyu.network.Network; import com.imyeyu.spring.TimiSpring; import com.imyeyu.spring.bean.Page; import com.imyeyu.spring.bean.PageResult; @@ -26,7 +21,6 @@ import com.mongodb.client.gridfs.GridFSBucket; import com.mongodb.client.gridfs.model.GridFSFile; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import net.coobird.thumbnailator.Thumbnails; import org.apache.tika.Tika; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; @@ -36,9 +30,6 @@ import org.springframework.transaction.annotation.Transactional; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; @@ -47,7 +38,6 @@ import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; -import java.util.UUID; import java.util.stream.Collectors; /** @@ -64,6 +54,7 @@ public class AttachmentServiceImplement extends AbstractEntityService