mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-30 03:33:56 +08:00
添加新接口:查看指定智能体最近50条用户聊天记录
--AgentChatHistoryService.java 指定智能体最近50条用户聊天记录定义 --AgentChatHistoryServiceImpl.javaAgentChatHistoryService.java 实现指定智能体最近50条用户聊天记录方法 --AgentChatHistoryType.java 添加智能体聊天记录类型枚举 --AgentChatHistoryUserVO.java 展示用户聊天记录vo --AgentController.java 添加新接口
This commit is contained in:
@@ -0,0 +1,21 @@
|
|||||||
|
package xiaozhi.modules.agent.Enums;
|
||||||
|
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 智能体聊天记录类型
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
public enum AgentChatHistoryType {
|
||||||
|
|
||||||
|
USER((byte) 1),
|
||||||
|
AGENT((byte) 2);
|
||||||
|
|
||||||
|
private final byte value;
|
||||||
|
|
||||||
|
AgentChatHistoryType(byte i) {
|
||||||
|
this.value = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -47,6 +47,7 @@ import xiaozhi.modules.agent.service.AgentChatHistoryService;
|
|||||||
import xiaozhi.modules.agent.service.AgentPluginMappingService;
|
import xiaozhi.modules.agent.service.AgentPluginMappingService;
|
||||||
import xiaozhi.modules.agent.service.AgentService;
|
import xiaozhi.modules.agent.service.AgentService;
|
||||||
import xiaozhi.modules.agent.service.AgentTemplateService;
|
import xiaozhi.modules.agent.service.AgentTemplateService;
|
||||||
|
import xiaozhi.modules.agent.vo.AgentChatHistoryUserVO;
|
||||||
import xiaozhi.modules.agent.vo.AgentInfoVO;
|
import xiaozhi.modules.agent.vo.AgentInfoVO;
|
||||||
import xiaozhi.modules.device.entity.DeviceEntity;
|
import xiaozhi.modules.device.entity.DeviceEntity;
|
||||||
import xiaozhi.modules.device.service.DeviceService;
|
import xiaozhi.modules.device.service.DeviceService;
|
||||||
@@ -181,6 +182,23 @@ public class AgentController {
|
|||||||
List<AgentChatHistoryDTO> result = agentChatHistoryService.getChatHistoryBySessionId(id, sessionId);
|
List<AgentChatHistoryDTO> result = agentChatHistoryService.getChatHistoryBySessionId(id, sessionId);
|
||||||
return new Result<List<AgentChatHistoryDTO>>().ok(result);
|
return new Result<List<AgentChatHistoryDTO>>().ok(result);
|
||||||
}
|
}
|
||||||
|
@GetMapping("/{id}/chat-history/user")
|
||||||
|
@Operation(summary = "获取智能体聊天记录(用户)")
|
||||||
|
@RequiresPermissions("sys:role:normal")
|
||||||
|
public Result<List<AgentChatHistoryUserVO>> getRecentlyFiftyByAgentId(
|
||||||
|
@PathVariable("id") String id) {
|
||||||
|
// 获取当前用户
|
||||||
|
UserDetail user = SecurityUser.getUser();
|
||||||
|
|
||||||
|
// 检查权限
|
||||||
|
if (!agentService.checkAgentPermission(id, user.getId())) {
|
||||||
|
return new Result<List<AgentChatHistoryUserVO>>().error("没有权限查看该智能体的聊天记录");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询聊天记录
|
||||||
|
List<AgentChatHistoryUserVO> data = agentChatHistoryService.getRecentlyFiftyByAgentId(id);
|
||||||
|
return new Result<List<AgentChatHistoryUserVO>>().ok(data);
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping("/audio/{audioId}")
|
@PostMapping("/audio/{audioId}")
|
||||||
@Operation(summary = "获取音频下载ID")
|
@Operation(summary = "获取音频下载ID")
|
||||||
|
|||||||
+9
@@ -9,6 +9,7 @@ import xiaozhi.common.page.PageData;
|
|||||||
import xiaozhi.modules.agent.dto.AgentChatHistoryDTO;
|
import xiaozhi.modules.agent.dto.AgentChatHistoryDTO;
|
||||||
import xiaozhi.modules.agent.dto.AgentChatSessionDTO;
|
import xiaozhi.modules.agent.dto.AgentChatSessionDTO;
|
||||||
import xiaozhi.modules.agent.entity.AgentChatHistoryEntity;
|
import xiaozhi.modules.agent.entity.AgentChatHistoryEntity;
|
||||||
|
import xiaozhi.modules.agent.vo.AgentChatHistoryUserVO;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 智能体聊天记录表处理service
|
* 智能体聊天记录表处理service
|
||||||
@@ -44,4 +45,12 @@ public interface AgentChatHistoryService extends IService<AgentChatHistoryEntity
|
|||||||
* @param deleteText 是否删除文本
|
* @param deleteText 是否删除文本
|
||||||
*/
|
*/
|
||||||
void deleteByAgentId(String agentId, Boolean deleteAudio, Boolean deleteText);
|
void deleteByAgentId(String agentId, Boolean deleteAudio, Boolean deleteText);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据智能体ID获取最近50条用户的聊天记录数据
|
||||||
|
*
|
||||||
|
* @param agentId 查询参数,包含agentId、page、limit
|
||||||
|
* @return 聊天记录列表(只有用户)
|
||||||
|
*/
|
||||||
|
List<AgentChatHistoryUserVO> getRecentlyFiftyByAgentId(String agentId);
|
||||||
}
|
}
|
||||||
|
|||||||
+20
@@ -5,6 +5,7 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
@@ -16,11 +17,13 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|||||||
import xiaozhi.common.constant.Constant;
|
import xiaozhi.common.constant.Constant;
|
||||||
import xiaozhi.common.page.PageData;
|
import xiaozhi.common.page.PageData;
|
||||||
import xiaozhi.common.utils.ConvertUtils;
|
import xiaozhi.common.utils.ConvertUtils;
|
||||||
|
import xiaozhi.modules.agent.Enums.AgentChatHistoryType;
|
||||||
import xiaozhi.modules.agent.dao.AiAgentChatHistoryDao;
|
import xiaozhi.modules.agent.dao.AiAgentChatHistoryDao;
|
||||||
import xiaozhi.modules.agent.dto.AgentChatHistoryDTO;
|
import xiaozhi.modules.agent.dto.AgentChatHistoryDTO;
|
||||||
import xiaozhi.modules.agent.dto.AgentChatSessionDTO;
|
import xiaozhi.modules.agent.dto.AgentChatSessionDTO;
|
||||||
import xiaozhi.modules.agent.entity.AgentChatHistoryEntity;
|
import xiaozhi.modules.agent.entity.AgentChatHistoryEntity;
|
||||||
import xiaozhi.modules.agent.service.AgentChatHistoryService;
|
import xiaozhi.modules.agent.service.AgentChatHistoryService;
|
||||||
|
import xiaozhi.modules.agent.vo.AgentChatHistoryUserVO;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 智能体聊天记录表处理service {@link AgentChatHistoryService} impl
|
* 智能体聊天记录表处理service {@link AgentChatHistoryService} impl
|
||||||
@@ -90,4 +93,21 @@ public class AgentChatHistoryServiceImpl extends ServiceImpl<AiAgentChatHistoryD
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<AgentChatHistoryUserVO> getRecentlyFiftyByAgentId(String agentId) {
|
||||||
|
// 构建查询条件(不添加按照创建时间排序,数据本来就是主键越大创建时间越大
|
||||||
|
// 不添加这样可以减少排序全部数据在分页的全盘扫描消耗)
|
||||||
|
LambdaQueryWrapper<AgentChatHistoryEntity> wrapper = new LambdaQueryWrapper<>();
|
||||||
|
wrapper.select(AgentChatHistoryEntity::getContent,AgentChatHistoryEntity::getAudioId)
|
||||||
|
.eq(AgentChatHistoryEntity::getAgentId, agentId)
|
||||||
|
.eq(AgentChatHistoryEntity::getChatType, AgentChatHistoryType.USER.getValue());
|
||||||
|
|
||||||
|
// 构建分页查询,查询前50页数据
|
||||||
|
Page<AgentChatHistoryEntity> pageParam = new Page<>(0, 50);
|
||||||
|
IPage<AgentChatHistoryEntity> result = this.baseMapper.selectPage(pageParam, wrapper);
|
||||||
|
return result.getRecords().stream().map( item ->
|
||||||
|
ConvertUtils.sourceToTarget(item,AgentChatHistoryUserVO.class)
|
||||||
|
).toList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package xiaozhi.modules.agent.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 智能体用户个人聊天数据的VO
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class AgentChatHistoryUserVO {
|
||||||
|
@Schema(description = "聊天内容")
|
||||||
|
private String content;
|
||||||
|
|
||||||
|
@Schema(description = "音频ID")
|
||||||
|
private String audioId;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user