diff --git a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/mapper/config/StrategyMapper.java b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/mapper/config/StrategyMapper.java index f574dcc0dd8e462fd775b2a09f5f5f21c6169b80..875538e69fcbba3cd1ede9530cdeb756c31837aa 100644 --- a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/mapper/config/StrategyMapper.java +++ b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/mapper/config/StrategyMapper.java @@ -26,8 +26,8 @@ public interface StrategyMapper extends BaseMapper { StrategyDO.Condition vo2do(StrategyVO.Condition condition); - StrategyVO.SingleCondition do2vo(StrategyDO.SingleCondition singleCondition); + StrategyVO.ConditionCell do2vo(StrategyDO.ConditionCell conditionCell); - StrategyDO.SingleCondition vo2do(StrategyVO.SingleCondition singleCondition); + StrategyDO.ConditionCell vo2do(StrategyVO.ConditionCell conditionCell); } diff --git a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/mapper/config/StrategyVoDtoMapper.java b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/mapper/config/StrategyVoDtoMapper.java index 90ddfa35aeb506ade6b4325dfb4da368a117d3dc..d83402ff7fb5c208e90f55ed9db2da2349229889 100644 --- a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/mapper/config/StrategyVoDtoMapper.java +++ b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/mapper/config/StrategyVoDtoMapper.java @@ -23,6 +23,6 @@ public interface StrategyVoDtoMapper { StrategyDTO.Condition vo2dto(StrategyVO.Condition condition); - StrategyDTO.SingleCondition vo2dto(StrategyVO.SingleCondition singleCondition); + StrategyDTO.ConditionCell vo2dto(StrategyVO.ConditionCell conditionCell); } diff --git a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/mapper/dto/StrategyDtoMapper.java b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/mapper/dto/StrategyDtoMapper.java index d4ba5e230feb23dfb449a9462a07f896a9405c19..8eed5f96dd227ba4feda1c145003b27fa0371789 100644 --- a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/mapper/dto/StrategyDtoMapper.java +++ b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/mapper/dto/StrategyDtoMapper.java @@ -21,6 +21,6 @@ public interface StrategyDtoMapper extends BaseDtoMapper group; + private List group; - public List getGroup() { + public List getGroup() { return group; } - public void setGroup(List group) { + public void setGroup(List group) { this.group = group; } } @@ -152,30 +152,30 @@ public class StrategyDO extends BaseDO { /** * 单元结构 */ - public static class SingleCondition { + public static class ConditionCell { /** 单元名称 */ - private String name; + private String name; /** 左值:基础数据uuid */ - private String leftValue; + private String leftValue; /** * 操作符 * * @see OperatorEnum#name() */ - private String operator; + private String operator; /** 右值 */ - private String rightValue; + private String rightValue; /** * 是否中断执行 * * @see InterruptEnum#name() */ - private String interrupt; + private String interrupt; /** * 命中到当前条件的返回值类型 @@ -183,22 +183,22 @@ public class StrategyDO extends BaseDO { * 满足 {@link InterruptEnum#TRUE } 时候返回值 * @see ResultTypeEnum#name() */ - private String resultType; + private String resultType; /** * 命中到当前条件的返回值 * * 满足 {@link InterruptEnum#TRUE } 时候返回值 */ - private String returnVal; + private String returnVal; /** * 当前规则的子配置项 * 一个规则自配置可以有多组,每组可能有多个,每组的每个也是一个配置项 * - * Tree 结构的 SingleCondition#children 会存储值 + * Tree 结构的 ConditionCell#children 会存储值 * 非Tree结构则为空数组 */ - List children; + List children; public String getName() { return name; @@ -232,11 +232,11 @@ public class StrategyDO extends BaseDO { this.rightValue = rightValue; } - public List getChildren() { + public List getChildren() { return children; } - public void setChildren(List children) { + public void setChildren(List children) { this.children = children; } diff --git a/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/mapper/StrategyWebMapper.java b/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/mapper/StrategyWebMapper.java index 939dd2f96c64b95ccae9b49b8c0118eb2a78af87..e21b8392b88a69419deb290959929a4fdb01a6b2 100644 --- a/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/mapper/StrategyWebMapper.java +++ b/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/mapper/StrategyWebMapper.java @@ -26,8 +26,8 @@ public interface StrategyWebMapper extends BaseWebMapper { Strategy.Condition vo2web(StrategyVO.Condition condition); - StrategyVO.SingleCondition web2vo(Strategy.SingleCondition singleCondition); + StrategyVO.ConditionCell web2vo(Strategy.ConditionCell conditionCell); - Strategy.SingleCondition vo2web(StrategyVO.SingleCondition singleCondition); + Strategy.ConditionCell vo2web(StrategyVO.ConditionCell conditionCell); } diff --git a/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/model/Strategy.java b/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/model/Strategy.java index 6d5ad67a3a8559f2c3c70604c5a133eadba3ef03..13ce7cd43fd9e4546619041bf6533a07bfcf8216 100644 --- a/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/model/Strategy.java +++ b/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/model/Strategy.java @@ -139,13 +139,13 @@ public class Strategy extends Base { * 组集合 * 每一组内为且的关系 */ - private List group; + private List group; - public List getGroup() { + public List getGroup() { return group; } - public void setGroup(List group) { + public void setGroup(List group) { this.group = group; } } @@ -153,30 +153,30 @@ public class Strategy extends Base { /** * 单元结构 */ - public static class SingleCondition { + public static class ConditionCell { /** 单元名称 */ - private String name; + private String name; /** 左值:基础数据uuid */ - private String leftValue; + private String leftValue; /** * 操作符 * * @see OperatorEnum#name() */ - private String operator; + private String operator; /** 右值 */ - private String rightValue; + private String rightValue; /** * 是否中断执行 * * @see InterruptEnum#name() */ - private String interrupt; + private String interrupt; /** * 命中到当前条件的返回值类型 @@ -184,22 +184,22 @@ public class Strategy extends Base { * 满足 {@link InterruptEnum#TRUE } 时候返回值 * @see ResultTypeEnum#name() */ - private String resultType; + private String resultType; /** * 命中到当前条件的返回值 * * 满足 {@link InterruptEnum#TRUE } 时候返回值 */ - private String returnVal; + private String returnVal; /** * 当前规则的子配置项 * 一个规则自配置可以有多组,每组可能有多个,每组的每个也是一个配置项 * - * Tree 结构的 SingleCondition#children 会存储值 + * Tree 结构的 ConditionCell#children 会存储值 * 非Tree结构则为空数组 */ - List children; + List children; public String getName() { return name; @@ -233,11 +233,11 @@ public class Strategy extends Base { this.rightValue = rightValue; } - public List getChildren() { + public List getChildren() { return children; } - public void setChildren(List children) { + public void setChildren(List children) { this.children = children; } diff --git a/rec-common/src/main/java/cn/icanci/rec/common/aggregation/model/StrategyDTO.java b/rec-common/src/main/java/cn/icanci/rec/common/aggregation/model/StrategyDTO.java index 220edd0c5bcd1d1ec78561caafc3195f3a984b0c..babf8344e44ef96da46367d6bac7dad129bfc27d 100644 --- a/rec-common/src/main/java/cn/icanci/rec/common/aggregation/model/StrategyDTO.java +++ b/rec-common/src/main/java/cn/icanci/rec/common/aggregation/model/StrategyDTO.java @@ -140,13 +140,13 @@ public class StrategyDTO extends BaseDTO { * 组集合 * 每一组内为且的关系 */ - private List group; + private List group; - public List getGroup() { + public List getGroup() { return group; } - public void setGroup(List group) { + public void setGroup(List group) { this.group = group; } } @@ -154,30 +154,30 @@ public class StrategyDTO extends BaseDTO { /** * 单元结构 */ - public static class SingleCondition { + public static class ConditionCell { /** 单元名称 */ - private String name; + private String name; /** 左值:基础数据uuid */ - private String leftValue; + private String leftValue; /** * 操作符 * * @see OperatorEnum#name() */ - private String operator; + private String operator; /** 右值 */ - private String rightValue; + private String rightValue; /** * 是否中断执行 * * @see InterruptEnum#name() */ - private String interrupt; + private String interrupt; /** * 命中到当前条件的返回值类型 @@ -185,22 +185,22 @@ public class StrategyDTO extends BaseDTO { * 满足 {@link InterruptEnum#TRUE } 时候返回值 * @see ResultTypeEnum#name() */ - private String resultType; + private String resultType; /** * 命中到当前条件的返回值 * * 满足 {@link InterruptEnum#TRUE } 时候返回值 */ - private String returnVal; + private String returnVal; /** * 当前规则的子配置项 * 一个规则自配置可以有多组,每组可能有多个,每组的每个也是一个配置项 * - * Tree 结构的 SingleCondition#children 会存储值 + * Tree 结构的 ConditionCell#children 会存储值 * 非Tree结构则为空数组 */ - List children; + List children; public String getName() { return name; @@ -234,11 +234,11 @@ public class StrategyDTO extends BaseDTO { this.rightValue = rightValue; } - public List getChildren() { + public List getChildren() { return children; } - public void setChildren(List children) { + public void setChildren(List children) { this.children = children; } diff --git a/rec-common/src/main/java/cn/icanci/rec/common/model/config/StrategyVO.java b/rec-common/src/main/java/cn/icanci/rec/common/model/config/StrategyVO.java index 2677a2d8c734f69ce3be9dc30e6e786a194e180f..52943bad8dcfb3577d07d0017b11539ff5f7917f 100644 --- a/rec-common/src/main/java/cn/icanci/rec/common/model/config/StrategyVO.java +++ b/rec-common/src/main/java/cn/icanci/rec/common/model/config/StrategyVO.java @@ -137,13 +137,13 @@ public class StrategyVO extends BaseVO { * 组集合 * 每一组内为且的关系 */ - private List group; + private List group; - public List getGroup() { + public List getGroup() { return group; } - public void setGroup(List group) { + public void setGroup(List group) { this.group = group; } } @@ -151,7 +151,7 @@ public class StrategyVO extends BaseVO { /** * 单元结构 */ - public static class SingleCondition { + public static class ConditionCell { /** 单元名称 */ private String name; @@ -185,10 +185,10 @@ public class StrategyVO extends BaseVO { * 当前规则的子配置项 * 一个规则自配置可以有多组,每组可能有多个,每组的每个也是一个配置项 * - * Tree 结构的 SingleCondition#children 会存储值 + * Tree 结构的 ConditionCell#children 会存储值 * 非Tree结构则为空数组 */ - List children; + List children; public String getName() { return name; @@ -222,11 +222,11 @@ public class StrategyVO extends BaseVO { this.rightValue = rightValue; } - public List getChildren() { + public List getChildren() { return children; } - public void setChildren(List children) { + public void setChildren(List children) { this.children = children; } diff --git a/rec-engine/rec-engine-script/src/main/java/cn/icanci/rec/engine/script/client/AbstractRetryClient.java b/rec-engine/rec-engine-script/src/main/java/cn/icanci/rec/engine/script/client/AbstractRetryClient.java index 10a1a8106175c63c665dc7eda575eb136af2ecfd..2ee8ca7b3f43f4159c8b76ccbfa941abb8d44cfe 100644 --- a/rec-engine/rec-engine-script/src/main/java/cn/icanci/rec/engine/script/client/AbstractRetryClient.java +++ b/rec-engine/rec-engine-script/src/main/java/cn/icanci/rec/engine/script/client/AbstractRetryClient.java @@ -15,9 +15,9 @@ public abstract class AbstractRetryClient implements Client { 60L, // TimeUnit.SECONDS, // new LinkedBlockingQueue<>(2000), // - runnable -> new Thread(runnable, "AbstractRetryClient Biz Pool-" + runnable.hashCode()), // + runnable -> new Thread(runnable, "AbstractRetryClient Pool-" + runnable.hashCode()), // (r, executor) -> { - throw new RuntimeException("AbstractRetryClient Biz Pool is EXHAUSTED!"); + throw new RuntimeException("AbstractRetryClient Pool is EXHAUSTED!"); }); @Override diff --git a/rec-engine/rec-engine-script/src/main/java/cn/icanci/rec/engine/script/impl/RecScriptEngineImpl.java b/rec-engine/rec-engine-script/src/main/java/cn/icanci/rec/engine/script/impl/RecScriptEngineImpl.java index fa136517bd427db63107575915b5d2fa5c13e906..30f2fc9077743f68dc2d30787da3e7e5d1d58e9f 100644 --- a/rec-engine/rec-engine-script/src/main/java/cn/icanci/rec/engine/script/impl/RecScriptEngineImpl.java +++ b/rec-engine/rec-engine-script/src/main/java/cn/icanci/rec/engine/script/impl/RecScriptEngineImpl.java @@ -18,6 +18,8 @@ import java.util.concurrent.TimeUnit; import javax.script.*; import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.google.common.collect.Maps; @@ -26,6 +28,9 @@ import com.google.common.collect.Maps; * @since 1.0 Created in 2022/11/12 22:46 */ public class RecScriptEngineImpl implements RecScriptEngine { + + private static final Logger logger = LoggerFactory.getLogger(RecScriptEngineImpl.class); + /** http实例 */ private static final Client CLIENT = HttpClientImpl.getInstance(); @@ -44,6 +49,7 @@ public class RecScriptEngineImpl implements RecScriptEngine { } } catch (Throwable t) { // No Op + logger.error("[RecScriptEngine][compile] compile error:{}", t.getMessage()); } return null; } diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/extensions/RecExtensionLoader.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/extensions/RecExtensionLoader.java index ecd8813d3ad7a8463262575125d4b0d95b2d03df..955255982977e53e998284fd1652de9dc92b0a55 100644 --- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/extensions/RecExtensionLoader.java +++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/extensions/RecExtensionLoader.java @@ -7,11 +7,17 @@ import java.net.URL; import java.nio.charset.StandardCharsets; import java.util.Enumeration; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * @author icanci * @since 1.0 Created in 2022/11/15 21:15 */ public class RecExtensionLoader { + + private static final Logger logger = LoggerFactory.getLogger(RecExtensionLoader.class); + /** * 约定第三方实现配置文件目录 **/ @@ -80,6 +86,7 @@ public class RecExtensionLoader { } return null; } catch (IOException e) { + logger.error("[RecExtensionLoader][loadExtensionFile] error:{}", e.getMessage()); return null; } } @@ -96,18 +103,16 @@ public class RecExtensionLoader { try (BufferedReader reader = new BufferedReader(new InputStreamReader(resourceUrl.openStream(), StandardCharsets.UTF_8))) { String line; while ((line = reader.readLine()) != null) { - // 可能是注释 final int ci = line.indexOf('#'); - // 如果是第一个位置,则这一行都可以不用解析了 if (ci == 0) { continue; } else if (ci > 0) { - // 如果非第一个位置,需要将注释前面的内容取出来,也就是将注释后面的内容截取 line = line.substring(0, ci); } return (Class) classLoader.loadClass(line.trim()); } } catch (IOException | ClassNotFoundException e) { + logger.error("[RecExtensionLoader][loadResource] error:{}", e.getMessage()); return null; } return null; diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/ContainFactor.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/ContainFactor.java index 0923b293a15c4fcb334614c958ce2fca6fdd3c6c..82ec8cd7b15bebf6012679aa3b9651443f6b1af4 100644 --- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/ContainFactor.java +++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/ContainFactor.java @@ -18,10 +18,10 @@ import org.springframework.stereotype.Component; public class ContainFactor extends AbstractFactor { @Override - public boolean match(Bindings bindings, StrategyDTO.SingleCondition singleCondition, String domainCode) { - BaseDataDTO baseData = engineRepositoryHolder.getBaseData(domainCode, singleCondition.getLeftValue()); + public boolean match(Bindings bindings, StrategyDTO.ConditionCell conditionCell, String domainCode) { + BaseDataDTO baseData = engineRepositoryHolder.getBaseData(domainCode, conditionCell.getLeftValue()); String leftValue = getValue(bindings, baseData); - String rightValue = singleCondition.getRightValue(); + String rightValue = conditionCell.getRightValue(); DataTypeEnum dataType = DataTypeEnum.valueOf(baseData.getDataType()); switch (dataType) { diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/EQFactor.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/EQFactor.java index c4d900eae26e97983f468cbeb3f7309e7d659e5e..eae16988cd0ff23c0750455cdeeccbb2a7089c23 100644 --- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/EQFactor.java +++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/EQFactor.java @@ -23,10 +23,10 @@ import org.springframework.stereotype.Component; public class EQFactor extends AbstractFactor { @Override - public boolean match(Bindings bindings, StrategyDTO.SingleCondition singleCondition, String domainCode) { - BaseDataDTO baseData = engineRepositoryHolder.getBaseData(domainCode, singleCondition.getLeftValue()); + public boolean match(Bindings bindings, StrategyDTO.ConditionCell conditionCell, String domainCode) { + BaseDataDTO baseData = engineRepositoryHolder.getBaseData(domainCode, conditionCell.getLeftValue()); String leftValue = getValue(bindings, baseData); - String rightValue = singleCondition.getRightValue(); + String rightValue = conditionCell.getRightValue(); DataTypeEnum dataType = DataTypeEnum.valueOf(baseData.getDataType()); switch (dataType) { case BOOLEAN: diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/Factor.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/Factor.java index e6882bdf6d06703ca253a4d6064a9b252832f44d..cd3e2769beafc598d948564b5c5e7021f6a179b8 100644 --- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/Factor.java +++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/Factor.java @@ -15,9 +15,9 @@ public interface Factor { * 是否匹配 * * @param bindings 请求参数 - * @param singleCondition 条件 + * @param conditionCell 条件 * @param domainCode 域 * @return 是否匹配 */ - boolean match(Bindings bindings, StrategyDTO.SingleCondition singleCondition, String domainCode); + boolean match(Bindings bindings, StrategyDTO.ConditionCell conditionCell, String domainCode); } diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/GTEFactor.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/GTEFactor.java index d357a006ea8d39741654c80c2daa131a940cc426..c7b4d6325be74de39df9b020b11230507966b26d 100644 --- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/GTEFactor.java +++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/GTEFactor.java @@ -22,10 +22,10 @@ import org.springframework.stereotype.Component; public class GTEFactor extends AbstractFactor { @Override - public boolean match(Bindings bindings, StrategyDTO.SingleCondition singleCondition, String domainCode) { - BaseDataDTO baseData = engineRepositoryHolder.getBaseData(domainCode, singleCondition.getLeftValue()); + public boolean match(Bindings bindings, StrategyDTO.ConditionCell conditionCell, String domainCode) { + BaseDataDTO baseData = engineRepositoryHolder.getBaseData(domainCode, conditionCell.getLeftValue()); String leftValue = getValue(bindings, baseData); - String rightValue = singleCondition.getRightValue(); + String rightValue = conditionCell.getRightValue(); DataTypeEnum dataType = DataTypeEnum.valueOf(baseData.getDataType()); switch (dataType) { case NUMBER: diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/GTFactor.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/GTFactor.java index 83070f1b5b07b4f2b0d71ea619117176d1336fed..4bd397e1e3ecf5960703b60877ab06bfd9c6a488 100644 --- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/GTFactor.java +++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/GTFactor.java @@ -22,10 +22,10 @@ import org.springframework.stereotype.Component; public class GTFactor extends AbstractFactor { @Override - public boolean match(Bindings bindings, StrategyDTO.SingleCondition singleCondition, String domainCode) { - BaseDataDTO baseData = engineRepositoryHolder.getBaseData(domainCode, singleCondition.getLeftValue()); + public boolean match(Bindings bindings, StrategyDTO.ConditionCell conditionCell, String domainCode) { + BaseDataDTO baseData = engineRepositoryHolder.getBaseData(domainCode, conditionCell.getLeftValue()); String leftValue = getValue(bindings, baseData); - String rightValue = singleCondition.getRightValue(); + String rightValue = conditionCell.getRightValue(); DataTypeEnum dataType = DataTypeEnum.valueOf(baseData.getDataType()); switch (dataType) { case NUMBER: diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/IncludedFactor.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/IncludedFactor.java index 44f01fa9a666ab3744d5883eff396f304ef94fa9..3617c7d35d796e12dee179dcbabb23a77b027bee 100644 --- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/IncludedFactor.java +++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/IncludedFactor.java @@ -23,10 +23,10 @@ public class IncludedFactor extends AbstractFactor { private static final String RIGHT_SPLIT = "::"; @Override - public boolean match(Bindings bindings, StrategyDTO.SingleCondition singleCondition, String domainCode) { - BaseDataDTO baseData = engineRepositoryHolder.getBaseData(domainCode, singleCondition.getLeftValue()); + public boolean match(Bindings bindings, StrategyDTO.ConditionCell conditionCell, String domainCode) { + BaseDataDTO baseData = engineRepositoryHolder.getBaseData(domainCode, conditionCell.getLeftValue()); String leftValue = getValue(bindings, baseData); - String rightValue = singleCondition.getRightValue(); + String rightValue = conditionCell.getRightValue(); DataTypeEnum dataType = DataTypeEnum.valueOf(baseData.getDataType()); List rightValueList = Arrays.asList(rightValue.split(RIGHT_SPLIT)); switch (dataType) { diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/LTEFactor.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/LTEFactor.java index d2e76019f277a9730dfdd6e990fcf7e3bdec50fe..1e040e24b7fe355acbb7c16184f6177c581fbe28 100644 --- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/LTEFactor.java +++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/LTEFactor.java @@ -22,10 +22,10 @@ import org.springframework.stereotype.Component; public class LTEFactor extends AbstractFactor { @Override - public boolean match(Bindings bindings, StrategyDTO.SingleCondition singleCondition, String domainCode) { - BaseDataDTO baseData = engineRepositoryHolder.getBaseData(domainCode, singleCondition.getLeftValue()); + public boolean match(Bindings bindings, StrategyDTO.ConditionCell conditionCell, String domainCode) { + BaseDataDTO baseData = engineRepositoryHolder.getBaseData(domainCode, conditionCell.getLeftValue()); String leftValue = getValue(bindings, baseData); - String rightValue = singleCondition.getRightValue(); + String rightValue = conditionCell.getRightValue(); DataTypeEnum dataType = DataTypeEnum.valueOf(baseData.getDataType()); switch (dataType) { case NUMBER: diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/LTFactor.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/LTFactor.java index 4d839fb18a24f832dbec5650c2fcd732456c6159..b2a4c01f0fa13be3b4cd2bd0bbac237200883b4c 100644 --- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/LTFactor.java +++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/LTFactor.java @@ -22,10 +22,10 @@ import org.springframework.stereotype.Component; public class LTFactor extends AbstractFactor { @Override - public boolean match(Bindings bindings, StrategyDTO.SingleCondition singleCondition, String domainCode) { - BaseDataDTO baseData = engineRepositoryHolder.getBaseData(domainCode, singleCondition.getLeftValue()); + public boolean match(Bindings bindings, StrategyDTO.ConditionCell conditionCell, String domainCode) { + BaseDataDTO baseData = engineRepositoryHolder.getBaseData(domainCode, conditionCell.getLeftValue()); String leftValue = getValue(bindings, baseData); - String rightValue = singleCondition.getRightValue(); + String rightValue = conditionCell.getRightValue(); DataTypeEnum dataType = DataTypeEnum.valueOf(baseData.getDataType()); switch (dataType) { case NUMBER: diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/NEFactor.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/NEFactor.java index f8cf80090720212349c251de0057311e94e27c3e..c1f6a458e70cb200df413e0371a0362f928f7d15 100644 --- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/NEFactor.java +++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/NEFactor.java @@ -22,10 +22,10 @@ import org.springframework.stereotype.Component; @FactorBean(OperatorEnum.NE) public class NEFactor extends AbstractFactor { @Override - public boolean match(Bindings bindings, StrategyDTO.SingleCondition singleCondition, String domainCode) { - BaseDataDTO baseData = engineRepositoryHolder.getBaseData(domainCode, singleCondition.getLeftValue()); + public boolean match(Bindings bindings, StrategyDTO.ConditionCell conditionCell, String domainCode) { + BaseDataDTO baseData = engineRepositoryHolder.getBaseData(domainCode, conditionCell.getLeftValue()); String leftValue = getValue(bindings, baseData); - String rightValue = singleCondition.getRightValue(); + String rightValue = conditionCell.getRightValue(); DataTypeEnum dataType = DataTypeEnum.valueOf(baseData.getDataType()); switch (dataType) { case BOOLEAN: diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/UnContainFactor.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/UnContainFactor.java index 57ad983d9410d3f349b721771ff9049b981da0a3..c26d767371509133b772c1886cea1d57717e55b9 100644 --- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/UnContainFactor.java +++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/factor/UnContainFactor.java @@ -17,10 +17,10 @@ import org.springframework.stereotype.Component; @FactorBean(OperatorEnum.UN_CONTAIN) public class UnContainFactor extends AbstractFactor { @Override - public boolean match(Bindings bindings, StrategyDTO.SingleCondition singleCondition, String domainCode) { - BaseDataDTO baseData = engineRepositoryHolder.getBaseData(domainCode, singleCondition.getLeftValue()); + public boolean match(Bindings bindings, StrategyDTO.ConditionCell conditionCell, String domainCode) { + BaseDataDTO baseData = engineRepositoryHolder.getBaseData(domainCode, conditionCell.getLeftValue()); String leftValue = getValue(bindings, baseData); - String rightValue = singleCondition.getRightValue(); + String rightValue = conditionCell.getRightValue(); DataTypeEnum dataType = DataTypeEnum.valueOf(baseData.getDataType()); switch (dataType) { case STRING: diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/EngineExecutor.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/EngineExecutor.java index cf449cd2cceaa5fe45aa8bd3ea1b61799efe2d5c..297dc0a1f9c5423af04cc8e4be06b4408e47e7b7 100644 --- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/EngineExecutor.java +++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/EngineExecutor.java @@ -28,6 +28,8 @@ import javax.script.SimpleBindings; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; /** @@ -37,6 +39,8 @@ import org.springframework.stereotype.Service; @Service public final class EngineExecutor { + private static final Logger logger = LoggerFactory.getLogger(EngineExecutor.class); + @Resource private EngineRepositoryHolder holder; @@ -56,6 +60,7 @@ public final class EngineExecutor { */ public RuleEngineResponse execute(RuleEngineRequest request) { try { + logger.info("[EngineExecutor][execute] request:{}", JSONUtil.toJsonStr(request)); // 1.数据基本校验 validator(request); @@ -91,8 +96,11 @@ public final class EngineExecutor { // no op } // 5.返回执行结果 - return RuleEngineResponse.success(executorResult, bindings); + RuleEngineResponse response = RuleEngineResponse.success(executorResult, bindings); + logger.info("[EngineExecutor][execute] response:{}", JSONUtil.toJsonStr(response)); + return response; } catch (Throwable e) { + logger.info("[EngineExecutor][execute] error:{}", e.getMessage()); return RuleEngineResponse.fail(e.getMessage()); } } @@ -195,11 +203,11 @@ public final class EngineExecutor { * @param bindings bindings * @return 返回是否命中或者中断结果 */ - private Object matchGroup(List group, String domainCode, RuleModeEnum ruleMode, Bindings bindings) { + private Object matchGroup(List group, String domainCode, RuleModeEnum ruleMode, Bindings bindings) { if (CollectionUtils.isEmpty(group)) { return Boolean.FALSE; } - for (StrategyDTO.SingleCondition sc : group) { + for (StrategyDTO.ConditionCell sc : group) { OperatorEnum operator = OperatorEnum.valueOf(sc.getOperator()); boolean match = factorSupport.getFactor(operator).match(bindings, sc, domainCode); // 命中中断条件的返回值 @@ -211,7 +219,7 @@ public final class EngineExecutor { return Boolean.FALSE; } } - StrategyDTO.SingleCondition last = group.get(group.size() - 1); + StrategyDTO.ConditionCell last = group.get(group.size() - 1); if (CollectionUtils.isEmpty(last.getChildren())) { return Boolean.TRUE; } diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/server/RecNettyServer.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/server/RecNettyServer.java index 76d0cbd547b079040890f928086c2b97525c733f..396dbec59796cedc997bb866574a702c7284fa21 100644 --- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/server/RecNettyServer.java +++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/server/RecNettyServer.java @@ -33,9 +33,9 @@ public class RecNettyServer { 60L, // TimeUnit.SECONDS, // new LinkedBlockingQueue<>(2000), // - runnable -> new Thread(runnable, "RECServerThreadPool-" + runnable.hashCode()), // + runnable -> new Thread(runnable, "RECServerThread Pool-" + runnable.hashCode()), // (r, executor) -> { - throw new RuntimeException("RECServerThreadPool is EXHAUSTED!"); + throw new RuntimeException("RECServerThread Pool is EXHAUSTED!"); }); private static RegisterServer registerClient; diff --git a/static/img/rule.png b/static/img/rule.png index 992d89d8a57834babd248a54bb701ef5c353cdd8..5c49a46fb3eba0accf9613018c0244750964a3f5 100644 Binary files a/static/img/rule.png and b/static/img/rule.png differ diff --git a/static/rec/rec-datasource.bson b/static/rec/rec-datasource.bson index b5fa43ee18263b5272cabf14b0d033402791f9b6..363102852d7cd7cbca3b1306300afbb155e93f13 100644 Binary files a/static/rec/rec-datasource.bson and b/static/rec/rec-datasource.bson differ diff --git a/static/rec/rec-log.bson b/static/rec/rec-log.bson index d4806da5d6148f168ac7328cc1b48902de2d8184..8c61ebfaf8939a571ae99615effa3b9b1ece3480 100644 Binary files a/static/rec/rec-log.bson and b/static/rec/rec-log.bson differ diff --git a/static/rec/rec-register.bson b/static/rec/rec-register.bson index 8f8c0cbcecd7f09e2c6e3be916bd0d346234b583..afbf0fd117c7a3543b604dfbde85927dbae3d883 100644 Binary files a/static/rec/rec-register.bson and b/static/rec/rec-register.bson differ diff --git a/static/rec/rec-strategy.bson b/static/rec/rec-strategy.bson index 94c2ae3d4fe19d0f4523345c6dca98171478bbae..5a4272fa4cff14282940abed2e96c03569016736 100644 Binary files a/static/rec/rec-strategy.bson and b/static/rec/rec-strategy.bson differ