package com.xly.tts.bean; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; import java.util.List; /** * 语音列表响应数据传输对象 */ @Data @Builder @NoArgsConstructor @AllArgsConstructor public class VoiceListResponseDTO implements Serializable { private static final long serialVersionUID = 1L; /** * 语音列表 */ private List voices; /** * 当前页码 */ private Integer currentPage; /** * 每页大小 */ private Integer pageSize; /** * 总记录数 */ private Long totalCount; /** * 总页数 */ private Integer totalPages; /** * 是否有下一页 */ private Boolean hasNext; /** * 是否有上一页 */ private Boolean hasPrevious; /** * 查询条件 */ private VoiceQueryDTO query; /** * 按语言分组的数据 */ private List groups; /** * 推荐的默认语音 */ private VoiceInfoDTO defaultVoice; /** * 时间戳 */ private Long timestamp; /** * 状态码 */ @Builder.Default private Integer code = 200; /** * 状态消息 */ @Builder.Default private String message = "success"; /** * 创建成功响应 */ public static VoiceListResponseDTO success(List voices, VoiceQueryDTO query, Long totalCount) { int pageSize = query != null ? query.getPageSize() : 20; int currentPage = query != null ? query.getPage() : 1; int totalPages = (int) Math.ceil((double) totalCount / pageSize); return VoiceListResponseDTO.builder() .voices(voices) .currentPage(currentPage) .pageSize(pageSize) .totalCount(totalCount) .totalPages(totalPages) .hasNext(currentPage < totalPages) .hasPrevious(currentPage > 1) .query(query) .timestamp(System.currentTimeMillis()) .code(200) .message("获取成功") .build(); } /** * 创建失败响应 */ public static VoiceListResponseDTO error(String message) { return VoiceListResponseDTO.builder() .code(500) .message(message) .timestamp(System.currentTimeMillis()) .build(); } }