Просмотр исходного кода

新增重新质控单份病历按钮

zhaohan 7 месяцев назад
Родитель
Сommit
4265033fc8

+ 6 - 7
ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/VectorStoreServiceImpl.java

@@ -61,7 +61,7 @@ public class VectorStoreServiceImpl implements VectorStoreService {
     @Value("${file.base-url}")
     private String baseUrl;
 
-    @Value("${file.xinference-url}")
+    @Value("${enflame.url}")
     private String xinferenceUrl;
 
 
@@ -832,10 +832,10 @@ public class VectorStoreServiceImpl implements VectorStoreService {
 
 
             // 4️⃣ 生成向量
-            List<Double> vector;
+            List<Double> exampleVector;
             try {
-                vector = xinferenceClient.getEmbedding(modelName, ruleContent);
-                List<Double> exampleVector = xinferenceClient.getEmbedding(modelName, exampleContent);
+//                vector = xinferenceClient.getEmbedding(modelName, ruleContent);
+                exampleVector = xinferenceClient.getEmbedding(modelName, exampleContent);
                 properties.put("exampleVector", exampleVector);
             } catch (IOException e) {
                 log.error("❌ 第 {} 条生成向量失败: {}", i, e.getMessage());
@@ -846,7 +846,7 @@ public class VectorStoreServiceImpl implements VectorStoreService {
                 Result<WeaviateObject> result = client.data().creator()
                         .withClassName(classname)
                         .withProperties(properties)
-                        .withVector(toFloatArray(vector))
+                        .withVector(toFloatArray(exampleVector))
                         .run();
 
                 if (result.hasErrors()) {
@@ -1020,8 +1020,7 @@ public class VectorStoreServiceImpl implements VectorStoreService {
                         "      ruleContent%n" +
                         "      type%n" +
                         "      exampleContent%n" +
-                        "      exampleVector%n" +
-                        "      _additional { id distance certainty vector }%n" +  // ✅ 加上vector
+                        "      _additional { id distance certainty }%n" +
                         "    }%n" +
                         "  }%n" +
                         "}",

+ 16 - 0
ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/chat/MedicalRecordQcController.java

@@ -81,6 +81,22 @@ public class MedicalRecordQcController {
         }
     }
 
+    /**
+     * 重新质控:清空历史结果并重新执行质控
+     * @param recordId 病历ID
+     */
+    @PostMapping("/reQc/{recordId}")
+    public String reQualityControl(@PathVariable String recordId) {
+        try {
+            log.info("🔄 收到重新质控请求,recordId={}", recordId);
+            qc123Service.reQualityControl(recordId);
+            return "✅ 重新质控完成,recordId=" + recordId;
+        } catch (Exception e) {
+            log.error("❌ 重新质控失败 recordId={}", recordId, e);
+            return "❌ 重新质控失败: " + e.getMessage();
+        }
+    }
+
 
 
 

+ 36 - 0
ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/MedicalRecordQc123Service.java

@@ -1479,6 +1479,42 @@ public class MedicalRecordQc123Service {
         log.info("🔄 病历 {} 状态更新为正在质控", recordId);
     }
 
+    /**
+     * 重新质控:清空历史结果并重新执行质控流程
+     * 
+     * @param recordId 病历ID
+     */
+    public void reQualityControl(String recordId) {
+        log.info("🔄 开始重新质控病历 {}", recordId);
+        
+        try {
+            // 1. 删除该病历的所有质控结果
+            LambdaQueryWrapper<MedicalRecordResult> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(MedicalRecordResult::getPatientRecordId, recordId);
+            int deletedCount = resultMapper.delete(queryWrapper);
+            log.info("✅ 已删除病历 {} 的 {} 条质控结果", recordId, deletedCount);
+            
+            // 2. 直接将病历状态改为正在质控(status=3),避免前端看到未质控状态
+            patientRecordMapper.updateStatusById(recordId, 3);
+            log.info("✅ 病历 {} 状态已设置为正在质控", recordId);
+            
+            // 3. 执行完整的质控流程(performFullRecordQc内部会再次设置为3,但不影响)
+            performFullRecordQc(recordId);
+            
+            log.info("🎉 病历 {} 重新质控完成", recordId);
+            
+        } catch (Exception e) {
+            log.error("❌ 病历 {} 重新质控失败", recordId, e);
+            // 异常时回退状态为未质控
+            try {
+                patientRecordMapper.updateStatusById(recordId, 1);
+            } catch (Exception ex) {
+                log.error("回退病历 {} 状态失败", recordId, ex);
+            }
+            throw new RuntimeException("重新质控失败: " + e.getMessage(), e);
+        }
+    }
+
     private String getLlmModelUrl() {
         return baseUrl + "/v1/chat/completions";
     }