From 658765df6f339e850156982188dbee5e3f97d83e Mon Sep 17 00:00:00 2001 From: Timi Date: Sat, 13 Dec 2025 18:45:50 +0800 Subject: [PATCH] refactor travel --- .gitignore | 2 + .../java/com/imyeyu/api/bean/PreviewPage.java | 29 +++++ .../api/modules/common/entity/Attachment.java | 6 + .../common/service/AttachmentService.java | 20 +-- .../common/service/TempFileService.java | 3 + .../implement/AttachmentServiceImplement.java | 114 +++++++++--------- .../implement/TempFileServiceImplement.java | 11 ++ .../vo/attachment/AttachmentRequest.java | 5 +- .../journal/controller/JournalController.java | 12 +- .../journal/service/JournalService.java | 6 +- .../implement/JournalServiceImplement.java | 64 +++++----- .../api/modules/journal/vo/JournalPage.java | 34 ------ .../vo/{ => journal}/ArchiveRequest.java | 2 +- .../vo/{ => journal}/JournalRequest.java | 2 +- .../vo/{ => journal}/JournalResponse.java | 2 +- .../vo/{ => journal}/UpdateRequest.java | 2 +- .../mapper/journal/TravelLocationMapper.xml | 20 +++ 17 files changed, 179 insertions(+), 155 deletions(-) create mode 100644 src/main/java/com/imyeyu/api/bean/PreviewPage.java delete mode 100644 src/main/java/com/imyeyu/api/modules/journal/vo/JournalPage.java rename src/main/java/com/imyeyu/api/modules/journal/vo/{ => journal}/ArchiveRequest.java (84%) rename src/main/java/com/imyeyu/api/modules/journal/vo/{ => journal}/JournalRequest.java (88%) rename src/main/java/com/imyeyu/api/modules/journal/vo/{ => journal}/JournalResponse.java (87%) rename src/main/java/com/imyeyu/api/modules/journal/vo/{ => journal}/UpdateRequest.java (91%) create mode 100644 src/main/resources/mapper/journal/TravelLocationMapper.xml diff --git a/.gitignore b/.gitignore index 19b476d..cd11b9e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,10 @@ /config /data +/docs /logs /target /temp +CLAUDE.md multilingualField/ !.mvn/wrapper/maven-wrapper.jar diff --git a/src/main/java/com/imyeyu/api/bean/PreviewPage.java b/src/main/java/com/imyeyu/api/bean/PreviewPage.java new file mode 100644 index 0000000..da73528 --- /dev/null +++ b/src/main/java/com/imyeyu/api/bean/PreviewPage.java @@ -0,0 +1,29 @@ +package com.imyeyu.api.bean; + +import com.imyeyu.spring.bean.Page; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author 夜雨 + * @since 2025-12-12 23:07 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class PreviewPage extends Page { + + /** + * + * + * @author 夜雨 + * @since 2025-12-12 23:09 + */ + public enum Type { + + NORMAL, + + PREVIEW + } + + protected Type type; +} diff --git a/src/main/java/com/imyeyu/api/modules/common/entity/Attachment.java b/src/main/java/com/imyeyu/api/modules/common/entity/Attachment.java index d6b03a0..0feb0dc 100644 --- a/src/main/java/com/imyeyu/api/modules/common/entity/Attachment.java +++ b/src/main/java/com/imyeyu/api/modules/common/entity/Attachment.java @@ -3,12 +3,15 @@ package com.imyeyu.api.modules.common.entity; import com.google.gson.JsonObject; import com.imyeyu.api.bean.MultilingualHandler; import com.imyeyu.java.ref.Ref; +import com.imyeyu.spring.annotation.table.Transient; import com.imyeyu.spring.entity.Entity; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.Getter; +import java.io.InputStream; + /** * @author 夜雨 * @since 2023-08-15 10:17 @@ -80,6 +83,9 @@ public class Attachment extends Entity implements MultilingualHandler { protected Long destroyAt; + @Transient + protected InputStream inputStream; + public void setAttachTypeValue(Enum attachType) { this.attachType = attachType.toString(); } diff --git a/src/main/java/com/imyeyu/api/modules/common/service/AttachmentService.java b/src/main/java/com/imyeyu/api/modules/common/service/AttachmentService.java index 4d709d2..3cebd04 100644 --- a/src/main/java/com/imyeyu/api/modules/common/service/AttachmentService.java +++ b/src/main/java/com/imyeyu/api/modules/common/service/AttachmentService.java @@ -4,11 +4,7 @@ import com.imyeyu.api.modules.common.entity.Attachment; import com.imyeyu.api.modules.common.vo.attachment.AttachmentRequest; import com.imyeyu.api.modules.common.vo.attachment.AttachmentView; import com.imyeyu.java.bean.timi.TimiException; -import com.imyeyu.spring.service.DeletableService; -import com.imyeyu.spring.service.DestroyableService; -import com.imyeyu.spring.service.GettableService; -import com.imyeyu.spring.service.PageableService; -import com.imyeyu.spring.service.UpdatableService; +import com.imyeyu.spring.service.BaseService; import com.mongodb.client.gridfs.model.GridFSFile; import java.io.InputStream; @@ -22,14 +18,19 @@ import java.util.List; * @author 夜雨 * @since 2023-08-15 10:21 */ -public interface AttachmentService extends GettableService, PageableService, UpdatableService, DeletableService, DestroyableService { +public interface AttachmentService extends BaseService { + + Attachment createMedia(Attachment attachment); /** * * * @param request */ - void create(AttachmentRequest request); + @Deprecated + default void create(AttachmentRequest request) { + create((Attachment) request); + } /** * 创建媒体附件,同步创建缩略图 @@ -37,7 +38,10 @@ public interface AttachmentService extends GettableService, Pa * @param request 附件请求 * @return 缩略图附件 */ - Attachment createMedia(AttachmentRequest request) throws TimiException; + @Deprecated + default Attachment createMedia(AttachmentRequest request) throws TimiException { + return createMedia((Attachment) request); + } void deleteMedia(Long thumbId) throws TimiException; diff --git a/src/main/java/com/imyeyu/api/modules/common/service/TempFileService.java b/src/main/java/com/imyeyu/api/modules/common/service/TempFileService.java index ff72f1b..bcac81d 100644 --- a/src/main/java/com/imyeyu/api/modules/common/service/TempFileService.java +++ b/src/main/java/com/imyeyu/api/modules/common/service/TempFileService.java @@ -6,6 +6,7 @@ import com.imyeyu.java.bean.timi.TimiException; import org.springframework.web.multipart.MultipartFile; import java.io.File; +import java.io.InputStream; import java.util.List; /** @@ -18,5 +19,7 @@ public interface TempFileService { File get(String id) throws TimiException; + InputStream getInputStream(String id) throws TimiException; + TempFileMetaData metadata(String id) throws TimiException; } 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 14eaea0..155b8ca 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 @@ -8,7 +8,6 @@ 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.modules.common.service.SettingService; -import com.imyeyu.api.modules.common.vo.attachment.AttachmentRequest; import com.imyeyu.api.modules.common.vo.attachment.AttachmentView; import com.imyeyu.api.util.JavaCV; import com.imyeyu.io.IO; @@ -65,6 +64,47 @@ public class AttachmentServiceImplement extends AbstractEntityService { @@ -146,14 +142,14 @@ public class AttachmentServiceImplement extends AbstractEntityService { - log.info("capturing thumbnail: {}", request.getName()); + log.info("capturing thumbnail: {}", attachment.getName()); long start = Time.now(); - File tempFile = IO.file("temp/%s_%s".formatted(UUID.randomUUID().toString(), request.getName())); + File tempFile = IO.file("temp/%s_%s".formatted(UUID.randomUUID().toString(), attachment.getName())); try { IO.toFile(tempFile, sourceStream); ByteArrayOutputStream baos = JavaCV.captureThumbnail(IO.getInputStream(tempFile), 2); Thumbnails.of(IO.toInputStream(baos)).width(256).keepAspectRatio(true).toOutputStream(thumbStream); - log.info("captured thumbnail: {} at {} ms", request.getName(), Time.now() - start); + log.info("captured thumbnail: {} at {} ms", attachment.getName(), Time.now() - start); } finally { IO.destroy(tempFile); } @@ -162,13 +158,13 @@ public class AttachmentServiceImplement extends AbstractEntityService list(@RequestBody JournalPage page) { + public PageResult list(@RequestBody PreviewPage page) { PageResult pageResult = service.page(page); PageResult result = new PageResult<>(); diff --git a/src/main/java/com/imyeyu/api/modules/journal/service/JournalService.java b/src/main/java/com/imyeyu/api/modules/journal/service/JournalService.java index 30569df..749c339 100644 --- a/src/main/java/com/imyeyu/api/modules/journal/service/JournalService.java +++ b/src/main/java/com/imyeyu/api/modules/journal/service/JournalService.java @@ -3,9 +3,9 @@ package com.imyeyu.api.modules.journal.service; import com.imyeyu.api.modules.common.entity.Attachment; import com.imyeyu.api.modules.journal.bean.Travel; import com.imyeyu.api.modules.journal.entity.Journal; -import com.imyeyu.api.modules.journal.vo.ArchiveRequest; -import com.imyeyu.api.modules.journal.vo.JournalRequest; -import com.imyeyu.api.modules.journal.vo.UpdateRequest; +import com.imyeyu.api.modules.journal.vo.journal.ArchiveRequest; +import com.imyeyu.api.modules.journal.vo.journal.JournalRequest; +import com.imyeyu.api.modules.journal.vo.journal.UpdateRequest; import com.imyeyu.java.bean.timi.TimiException; import com.imyeyu.spring.service.DeletableService; import com.imyeyu.spring.service.GettableService; diff --git a/src/main/java/com/imyeyu/api/modules/journal/service/implement/JournalServiceImplement.java b/src/main/java/com/imyeyu/api/modules/journal/service/implement/JournalServiceImplement.java index 11f0f9b..e3beb08 100644 --- a/src/main/java/com/imyeyu/api/modules/journal/service/implement/JournalServiceImplement.java +++ b/src/main/java/com/imyeyu/api/modules/journal/service/implement/JournalServiceImplement.java @@ -10,14 +10,13 @@ import com.imyeyu.api.modules.common.entity.Setting; import com.imyeyu.api.modules.common.service.AttachmentService; import com.imyeyu.api.modules.common.service.SettingService; import com.imyeyu.api.modules.common.service.TempFileService; -import com.imyeyu.api.modules.common.vo.attachment.AttachmentRequest; import com.imyeyu.api.modules.journal.bean.Travel; import com.imyeyu.api.modules.journal.entity.Journal; import com.imyeyu.api.modules.journal.mapper.JournalMapper; import com.imyeyu.api.modules.journal.service.JournalService; -import com.imyeyu.api.modules.journal.vo.ArchiveRequest; -import com.imyeyu.api.modules.journal.vo.JournalRequest; -import com.imyeyu.api.modules.journal.vo.UpdateRequest; +import com.imyeyu.api.modules.journal.vo.journal.ArchiveRequest; +import com.imyeyu.api.modules.journal.vo.journal.JournalRequest; +import com.imyeyu.api.modules.journal.vo.journal.UpdateRequest; import com.imyeyu.io.IO; import com.imyeyu.java.TimiJava; import com.imyeyu.java.bean.timi.TimiCode; @@ -75,7 +74,7 @@ public class JournalServiceImplement extends AbstractEntityService dbAttachSet = attachmentService.listByBizId(Attachment.BizType.JOURNAL, journal.getId(), MediaAttach.Type.THUMB) - .stream() - .map(Attachment::getId) - .collect(Collectors.toSet()); - Set retainIds = Set.of(TimiJava.firstNotEmpty(request.getAttachmentIds(), new Long[0])); - dbAttachSet.removeAll(retainIds); - for (Long removeId : dbAttachSet) { - attachmentService.deleteMedia(removeId); - } - // 新增 - String[] tempFileIds = request.getTempFileIds(); - if (TimiJava.isNotEmpty(tempFileIds)) { - for (int i = 0; i < tempFileIds.length; i++) { - TempFileMetaData metadata = tempFileService.metadata(tempFileIds[i]); - File file = tempFileService.get(tempFileIds[i]); + // 删除 + Set dbAttachSet = attachmentService.listByBizId(Attachment.BizType.JOURNAL, journal.getId(), MediaAttach.Type.THUMB) + .stream() + .map(Attachment::getId) + .collect(Collectors.toSet()); + Set retainIds = Set.of(TimiJava.firstNotEmpty(request.getAttachmentIds(), new Long[0])); + dbAttachSet.removeAll(retainIds); + for (Long removeId : dbAttachSet) { + attachmentService.deleteMedia(removeId); + } + // 新增 + for (String tempFileId : TimiJava.firstNotNull(request.getTempFileIds(), new String[0])) { + TempFileMetaData metadata = tempFileService.metadata(tempFileId); - AttachmentRequest sourceAttach = new AttachmentRequest(); - sourceAttach.setName(metadata.getOriginalName()); - sourceAttach.setBizType(Attachment.BizType.JOURNAL); - sourceAttach.setBizId(journal.getId()); - sourceAttach.setInputStream(IO.getInputStream(file)); - attachmentService.createMedia(sourceAttach); - } - } - } catch (Exception e) { - log.error("update journal error", e); - throw new TimiException(TimiCode.ERROR).msgKey("TODO update journal error"); + Attachment sourceAttach = new Attachment(); + sourceAttach.setName(metadata.getOriginalName()); + sourceAttach.setBizType(Attachment.BizType.JOURNAL); + sourceAttach.setBizId(journal.getId()); + sourceAttach.setInputStream(tempFileService.getInputStream(tempFileId)); + attachmentService.createMedia(sourceAttach); } } @@ -163,7 +153,7 @@ public class JournalServiceImplement extends AbstractEntityService { - - /** - * - * - * @author 夜雨 - * @since 2025-12-08 16:01 - */ - public enum Type { - - NORMAL, - - PREVIEW - } - - @NotNull - private Type type; -} \ No newline at end of file diff --git a/src/main/java/com/imyeyu/api/modules/journal/vo/ArchiveRequest.java b/src/main/java/com/imyeyu/api/modules/journal/vo/journal/ArchiveRequest.java similarity index 84% rename from src/main/java/com/imyeyu/api/modules/journal/vo/ArchiveRequest.java rename to src/main/java/com/imyeyu/api/modules/journal/vo/journal/ArchiveRequest.java index 2b671a1..218aeac 100644 --- a/src/main/java/com/imyeyu/api/modules/journal/vo/ArchiveRequest.java +++ b/src/main/java/com/imyeyu/api/modules/journal/vo/journal/ArchiveRequest.java @@ -1,4 +1,4 @@ -package com.imyeyu.api.modules.journal.vo; +package com.imyeyu.api.modules.journal.vo.journal; import com.imyeyu.api.modules.journal.entity.Journal; import lombok.Data; diff --git a/src/main/java/com/imyeyu/api/modules/journal/vo/JournalRequest.java b/src/main/java/com/imyeyu/api/modules/journal/vo/journal/JournalRequest.java similarity index 88% rename from src/main/java/com/imyeyu/api/modules/journal/vo/JournalRequest.java rename to src/main/java/com/imyeyu/api/modules/journal/vo/journal/JournalRequest.java index 67f7d08..56d1832 100644 --- a/src/main/java/com/imyeyu/api/modules/journal/vo/JournalRequest.java +++ b/src/main/java/com/imyeyu/api/modules/journal/vo/journal/JournalRequest.java @@ -1,4 +1,4 @@ -package com.imyeyu.api.modules.journal.vo; +package com.imyeyu.api.modules.journal.vo.journal; import com.imyeyu.api.modules.journal.entity.Journal; import com.imyeyu.spring.annotation.table.Transient; diff --git a/src/main/java/com/imyeyu/api/modules/journal/vo/JournalResponse.java b/src/main/java/com/imyeyu/api/modules/journal/vo/journal/JournalResponse.java similarity index 87% rename from src/main/java/com/imyeyu/api/modules/journal/vo/JournalResponse.java rename to src/main/java/com/imyeyu/api/modules/journal/vo/journal/JournalResponse.java index 1e767af..42315e9 100644 --- a/src/main/java/com/imyeyu/api/modules/journal/vo/JournalResponse.java +++ b/src/main/java/com/imyeyu/api/modules/journal/vo/journal/JournalResponse.java @@ -1,4 +1,4 @@ -package com.imyeyu.api.modules.journal.vo; +package com.imyeyu.api.modules.journal.vo.journal; import com.imyeyu.api.modules.common.entity.Attachment; import com.imyeyu.api.modules.journal.entity.Journal; diff --git a/src/main/java/com/imyeyu/api/modules/journal/vo/UpdateRequest.java b/src/main/java/com/imyeyu/api/modules/journal/vo/journal/UpdateRequest.java similarity index 91% rename from src/main/java/com/imyeyu/api/modules/journal/vo/UpdateRequest.java rename to src/main/java/com/imyeyu/api/modules/journal/vo/journal/UpdateRequest.java index 1ad3a41..ee4c568 100644 --- a/src/main/java/com/imyeyu/api/modules/journal/vo/UpdateRequest.java +++ b/src/main/java/com/imyeyu/api/modules/journal/vo/journal/UpdateRequest.java @@ -1,4 +1,4 @@ -package com.imyeyu.api.modules.journal.vo; +package com.imyeyu.api.modules.journal.vo.journal; import com.imyeyu.api.modules.journal.entity.Journal; import com.imyeyu.spring.annotation.table.Transient; diff --git a/src/main/resources/mapper/journal/TravelLocationMapper.xml b/src/main/resources/mapper/journal/TravelLocationMapper.xml new file mode 100644 index 0000000..d7c83d6 --- /dev/null +++ b/src/main/resources/mapper/journal/TravelLocationMapper.xml @@ -0,0 +1,20 @@ + + + + travel_location + +