fix: return during media and stabilize report image ordering

This commit is contained in:
malei 2026-04-16 23:44:34 +08:00
parent fa9cdecfb1
commit 9008b5bece
4 changed files with 46 additions and 8 deletions

View File

@ -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<String, Object> 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<ReportImage> imgs = r.getImages();
List<String> beforePhotos = new ArrayList<>();
List<String> afterPhotos = new ArrayList<>();
List<Map<String, Object>> 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<String, Object> 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<ReportImage> imgs = report.getImages();
List<String> beforePhotos = new ArrayList<>();
List<String> afterPhotos = new ArrayList<>();
List<Map<String, Object>> 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<String, Object> 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());

View File

@ -24,10 +24,14 @@ 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")
private Integer sortOrder;
@ -43,5 +47,8 @@ public class ReportImage {
if (sortOrder == null) {
sortOrder = 0;
}
if (mediaType == null || mediaType.isBlank()) {
mediaType = "photo";
}
}
}

View File

@ -6,11 +6,11 @@ import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface ReportImageMapper extends JpaRepository<ReportImage, Long> {
List<ReportImage> findByReportIdOrderBySortOrderAsc(Long reportId);
List<ReportImage> findByReportIdOrderBySortOrderAscIdAsc(Long reportId);
List<ReportImage> findByReportIdAndPhotoTypeOrderBySortOrderAsc(Long reportId, String photoType);
List<ReportImage> findByReportIdAndPhotoTypeOrderBySortOrderAscIdAsc(Long reportId, String photoType);
void deleteByReportId(Long reportId);
List<ReportImage> findByReportIdIn(List<Long> reportIds);
List<ReportImage> findByReportIdInOrderByReportIdAscSortOrderAscIdAsc(List<Long> reportIds);
}

View File

@ -78,7 +78,7 @@ public class ReportService {
/** 查询单条报告并填充图片 */
private Report enrichImages(Report r) {
if (r == null) return null;
List<ReportImage> imgs = reportImageMapper.findByReportIdOrderBySortOrderAsc(r.getId());
List<ReportImage> imgs = reportImageMapper.findByReportIdOrderBySortOrderAscIdAsc(r.getId());
r.setImages(imgs);
return r;
}
@ -87,7 +87,7 @@ public class ReportService {
private List<Report> enrichImages(List<Report> reports) {
if (reports == null || reports.isEmpty()) return reports;
List<Long> ids = reports.stream().map(Report::getId).toList();
List<ReportImage> allImages = reportImageMapper.findByReportIdIn(ids);
List<ReportImage> allImages = reportImageMapper.findByReportIdInOrderByReportIdAscSortOrderAscIdAsc(ids);
java.util.Map<Long, List<ReportImage>> map = allImages.stream()
.collect(java.util.stream.Collectors.groupingBy(ReportImage::getReportId));
for (Report r : reports) {