diff --git a/src/main/java/com/peanut/common/utils/RagFlowApiUtil.java b/src/main/java/com/peanut/common/utils/RagFlowApiUtil.java index 7e7b7eeb..fc2ed516 100644 --- a/src/main/java/com/peanut/common/utils/RagFlowApiUtil.java +++ b/src/main/java/com/peanut/common/utils/RagFlowApiUtil.java @@ -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 geneInfo) { try { + String allQuestion = question; + if (geneInfo!=null){ + String geneStr = ""; + String geneInfoStr = ""; + String prescriptionStr = ""; + List geneList = (List) 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> prescriptionList = (List>) geneInfo.get("prescriptionList"); + if (prescriptionList.size()>0){ + for (Map prescription:prescriptionList) { + prescriptionStr+="基因匹配方剂:"+prescription.get("name")+",方剂组成:"+prescription.get("compose")+"出处:"+prescription.get("source"); + } + allQuestion+=prescriptionStr; + } + } String userId = ShiroUtils.getUId()+""; Map entity = new HashMap<>(); entity.put("question", question); diff --git a/src/main/java/com/peanut/modules/common/controller/RagFlowApiController.java b/src/main/java/com/peanut/modules/common/controller/RagFlowApiController.java index aa41790f..a1faf726 100644 --- a/src/main/java/com/peanut/modules/common/controller/RagFlowApiController.java +++ b/src/main/java/com/peanut/modules/common/controller/RagFlowApiController.java @@ -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> list = ragFlowApiUtil.getChatAssistants(""); - List> res = list; - for (int i=0; i> 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 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 params) throws Exception{ - return R.ok().put("id",ragFlowApiUtil.createChat(params)); + List quankeContentList = aiChatContentService.list(new LambdaQueryWrapper() + .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 geneInfo = null; + if (StringUtils.isNotEmpty(geneIds)){ + geneInfo = geneService.getGeneInfo(geneIds); + } + ragFlowApiUtil.chatToAssistantStream(chatId,chatName,sessionId,sessionName,question,patientName,geneInfo); return R.ok(); }