聊天时加入基因情况

This commit is contained in:
wuchunlei
2025-06-06 09:23:05 +08:00
parent 62c9185849
commit 973ffa0a64
2 changed files with 71 additions and 6 deletions

View File

@@ -3,7 +3,9 @@ package com.peanut.common.utils;
import com.alibaba.fastjson.JSONObject;
import com.peanut.config.WebSocket;
import com.peanut.modules.common.entity.AiChatContent;
import com.peanut.modules.common.entity.PrecisionMedicineGene;
import com.peanut.modules.common.service.AiChatContentService;
import org.apache.commons.lang.StringUtils;
import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
@@ -138,8 +140,31 @@ public class RagFlowApiUtil {
}
//与助手聊天流式
public void chatToAssistantStream(String chatId,String chatName,String sessionId,String sessionName,String question,String patientName) {
public void chatToAssistantStream(String chatId,String chatName,String sessionId,String sessionName,String question,String patientName,Map<String,Object> geneInfo) {
try {
String allQuestion = question;
if (geneInfo!=null){
String geneStr = "";
String geneInfoStr = "";
String prescriptionStr = "";
List<PrecisionMedicineGene> geneList = (List<PrecisionMedicineGene>) geneInfo.get("geneList");
for (PrecisionMedicineGene gene:geneList){
// geneStr += gene.getName()+"("+gene.getNamecn()+")基因阳性。";
if (StringUtils.isEmpty(geneInfoStr)){
geneInfoStr = "已知"+gene.getDescription()+"匹配药材:"+gene.getTcmName()+"";
}else {
geneInfoStr += gene.getDescription()+"匹配药材:"+gene.getTcmName()+"";
}
}
allQuestion+=geneStr+geneInfoStr;
List<Map<String,Object>> prescriptionList = (List<Map<String, Object>>) geneInfo.get("prescriptionList");
if (prescriptionList.size()>0){
for (Map<String, Object> prescription:prescriptionList) {
prescriptionStr+="基因匹配方剂:"+prescription.get("name")+",方剂组成:"+prescription.get("compose")+"出处:"+prescription.get("source");
}
allQuestion+=prescriptionStr;
}
}
String userId = ShiroUtils.getUId()+"";
Map<String, Object> entity = new HashMap<>();
entity.put("question", question);

View File

@@ -6,6 +6,8 @@ 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 com.peanut.modules.common.service.AiVipLogService;
import com.peanut.modules.common.service.PrecisionMedicineGeneService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -13,6 +15,9 @@ 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.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -25,13 +30,20 @@ public class RagFlowApiController {
private RagFlowApiUtil ragFlowApiUtil;
@Autowired
private AiChatContentService aiChatContentService;
@Autowired
private AiVipLogService aiVipLogService;
@Autowired
private PrecisionMedicineGeneService geneService;
//聊天助手列表
@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++) {
List<Map<String,Object>> res = new ArrayList<>();
res.add(new HashMap<>());res.add(new HashMap<>());
res.add(new HashMap<>());res.add(new HashMap<>());
res.add(new HashMap<>());res.add(new HashMap<>());
for (int i=0; i<6; i++) {
Map<String,Object> map = list.get(i);
if (map.get("name").toString().contains("消化")){
res.set(0,map);
@@ -72,15 +84,43 @@ public class RagFlowApiController {
//创建会话
@RequestMapping("/createChat")
@Transactional
public R createChat(@RequestBody Map<String,Object> params) throws Exception{
return R.ok().put("id",ragFlowApiUtil.createChat(params));
List<AiChatContent> quankeContentList = aiChatContentService.list(new LambdaQueryWrapper<AiChatContent>()
.eq(AiChatContent::getUserId,ShiroUtils.getUId())
.like(AiChatContent::getChatAssistantName,"全科")
.orderByAsc(AiChatContent::getCreateTime)
.groupBy(AiChatContent::getChatId));
if (!aiVipLogService.isAiVip()){
if (quankeContentList.size()>=3){
return R.error("试用机会已用完开通VIP拥有更多次数");
}else {
if (!params.get("assistantName").toString().contains("全科")){
return R.error("免费次数只能使用全科医生");
}
}
}else {
if (params.get("assistantName").toString().contains("全科")&&quankeContentList.size()<3){
}else {
boolean res = aiVipLogService.userCount();
if (!res){
return R.error("VIP次数已用完");
}
}
}
String chatId = ragFlowApiUtil.createChat(params);
return R.ok().put("id",chatId);
}
//与助手聊天流式
@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);
public R chatToAssistantStream(String chatId,String chatName,String sessionId,String sessionName,String question,String patientName,String geneIds){
Map<String,Object> geneInfo = null;
if (StringUtils.isNotEmpty(geneIds)){
geneInfo = geneService.getGeneInfo(geneIds);
}
ragFlowApiUtil.chatToAssistantStream(chatId,chatName,sessionId,sessionName,question,patientName,geneInfo);
return R.ok();
}