Package com.bytedesk.ai.statistic_token
Class StatisticTokenRestService
java.lang.Object
com.bytedesk.core.base.BaseRestService<T,TRequest,TResponse>
com.bytedesk.core.base.BaseRestServiceWithExport<StatisticTokenEntity,StatisticTokenRequest,StatisticTokenResponse,StatisticTokenExcel>
com.bytedesk.ai.statistic_token.StatisticTokenRestService
@Service
@Description("AI Token Statistics Service - AI token usage statistics and analytics service")
public class StatisticTokenRestService
extends BaseRestServiceWithExport<StatisticTokenEntity,StatisticTokenRequest,StatisticTokenResponse,StatisticTokenExcel>
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final DateTimeFormatterprivate final org.modelmapper.ModelMapperprivate final StatisticTokenRepositoryprivate final UidUtilsFields inherited from class com.bytedesk.core.base.BaseRestService
authService -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionconvertToExcel(StatisticTokenEntity entity) 转换为Excel对象 子类必须实现此方法create(StatisticTokenRequest request) protected org.springframework.data.jpa.domain.Specification<StatisticTokenEntity>createSpecification(StatisticTokenRequest request) 创建Specification对象,子类必须实现 用于queryByOrg的通用实现voiddelete(StatisticTokenRequest request) voiddeleteByUid(String uid) protected StatisticTokenEntitydoSave(StatisticTokenEntity entity) 子类实现具体的保存逻辑protected org.springframework.data.domain.Page<StatisticTokenEntity>executePageQuery(org.springframework.data.jpa.domain.Specification<StatisticTokenEntity> spec, org.springframework.data.domain.Pageable pageable) 执行分页查询,子类必须实现 用于queryByOrg的通用实现existsByUid(String uid) findByOrgUidAndType(String orgUid, String type) getAiTokenStatisticsByDateRange(String orgUid, String startDate, String endDate) Get AI token statistics by organization and date rangegetAiTokenStatisticsByModelType(String orgUid, String aiModelType) Get AI token statistics by organization and AI model typegetAiTokenStatisticsByProvider(String orgUid, String aiProvider) Get AI token statistics by organization and AI providergetHourlyTokenStatistics(String orgUid, String date) Get hourly AI token statistics for a specific organization and date Returns token usage data organized by hour (0-23) for the entire daygetHourlyTokenStatisticsByModelType(String orgUid, String date, String aiModelType) Get hourly AI token statistics for a specific organization, date and AI model typegetHourlyTokenStatisticsByProvider(String orgUid, String date, String aiProvider) Get hourly AI token statistics for a specific organization, date and AI providergetTotalCostByDateRange(String orgUid, String startDate, String endDate) Get total cost by organization and date rangegetTotalTokensByDateRange(String orgUid, String startDate, String endDate) Get total token consumption by organization and date rangehandleOptimisticLockingFailureException(org.springframework.orm.ObjectOptimisticLockingFailureException e, StatisticTokenEntity entity) voidrecordAiTokenUsage(String orgUid, String aiProvider, String aiModelType, long promptTokens, long completionTokens, boolean success, long responseTime, BigDecimal tokenUnitPrice) Record AI token usage statisticsupdate(StatisticTokenRequest request) Methods inherited from class com.bytedesk.core.base.BaseRestServiceWithExport
queryByOrgEntityMethods inherited from class com.bytedesk.core.base.BaseRestService
deleteByOrgUid, findByOrgUid, getUidFromRequest, queryByOrg, queryByUid, queryByUser, recover, save, setUserUidToRequest
-
Field Details
-
statistic_tokenRepository
-
modelMapper
private final org.modelmapper.ModelMapper modelMapper -
uidUtils
-
DATE_FORMATTER
-
-
Constructor Details
-
StatisticTokenRestService
public StatisticTokenRestService()
-
-
Method Details
-
createSpecification
protected org.springframework.data.jpa.domain.Specification<StatisticTokenEntity> createSpecification(StatisticTokenRequest request) Description copied from class:BaseRestService创建Specification对象,子类必须实现 用于queryByOrg的通用实现- Specified by:
createSpecificationin classBaseRestService<StatisticTokenEntity,StatisticTokenRequest, StatisticTokenResponse>
-
executePageQuery
protected org.springframework.data.domain.Page<StatisticTokenEntity> executePageQuery(org.springframework.data.jpa.domain.Specification<StatisticTokenEntity> spec, org.springframework.data.domain.Pageable pageable) Description copied from class:BaseRestService执行分页查询,子类必须实现 用于queryByOrg的通用实现- Specified by:
executePageQueryin classBaseRestService<StatisticTokenEntity,StatisticTokenRequest, StatisticTokenResponse>
-
findByUid
@Cacheable(value="statistic_token", key="#uid", unless="#result==null") public Optional<StatisticTokenEntity> findByUid(String uid) - Specified by:
findByUidin classBaseRestService<StatisticTokenEntity,StatisticTokenRequest, StatisticTokenResponse>
-
findByOrgUidAndType
@Cacheable(value="statistic_token", key="#orgUid + \'_\' + #type", unless="#result==null") public Optional<StatisticTokenEntity> findByOrgUidAndType(String orgUid, String type) -
existsByUid
-
create
- Specified by:
createin classBaseRestService<StatisticTokenEntity,StatisticTokenRequest, StatisticTokenResponse>
-
update
- Specified by:
updatein classBaseRestService<StatisticTokenEntity,StatisticTokenRequest, StatisticTokenResponse>
-
doSave
Description copied from class:BaseRestService子类实现具体的保存逻辑- Specified by:
doSavein classBaseRestService<StatisticTokenEntity,StatisticTokenRequest, StatisticTokenResponse>
-
handleOptimisticLockingFailureException
public StatisticTokenEntity handleOptimisticLockingFailureException(org.springframework.orm.ObjectOptimisticLockingFailureException e, StatisticTokenEntity entity) -
deleteByUid
- Specified by:
deleteByUidin classBaseRestService<StatisticTokenEntity,StatisticTokenRequest, StatisticTokenResponse>
-
delete
- Specified by:
deletein classBaseRestService<StatisticTokenEntity,StatisticTokenRequest, StatisticTokenResponse>
-
convertToResponse
- Specified by:
convertToResponsein classBaseRestService<StatisticTokenEntity,StatisticTokenRequest, StatisticTokenResponse>
-
convertToExcel
Description copied from class:BaseRestServiceWithExport转换为Excel对象 子类必须实现此方法 -
recordAiTokenUsage
@Transactional public void recordAiTokenUsage(String orgUid, String aiProvider, String aiModelType, long promptTokens, long completionTokens, boolean success, long responseTime, BigDecimal tokenUnitPrice) Record AI token usage statistics- Parameters:
orgUid- Organization UIDaiProvider- AI provider (openai, baidu, zhipuai, etc.)aiModelType- AI model type (gpt-4, gpt-3.5, claude, gemini, etc.)promptTokens- Number of prompt tokens consumedcompletionTokens- Number of completion tokens consumedsuccess- Whether the request was successfulresponseTime- Response time in millisecondstokenUnitPrice- Cost per token in USD
-
getAiTokenStatisticsByDateRange
public List<StatisticTokenEntity> getAiTokenStatisticsByDateRange(String orgUid, String startDate, String endDate) Get AI token statistics by organization and date range- Parameters:
orgUid- Organization UIDstartDate- Start date (YYYY-MM-DD)endDate- End date (YYYY-MM-DD)- Returns:
- List of AI token statistics
-
getTotalTokensByDateRange
Get total token consumption by organization and date range- Parameters:
orgUid- Organization UIDstartDate- Start date (YYYY-MM-DD)endDate- End date (YYYY-MM-DD)- Returns:
- Total tokens consumed
-
getTotalCostByDateRange
Get total cost by organization and date range- Parameters:
orgUid- Organization UIDstartDate- Start date (YYYY-MM-DD)endDate- End date (YYYY-MM-DD)- Returns:
- Total cost in USD
-
getAiTokenStatisticsByProvider
Get AI token statistics by organization and AI provider- Parameters:
orgUid- Organization UIDaiProvider- AI provider- Returns:
- List of AI token statistics
-
getAiTokenStatisticsByModelType
public List<StatisticTokenEntity> getAiTokenStatisticsByModelType(String orgUid, String aiModelType) Get AI token statistics by organization and AI model type- Parameters:
orgUid- Organization UIDaiModelType- AI model type- Returns:
- List of AI token statistics
-
getHourlyTokenStatistics
Get hourly AI token statistics for a specific organization and date Returns token usage data organized by hour (0-23) for the entire day- Parameters:
orgUid- Organization UIDdate- Date in YYYY-MM-DD format- Returns:
- StatisticTokenHourlyResponse with hourly data
-
getHourlyTokenStatisticsByProvider
public StatisticTokenHourlyResponse getHourlyTokenStatisticsByProvider(String orgUid, String date, String aiProvider) Get hourly AI token statistics for a specific organization, date and AI provider- Parameters:
orgUid- Organization UIDdate- Date in YYYY-MM-DD formataiProvider- AI provider (openai, baidu, zhipuai, etc.)- Returns:
- StatisticTokenHourlyResponse with hourly data for the specific provider
-
getHourlyTokenStatisticsByModelType
public StatisticTokenHourlyResponse getHourlyTokenStatisticsByModelType(String orgUid, String date, String aiModelType) Get hourly AI token statistics for a specific organization, date and AI model type- Parameters:
orgUid- Organization UIDdate- Date in YYYY-MM-DD formataiModelType- AI model type (gpt-4, gpt-3.5, claude, gemini, etc.)- Returns:
- StatisticTokenHourlyResponse with hourly data for the specific model type
-