From c4641ef6002abdc96db9d97581fc6e8e3b0f4472 Mon Sep 17 00:00:00 2001 From: icanci Date: Sat, 19 Nov 2022 14:33:12 +0800 Subject: [PATCH 1/2] StrategyServiceImpl --- .../rec/admin/biz/mapper/config/StrategyVoDtoMapper.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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 e377e44..90ddfa3 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 @@ -1,19 +1,19 @@ package cn.icanci.rec.admin.biz.mapper.config; -import org.mapstruct.Mapper; -import org.mapstruct.NullValueMappingStrategy; - import cn.icanci.rec.admin.biz.mapper.convertor.*; import cn.icanci.rec.common.aggregation.model.StrategyDTO; import cn.icanci.rec.common.model.config.StrategyVO; +import org.mapstruct.Mapper; +import org.mapstruct.NullValueMappingStrategy; + /** * @author icanci * @since 1.0 Created in 2022/11/11 17:49 */ @Mapper(componentModel = "spring", uses = { DataSourceTypeEnumConverter.class, RuleTypeEnumConverter.class, OperatorEnumConverter.class, InterruptEnumConverter.class, ResultTypeEnumConverter.class, RuleModeEnumConverter.class }, nullValueMappingStrategy = NullValueMappingStrategy.RETURN_NULL) -public interface StrategyVoDtoMapper extends BaseMapper { +public interface StrategyVoDtoMapper { StrategyDTO vo2dto(StrategyVO strategyVO); -- Gitee From a3c28eacd2886172a5f8f5977a66516c6d84d6bb Mon Sep 17 00:00:00 2001 From: icanci Date: Sat, 19 Nov 2022 14:41:10 +0800 Subject: [PATCH 2/2] Condition --- .../sdk/condition/ContainCondition.java | 14 +++++++++++ .../rec/engine/sdk/condition/GTCondition.java | 17 ++++++++++++++ .../engine/sdk/condition/GTECondition.java | 17 ++++++++++++++ .../sdk/condition/IncludedCondition.java | 19 +++++++++++++++ .../rec/engine/sdk/condition/LTCondition.java | 17 ++++++++++++++ .../engine/sdk/condition/LTECondition.java | 21 +++++++++++++++-- .../rec/engine/sdk/condition/NECondition.java | 23 +++++++++++++++++++ .../sdk/condition/UnContainCondition.java | 13 +++++++++++ 8 files changed, 139 insertions(+), 2 deletions(-) diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/ContainCondition.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/ContainCondition.java index c0e5dcd..f6b3413 100644 --- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/ContainCondition.java +++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/ContainCondition.java @@ -1,6 +1,8 @@ package cn.icanci.rec.engine.sdk.condition; +import cn.icanci.rec.common.aggregation.model.BaseDataDTO; import cn.icanci.rec.common.aggregation.model.StrategyDTO; +import cn.icanci.rec.common.enums.DataTypeEnum; import cn.icanci.rec.common.enums.OperatorEnum; import javax.script.Bindings; @@ -17,6 +19,18 @@ public class ContainCondition extends AbstractCondition { @Override public boolean match(Bindings bindings, StrategyDTO.SingleCondition singleCondition, String domainCode) { + BaseDataDTO baseData = engineRepositoryHolder.getBaseData(domainCode, singleCondition.getLeftValue()); + String leftValue = getValue(bindings, baseData); + String rightValue = singleCondition.getRightValue(); + DataTypeEnum dataType = DataTypeEnum.valueOf(baseData.getDataType()); + + switch (dataType) { + case STRING: + case METADATA: + return leftValue.contains(rightValue); + default: + // no op + } return false; } } diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/GTCondition.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/GTCondition.java index 96a9668..de86dc5 100644 --- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/GTCondition.java +++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/GTCondition.java @@ -1,7 +1,12 @@ package cn.icanci.rec.engine.sdk.condition; +import cn.icanci.rec.common.aggregation.model.BaseDataDTO; import cn.icanci.rec.common.aggregation.model.StrategyDTO; +import cn.icanci.rec.common.enums.DataTypeEnum; import cn.icanci.rec.common.enums.OperatorEnum; +import cn.icanci.rec.common.utils.DateUtils; + +import java.math.BigDecimal; import javax.script.Bindings; @@ -17,6 +22,18 @@ public class GTCondition extends AbstractCondition { @Override public boolean match(Bindings bindings, StrategyDTO.SingleCondition singleCondition, String domainCode) { + BaseDataDTO baseData = engineRepositoryHolder.getBaseData(domainCode, singleCondition.getLeftValue()); + String leftValue = getValue(bindings, baseData); + String rightValue = singleCondition.getRightValue(); + DataTypeEnum dataType = DataTypeEnum.valueOf(baseData.getDataType()); + switch (dataType) { + case NUMBER: + return new BigDecimal(leftValue).compareTo(new BigDecimal(rightValue)) > 0; + case DATE: + return DateUtils.parse(leftValue, DateUtils.YYYY_MM_DD_HH_MM_SS).compareTo(DateUtils.parse(rightValue, DateUtils.YYYY_MM_DD_HH_MM_SS)) > 0; + default: + // no op + } return false; } } diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/GTECondition.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/GTECondition.java index 0243b19..5535a10 100644 --- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/GTECondition.java +++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/GTECondition.java @@ -1,7 +1,12 @@ package cn.icanci.rec.engine.sdk.condition; +import cn.icanci.rec.common.aggregation.model.BaseDataDTO; import cn.icanci.rec.common.aggregation.model.StrategyDTO; +import cn.icanci.rec.common.enums.DataTypeEnum; import cn.icanci.rec.common.enums.OperatorEnum; +import cn.icanci.rec.common.utils.DateUtils; + +import java.math.BigDecimal; import javax.script.Bindings; @@ -17,6 +22,18 @@ public class GTECondition extends AbstractCondition { @Override public boolean match(Bindings bindings, StrategyDTO.SingleCondition singleCondition, String domainCode) { + BaseDataDTO baseData = engineRepositoryHolder.getBaseData(domainCode, singleCondition.getLeftValue()); + String leftValue = getValue(bindings, baseData); + String rightValue = singleCondition.getRightValue(); + DataTypeEnum dataType = DataTypeEnum.valueOf(baseData.getDataType()); + switch (dataType) { + case NUMBER: + return new BigDecimal(leftValue).compareTo(new BigDecimal(rightValue)) >= 0; + case DATE: + return DateUtils.parse(leftValue, DateUtils.YYYY_MM_DD_HH_MM_SS).compareTo(DateUtils.parse(rightValue, DateUtils.YYYY_MM_DD_HH_MM_SS)) >= 0; + default: + // no op + } return false; } } diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/IncludedCondition.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/IncludedCondition.java index 994f4fa..5a1d3d3 100644 --- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/IncludedCondition.java +++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/IncludedCondition.java @@ -1,8 +1,13 @@ package cn.icanci.rec.engine.sdk.condition; +import cn.icanci.rec.common.aggregation.model.BaseDataDTO; import cn.icanci.rec.common.aggregation.model.StrategyDTO; +import cn.icanci.rec.common.enums.DataTypeEnum; import cn.icanci.rec.common.enums.OperatorEnum; +import java.util.Arrays; +import java.util.List; + import javax.script.Bindings; import org.springframework.stereotype.Component; @@ -14,9 +19,23 @@ import org.springframework.stereotype.Component; @Component @ConditionBean(OperatorEnum.INCLUDED) public class IncludedCondition extends AbstractCondition { + /** 右值分隔符 */ + private static final String RIGHT_SPLIT = "::"; @Override public boolean match(Bindings bindings, StrategyDTO.SingleCondition singleCondition, String domainCode) { + BaseDataDTO baseData = engineRepositoryHolder.getBaseData(domainCode, singleCondition.getLeftValue()); + String leftValue = getValue(bindings, baseData); + String rightValue = singleCondition.getRightValue(); + DataTypeEnum dataType = DataTypeEnum.valueOf(baseData.getDataType()); + List rightValueList = Arrays.asList(rightValue.split(RIGHT_SPLIT)); + switch (dataType) { + case STRING: + case METADATA: + return rightValueList.contains(leftValue); + default: + // no op + } return false; } } diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/LTCondition.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/LTCondition.java index 3b6d916..0333efb 100644 --- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/LTCondition.java +++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/LTCondition.java @@ -1,7 +1,12 @@ package cn.icanci.rec.engine.sdk.condition; +import cn.icanci.rec.common.aggregation.model.BaseDataDTO; import cn.icanci.rec.common.aggregation.model.StrategyDTO; +import cn.icanci.rec.common.enums.DataTypeEnum; import cn.icanci.rec.common.enums.OperatorEnum; +import cn.icanci.rec.common.utils.DateUtils; + +import java.math.BigDecimal; import javax.script.Bindings; @@ -17,6 +22,18 @@ public class LTCondition extends AbstractCondition { @Override public boolean match(Bindings bindings, StrategyDTO.SingleCondition singleCondition, String domainCode) { + BaseDataDTO baseData = engineRepositoryHolder.getBaseData(domainCode, singleCondition.getLeftValue()); + String leftValue = getValue(bindings, baseData); + String rightValue = singleCondition.getRightValue(); + DataTypeEnum dataType = DataTypeEnum.valueOf(baseData.getDataType()); + switch (dataType) { + case NUMBER: + return new BigDecimal(leftValue).compareTo(new BigDecimal(rightValue)) < 0; + case DATE: + return DateUtils.parse(leftValue, DateUtils.YYYY_MM_DD_HH_MM_SS).compareTo(DateUtils.parse(rightValue, DateUtils.YYYY_MM_DD_HH_MM_SS)) < 0; + default: + // no op + } return false; } } diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/LTECondition.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/LTECondition.java index 13807f4..ae87554 100644 --- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/LTECondition.java +++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/LTECondition.java @@ -1,12 +1,17 @@ package cn.icanci.rec.engine.sdk.condition; -import cn.icanci.rec.common.aggregation.model.StrategyDTO; -import cn.icanci.rec.common.enums.OperatorEnum; +import java.math.BigDecimal; import javax.script.Bindings; import org.springframework.stereotype.Component; +import cn.icanci.rec.common.aggregation.model.BaseDataDTO; +import cn.icanci.rec.common.aggregation.model.StrategyDTO; +import cn.icanci.rec.common.enums.DataTypeEnum; +import cn.icanci.rec.common.enums.OperatorEnum; +import cn.icanci.rec.common.utils.DateUtils; + /** * @author icanci * @since 1.0 Created in 2022/11/17 09:22 @@ -17,6 +22,18 @@ public class LTECondition extends AbstractCondition { @Override public boolean match(Bindings bindings, StrategyDTO.SingleCondition singleCondition, String domainCode) { + BaseDataDTO baseData = engineRepositoryHolder.getBaseData(domainCode, singleCondition.getLeftValue()); + String leftValue = getValue(bindings, baseData); + String rightValue = singleCondition.getRightValue(); + DataTypeEnum dataType = DataTypeEnum.valueOf(baseData.getDataType()); + switch (dataType) { + case NUMBER: + return new BigDecimal(leftValue).compareTo(new BigDecimal(rightValue)) <= 0; + case DATE: + return DateUtils.parse(leftValue, DateUtils.YYYY_MM_DD_HH_MM_SS).compareTo(DateUtils.parse(rightValue, DateUtils.YYYY_MM_DD_HH_MM_SS)) <= 0; + default: + // no op + } return false; } } diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/NECondition.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/NECondition.java index da9d6d6..8f0d571 100644 --- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/NECondition.java +++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/NECondition.java @@ -1,10 +1,16 @@ package cn.icanci.rec.engine.sdk.condition; +import cn.icanci.rec.common.aggregation.model.BaseDataDTO; import cn.icanci.rec.common.aggregation.model.StrategyDTO; +import cn.icanci.rec.common.enums.DataTypeEnum; import cn.icanci.rec.common.enums.OperatorEnum; +import cn.icanci.rec.common.utils.DateUtils; + +import java.math.BigDecimal; import javax.script.Bindings; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; /** @@ -16,6 +22,23 @@ import org.springframework.stereotype.Component; public class NECondition extends AbstractCondition { @Override public boolean match(Bindings bindings, StrategyDTO.SingleCondition singleCondition, String domainCode) { + BaseDataDTO baseData = engineRepositoryHolder.getBaseData(domainCode, singleCondition.getLeftValue()); + String leftValue = getValue(bindings, baseData); + String rightValue = singleCondition.getRightValue(); + DataTypeEnum dataType = DataTypeEnum.valueOf(baseData.getDataType()); + switch (dataType) { + case BOOLEAN: + return !StringUtils.equalsIgnoreCase(leftValue, rightValue); + case STRING: + case METADATA: + return !StringUtils.equals(leftValue, rightValue); + case NUMBER: + return new BigDecimal(leftValue).compareTo(new BigDecimal(rightValue)) != 0; + case DATE: + return DateUtils.parse(leftValue, DateUtils.YYYY_MM_DD_HH_MM_SS).compareTo(DateUtils.parse(rightValue, DateUtils.YYYY_MM_DD_HH_MM_SS)) != 0; + default: + // no op + } return false; } } diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/UnContainCondition.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/UnContainCondition.java index 3c3cf55..97c8fbe 100644 --- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/UnContainCondition.java +++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/condition/UnContainCondition.java @@ -1,6 +1,8 @@ package cn.icanci.rec.engine.sdk.condition; +import cn.icanci.rec.common.aggregation.model.BaseDataDTO; import cn.icanci.rec.common.aggregation.model.StrategyDTO; +import cn.icanci.rec.common.enums.DataTypeEnum; import cn.icanci.rec.common.enums.OperatorEnum; import javax.script.Bindings; @@ -16,6 +18,17 @@ import org.springframework.stereotype.Component; public class UnContainCondition extends AbstractCondition { @Override public boolean match(Bindings bindings, StrategyDTO.SingleCondition singleCondition, String domainCode) { + BaseDataDTO baseData = engineRepositoryHolder.getBaseData(domainCode, singleCondition.getLeftValue()); + String leftValue = getValue(bindings, baseData); + String rightValue = singleCondition.getRightValue(); + DataTypeEnum dataType = DataTypeEnum.valueOf(baseData.getDataType()); + switch (dataType) { + case STRING: + case METADATA: + return !leftValue.contains(rightValue); + default: + // no op + } return false; } } -- Gitee