Prechádzať zdrojové kódy

质控规则页面搜索栏变更

zhaohan 5 mesiacov pred
rodič
commit
ecb264a032

+ 25 - 0
ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/controller/QualityControlRuleController.java

@@ -127,6 +127,31 @@ public class QualityControlRuleController {
         return R.ok(qualityControlRuleService.deleteWithValidByIds(List.of(ids), true));
     }
 
+    /**
+     * 更新规则状态
+     */
+    @SaIgnore
+    @PostMapping("/updateStatus")
+    public R<Boolean> updateStatus(@RequestBody Map<String, Object> params) {
+        Long id = ((Number) params.get("id")).longValue();
+        Boolean isEnabled = (Boolean) params.get("isEnabled");
+
+        if (id == null) {
+            return R.fail("规则ID不能为空");
+        }
+
+        QualityControlRuleVo rule = qualityControlRuleService.queryById(id);
+        if (rule == null) {
+            return R.fail("规则不存在");
+        }
+
+        QualityControlRuleBo bo = new QualityControlRuleBo();
+        bo.setId(id);
+        bo.setIsEnabled(isEnabled != null ? isEnabled : false);
+
+        return R.ok(qualityControlRuleService.updateByBo(bo));
+    }
+
     /**
      * 一键导入知识库
      * @return

+ 16 - 1
ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/controller/RuleFinalController.java

@@ -183,7 +183,7 @@ public class RuleFinalController {
             }
 
 
-            
+
             List<Map<String, Object>> examples = ruleFinalService.fetchMatchingFinallRules(ruleCode, medicalContent, kid);
             return R.ok(examples);
         } catch (Exception e) {
@@ -191,6 +191,21 @@ public class RuleFinalController {
             return R.fail("获取正反例失败: " + e.getMessage());
         }
     }
+
+    /**
+     * 获取规则分类统计
+     */
+    @SaIgnore
+    @GetMapping("/statistics")
+    public R<List<Map<String, Object>>> getStatistics() {
+        try {
+            List<Map<String, Object>> statistics = ruleFinalService.getStatistics();
+            return R.ok(statistics);
+        } catch (Exception e) {
+            log.error("获取统计数据失败", e);
+            return R.fail("获取统计数据失败: " + e.getMessage());
+        }
+    }
 }
 
 

+ 6 - 0
ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/QualityControlRule.java

