You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drools校验诊断编码列表是否包含指定集合元素的问题排查

问题原因

你的规则无法触发主要有三个核心错误:

  • memberOf运算符用法错误:该运算符是用来判断单个元素是否属于右侧集合,你将完整的List对象放在左侧进行判断,语法不生效。
  • 右侧匹配对象类型错误:你写的"F77 EOO F99"是普通字符串,不是Drools可识别的集合类型,无法做包含判断。
  • 匹配值不对应:你实际输出的诊断编码列表是[Z590, E0800],但规则里写的匹配值是F77、EOO、F99,二者没有交集,就算语法正确也不会触发规则。
解决方法

调整Drools规则写法,先遍历诊断编码列表,再判断是否存在任意元素属于你指定的目标编码集合,正确规则示例如下:

rule "Problems related to social environment"
when
    // 拿到业务对象,且编码列表不为空
    $eligibilityDomainObject:EligibilityDomainObject($listOfString : listOfString != null)
    // 遍历列表,只要有一个元素属于目标集合就匹配成功
    exists(String(this memberOf {"F77", "E00", "F99", "Z590", "E0800"}) from $listOfString)
then
    $eligibilityDomainObject.setIsComplexPhysicalHealth(true);
end

如果你的目标编码集合不需要频繁修改,直接用上述{}语法在规则内定义集合即可。

额外优化建议
  • 给isComplexPhysicalHealth属性设置默认值false,避免规则未触发时返回null:
    private Boolean isComplexPhysicalHealth = false;
    
  • 如果目标编码集合需要动态调整,可以把它作为单独的事实对象插入KieSession,再在规则中引用即可。

内容的提问来源于stack exchange,提问作者cluis92

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 23:27:03