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 d7554c7d0a5ff34b59727a0cacaf2862b2a14788..a4bb510587b7c422f581bdc6ecf24ebfe2b2ac9c 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 55565ea0353c0ff2cc8b1c1c22cbfb7deb1711f9..c10bf613d027344a39d45903d4f74d7a121dc015 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 36e6be7210e0bb75c05f1080889b3bda996126e3..e9decf4824125544d21bc43eb878ddd9eb247dab 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 655cb0db0d1a6a9e2839b7d84f060a02a808854d..cfcc07ea8293cf970bbe87aa5aa5b7826b737d73 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 6a48a557fab2ddb013cfa7d4f8a7bdf9c51c8fcb..ec714b564a54015fca57afdfcb4ff8fcd3688077 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 c822cee6998fa478a970db8fc5c8f612cfa3ef8d..bba46913dbdbc0b1ef48458006b1a37555d4ff5b 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 814b11d6c2c21f28e9b97650eeea3073dc0d6c7d..4a0944038eb0cd011a3cbdd87e8671a99b79edd4 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/rule/repository/EngineRepositoryHolder.java b/rec-engine/rec-engine-sdk/src/main/java/cn/icanci/rec/engine/sdk/rule/repository/EngineRepositoryHolder.java index 6d2d6793283641a0910a804363c35056a25ff1bb..ad3bb4b44a0e26fa12e87e860c7224ff38cdb898 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); 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 40cb7d6d3a2f3bd4c8aa09dcbc0758b2ef051333..776feb2a36f58f0fe3c58e7fe90d40f0a9f1cd82 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(); }