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;
|
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")
|
@PostMapping("/create")
|
||||||
public Map<String, Object> create(@RequestBody Report report) {
|
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()));
|
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<ReportImage> imgs = r.getImages();
|
||||||
List<String> beforePhotos = new ArrayList<>();
|
List<String> beforePhotos = new ArrayList<>();
|
||||||
List<String> afterPhotos = new ArrayList<>();
|
List<String> afterPhotos = new ArrayList<>();
|
||||||
|
List<Map<String, Object>> duringMedia = new ArrayList<>();
|
||||||
if (imgs != null) {
|
if (imgs != null) {
|
||||||
for (ReportImage img : imgs) {
|
for (ReportImage img : imgs) {
|
||||||
if ("before".equals(img.getPhotoType())) {
|
if ("before".equals(img.getPhotoType())) {
|
||||||
beforePhotos.add(fullUrl(img.getPhotoUrl()));
|
beforePhotos.add(fullUrl(img.getPhotoUrl()));
|
||||||
} else if ("after".equals(img.getPhotoType())) {
|
} else if ("after".equals(img.getPhotoType())) {
|
||||||
afterPhotos.add(fullUrl(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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
item.put("beforePhotos", beforePhotos);
|
item.put("beforePhotos", beforePhotos);
|
||||||
item.put("afterPhotos", afterPhotos);
|
item.put("afterPhotos", afterPhotos);
|
||||||
|
item.put("duringMedia", duringMedia);
|
||||||
return item;
|
return item;
|
||||||
}).collect(Collectors.toList());
|
}).collect(Collectors.toList());
|
||||||
if (usePaging && paged != null) {
|
if (usePaging && paged != null) {
|
||||||
@ -131,17 +155,24 @@ public class ReportController {
|
|||||||
List<ReportImage> imgs = report.getImages();
|
List<ReportImage> imgs = report.getImages();
|
||||||
List<String> beforePhotos = new ArrayList<>();
|
List<String> beforePhotos = new ArrayList<>();
|
||||||
List<String> afterPhotos = new ArrayList<>();
|
List<String> afterPhotos = new ArrayList<>();
|
||||||
|
List<Map<String, Object>> duringMedia = new ArrayList<>();
|
||||||
if (imgs != null) {
|
if (imgs != null) {
|
||||||
for (ReportImage img : imgs) {
|
for (ReportImage img : imgs) {
|
||||||
if ("before".equals(img.getPhotoType())) {
|
if ("before".equals(img.getPhotoType())) {
|
||||||
beforePhotos.add(img.getPhotoUrl());
|
beforePhotos.add(fullUrl(img.getPhotoUrl()));
|
||||||
} else if ("after".equals(img.getPhotoType())) {
|
} 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("beforePhotos", beforePhotos);
|
||||||
data.put("afterPhotos", afterPhotos);
|
data.put("afterPhotos", afterPhotos);
|
||||||
|
data.put("duringMedia", duringMedia);
|
||||||
data.put("remark", report.getRemark());
|
data.put("remark", report.getRemark());
|
||||||
data.put("userId", report.getUserId());
|
data.put("userId", report.getUserId());
|
||||||
data.put("storeId", report.getStoreId());
|
data.put("storeId", report.getStoreId());
|
||||||
|
|||||||
@ -24,9 +24,13 @@ public class ReportImage {
|
|||||||
@Column(name = "photo_url", length = 500)
|
@Column(name = "photo_url", length = 500)
|
||||||
private String photoUrl;
|
private String photoUrl;
|
||||||
|
|
||||||
/** 图片类型:before=服务前,after=服务后 */
|
/** 媒体分组:before=服务前,after=服务后,during=服务过程中 */
|
||||||
@Column(name = "photo_type", length = 20)
|
@Column(name = "photo_type", length = 20)
|
||||||
private String photoType;
|
private String photoType;
|
||||||
|
|
||||||
|
/** 媒体类型:photo=图片,video=视频 */
|
||||||
|
@Column(name = "media_type", length = 20)
|
||||||
|
private String mediaType;
|
||||||
|
|
||||||
/** 排序序号,同类型内按顺序展示 */
|
/** 排序序号,同类型内按顺序展示 */
|
||||||
@Column(name = "sort_order")
|
@Column(name = "sort_order")
|
||||||
@ -43,5 +47,8 @@ public class ReportImage {
|
|||||||
if (sortOrder == null) {
|
if (sortOrder == null) {
|
||||||
sortOrder = 0;
|
sortOrder = 0;
|
||||||
}
|
}
|
||||||
|
if (mediaType == null || mediaType.isBlank()) {
|
||||||
|
mediaType = "photo";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,11 +6,11 @@ import org.springframework.data.jpa.repository.JpaRepository;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public interface ReportImageMapper extends JpaRepository<ReportImage, Long> {
|
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);
|
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) {
|
private Report enrichImages(Report r) {
|
||||||
if (r == null) return null;
|
if (r == null) return null;
|
||||||
List<ReportImage> imgs = reportImageMapper.findByReportIdOrderBySortOrderAsc(r.getId());
|
List<ReportImage> imgs = reportImageMapper.findByReportIdOrderBySortOrderAscIdAsc(r.getId());
|
||||||
r.setImages(imgs);
|
r.setImages(imgs);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
@ -87,7 +87,7 @@ public class ReportService {
|
|||||||
private List<Report> enrichImages(List<Report> reports) {
|
private List<Report> enrichImages(List<Report> reports) {
|
||||||
if (reports == null || reports.isEmpty()) return reports;
|
if (reports == null || reports.isEmpty()) return reports;
|
||||||
List<Long> ids = reports.stream().map(Report::getId).toList();
|
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()
|
java.util.Map<Long, List<ReportImage>> map = allImages.stream()
|
||||||
.collect(java.util.stream.Collectors.groupingBy(ReportImage::getReportId));
|
.collect(java.util.stream.Collectors.groupingBy(ReportImage::getReportId));
|
||||||
for (Report r : reports) {
|
for (Report r : reports) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user