Files
nuttyreading-java/src/main/java/com/peanut/modules/common/controller/RagFlowApiController.java
2025-05-22 17:53:19 +08:00

91 lines
3.7 KiB
Java

package com.peanut.modules.common.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.peanut.common.utils.R;
import com.peanut.common.utils.RagFlowApiUtil;
import com.peanut.common.utils.ShiroUtils;
import com.peanut.modules.common.entity.AiChatContent;
import com.peanut.modules.common.service.AiChatContentService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
@Slf4j
@RestController("commonRagFlowApi")
@RequestMapping("common/ragFlowApi")
public class RagFlowApiController {
@Autowired
private RagFlowApiUtil ragFlowApiUtil;
@Autowired
private AiChatContentService aiChatContentService;
//聊天助手列表
@RequestMapping("/getChatAssistants")
public R getChatAssistants() throws Exception{
List<Map<String,Object>> list = ragFlowApiUtil.getChatAssistants("");
List<Map<String,Object>> res = list;
for (int i=0; i<list.size(); i++) {
Map<String,Object> map = list.get(i);
if (map.get("name").toString().contains("消化")){
res.set(0,map);
}else if (map.get("name").toString().contains("呼吸")){
res.set(1,map);
}else if (map.get("name").toString().contains("风湿免疫")){
res.set(2,map);
}else if (map.get("name").toString().contains("肿瘤")){
res.set(3,map);
}else if (map.get("name").toString().contains("妇科")){
res.set(4,map);
}else if (map.get("name").toString().contains("全科")){
res.set(5,map);
}
}
return R.ok().put("list",res);
}
//聊天助手下对话列表
@RequestMapping("/getChats")
public R getChats(@RequestBody Map<String,Object> params) throws Exception{
LambdaQueryWrapper<AiChatContent> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(AiChatContent::getUserId, ShiroUtils.getUId());
if (StringUtils.isNotEmpty(params.get("chatId").toString())||
StringUtils.isNotEmpty(params.get("sessionId").toString())){
wrapper.eq(StringUtils.isNotEmpty(params.get("chatId").toString()),
AiChatContent::getChatAssistantId,params.get("chatId"));
wrapper.eq(StringUtils.isNotEmpty(params.get("sessionId").toString()),
AiChatContent::getChatId,params.get("sessionId"));
wrapper.orderByAsc(AiChatContent::getCreateTime);
}else {
wrapper.groupBy(AiChatContent::getChatId);
wrapper.orderByDesc(AiChatContent::getCreateTime);
}
List<AiChatContent> contents = aiChatContentService.list(wrapper);
return R.ok().put("list",contents);
}
//创建会话
@RequestMapping("/createChat")
public R createChat(@RequestBody Map<String,Object> params) throws Exception{
return R.ok().put("id",ragFlowApiUtil.createChat(params));
}
//与助手聊天流式
@RequestMapping(value = "/chatToAssistantStream")
@Transactional
public R chatToAssistantStream(String chatId,String chatName,String sessionId,String sessionName,String question,String patientName){
ragFlowApiUtil.chatToAssistantStream(chatId,chatName,sessionId,sessionName,question,patientName);
return R.ok();
}
}