package com.rongyichuang.carousel.service;
|
|
import com.rongyichuang.carousel.dto.request.CarouselInput;
|
import com.rongyichuang.carousel.dto.request.CarouselSortOrderInput;
|
import com.rongyichuang.carousel.dto.response.CarouselResponse;
|
import com.rongyichuang.carousel.entity.Carousel;
|
import com.rongyichuang.carousel.repository.CarouselRepository;
|
import org.springframework.data.domain.Sort;
|
import org.springframework.util.StringUtils;
|
import com.rongyichuang.common.dto.PageResponse;
|
import com.rongyichuang.common.entity.Media;
|
import com.rongyichuang.common.exception.BusinessException;
|
import com.rongyichuang.common.repository.MediaRepository;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Pageable;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.util.List;
|
import java.util.Map;
|
import java.util.stream.Collectors;
|
|
/**
|
* 轮播图业务服务
|
*/
|
@Service
|
public class CarouselService {
|
|
@Autowired
|
private CarouselRepository carouselRepository;
|
|
@Autowired
|
private MediaRepository mediaRepository;
|
|
/**
|
* 分页查询轮播图
|
*/
|
public PageResponse<CarouselResponse> getCarousels(int page, int size, String title) {
|
Pageable pageable = org.springframework.data.domain.PageRequest.of(page, size, Sort.by(Sort.Direction.ASC, "sortOrder"));
|
|
Page<Carousel> carouselPage;
|
if (StringUtils.hasText(title)) {
|
carouselPage = carouselRepository.findByTitleContaining(title, pageable);
|
} else {
|
carouselPage = carouselRepository.findAll(pageable);
|
}
|
|
List<CarouselResponse> responses = carouselPage.getContent().stream()
|
.map(this::convertToResponse)
|
.collect(Collectors.toList());
|
|
// 批量查询媒体数量
|
if (!responses.isEmpty()) {
|
List<Long> carouselIds = responses.stream()
|
.map(CarouselResponse::getId)
|
.collect(Collectors.toList());
|
|
// 查询媒体数量(targetType=4表示轮播图)
|
List<Object[]> mediaCountResults = mediaRepository.countByTargetTypeAndTargetIdInAndState(4, carouselIds, 1);
|
Map<Long, Integer> mediaCountMap = mediaCountResults.stream()
|
.collect(Collectors.toMap(
|
result -> (Long) result[0],
|
result -> ((Long) result[1]).intValue()
|
));
|
|
// 设置媒体数量
|
responses.forEach(response -> {
|
Integer mediaCount = mediaCountMap.getOrDefault(response.getId(), 0);
|
response.setMediaCount(mediaCount);
|
});
|
}
|
|
return new PageResponse<>(responses, carouselPage.getTotalElements(), carouselPage.getNumber(), carouselPage.getSize());
|
}
|
|
/**
|
* 根据ID查询轮播图
|
*/
|
public CarouselResponse getCarousel(Long id) {
|
Carousel carousel = carouselRepository.findById(id)
|
.orElseThrow(() -> new BusinessException("轮播图不存在"));
|
|
CarouselResponse response = convertToResponse(carousel);
|
|
// 查询媒体数量
|
List<Media> mediaList = mediaRepository.findByTargetTypeAndTargetIdAndState(4, id, 1);
|
response.setMediaCount(mediaList.size());
|
|
return response;
|
}
|
|
/**
|
* 获取播放列表
|
*/
|
public List<CarouselResponse> getPlayList() {
|
List<Carousel> carousels = carouselRepository.findPlayList();
|
return carousels.stream()
|
.map(this::convertToResponse)
|
.collect(Collectors.toList());
|
}
|
|
/**
|
* 保存轮播图
|
*/
|
@Transactional
|
public CarouselResponse saveCarousel(CarouselInput input) {
|
Carousel carousel;
|
if (input.getId() != null) {
|
// 修改
|
carousel = carouselRepository.findById(input.getId())
|
.orElseThrow(() -> new BusinessException("轮播图不存在"));
|
} else {
|
// 新增
|
carousel = new Carousel();
|
}
|
|
carousel.setTitle(input.getTitle());
|
carousel.setContent(input.getContent());
|
carousel.setSortOrder(input.getSortOrder());
|
|
carousel = carouselRepository.save(carousel);
|
|
return convertToResponse(carousel);
|
}
|
|
/**
|
* 删除轮播图
|
*/
|
@Transactional
|
public boolean deleteCarousel(Long id) {
|
Carousel carousel = carouselRepository.findById(id)
|
.orElseThrow(() -> new BusinessException("轮播图不存在"));
|
|
// 逻辑删除
|
carousel.setState(0);
|
carouselRepository.save(carousel);
|
|
return true;
|
}
|
|
/**
|
* 批量更新播放顺序
|
*/
|
@Transactional
|
public boolean updateSortOrders(List<CarouselSortOrderInput> sortOrders) {
|
System.out.println("=== CarouselService.updateSortOrders 开始执行 ===");
|
System.out.println("接收到的排序数据数量: " + sortOrders.size());
|
|
for (CarouselSortOrderInput sortOrderInput : sortOrders) {
|
System.out.println("处理轮播图ID: " + sortOrderInput.getId() + ", 新排序值: " + sortOrderInput.getSortOrder());
|
|
Carousel carousel = carouselRepository.findById(sortOrderInput.getId())
|
.orElseThrow(() -> new BusinessException("轮播图不存在,ID:" + sortOrderInput.getId()));
|
|
System.out.println("找到轮播图: " + carousel.getTitle() + ", 当前排序值: " + carousel.getSortOrder());
|
|
carousel.setSortOrder(sortOrderInput.getSortOrder());
|
carouselRepository.save(carousel);
|
|
System.out.println("已更新轮播图排序值为: " + sortOrderInput.getSortOrder());
|
}
|
|
System.out.println("=== CarouselService.updateSortOrders 执行完成 ===");
|
return true;
|
}
|
|
/**
|
* 转换为响应DTO
|
*/
|
private CarouselResponse convertToResponse(Carousel carousel) {
|
CarouselResponse response = new CarouselResponse();
|
response.setId(carousel.getId());
|
response.setTitle(carousel.getTitle());
|
response.setContent(carousel.getContent());
|
response.setSortOrder(carousel.getSortOrder());
|
response.setCreateTime(carousel.getCreateTime());
|
response.setUpdateTime(carousel.getUpdateTime());
|
return response;
|
}
|
}
|