@@ -76,6 +76,12 @@ public class QualityControlRule extends TenantEntity {
     @TableField(value = "qc_type_list", typeHandler = JacksonTypeHandler.class)
     private List<Integer> qcTypeList;
 
+    /**
+     * 是否启用:0-禁用,1-启用
+     */
+    @TableField("is_enabled")
+    private Boolean isEnabled;
+
     /**
      * 状态
      */

+ 5 - 0
ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/QualityControlRuleBo.java

@@ -71,5 +71,10 @@ public class QualityControlRuleBo extends BaseEntity {
 
     private List<Integer> qcTypeList;
 
+    /**
+     * 是否启用:0-禁用,1-启用
+     */
+    private Boolean isEnabled;
+
     private int delFlag;
 }

+ 6 - 0
ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/vo/QualityControlRuleVo.java

@@ -76,4 +76,10 @@ public class QualityControlRuleVo implements Serializable {
 
     @ExcelProperty(value = "质控类型")
     private List<Integer> qcTypeList;
+
+    /**
+     * 是否启用:0-禁用,1-启用
+     */
+    @ExcelProperty(value = "是否启用")
+    private Boolean isEnabled;
 }

+ 22 - 0
ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/mapper/RuleFinalMapper.java

@@ -34,5 +34,27 @@ public interface RuleFinalMapper extends BaseMapperPlus<RuleFinal, RuleFinalVo>
             """)
     List<String> selectDistinctCategories();
 
+    /**
+     * 查询规则分类统计
+     *
+     * @return 统计数据
+     */
+    @Select("""
+            SELECT
+                CASE
+                    WHEN category IS NULL OR category = '' THEN ''
+                    ELSE category
+                END as category,
+                COUNT(*) as count
+            FROM think_quality_control_rule_sz
+            GROUP BY
+                CASE
+                    WHEN category IS NULL OR category = '' THEN ''
+                    ELSE category
+                END
+            ORDER BY count DESC
+            """)
+    List<java.util.Map<String, Object>> selectCategoryStatistics();
+
 }
 

+ 7 - 0
ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/IRuleFinalService.java

@@ -91,6 +91,13 @@ public interface IRuleFinalService {
      */
     List<String> listAllCategories();
 
+    /**
+     * 获取规则分类统计
+     *
+     * @return 统计数据列表
+     */
+    List<Map<String, Object>> getStatistics();
+
 
 }
 

+ 2 - 0
ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/QualityControlRuleServiceImpl.java

@@ -80,6 +80,7 @@ public class QualityControlRuleServiceImpl implements IQualityControlRuleService
                 .eq(StringUtils.isNotBlank(bo.getQcBehavior()), QualityControlRule::getQcBehavior, bo.getQcBehavior())
                 .eq(StringUtils.isNotBlank(bo.getQcStage()), QualityControlRule::getQcStage, bo.getQcStage())
                 .eq(StringUtils.isNotBlank(bo.getRuleCode()), QualityControlRule::getRuleCode, bo.getRuleCode())
+                .eq(bo.getIsEnabled() != null, QualityControlRule::getIsEnabled, bo.getIsEnabled())
                 .eq(QualityControlRule::getDelFlag, bo.getDelFlag())
                 .like(StringUtils.isNotBlank(bo.getRuleContent()), QualityControlRule::getRuleContent, bo.getRuleContent());
         String categoryOrderSql = buildCategoryOrderSql(categoryOrder);
@@ -112,6 +113,7 @@ public class QualityControlRuleServiceImpl implements IQualityControlRuleService
         lqw.eq(StringUtils.isNotBlank(bo.getRuleCode()), QualityControlRule::getRuleCode, bo.getRuleCode());
         lqw.eq(StringUtils.isNotBlank(bo.getRuleContent()), QualityControlRule::getRuleContent, bo.getRuleContent());
         lqw.eq(StringUtils.isNotBlank(bo.getQcStage()), QualityControlRule::getQcStage, bo.getQcStage());
+        lqw.eq(bo.getIsEnabled() != null, QualityControlRule::getIsEnabled, bo.getIsEnabled());
         lqw.eq(QualityControlRule::getDelFlag, bo.getDelFlag());
         String categoryOrderSql = buildCategoryOrderSql(categoryOrder);
         if (StringUtils.isNotBlank(categoryOrderSql)) {

+ 34 - 0
ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/RuleFinalServiceImpl.java

@@ -284,5 +284,39 @@ public class RuleFinalServiceImpl implements IRuleFinalService {
     public List<String> listAllCategories() {
         return baseMapper.selectDistinctCategories();
     }
+
+    @Override
+    public List<Map<String, Object>> getStatistics() {
+        List<Map<String, Object>> statistics = new ArrayList<>();
+
+        // 查询所有规则分组统计
+        List<Map<String, Object>> categoryStats = baseMapper.selectCategoryStatistics();
+
+        // 计算总数
+        long total = categoryStats.stream()
+            .mapToLong(stat -> ((Number) stat.get("count")).longValue())
+            .sum();
+
+        // 转换数据格式并计算占比
+        for (Map<String, Object> stat : categoryStats) {
+            Map<String, Object> result = new HashMap<>();
+            String category = (String) stat.get("category");
+            Long count = ((Number) stat.get("count")).longValue();
+
+            result.put("category", category != null && !category.trim().isEmpty() ? category : "未分类");
+            result.put("count", count);
+
+            // 计算占比(保留一位小数)
+            double percentage = total > 0 ? (count * 100.0) / total : 0.0;
+            result.put("percentage", Math.round(percentage * 10) / 10.0);
+
+            statistics.add(result);
+        }
+
+        // 按数量降序排序
+        statistics.sort((a, b) -> Long.compare((Long) b.get("count"), (Long) a.get("count")));
+
+        return statistics;
+    }
 }
 

+ 5 - 2
ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/MedicalRecordQc123Service.java

@@ -248,8 +248,11 @@ public class MedicalRecordQc123Service {
             qualityControlRuleBo.setDelFlag(0);
             List<QualityControlRuleVo> allRules = qualityControlRuleService.queryList(qualityControlRuleBo);
 
-            // 过滤掉 qc_type_list 为空或 [] 的规则
-            allRules = allRules.stream().filter(rule -> !CollectionUtils.isEmpty(rule.getQcTypeList())).toList();
+            // 过滤掉禁用的规则和 qc_type_list 为空或 [] 的规则
+            allRules = allRules.stream()
+                .filter(rule -> rule.getIsEnabled() != null && rule.getIsEnabled() != false) // 只保留启用的规则
+                .filter(rule -> !CollectionUtils.isEmpty(rule.getQcTypeList())) // 过滤空类型列表的规则
+                .toList();
 
             log.info("📋 病历 {} 开始质控,共加载 {} 条有效规则", recordId, allRules.size());