feat: AI 调用日志 Service 分页查询和 Controller POST 接口
This commit is contained in:
@@ -1,8 +1,11 @@
|
|||||||
package com.emotion.controller;
|
package com.emotion.controller;
|
||||||
|
|
||||||
import com.alibaba.fastjson2.JSONObject;
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
|
import com.emotion.common.PageResult;
|
||||||
import com.emotion.common.Result;
|
import com.emotion.common.Result;
|
||||||
|
import com.emotion.dto.request.ai.AiCallLogQueryRequest;
|
||||||
import com.emotion.dto.request.ai.AiRuntimeRequest;
|
import com.emotion.dto.request.ai.AiRuntimeRequest;
|
||||||
|
import javax.validation.Valid;
|
||||||
import com.emotion.dto.response.ai.AiTestTemplateResponse;
|
import com.emotion.dto.response.ai.AiTestTemplateResponse;
|
||||||
import com.emotion.dto.response.ai.AiRuntimeTestResponse;
|
import com.emotion.dto.response.ai.AiRuntimeTestResponse;
|
||||||
import com.emotion.dto.response.ai.AiStreamEvent;
|
import com.emotion.dto.response.ai.AiStreamEvent;
|
||||||
@@ -160,6 +163,12 @@ public class AiRoutingController {
|
|||||||
return Result.success(callLogService.latest(limit));
|
return Result.success(callLogService.latest(limit));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "分页查询调用日志", description = "分页查询 AI 调用日志,支持多条件筛选和关键词搜索。")
|
||||||
|
@PostMapping("/call-logs")
|
||||||
|
public Result<PageResult<AiCallLog>> queryCallLogs(@RequestBody @Valid AiCallLogQueryRequest request) {
|
||||||
|
return Result.success(callLogService.query(request));
|
||||||
|
}
|
||||||
|
|
||||||
@Operation(summary = "运行时测试", description = "对指定的 AI 配置进行运行时连通性测试,支持同步和流式模式。")
|
@Operation(summary = "运行时测试", description = "对指定的 AI 配置进行运行时连通性测试,支持同步和流式模式。")
|
||||||
@PostMapping("/runtime/test")
|
@PostMapping("/runtime/test")
|
||||||
public Result<AiRuntimeTestResponse> runtimeTest(@RequestBody JSONObject payload) {
|
public Result<AiRuntimeTestResponse> runtimeTest(@RequestBody JSONObject payload) {
|
||||||
|
|||||||
@@ -3,9 +3,14 @@ package com.emotion.service;
|
|||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.emotion.entity.AiCallLog;
|
import com.emotion.entity.AiCallLog;
|
||||||
|
|
||||||
|
import com.emotion.common.PageResult;
|
||||||
|
import com.emotion.dto.request.ai.AiCallLogQueryRequest;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public interface AiCallLogService extends IService<AiCallLog> {
|
public interface AiCallLogService extends IService<AiCallLog> {
|
||||||
|
|
||||||
List<AiCallLog> latest(Integer limit);
|
List<AiCallLog> latest(Integer limit);
|
||||||
|
|
||||||
|
PageResult<AiCallLog> query(AiCallLogQueryRequest request);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,15 @@
|
|||||||
package com.emotion.service.impl;
|
package com.emotion.service.impl;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import com.emotion.common.PageResult;
|
||||||
|
import com.emotion.dto.request.ai.AiCallLogQueryRequest;
|
||||||
import com.emotion.entity.AiCallLog;
|
import com.emotion.entity.AiCallLog;
|
||||||
import com.emotion.mapper.AiCallLogMapper;
|
import com.emotion.mapper.AiCallLogMapper;
|
||||||
import com.emotion.service.AiCallLogService;
|
import com.emotion.service.AiCallLogService;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -20,4 +25,28 @@ public class AiCallLogServiceImpl extends ServiceImpl<AiCallLogMapper, AiCallLog
|
|||||||
.orderByDesc(AiCallLog::getCreateTime)
|
.orderByDesc(AiCallLog::getCreateTime)
|
||||||
.last("limit " + size));
|
.last("limit " + size));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageResult<AiCallLog> query(AiCallLogQueryRequest request) {
|
||||||
|
Page<AiCallLog> pageParam = new Page<>(request.getPageNum(), request.getPageSize());
|
||||||
|
LambdaQueryWrapper<AiCallLog> wrapper = new LambdaQueryWrapper<>();
|
||||||
|
|
||||||
|
wrapper.eq(AiCallLog::getIsDeleted, 0)
|
||||||
|
.eq(StringUtils.isNotBlank(request.getStatus()), AiCallLog::getStatus, request.getStatus())
|
||||||
|
.eq(StringUtils.isNotBlank(request.getSceneCode()), AiCallLog::getSceneCode, request.getSceneCode())
|
||||||
|
.eq(StringUtils.isNotBlank(request.getProviderCode()), AiCallLog::getProviderCode, request.getProviderCode())
|
||||||
|
.eq(StringUtils.isNotBlank(request.getEndpointCode()), AiCallLog::getEndpointCode, request.getEndpointCode())
|
||||||
|
.ge(request.getStartTime() != null, AiCallLog::getCreateTime, request.getStartTime())
|
||||||
|
.le(request.getEndTime() != null, AiCallLog::getCreateTime, request.getEndTime())
|
||||||
|
.orderByDesc(AiCallLog::getCreateTime);
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(request.getKeyword())) {
|
||||||
|
wrapper.and(w -> w.like(AiCallLog::getInputText, request.getKeyword())
|
||||||
|
.or()
|
||||||
|
.like(AiCallLog::getOutputText, request.getKeyword()));
|
||||||
|
}
|
||||||
|
|
||||||
|
IPage<AiCallLog> page = page(pageParam, wrapper);
|
||||||
|
return PageResult.of(page);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user