fix: return during media and stabilize report image ordering
This commit is contained in:
parent
fa9cdecfb1
commit
9008b5bece
@ -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());
|
||||
|
||||
@ -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";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user