Browse Source

提交保存功能

feng 9 tháng trước cách đây
mục cha
commit
02ed8ddca4

+ 3 - 3
ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/chat/VitalSignsController.java

@@ -10,7 +10,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.HashMap;
+
 import java.util.Map;
 
 @RestController
@@ -23,7 +23,7 @@ public class VitalSignsController {
 
     @PostMapping("/vitalSigns")
     public R<String> receiveVitalSigns(@RequestBody Map<String, Object> request) {
-        vitalSignsService.handleVitalSigns(request);
-        return R.ok("病人住院号参数为空");
+        String message = vitalSignsService.handleVitalSigns(request);
+        return R.ok(message);
     }
 }

+ 62 - 13
ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/VitalSignsServiceImpl.java

@@ -2,8 +2,11 @@ package org.ruoyi.chat.service.chat.impl;
 
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.ruoyi.chat.service.chat.ISseService;
 import org.ruoyi.chat.service.chat.MedicalRecSevice;
 import org.ruoyi.chat.service.chat.VitalSignsService;
+import org.ruoyi.common.chat.entity.chat.SchemaMessage;
+import org.ruoyi.common.chat.request.SchemaRequest;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.*;
 import org.springframework.stereotype.Service;
@@ -20,12 +23,25 @@ public class VitalSignsServiceImpl implements VitalSignsService {
 
     @Autowired
     private MedicalRecSevice medicalRecSevice;
+    @Autowired
+    private ISseService sseService;
+    @Autowired
+    private ThinkVitalSignsServiceImpl thinkVitalSignsService;
     @Override
     public String handleVitalSigns(Map<String, Object> vitalSignsData) {
+        StringBuilder stringBuilder = new StringBuilder();
         // 查询所有病历记录
         Map<String, Object> queryMap = new HashMap<>();
         queryMap.put("patVisitInfoId", vitalSignsData.get("number"));
         List<Map<String, Object>> medicalRecList = medicalRecSevice.findMedicalRec(queryMap);
+        int i = thinkVitalSignsService.addVitalSigns(vitalSignsData);
+        if(i>= 0){
+            stringBuilder.append("异常体征数据存储成功-》");
+        }else {
+            stringBuilder.append("异常体征数据存储失败。");
+            return stringBuilder.toString();
+        }
+
 
         // 初始化模型输入参数
         Map<String, Object> modelInput = new HashMap<>();
@@ -59,7 +75,14 @@ public class VitalSignsServiceImpl implements VitalSignsService {
                     break;
             }
         }
-
+        SchemaRequest schemaRequest = new SchemaRequest();
+        schemaRequest.setMaxDistance(0.7f);
+        schemaRequest.setModel("lag-m3");
+        schemaRequest.setMessages(ruYuanContent);
+        schemaRequest.setKid("1948572151787782146");
+        SchemaMessage schema = sseService.getSchema(schemaRequest, null);
+        List<String> nearest = schema.getNearest();
+        modelInput.put("nearest",nearest);
         // 整理为模型要求格式
         List<Map<String, Object>> medicalRecords = new ArrayList<>();
         if (!ruYuanContent.isEmpty()) {
@@ -76,45 +99,71 @@ public class VitalSignsServiceImpl implements VitalSignsService {
 
         // 调用模型
         Map<String, Object> modelResponse = callDeepSeekModel(modelInput);
+        stringBuilder.append("健康报告生成成功-》");
         System.out.println(modelResponse);
-        return null;
+
+        stringBuilder.append("健康报告推送成功。");
+        return stringBuilder.toString();
     }
 
     public Map<String, Object> callDeepSeekModel(Map<String, Object> modelInput) {
         String url = "http://60.164.133.40:19997/v1/chat/completions";
-
         RestTemplate restTemplate = new RestTemplate();
 
-        // 构造 messages 内容,将体征和病历转成文本拼接
-        String prompt = "请根据以下患者生命体征信息和病历,仅生成【健康评估】与【健康指导】两部分内容的健康管理报告,禁止输出其他段落或模板内容:\n\n"
-                + "体征数据:" + modelInput.get("patientInfo").toString() + "\n"
-                + "病历数据:" + modelInput.get("medicalRecord").toString() + "\n\n"
-                + "请按照如下格式输出:\n"
-                + "一、健康评估:...\n"
-                + "二、健康指导:...\n";
+        // 获取各部分数据
+        String patientInfo = String.valueOf(modelInput.get("patientInfo"));
+        String medicalRecord = String.valueOf(modelInput.get("medicalRecord"));
+        Object nearestObj = modelInput.get("nearest");
+
+        // 构建提示词
+        StringBuilder promptBuilder = new StringBuilder();
+        promptBuilder.append("请根据以下患者生命体征信息和病历,仅生成【健康评估】与【健康指导】两部分内容的健康管理报告,禁止输出其他段落或模板内容:\n\n");
+        promptBuilder.append("体征数据:").append(patientInfo).append("\n");
+        promptBuilder.append("病历数据:").append(medicalRecord).append("\n");
+
+        // 可选添加 RAG 知识库内容
+        if (nearestObj instanceof List && !((List<?>) nearestObj).isEmpty()) {
+            @SuppressWarnings("unchecked")
+            List<String> nearestList = (List<String>) nearestObj;
+            promptBuilder.append("相关知识片段:\n");
+            for (int i = 0; i < nearestList.size(); i++) {
+                promptBuilder.append(i + 1).append("、").append(nearestList.get(i)).append("\n");
+            }
+        }
+
+        // 输出格式要求
+        promptBuilder.append("\n请按照如下格式输出:\n");
+        promptBuilder.append("一、健康评估:...\n");
+        promptBuilder.append("二、健康指导:...");
 
+        String prompt = promptBuilder.toString();
+
+        // 构造请求体
         Map<String, Object> requestBody = new HashMap<>();
-        requestBody.put("model", "qwen3-32B"); // 替换为你实际模型名
+        requestBody.put("model", "qwen3-32B");
         requestBody.put("temperature", 0.5);
         requestBody.put("max_tokens", 10240);
+        requestBody.put("stream", false);
+
         Map<String, Object> chatTemplateKwargs = new HashMap<>();
         chatTemplateKwargs.put("enable_thinking", false);
         requestBody.put("chat_template_kwargs", chatTemplateKwargs);
-        requestBody.put("stream", false);
 
+        // 构造 messages 数组
         List<Map<String, String>> messages = new ArrayList<>();
         Map<String, String> userMessage = new HashMap<>();
         userMessage.put("role", "user");
         userMessage.put("content", prompt);
         messages.add(userMessage);
-
         requestBody.put("messages", messages);
 
+        // 构造请求头
         HttpHeaders headers = new HttpHeaders();
         headers.setContentType(MediaType.APPLICATION_JSON);
 
         HttpEntity<Map<String, Object>> entity = new HttpEntity<>(requestBody, headers);
 
+        // 执行请求
         ResponseEntity<Map> response = restTemplate.postForEntity(url, entity, Map.class);
 
         if (response.getStatusCode() == HttpStatus.OK) {