VoiceQueryDTO.java 2.32 KB
package com.xly.tts.bean;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

/**
 * 语音查询条件数据传输对象
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class VoiceQueryDTO implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 语言代码(如:zh, en, ja)
     */
    private String languageCode;

    /**
     * 国家/地区代码(如:CN, US, JP)
     */
    private String countryCode;

    /**
     * 完整区域代码(如:zh-CN, en-US)
     */
    private String locale;

    /**
     * 性别:Male, Female, Any
     */
    private String gender;

    /**
     * 语音类型:Standard, Neural, All
     */
    private String voiceType;

    /**
     * 是否只返回默认语音
     */
    private Boolean defaultOnly;

    /**
     * 是否只返回推荐语音
     */
    private Boolean recommendedOnly;

    /**
     * 是否返回本地可用语音
     */
    @Builder.Default
    private Boolean localAvailable = true;

    /**
     * 状态:available, unavailable, all
     */
    @Builder.Default
    private String status = "available";

    /**
     * 搜索关键词(名称或显示名称)
     */
    private String keyword;

    /**
     * 页码(从1开始)
     */
    @Builder.Default
    private Integer page = 1;

    /**
     * 每页大小
     */
    @Builder.Default
    private Integer pageSize = 20;

    /**
     * 排序字段
     */
    private String sortField;

    /**
     * 排序方向:asc, desc
     */
    private String sortDirection;

    // 便捷方法

    /**
     * 获取偏移量
     */
    public Integer getOffset() {
        return (page - 1) * pageSize;
    }

    /**
     * 是否查询所有语音
     */
    public Boolean isQueryAll() {
        return "all".equalsIgnoreCase(status);
    }

    /**
     * 是否查询女性语音
     */
    public Boolean isQueryFemale() {
        return "female".equalsIgnoreCase(gender);
    }

    /**
     * 是否查询男性语音
     */
    public Boolean isQueryMale() {
        return "male".equalsIgnoreCase(gender);
    }

    /**
     * 是否为Neural语音
     */
    public Boolean isNeuralVoice() {
        return "neural".equalsIgnoreCase(voiceType);
    }
}