lrj
2 天以前 c61d4fe27c97d2ecc907756aa571a4ef14a7b9b6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
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;
    }
}