+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 查询
+
+
+ 新增
+
+
+
+
+
+
+ {{ getDomainName(scope.row.domainCode) }}
+
+
+
+
+
+
+ {{ getSceneName(scope.row.sceneCode) }}
+
+
+
+
+
+
+
+
+ 无效
+ 有效
+
+
+
+
+ {{ dateFormat(scope.row.createTime) }}/ {{ dateFormat(scope.row.updateTime) }}
+
+
+
+
+ 编辑
+
+ 启用
+ 禁用
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/controller/config/DataSourceController.java b/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/controller/config/DataSourceController.java
index ebd7191ca5794e5553c181d619af5088a95bd1cb..747935088ca5cbe6addde780a3de161781b474bc 100644
--- a/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/controller/config/DataSourceController.java
+++ b/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/controller/config/DataSourceController.java
@@ -40,9 +40,9 @@ public class DataSourceController {
return R.builderOk().build();
}
- @GetMapping("validateDataSourceName/{dataSourceName}")
- public R validateDataSourceName(@PathVariable("dataSourceName") String dataSourceName) {
- DataSourceVO dataSource = dataSourceService.queryByDataSourceName(dataSourceName);
+ @GetMapping("validateDataSourceName/{domainCode}/{dataSourceName}")
+ public R validateDataSourceName(@PathVariable("domainCode") String domainCode, @PathVariable("dataSourceName") String dataSourceName) {
+ DataSourceVO dataSource = dataSourceService.queryByDataSourceName(domainCode, dataSourceName);
return R.builderOk().data("result", dataSource == null).build();
}
// ================================ Load Selectors ================================
diff --git a/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/controller/config/StrategyController.java b/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/controller/config/StrategyController.java
new file mode 100644
index 0000000000000000000000000000000000000000..fca8afdc1b6edcd5cb52346c61ab15901a1eb11c
--- /dev/null
+++ b/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/controller/config/StrategyController.java
@@ -0,0 +1,54 @@
+package cn.icanci.rec.admin.web.controller.config;
+
+import cn.icanci.rec.admin.biz.model.StrategyDebugResult;
+import cn.icanci.rec.admin.biz.service.StrategyService;
+import cn.icanci.rec.admin.web.form.StrategyDebugForm;
+import cn.icanci.rec.admin.web.form.StrategyQueryForm;
+import cn.icanci.rec.admin.web.mapper.StrategyWebMapper;
+import cn.icanci.rec.admin.web.model.Strategy;
+import cn.icanci.rec.common.model.config.StrategyVO;
+import cn.icanci.rec.common.result.R;
+
+import javax.annotation.Resource;
+
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author icanci
+ * @since 1.0 Created in 2022/11/18 22:08
+ */
+@RestController
+@RequestMapping("/rec/strategy")
+public class StrategyController {
+ @Resource
+ private StrategyService strategyService;
+ @Resource
+ private StrategyWebMapper strategyWebMapper;
+
+ // ================================ CRUD ================================
+ @PostMapping("query")
+ public R query(@RequestBody StrategyQueryForm form) {
+ return R.builderOk()
+ .data("queryPage", strategyService.queryPage(strategyWebMapper.web2vo(form.getStrategy()), form.getPaginator().getCurrentPage(), form.getPaginator().getPageSize()))
+ .build();
+ }
+
+ @PostMapping("save")
+ public R save(@RequestBody Strategy strategy) {
+ strategyService.save(strategyWebMapper.web2vo(strategy));
+ return R.builderOk().build();
+ }
+
+ @GetMapping("validateStrategyName/{domainCode}/{strategyName}")
+ public R validateStrategyName(@PathVariable("domainCode") String domainCode, @PathVariable("strategyName") String strategyName) {
+ StrategyVO strategy = strategyService.queryByStrategyName(domainCode, strategyName);
+ return R.builderOk().data("result", strategy == null).build();
+ }
+ // ================================ Debug ================================
+
+ @PostMapping("debug")
+ public R debug(@RequestBody StrategyDebugForm strategyDebug) {
+ StrategyDebugResult result = strategyService.debug(strategyWebMapper.web2vo(strategyDebug.getStrategy()), strategyDebug.getScriptContentTest());
+ return R.builderOk().data("result", result).build();
+ }
+}
diff --git a/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/form/StrategyDebugForm.java b/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/form/StrategyDebugForm.java
new file mode 100644
index 0000000000000000000000000000000000000000..7f41c708f3870c6a555645514a5a9f69422b6a81
--- /dev/null
+++ b/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/form/StrategyDebugForm.java
@@ -0,0 +1,33 @@
+package cn.icanci.rec.admin.web.form;
+
+import cn.icanci.rec.admin.web.model.Strategy;
+
+import java.io.Serializable;
+
+/**
+ * @author icanci
+ * @since 1.0 Created in 2022/11/18 22:09
+ */
+public class StrategyDebugForm implements Serializable {
+ private static final long serialVersionUID = 7046936486304373642L;
+
+ private Strategy strategy;
+
+ private String scriptContentTest;
+
+ public Strategy getStrategy() {
+ return strategy;
+ }
+
+ public void setStrategy(Strategy strategy) {
+ this.strategy = strategy;
+ }
+
+ public String getScriptContentTest() {
+ return scriptContentTest;
+ }
+
+ public void setScriptContentTest(String scriptContentTest) {
+ this.scriptContentTest = scriptContentTest;
+ }
+}
diff --git a/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/form/StrategyQueryForm.java b/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/form/StrategyQueryForm.java
new file mode 100644
index 0000000000000000000000000000000000000000..34472d1ba15b5b34c441b107fd05e95283a33a92
--- /dev/null
+++ b/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/form/StrategyQueryForm.java
@@ -0,0 +1,20 @@
+package cn.icanci.rec.admin.web.form;
+
+import cn.icanci.rec.admin.web.model.Strategy;
+
+/**
+ * @author icanci
+ * @since 1.0 Created in 2022/11/18 22:08
+ */
+public class StrategyQueryForm extends BaseQueryForm {
+ private static final long serialVersionUID = 6978323388657447739L;
+ private Strategy strategy;
+
+ public Strategy getStrategy() {
+ return strategy;
+ }
+
+ public void setStrategy(Strategy strategy) {
+ this.strategy = strategy;
+ }
+}
diff --git a/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/mapper/LogOperateWebMapper.java b/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/mapper/LogOperateWebMapper.java
index 2685d0fea9053fd310e5b1edb8029405200fbaef..7ed5d760d291c6795256ae3763ab047989c1e4dd 100644
--- a/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/mapper/LogOperateWebMapper.java
+++ b/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/mapper/LogOperateWebMapper.java
@@ -4,7 +4,6 @@ import cn.icanci.rec.admin.web.model.LogOperate;
import cn.icanci.rec.common.model.log.LogOperateVO;
import java.util.Collection;
-import java.util.Date;
import java.util.List;
import org.mapstruct.Mapper;
@@ -23,7 +22,7 @@ public interface LogOperateWebMapper {
logOperate.setTargetId(vo.getTargetId());
logOperate.setOperatorType(vo.getOperatorType().getDesc());
logOperate.setContent(vo.getContent());
- logOperate.setCreateTime(new Date());
+ logOperate.setCreateTime(vo.getCreateTime());
logOperate.setEnv(logOperate.getEnv());
return logOperate;
}
diff --git a/rec-common/src/main/java/cn/icanci/rec/common/enums/ModuleTypeEnum.java b/rec-common/src/main/java/cn/icanci/rec/common/enums/ModuleTypeEnum.java
index 6319ff29b35a882e3483f8b1b31b0200f8156f37..ae9dbc9140233bcd289b31bad580ce328140e316 100644
--- a/rec-common/src/main/java/cn/icanci/rec/common/enums/ModuleTypeEnum.java
+++ b/rec-common/src/main/java/cn/icanci/rec/common/enums/ModuleTypeEnum.java
@@ -24,6 +24,10 @@ public enum ModuleTypeEnum {
* REC_DATA_SOURCE
*/
REC_DATA_SOURCE("REC_DATA_SOURCE", "规则数据源"),
+ /**
+ * REC_STRATEGY
+ */
+ REC_STRATEGY("REC_STRATEGY", "规则策略"),
;
diff --git a/rec-common/src/main/java/cn/icanci/rec/common/utils/FieldUtils.java b/rec-common/src/main/java/cn/icanci/rec/common/utils/FieldUtils.java
new file mode 100644
index 0000000000000000000000000000000000000000..43a134c7dc9b0d7f8c94bd5949619fce53993875
--- /dev/null
+++ b/rec-common/src/main/java/cn/icanci/rec/common/utils/FieldUtils.java
@@ -0,0 +1,28 @@
+package cn.icanci.rec.common.utils;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @author icanci
+ * @since 1.0 Created in 2022/11/18 23:26
+ */
+public class FieldUtils {
+ /**
+ * 获取本类及其父类的字段属性
+ *
+ * @param clazz 当前类对象
+ * @return 字段数组
+ */
+ public static Field[] getAllFields(Class> clazz) {
+ List