From 94669fbc52c3403b657f17a01f227353685d79e2 Mon Sep 17 00:00:00 2001 From: icanci Date: Sun, 20 Nov 2022 17:18:29 +0800 Subject: [PATCH 1/2] DomainSPI --- .../cn/icanci/rec/admin/biz/service/WebApiService.java | 2 ++ .../rec/admin/biz/service/impl/WebApiServiceImpl.java | 7 +++++++ .../java/cn/icanci/rec/admin/biz/spi/AdminDomainSPI.java | 5 +++++ .../cn/icanci/rec/admin/web/webapi/WebApiController.java | 7 +++++++ .../icanci/rec/engine/sdk/http/spi/AbstractLoadSPI.java | 4 ++++ .../cn/icanci/rec/engine/sdk/http/spi/HttpDomainSPI.java | 5 +++++ .../icanci/rec/engine/sdk/netty/spi/NettyDomainSPI.java | 5 +++++ .../java/cn/icanci/rec/engine/sdk/spi/DomainSPI.java | 9 +++++++++ 8 files changed, 44 insertions(+) diff --git a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/WebApiService.java b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/WebApiService.java index d7554c7..a4bb510 100644 --- a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/WebApiService.java +++ b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/WebApiService.java @@ -22,4 +22,6 @@ public interface WebApiService { List loadDataSourceByDomains(Set domainCodes); List loadStrategyByDomains(Set domainCodes); + + Set loadAllDomainCodes(); } diff --git a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/WebApiServiceImpl.java b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/WebApiServiceImpl.java index 55565ea..c10bf61 100644 --- a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/WebApiServiceImpl.java +++ b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/service/impl/WebApiServiceImpl.java @@ -3,10 +3,12 @@ package cn.icanci.rec.admin.biz.service.impl; import cn.icanci.rec.admin.biz.mapper.dto.*; import cn.icanci.rec.admin.biz.service.WebApiService; import cn.icanci.rec.admin.dal.mongodb.daointerface.*; +import cn.icanci.rec.admin.dal.mongodb.dateobject.DomainDO; import cn.icanci.rec.common.aggregation.model.*; import java.util.List; import java.util.Set; +import java.util.stream.Collectors; import javax.annotation.Resource; @@ -102,4 +104,9 @@ public class WebApiServiceImpl implements WebApiService { } return strategies; } + + @Override + public Set loadAllDomainCodes() { + return domainDAO.queryAll().stream().map(DomainDO::getDomainCode).collect(Collectors.toSet()); + } } diff --git a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/spi/AdminDomainSPI.java b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/spi/AdminDomainSPI.java index 36e6be7..e9decf4 100644 --- a/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/spi/AdminDomainSPI.java +++ b/rec-admin/rec-admin-biz/src/main/java/cn/icanci/rec/admin/biz/spi/AdminDomainSPI.java @@ -19,6 +19,11 @@ public class AdminDomainSPI extends AbstractLoadSPI implements DomainSPI { return webApiService.loadDomainByDomains(Sets.newHashSet(domain)).iterator().next(); } + @Override + public Set loadAllDomainCodes() { + return webApiService.loadAllDomainCodes(); + } + @Override public List load(Set domains) { return webApiService.loadDomainByDomains(domains); diff --git a/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/webapi/WebApiController.java b/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/webapi/WebApiController.java index 655cb0d..cfcc07e 100644 --- a/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/webapi/WebApiController.java +++ b/rec-admin/rec-admin-web/src/main/java/cn/icanci/rec/admin/web/webapi/WebApiController.java @@ -11,6 +11,8 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import com.google.common.collect.Lists; + /** * @author icanci * @since 1.0 Created in 2022/11/15 21:51 @@ -27,6 +29,11 @@ public class WebApiController { return new WebApiResponse<>(webApiService.loadDomainByDomains(request.getDomainCodes())); } + @RequestMapping("/loadDomainCodes") + public WebApiResponse loadDomainCodes() { + return new WebApiResponse<>(Lists.newArrayList(webApiService.loadAllDomainCodes())); + } + @RequestMapping("/loadScenes") public WebApiResponse loadScenes(@RequestBody WebApiRequest request) { return new WebApiResponse<>(webApiService.loadSceneByDomains(request.getDomainCodes())); diff --git a/rec-engine/rec-engine-sdk-http/src/main/java/cn/icanci/rec/engine/sdk/http/spi/AbstractLoadSPI.java b/rec-engine/rec-engine-sdk-http/src/main/java/cn/icanci/rec/engine/sdk/http/spi/AbstractLoadSPI.java index 6a48a55..ec714b5 100644 --- a/rec-engine/rec-engine-sdk-http/src/main/java/cn/icanci/rec/engine/sdk/http/spi/AbstractLoadSPI.java +++ b/rec-engine/rec-engine-sdk-http/src/main/java/cn/icanci/rec/engine/sdk/http/spi/AbstractLoadSPI.java @@ -30,7 +30,10 @@ public abstract class AbstractLoadSPI { protected static final String REQ_HTTP_PATH; /** 域请求路径 */ protected static String LOAD_DOMAIN_PATH; + /** 域Codes请求路径 */ + protected static String LOAD_DOMAIN_CODES_PATH; private static String LOAD_DOMAIN_PATH_SUFFIX = "/rec/webapi/loadDomains"; + private static String LOAD_DOMAIN_CODE_PATH_SUFFIX = "/rec/webapi/loadDomainCodes"; /** 场景请求路径 */ protected static String LOAD_SCENE_PATH; private static String LOAD_SCENE_PATH_SUFFIX = "/rec/webapi/loadScenes"; @@ -63,6 +66,7 @@ public abstract class AbstractLoadSPI { // 请求路径加载 LOAD_DOMAIN_PATH = REQ_HTTP_PATH + LOAD_DOMAIN_PATH_SUFFIX; + LOAD_DOMAIN_CODES_PATH = REQ_HTTP_PATH + LOAD_DOMAIN_CODE_PATH_SUFFIX; LOAD_SCENE_PATH = REQ_HTTP_PATH + LOAD_SCENE_PATH_SUFFIX; LOAD_METADATA_PATH = REQ_HTTP_PATH + LOAD_METADATA_PATH_SUFFIX; LOAD_BASE_DATA_PATH = REQ_HTTP_PATH + LOAD_BASE_DATA_PATH_SUFFIX; diff --git a/rec-engine/rec-engine-sdk-http/src/main/java/cn/icanci/rec/engine/sdk/http/spi/HttpDomainSPI.java b/rec-engine/rec-engine-sdk-http/src/main/java/cn/icanci/rec/engine/sdk/http/spi/HttpDomainSPI.java index c822cee..bba4691 100644 --- a/rec-engine/rec-engine-sdk-http/src/main/java/cn/icanci/rec/engine/sdk/http/spi/HttpDomainSPI.java +++ b/rec-engine/rec-engine-sdk-http/src/main/java/cn/icanci/rec/engine/sdk/http/spi/HttpDomainSPI.java @@ -21,6 +21,11 @@ public class HttpDomainSPI extends AbstractLoadSPI implements DomainSPI { return load(domain).iterator().next(); } + @Override + public Set loadAllDomainCodes() { + return Sets.newHashSet(call(String.class, LOAD_DOMAIN_CODES_PATH, HttpMethod.POST, null).getRet()); + } + @Override public List load(Set domains) { WebApiRequest request = new WebApiRequest(domains); diff --git a/rec-engine/rec-engine-sdk-netty/src/main/java/cn/icanci/rec/engine/sdk/netty/spi/NettyDomainSPI.java b/rec-engine/rec-engine-sdk-netty/src/main/java/cn/icanci/rec/engine/sdk/netty/spi/NettyDomainSPI.java index 814b11d..4a09440 100644 --- a/rec-engine/rec-engine-sdk-netty/src/main/java/cn/icanci/rec/engine/sdk/netty/spi/NettyDomainSPI.java +++ b/rec-engine/rec-engine-sdk-netty/src/main/java/cn/icanci/rec/engine/sdk/netty/spi/NettyDomainSPI.java @@ -17,6 +17,11 @@ public class NettyDomainSPI extends AbstractLoadSPI implements DomainSPI { return null; } + @Override + public Set loadAllDomainCodes() { + return null; + } + @Override public List load(Set domains) { return null; diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/spi/DomainSPI.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/spi/DomainSPI.java index 40cb7d6..776feb2 100644 --- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/spi/DomainSPI.java +++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/spi/DomainSPI.java @@ -3,6 +3,8 @@ package cn.icanci.rec.engine.sdk.spi; import cn.icanci.rec.common.aggregation.model.DomainDTO; import cn.icanci.rec.engine.sdk.extensions.RecSpi; +import java.util.Set; + /** * 域加载SPI * @@ -19,4 +21,11 @@ public interface DomainSPI extends RecSupportSPI { * @return 返回相关的数据 */ DomainDTO loadOne(String domain); + + /** + * 加载所有域Code + * + * @return 返回所有域Code + */ + Set loadAllDomainCodes(); } -- Gitee From ceb66ec069e5ce6c3dc4685906482284d885438b Mon Sep 17 00:00:00 2001 From: icanci Date: Sun, 20 Nov 2022 17:23:25 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rule/repository/EngineRepositoryHolder.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/repository/EngineRepositoryHolder.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/repository/EngineRepositoryHolder.java index 6d2d679..ad3bb4b 100644 --- a/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/repository/EngineRepositoryHolder.java +++ b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/repository/EngineRepositoryHolder.java @@ -70,9 +70,20 @@ public class EngineRepositoryHolder { // 3.构建本地缓存 // 3.1 构建域信息 DomainDTO domainRepository = engineRepositoryLoader.loadDomain(domain); + // 3.1.1 构建域信息为空,说明域不存在,不处理 + if (domainRepository == null) { + logger.warn("[EngineRepositoryHolder][refresh] refresh domain:{} fail,error message: domainRepository is null", domain); + return; + } // 3.2 构建基础数据信息 List baseDatas = engineRepositoryLoader.loadBaseDatas(domain); + // 3.2.1 构建基础数据信息为空,说明基础数据不存在,不处理 + if (CollectionUtils.isEmpty(baseDatas)) { + logger.warn("[EngineRepositoryHolder][refresh] refresh domain:{} fail,error message: baseDatas is Empty", domain); + return; + } + // 3.2.1 编译执行脚本 compileBaseDataScript(baseDatas); // 3.2.2 属性仓储信息 @@ -94,6 +105,12 @@ public class EngineRepositoryHolder { Map refreshStrategies = strategies.stream() .collect(Collectors.toMap(x -> new DomainSceneKey(x.getDomainCode(), x.getSceneCode()), strategy -> strategy)); + // 3.5 构建策略为空,不处理 + if (CollectionUtils.isEmpty(strategies)) { + logger.warn("[EngineRepositoryHolder][refresh] refresh domain:{} fail,error message: strategies isEmpty", domain); + return; + } + // 4. 全部构建成功之后,再刷新缓存 repository.setDomainRepository(domainRepository); repository.getBaseDataRepository().putAll(refreshBaseDatas); -- Gitee