diff --git a/src/main/java/com/petstore/controller/ReportController.java b/src/main/java/com/petstore/controller/ReportController.java index a3d9169..a9096a3 100644 --- a/src/main/java/com/petstore/controller/ReportController.java +++ b/src/main/java/com/petstore/controller/ReportController.java @@ -30,6 +30,23 @@ public class ReportController { return baseUrl + path; } + private String resolveMediaType(ReportImage img) { + String mt = img.getMediaType(); + if (mt != null && !mt.isBlank()) { + return mt; + } + String url = img.getPhotoUrl(); + if (url == null) { + return "photo"; + } + String lower = url.toLowerCase(Locale.ROOT); + if (lower.endsWith(".mp4") || lower.endsWith(".mov") || lower.endsWith(".m4v") + || lower.endsWith(".webm") || lower.endsWith(".avi")) { + return "video"; + } + return "photo"; + } + @PostMapping("/create") public Map create(@RequestBody Report report) { System.out.println(">>> Report create received: appointmentId=" + report.getAppointmentId() + ", userId=" + report.getUserId() + ", images count=" + (report.getImages() == null ? 0 : report.getImages().size())); @@ -80,17 +97,24 @@ public class ReportController { List imgs = r.getImages(); List beforePhotos = new ArrayList<>(); List afterPhotos = new ArrayList<>(); + List> duringMedia = new ArrayList<>(); if (imgs != null) { for (ReportImage img : imgs) { if ("before".equals(img.getPhotoType())) { beforePhotos.add(fullUrl(img.getPhotoUrl())); } else if ("after".equals(img.getPhotoType())) { afterPhotos.add(fullUrl(img.getPhotoUrl())); + } else if ("during".equals(img.getPhotoType())) { + Map m = new HashMap<>(); + m.put("url", fullUrl(img.getPhotoUrl())); + m.put("mediaType", resolveMediaType(img)); + duringMedia.add(m); } } } item.put("beforePhotos", beforePhotos); item.put("afterPhotos", afterPhotos); + item.put("duringMedia", duringMedia); return item; }).collect(Collectors.toList()); if (usePaging && paged != null) { @@ -131,17 +155,24 @@ public class ReportController { List imgs = report.getImages(); List beforePhotos = new ArrayList<>(); List afterPhotos = new ArrayList<>(); + List> duringMedia = new ArrayList<>(); if (imgs != null) { for (ReportImage img : imgs) { if ("before".equals(img.getPhotoType())) { - beforePhotos.add(img.getPhotoUrl()); + beforePhotos.add(fullUrl(img.getPhotoUrl())); } else if ("after".equals(img.getPhotoType())) { - afterPhotos.add(img.getPhotoUrl()); + afterPhotos.add(fullUrl(img.getPhotoUrl())); + } else if ("during".equals(img.getPhotoType())) { + Map m = new HashMap<>(); + m.put("url", fullUrl(img.getPhotoUrl())); + m.put("mediaType", resolveMediaType(img)); + duringMedia.add(m); } } } data.put("beforePhotos", beforePhotos); data.put("afterPhotos", afterPhotos); + data.put("duringMedia", duringMedia); data.put("remark", report.getRemark()); data.put("userId", report.getUserId()); data.put("storeId", report.getStoreId()); diff --git a/src/main/java/com/petstore/entity/ReportImage.java b/src/main/java/com/petstore/entity/ReportImage.java index f337b18..09064da 100644 --- a/src/main/java/com/petstore/entity/ReportImage.java +++ b/src/main/java/com/petstore/entity/ReportImage.java @@ -24,9 +24,13 @@ public class ReportImage { @Column(name = "photo_url", length = 500) private String photoUrl; - /** 图片类型:before=服务前,after=服务后 */ + /** 媒体分组:before=服务前,after=服务后,during=服务过程中 */ @Column(name = "photo_type", length = 20) private String photoType; + + /** 媒体类型:photo=图片,video=视频 */ + @Column(name = "media_type", length = 20) + private String mediaType; /** 排序序号,同类型内按顺序展示 */ @Column(name = "sort_order") @@ -43,5 +47,8 @@ public class ReportImage { if (sortOrder == null) { sortOrder = 0; } + if (mediaType == null || mediaType.isBlank()) { + mediaType = "photo"; + } } } diff --git a/src/main/java/com/petstore/mapper/ReportImageMapper.java b/src/main/java/com/petstore/mapper/ReportImageMapper.java index f0aca20..fa43e45 100644 --- a/src/main/java/com/petstore/mapper/ReportImageMapper.java +++ b/src/main/java/com/petstore/mapper/ReportImageMapper.java @@ -6,11 +6,11 @@ import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; public interface ReportImageMapper extends JpaRepository { - List findByReportIdOrderBySortOrderAsc(Long reportId); + List findByReportIdOrderBySortOrderAscIdAsc(Long reportId); - List findByReportIdAndPhotoTypeOrderBySortOrderAsc(Long reportId, String photoType); + List findByReportIdAndPhotoTypeOrderBySortOrderAscIdAsc(Long reportId, String photoType); void deleteByReportId(Long reportId); - List findByReportIdIn(List reportIds); + List findByReportIdInOrderByReportIdAscSortOrderAscIdAsc(List reportIds); } diff --git a/src/main/java/com/petstore/service/ReportService.java b/src/main/java/com/petstore/service/ReportService.java index 5267052..9e06461 100644 --- a/src/main/java/com/petstore/service/ReportService.java +++ b/src/main/java/com/petstore/service/ReportService.java @@ -78,7 +78,7 @@ public class ReportService { /** 查询单条报告并填充图片 */ private Report enrichImages(Report r) { if (r == null) return null; - List imgs = reportImageMapper.findByReportIdOrderBySortOrderAsc(r.getId()); + List imgs = reportImageMapper.findByReportIdOrderBySortOrderAscIdAsc(r.getId()); r.setImages(imgs); return r; } @@ -87,7 +87,7 @@ public class ReportService { private List enrichImages(List reports) { if (reports == null || reports.isEmpty()) return reports; List ids = reports.stream().map(Report::getId).toList(); - List allImages = reportImageMapper.findByReportIdIn(ids); + List allImages = reportImageMapper.findByReportIdInOrderByReportIdAscSortOrderAscIdAsc(ids); java.util.Map> map = allImages.stream() .collect(java.util.stream.Collectors.groupingBy(ReportImage::getReportId)); for (Report r : reports) {