diff --git a/radar-admin/src/main/java/com/pgmmers/AdminApplication.java b/radar-admin/src/main/java/com/pgmmers/AdminApplication.java index 8e39f13..8f4977f 100644 --- a/radar-admin/src/main/java/com/pgmmers/AdminApplication.java +++ b/radar-admin/src/main/java/com/pgmmers/AdminApplication.java @@ -12,7 +12,6 @@ import tk.mybatis.spring.annotation.MapperScan; public class AdminApplication { public static void main(String[] args) { - System.setProperty("es.set.netty.runtime.available.processors", "false"); SpringApplication.run(AdminApplication.class, args); } } diff --git a/radar-admin/src/main/java/com/pgmmers/radar/controller/ModelApiController.java b/radar-admin/src/main/java/com/pgmmers/radar/controller/ModelApiController.java index f7fd8fb..2cec08d 100644 --- a/radar-admin/src/main/java/com/pgmmers/radar/controller/ModelApiController.java +++ b/radar-admin/src/main/java/com/pgmmers/radar/controller/ModelApiController.java @@ -36,13 +36,13 @@ public class ModelApiController { @GetMapping("/{id}") public CommonResult get(@PathVariable Long id) { CommonResult result = new CommonResult(); - ModelVO modelVO = modelService.get(id); + ModelVO modelVO = modelService.getModelById(id); if (modelVO != null) { result.setSuccess(true); result.getData().put("model", modelVO); } return result; - } + } @GetMapping("/list") public CommonResult list(HttpServletRequest request) { @@ -119,14 +119,14 @@ public class ModelApiController { @PostMapping("/enable/{id}") public CommonResult enable(@PathVariable Long id) { - ModelVO modelVO = modelService.get(id); + ModelVO modelVO = modelService.getModelById(id); modelVO.setStatus(StatusType.ACTIVE.getKey()); return modelService.save(modelVO); } @PostMapping("/disable/{id}") public CommonResult disable(@PathVariable Long id) { - ModelVO modelVO = modelService.get(id); + ModelVO modelVO = modelService.getModelById(id); modelVO.setStatus(StatusType.INACTIVE.getKey()); return modelService.save(modelVO); } diff --git a/radar-engine/src/main/java/com/pgmmers/radar/EngineApplication.java b/radar-engine/src/main/java/com/pgmmers/radar/EngineApplication.java index 5af5ab4..a0ca213 100644 --- a/radar-engine/src/main/java/com/pgmmers/radar/EngineApplication.java +++ b/radar-engine/src/main/java/com/pgmmers/radar/EngineApplication.java @@ -10,7 +10,6 @@ import tk.mybatis.spring.annotation.MapperScan; public class EngineApplication { public static void main(String[] args) { - System.setProperty("es.set.netty.runtime.available.processors", "false"); SpringApplication.run(EngineApplication.class, args); } diff --git a/radar-engine/src/main/resources/application-dev.yml b/radar-engine/src/main/resources/application-dev.yml index e76e8c4..7369e65 100644 --- a/radar-engine/src/main/resources/application-dev.yml +++ b/radar-engine/src/main/resources/application-dev.yml @@ -37,5 +37,6 @@ sys: entity-duplicate-insert: false # 事件是否允许重复插入 mongo-restore-days: 93 # 事件保存时间,默认3个月 workdir: /radar/workdir # 工作目录 + machine-learning: true # 是否启用 机器学习 server: port: 6581 diff --git a/radar-service-impl/pom.xml b/radar-service-impl/pom.xml index adf9cba..71bcc58 100644 --- a/radar-service-impl/pom.xml +++ b/radar-service-impl/pom.xml @@ -47,6 +47,9 @@ org.tensorflow tensorflow - + + com.github.ben-manes.caffeine + caffeine + diff --git a/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/cache/CacheServiceImpl.java b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/cache/CacheServiceImpl.java index d6656c4..88d4ac5 100644 --- a/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/cache/CacheServiceImpl.java +++ b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/cache/CacheServiceImpl.java @@ -1,19 +1,23 @@ package com.pgmmers.radar.service.impl.cache; import com.alibaba.fastjson.JSON; - import com.pgmmers.radar.service.cache.CacheService; import com.pgmmers.radar.service.cache.RedisService; import com.pgmmers.radar.service.cache.SubscribeHandle; import com.pgmmers.radar.service.common.CommonResult; -import com.pgmmers.radar.vo.model.*; +import com.pgmmers.radar.vo.model.AbstractionVO; +import com.pgmmers.radar.vo.model.ActivationVO; +import com.pgmmers.radar.vo.model.DataListRecordVO; +import com.pgmmers.radar.vo.model.DataListsVO; +import com.pgmmers.radar.vo.model.FieldVO; +import com.pgmmers.radar.vo.model.ModelVO; +import com.pgmmers.radar.vo.model.PreItemVO; +import com.pgmmers.radar.vo.model.RuleVO; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.List; - @Service public class CacheServiceImpl implements CacheService { @@ -29,59 +33,10 @@ public class CacheServiceImpl implements CacheService { public static final String PUB_SUB_ACTIVATION_CHANNEL = "radar_channel_activation"; public static final String PUB_SUB_LISTRECORD_CHANNEL = "radar_channel_listrecord"; public static final String PUB_SUB_DATALIST_CHANNEL = "radar_channel_datalist"; - + @Autowired private RedisService redisService; - @Override - public void saveModel(ModelVO model) { - redisService.set(prefix + "model_" + model.getId(), model); - } - - @Override - public ModelVO getModel(Long modelId) { - return redisService.get(prefix + "model_" + modelId, ModelVO.class); - } - - @Override - public void saveField(FieldVO field) { - String key = prefix + "field_" + field.getModelId(); - redisService.hset(key, field.getFieldName(), field); - } - - @Override - public List listFields(Long modelId) { - String key = prefix + "field_" + modelId; - List list = redisService.hvals(key); - return list; - } - - @Override - public void saveAbstraction(AbstractionVO abstraction) { - String key = prefix + "abstraction_" + abstraction.getModelId(); - redisService.hset(key, abstraction.getName(), abstraction); - } - - @Override - public List listAbstraction(Long modelId) { - String key = prefix + "abstraction_" + modelId; - List list = redisService.hget(key, AbstractionVO.class); - return list; - } - - @Override - public void saveActivation(ActivationVO activation) { - String key = prefix + "activation_" + activation.getModelId(); - redisService.hset(key, activation.getActivationName(), activation); - } - - @Override - public List listActivation(Long modelId) { - String key = prefix + "activation_" + modelId; - List list = redisService.hget(key, ActivationVO.class); - return list; - } - @Override public void saveAntiFraudResult(String modelId, String sessionId, CommonResult result) { String key = prefix + "engine_" + modelId + sessionId; @@ -169,7 +124,7 @@ public class CacheServiceImpl implements CacheService { @Override public void publishDataListRecord(DataListRecordVO record) { redisService.publish(PUB_SUB_LISTRECORD_CHANNEL, JSON.toJSONString(record)); - + } @Override @@ -180,7 +135,7 @@ public class CacheServiceImpl implements CacheService { @Override public void publishDataList(DataListsVO dataList) { redisService.publish(PUB_SUB_DATALIST_CHANNEL, JSON.toJSONString(dataList)); - + } @Override diff --git a/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/engine/AntiFraudEngineImpl.java b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/engine/AntiFraudEngineImpl.java index 2ec44c0..e74feb8 100644 --- a/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/engine/AntiFraudEngineImpl.java +++ b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/engine/AntiFraudEngineImpl.java @@ -8,27 +8,49 @@ import com.pgmmers.radar.enums.StatusType; import com.pgmmers.radar.service.dnn.Estimator; import com.pgmmers.radar.service.engine.AggregateCommand; import com.pgmmers.radar.service.engine.AntiFraudEngine; -import com.pgmmers.radar.service.engine.vo.*; +import com.pgmmers.radar.service.engine.vo.AbstractionResult; +import com.pgmmers.radar.service.engine.vo.ActivationResult; +import com.pgmmers.radar.service.engine.vo.AdaptationResult; +import com.pgmmers.radar.service.engine.vo.HitObject; +import com.pgmmers.radar.service.engine.vo.RiskObject; import com.pgmmers.radar.service.impl.dnn.EstimatorContainer; -import com.pgmmers.radar.service.model.*; +import com.pgmmers.radar.service.model.AbstractionService; +import com.pgmmers.radar.service.model.ActivationService; +import com.pgmmers.radar.service.model.DataListsService; +import com.pgmmers.radar.service.model.EntityService; +import com.pgmmers.radar.service.model.FieldService; +import com.pgmmers.radar.service.model.ModelService; +import com.pgmmers.radar.service.model.RuleService; import com.pgmmers.radar.util.DateUtils; import com.pgmmers.radar.util.GroovyScriptUtil; -import com.pgmmers.radar.vo.model.*; +import com.pgmmers.radar.vo.model.AbstractionVO; +import com.pgmmers.radar.vo.model.ActivationVO; +import com.pgmmers.radar.vo.model.DataListRecordVO; +import com.pgmmers.radar.vo.model.DataListsVO; +import com.pgmmers.radar.vo.model.FieldVO; +import com.pgmmers.radar.vo.model.ModelVO; +import com.pgmmers.radar.vo.model.RuleVO; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; -import java.math.BigDecimal; -import java.util.*; - @Service public class AntiFraudEngineImpl implements AntiFraudEngine { private static Logger logger = LoggerFactory.getLogger(AntiFraudEngineImpl.class); private static Map> dataListCacheMap = new HashMap>(); - + @Value("${sys.conf.machine-learning: false}") + private boolean machineLearning; @Autowired private EntityService entityService; @@ -62,7 +84,7 @@ public class AntiFraudEngineImpl implements AntiFraudEngine { // 1. 解析 参数信息 //JSONObject entity = (JSONObject) data.get("entity"); - // 2. list abstraction + // 2. list abstraction List abstractions = abstractionService.listAbstraction(modelId); // 排除没有的定义 abstraction 的情况。 @@ -211,9 +233,9 @@ public class AntiFraudEngineImpl implements AntiFraudEngine { } /** - * + * * 后续需要优化.delete from next version - * + * * @param modelId * @return * @author feihu.wang @@ -248,10 +270,13 @@ public class AntiFraudEngineImpl implements AntiFraudEngine { @Override public AdaptationResult executeAdaptation(Long modelId, Map> data) { AdaptationResult result = new AdaptationResult(); - Estimator estimator = estimatorContainer.getByModelId(modelId); - if(estimator != null) { - float score = estimator.predict(modelId, data); - result.getAdaptationMap().put("score", score); +// 启动机器学习 + if (machineLearning){ + Estimator estimator = estimatorContainer.getByModelId(modelId); + if(estimator != null) { + float score = estimator.predict(modelId, data); + result.getAdaptationMap().put("score", score); + } } result.setSuccess(true); data.put("adaptations", result.getAdaptationMap()); @@ -264,7 +289,7 @@ public class AntiFraudEngineImpl implements AntiFraudEngine { List activations = activationService.listActivation(modelId); // 获取预加载的黑/白名单集合 Map dataCollectionMap = dataListsService.getDataListMap(modelId); - + for (ActivationVO act : activations) { if (!act.getStatus().equals(StatusType.ACTIVE.getKey())) { continue; @@ -347,9 +372,9 @@ public class AntiFraudEngineImpl implements AntiFraudEngine { } /** - * + * * 检查数据是否符合条件. - * + * * @param ruleScript string * @param entity map of params * @param dataCollectionMap like black list diff --git a/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/AbstractionServiceImpl.java b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/AbstractionServiceImpl.java index dac6160..7207926 100644 --- a/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/AbstractionServiceImpl.java +++ b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/AbstractionServiceImpl.java @@ -1,7 +1,6 @@ package com.pgmmers.radar.service.impl.model; import com.alibaba.fastjson.JSON; - import com.pgmmers.radar.dal.bean.AbstractionQuery; import com.pgmmers.radar.dal.model.AbstractionDal; import com.pgmmers.radar.dal.model.ModelDal; @@ -11,21 +10,25 @@ import com.pgmmers.radar.service.common.CommonResult; import com.pgmmers.radar.service.model.AbstractionService; import com.pgmmers.radar.util.GroovyScriptUtil; import com.pgmmers.radar.vo.model.AbstractionVO; +import java.util.List; +import javax.annotation.PostConstruct; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import javax.annotation.PostConstruct; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - @Service -public class AbstractionServiceImpl implements AbstractionService, SubscribeHandle { +public class AbstractionServiceImpl extends BaseLocalCacheService implements AbstractionService, + SubscribeHandle { + public static Logger logger = LoggerFactory.getLogger(AbstractionServiceImpl.class); + @Override + public Object query(Long modelId) { + return modelDal.listAbstraction(modelId, null); + } + @Autowired private ModelDal modelDal; @Autowired @@ -33,16 +36,10 @@ public class AbstractionServiceImpl implements AbstractionService, SubscribeHand @Autowired private CacheService cacheService; - public Map> contextMap = new HashMap>(); - @Override public List listAbstraction(Long modelId) { - List list = contextMap.get(modelId); - if (list == null || list.size() == 0) { - list = modelDal.listAbstraction(modelId, null); - contextMap.put(modelId, list); - } - return list; + //noinspection unchecked + return (List) getByCache(modelId); } @Override @@ -50,8 +47,7 @@ public class AbstractionServiceImpl implements AbstractionService, SubscribeHand logger.info("abstraction sub:{}", message); AbstractionVO abstraction = JSON.parseObject(message, AbstractionVO.class); if (abstraction != null) { - List list = modelDal.listAbstraction(abstraction.getModelId(), null); - contextMap.put(abstraction.getModelId(), list); + invalidateCache(abstraction.getModelId()); } } @@ -65,7 +61,7 @@ public class AbstractionServiceImpl implements AbstractionService, SubscribeHand public CommonResult list(Long modelId) { CommonResult result = new CommonResult(); result.setSuccess(true); - result.getData().put("list", abstractionDal.list(modelId)); + result.getData().put("list", listAbstraction(modelId)); return result; } @@ -89,11 +85,11 @@ public class AbstractionServiceImpl implements AbstractionService, SubscribeHand } int count = abstractionDal.save(abstraction); if (count > 0) { - if(StringUtils.isEmpty(abstraction.getName())){ - abstraction.setName("abstraction_" + abstraction.getId()); - abstractionDal.save(abstraction); - } - + if (StringUtils.isEmpty(abstraction.getName())) { + abstraction.setName("abstraction_" + abstraction.getId()); + abstractionDal.save(abstraction); + } + result.getData().put("id", abstraction.getId()); result.setSuccess(true); // 通知更新 @@ -114,7 +110,7 @@ public class AbstractionServiceImpl implements AbstractionService, SubscribeHand } return result; } - + @PostConstruct public void init() { cacheService.subscribeAbstraction(this); diff --git a/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/ActivationServiceImpl.java b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/ActivationServiceImpl.java index e195ab4..2cea777 100644 --- a/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/ActivationServiceImpl.java +++ b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/ActivationServiceImpl.java @@ -1,7 +1,6 @@ package com.pgmmers.radar.service.impl.model; import com.alibaba.fastjson.JSON; - import com.pgmmers.radar.dal.bean.ActivationQuery; import com.pgmmers.radar.dal.model.ActivationDal; import com.pgmmers.radar.dal.model.ModelDal; @@ -10,19 +9,21 @@ import com.pgmmers.radar.service.cache.SubscribeHandle; import com.pgmmers.radar.service.common.CommonResult; import com.pgmmers.radar.service.model.ActivationService; import com.pgmmers.radar.vo.model.ActivationVO; +import java.util.List; +import javax.annotation.PostConstruct; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import javax.annotation.PostConstruct; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - @Service -public class ActivationServiceImpl implements ActivationService, SubscribeHandle { +public class ActivationServiceImpl extends BaseLocalCacheService implements ActivationService, SubscribeHandle { + + @Override + public Object query(Long modelId) { + return modelDal.listActivation(modelId, null); + } public static Logger logger = LoggerFactory.getLogger(ActivationServiceImpl.class); @@ -35,16 +36,10 @@ public class ActivationServiceImpl implements ActivationService, SubscribeHandle @Autowired private CacheService cacheService; - public Map> contextMap = new HashMap>(); - @Override public List listActivation(Long modelId) { - List list = contextMap.get(modelId); - if (list == null || list.size() == 0) { - list = modelDal.listActivation(modelId, null); - contextMap.put(modelId, list); - } - return list; + //noinspection unchecked + return (List) getByCache(modelId); } @Override @@ -52,8 +47,7 @@ public class ActivationServiceImpl implements ActivationService, SubscribeHandle logger.info("activation sub:{}", message); ActivationVO act = JSON.parseObject(message, ActivationVO.class); if (act != null) { - List list = modelDal.listActivation(act.getModelId(), null); - contextMap.put(act.getModelId(), list); + invalidateCache(act.getModelId()); } } @@ -99,7 +93,7 @@ public class ActivationServiceImpl implements ActivationService, SubscribeHandle } return result; } - + @Override public CommonResult updateOrder(Long activationId, String ruleOrder) { CommonResult result = new CommonResult(); @@ -117,6 +111,6 @@ public class ActivationServiceImpl implements ActivationService, SubscribeHandle @PostConstruct public void init() { cacheService.subscribeActivation(this); - } + } } diff --git a/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/BaseLocalCacheService.java b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/BaseLocalCacheService.java new file mode 100644 index 0000000..9b61888 --- /dev/null +++ b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/BaseLocalCacheService.java @@ -0,0 +1,35 @@ +package com.pgmmers.radar.service.impl.model; + +import com.github.benmanes.caffeine.cache.Caffeine; +import com.github.benmanes.caffeine.cache.LoadingCache; +import com.pgmmers.radar.service.cache.SubscribeHandle; +import java.time.Duration; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * 围绕规则模型的缓存服务 + */ +public abstract class BaseLocalCacheService implements SubscribeHandle { + + private static final Logger logger = LoggerFactory.getLogger(BaseLocalCacheService.class); + protected LoadingCache localCache = Caffeine + .newBuilder() + .maximumSize(64) + .expireAfterAccess(Duration.ofHours(1)) + .build(this::query); + + public Object query(Long key) { + logger.error("query is not implements,check!"); + return null; + } + + public Object getByCache(Long key) { + return localCache.get(key); + } + + public void invalidateCache(Long key) { + localCache.invalidate(key); + } + +} diff --git a/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/DataListRecordServiceImpl.java b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/DataListRecordServiceImpl.java index bc00b36..e8e58a4 100644 --- a/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/DataListRecordServiceImpl.java +++ b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/DataListRecordServiceImpl.java @@ -1,23 +1,20 @@ package com.pgmmers.radar.service.impl.model; import com.alibaba.fastjson.JSON; - import com.pgmmers.radar.dal.model.DataListDal; -import com.pgmmers.radar.dal.model.ModelDal; import com.pgmmers.radar.service.cache.CacheService; import com.pgmmers.radar.service.cache.SubscribeHandle; import com.pgmmers.radar.service.model.DataListRecordService; import com.pgmmers.radar.service.model.DataListsService; import com.pgmmers.radar.vo.model.DataListRecordVO; import com.pgmmers.radar.vo.model.DataListsVO; +import java.util.Map; +import javax.annotation.PostConstruct; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import javax.annotation.PostConstruct; -import java.util.Map; - @Service public class DataListRecordServiceImpl implements DataListRecordService, SubscribeHandle { @@ -29,9 +26,6 @@ public class DataListRecordServiceImpl implements DataListRecordService, private DataListDal dataListDal; @Autowired private CacheService cacheService; - @Autowired - private ModelDal modelDal; - @Autowired private DataListsService dataListsService; diff --git a/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/DataListsServiceImpl.java b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/DataListsServiceImpl.java index 9900777..d550790 100644 --- a/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/DataListsServiceImpl.java +++ b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/DataListsServiceImpl.java @@ -4,38 +4,37 @@ import com.alibaba.fastjson.JSON; import com.pgmmers.radar.dal.bean.DataListQuery; import com.pgmmers.radar.dal.bean.DataListRecordQuery; import com.pgmmers.radar.dal.model.DataListDal; -import com.pgmmers.radar.dal.model.ModelDal; import com.pgmmers.radar.service.cache.CacheService; import com.pgmmers.radar.service.cache.SubscribeHandle; import com.pgmmers.radar.service.common.CommonResult; import com.pgmmers.radar.service.model.DataListsService; +import com.pgmmers.radar.service.model.ModelService; import com.pgmmers.radar.vo.model.DataListMetaVO; import com.pgmmers.radar.vo.model.DataListRecordVO; import com.pgmmers.radar.vo.model.DataListsVO; import com.pgmmers.radar.vo.model.ModelVO; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import javax.annotation.PostConstruct; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import javax.annotation.PostConstruct; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - @Service public class DataListsServiceImpl implements DataListsService, SubscribeHandle { public static Logger logger = LoggerFactory.getLogger(DataListsServiceImpl.class); - + @Autowired private DataListDal dataListDal; @Autowired private CacheService cacheService; @Autowired - private ModelDal modelDal; + private ModelService modelService; private static Map> dataListRecordCacheMap = new HashMap<>(); @@ -79,10 +78,10 @@ public class DataListsServiceImpl implements DataListsService, SubscribeHandle { dataList.setName("dataList_"+dataList.getId()); dataListDal.save(dataList); } - + result.getData().put("id", dataList.getId()); result.setSuccess(true); - // 通知更新 + // 通知更新 dataList.setOpt("new"); cacheService.publishDataList(dataList); } @@ -96,7 +95,7 @@ public class DataListsServiceImpl implements DataListsService, SubscribeHandle { int count = dataListDal.delete(id); if (count > 0) { result.setSuccess(true); - // 通知更新 + // 通知更新 dataList.setOpt("delete"); cacheService.publishDataList(dataList); } @@ -131,7 +130,7 @@ public class DataListsServiceImpl implements DataListsService, SubscribeHandle { metaMap.remove(dataListMeta.getId()); } dataListDal.saveMeta(dataListMeta); - + if(StringUtils.isEmpty(dataListMeta.getFieldName())){ dataListMeta.setFieldName("dataListMeta_"+dataListMeta.getId()); dataListDal.saveMeta(dataListMeta); @@ -225,14 +224,14 @@ public class DataListsServiceImpl implements DataListsService, SubscribeHandle { public void init() { cacheService.subscribeDataList(this); new Thread(() ->{ - - List modelList = modelDal.listModel(null); + + List modelList = modelService.listModel(null); // 加载系统数据名单列表 Map sysDataListMap = new HashMap<>(); List sysList = dataListDal.listDataLists(0L, null); for (DataListsVO dataListVO : sysList) { Map dataListRecords = new HashMap(); - // record list + // record list List recordVOList = dataListDal.listDataRecord(dataListVO.getId()); if (recordVOList != null) { for (DataListRecordVO record : recordVOList) { @@ -241,8 +240,8 @@ public class DataListsServiceImpl implements DataListsService, SubscribeHandle { } sysDataListMap.put(dataListVO.getName(), dataListRecords); } - - + + for (ModelVO model : modelList) { Map dataListMap = new HashMap<>(); // datalist list @@ -250,7 +249,7 @@ public class DataListsServiceImpl implements DataListsService, SubscribeHandle { if (dataLists != null) { for (DataListsVO dataListVO : dataLists) { Map dataListRecords = new HashMap<>(); - // record list + // record list List recordVOList = dataListDal.listDataRecord(dataListVO.getId()); if (recordVOList != null) { for (DataListRecordVO record : recordVOList) { @@ -258,11 +257,11 @@ public class DataListsServiceImpl implements DataListsService, SubscribeHandle { } } dataListMap.put(dataListVO.getName(), dataListRecords); - + } } - + // add sys data list dataListMap.putAll(sysDataListMap); dataListRecordCacheMap.put(model.getId(), dataListMap); diff --git a/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/EntityServiceImpl.java b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/EntityServiceImpl.java index 904831f..05ff152 100644 --- a/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/EntityServiceImpl.java +++ b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/EntityServiceImpl.java @@ -1,15 +1,11 @@ package com.pgmmers.radar.service.impl.model; -import com.pgmmers.radar.dal.model.ModelDal; -import com.pgmmers.radar.service.cache.CacheService; -import com.pgmmers.radar.service.cache.SubscribeHandle; import com.pgmmers.radar.service.data.MongoService; import com.pgmmers.radar.service.model.EntityService; +import com.pgmmers.radar.service.model.ModelService; import com.pgmmers.radar.vo.model.ModelVO; -import java.util.ArrayList; import java.util.Date; import java.util.List; -import javax.annotation.PostConstruct; import org.bson.Document; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -17,43 +13,22 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service -public class EntityServiceImpl implements EntityService, SubscribeHandle { +public class EntityServiceImpl implements EntityService { private Logger logger = LoggerFactory.getLogger(EntityServiceImpl.class); - @Autowired - private ModelDal modelDal; - - @Autowired - private CacheService cacheService; - + private ModelService modelService; @Autowired private MongoService mongoService; - - private List modelList = new ArrayList<>(); - @PostConstruct - public void init() { - modelList = modelDal.listModel(null); - cacheService.subscribeModel(this); - } @Override public int save(Long modelId, String jsonString, boolean isAllowDuplicate) { String tmpUrl = "entity_" + modelId; Document doc = Document.parse(jsonString); if (!isAllowDuplicate) { - ModelVO model = null;//cacheService.getModel(modelId); - for (ModelVO vo : modelList) { - if (vo.getId().equals(modelId)) { - model = vo; - break; - } - } - if (model == null) { - model = modelDal.getModelById(modelId); - } + ModelVO model = modelService.getModelById(modelId); Document filter = new Document(); filter.append(model.getEntryName(), doc.get(model.getEntryName())); long qty = mongoService.count(tmpUrl, filter); @@ -72,27 +47,13 @@ public class EntityServiceImpl implements EntityService, SubscribeHandle { return null; } - @Override - public void onMessage(String channel, String message) { - modelList = modelDal.listModel(null); - } - @Override public int save(Long modelId, String jsonString, String attachJson, boolean isAllowDuplicate) { String tmpUrl = "entity_" + modelId; Document doc = Document.parse(jsonString); Document atta = Document.parse(attachJson); - ModelVO model = null;//cacheService.getModel(modelId); - for (ModelVO vo : modelList) { - if (vo.getId().equals(modelId)) { - model = vo; - break; - } - } - if (model == null) { - model = modelDal.getModelById(modelId); - } + ModelVO model = modelService.getModelById(modelId); atta.put("radar_ref_datetime", new Date(doc.getLong(model.getReferenceDate()))); doc.putAll(atta); if (!isAllowDuplicate) { diff --git a/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/FieldServiceImpl.java b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/FieldServiceImpl.java index 38465ae..c702d86 100644 --- a/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/FieldServiceImpl.java +++ b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/FieldServiceImpl.java @@ -1,7 +1,6 @@ package com.pgmmers.radar.service.impl.model; import com.alibaba.fastjson.JSON; - import com.pgmmers.radar.dal.bean.FieldQuery; import com.pgmmers.radar.dal.bean.PageResult; import com.pgmmers.radar.dal.model.FieldDal; @@ -12,49 +11,43 @@ import com.pgmmers.radar.service.common.CommonResult; import com.pgmmers.radar.service.model.FieldService; import com.pgmmers.radar.vo.model.FieldVO; import com.pgmmers.radar.vo.model.ModelVO; +import java.util.List; +import javax.annotation.PostConstruct; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import javax.annotation.PostConstruct; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - @Service -public class FieldServiceImpl implements FieldService, SubscribeHandle { +public class FieldServiceImpl extends BaseLocalCacheService implements FieldService, SubscribeHandle { public static Logger logger = LoggerFactory.getLogger(FieldServiceImpl.class); - @Autowired - private ModelDal modelDal; - @Autowired - private FieldDal fieldDal; - @Autowired - private CacheService cacheService; + private final ModelDal modelDal; + private final FieldDal fieldDal; + private final CacheService cacheService; + public FieldServiceImpl( + ModelDal modelDal, FieldDal fieldDal, CacheService cacheService) { + this.modelDal = modelDal; + this.fieldDal = fieldDal; + this.cacheService = cacheService; + } - public Map> contextMap = new HashMap>(); + @Override + public Object query(Long modelId) { + return modelDal.listField(modelId); + } @Override public List listField(Long modelId) { - List list = null;// cacheService.listFields(modelId); - list = contextMap.get(modelId); - if (list == null || list.size() == 0) { - list = modelDal.listField(modelId); - contextMap.put(modelId, list); - // for (FieldVO vo: list) - // cacheService.saveField(vo); - } - return list; + //noinspection unchecked + return (List) getByCache(modelId); } @Override public void onMessage(String channel, String message) { logger.info("field sub: {},{}", channel, message); FieldVO field = JSON.parseObject(message, FieldVO.class); - List list = modelDal.listField(field.getModelId()); - contextMap.put(field.getModelId(), list); + invalidateCache(field.getModelId()); } @Override @@ -89,7 +82,6 @@ public class FieldServiceImpl implements FieldService, SubscribeHandle { field.setFieldName("field_"+field.getId()); fieldDal.save(field); } - result.getData().put("id", field.getId()); result.setSuccess(true); // 通知更新 @@ -117,7 +109,7 @@ public class FieldServiceImpl implements FieldService, SubscribeHandle { } return result; } - + @PostConstruct public void init() { cacheService.subscribeField(this); diff --git a/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/ModelServiceImpl.java b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/ModelServiceImpl.java index fa22f95..24f8bc0 100644 --- a/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/ModelServiceImpl.java +++ b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/ModelServiceImpl.java @@ -16,14 +16,17 @@ import com.pgmmers.radar.service.common.CommonResult; import com.pgmmers.radar.service.data.MongoService; import com.pgmmers.radar.service.model.ModelService; import com.pgmmers.radar.service.search.SearchEngineService; +import com.pgmmers.radar.util.JsonUtils; import com.pgmmers.radar.vo.model.FieldVO; import com.pgmmers.radar.vo.model.ModelVO; import com.pgmmers.radar.vo.model.PreItemVO; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.UUID; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; import javax.annotation.PostConstruct; import org.apache.commons.lang3.StringUtils; import org.bson.Document; @@ -35,7 +38,12 @@ import org.springframework.stereotype.Service; @Service -public class ModelServiceImpl implements ModelService, SubscribeHandle { +public class ModelServiceImpl extends BaseLocalCacheService implements ModelService, SubscribeHandle { + + @Override + public Object query(Long modelId) { + return modelDal.getModelById(modelId); + } public static Logger logger = LoggerFactory .getLogger(ModelServiceImpl.class); @@ -55,53 +63,48 @@ public class ModelServiceImpl implements ModelService, SubscribeHandle { @Autowired private MongoService mongoService; - private List modelList = new ArrayList<>(); + // 维护GUID到modelId的映射 + private Map guidMap; @PostConstruct public void init() { - modelList = modelDal.listModel(null); + guidMap = modelDal.listModel(null).stream() + .collect(Collectors.toMap(ModelVO::getGuid, ModelVO::getId)); cacheService.subscribeModel(this); } @Override public List listModel(String merchantCode, Integer status) { - List modelList = modelDal.listModel(merchantCode, status); - return modelList; + return modelDal.listModel(merchantCode, status); } @Override public List listModel(Integer status) { - if (modelList == null) { - modelList = modelDal.listModel(status); - } - return modelList; + return modelDal.listModel(status); } @Override public ModelVO getModelByGuid(String guid) { - for (ModelVO mod : modelList) { - if (mod.getGuid().equals(guid)) { - return mod; - } + long modelId = guidMap.get(guid); + ModelVO vo = (ModelVO) getByCache(modelId); + if (vo == null) { + vo = modelDal.getModelByGuid(guid); + guidMap.put(vo.getGuid(), vo.getId()); } - ModelVO model = modelDal.getModelByGuid(guid); - return model; + return vo; } @Override public ModelVO getModelById(Long id) { - return modelDal.getModelById(id); + return (ModelVO) getByCache(id); } @Override public void onMessage(String channel, String message) { - logger.info("model sub:{}", message); - modelList = modelDal.listModel(null); - } - - @Override - public ModelVO get(Long id) { - return modelDal.getModelById(id); + logger.info("model update message:{}", message); + ModelVO vo = JsonUtils.fromJson(message, ModelVO.class); +// 删除本地缓存的规则模型 + invalidateCache(vo.getId()); } @Override @@ -149,16 +152,16 @@ public class ModelServiceImpl implements ModelService, SubscribeHandle { } @Override - public CommonResult delete(Long[] id) { + public CommonResult delete(Long[] ids) { CommonResult result = new CommonResult(); - ModelVO model = modelDal.getModelById(id[0]); + ModelVO model = modelDal.getModelById(ids[0]); if (model.getTemplate()) { result.setCode("701"); result.setSuccess(false); result.setMsg("系统模板禁止删除!"); return result; } - int count = modelDal.delete(id); + int count = modelDal.delete(ids); if (count > 0) { result.setSuccess(true); // 通知更新 @@ -170,7 +173,7 @@ public class ModelServiceImpl implements ModelService, SubscribeHandle { @Override public CommonResult build(Long id) throws IOException { CommonResult result = new CommonResult(); - ModelVO modelVO = modelDal.getModelById(id); + ModelVO modelVO = getModelById(id); List fields = modelDal.listField(id); List items = modelDal.listPreItem(id, null); String collectionName = "entity_" + id; @@ -184,7 +187,7 @@ public class ModelServiceImpl implements ModelService, SubscribeHandle { } // 为需要索引的字段添加索引 for (FieldVO field : fields) { - if (field.getIndexed().booleanValue()) { + if (field.getIndexed()) { Document indexKey = new Document(); indexKey.put(field.getFieldName(), 1); IndexModel index = new IndexModel(indexKey); diff --git a/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/PreItemServiceImpl.java b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/PreItemServiceImpl.java index 716ed68..3aa9151 100644 --- a/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/PreItemServiceImpl.java +++ b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/PreItemServiceImpl.java @@ -3,7 +3,6 @@ package com.pgmmers.radar.service.impl.model; import com.alibaba.fastjson.JSON; import com.pgmmers.radar.dal.bean.PageResult; import com.pgmmers.radar.dal.bean.PreItemQuery; -import com.pgmmers.radar.dal.model.FieldDal; import com.pgmmers.radar.dal.model.ModelDal; import com.pgmmers.radar.dal.model.PreItemDal; import com.pgmmers.radar.service.cache.CacheService; @@ -11,41 +10,36 @@ import com.pgmmers.radar.service.cache.SubscribeHandle; import com.pgmmers.radar.service.common.CommonResult; import com.pgmmers.radar.service.model.PreItemService; import com.pgmmers.radar.vo.model.PreItemVO; +import java.util.List; +import javax.annotation.PostConstruct; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import javax.annotation.PostConstruct; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - @Service -public class PreItemServiceImpl implements PreItemService, SubscribeHandle { +public class PreItemServiceImpl extends BaseLocalCacheService implements PreItemService, SubscribeHandle { public static Logger logger = LoggerFactory.getLogger(FieldServiceImpl.class); - public Map> contextMap = new HashMap>(); + + @Override + public Object query(Long modelId) { + return modelDal.listPreItem(modelId, null); + } @Autowired private ModelDal modelDal; @Autowired private PreItemDal preItemDal; @Autowired - private FieldDal fieldDal; - @Autowired private CacheService cacheService; @Override public List listPreItem(Long modelId) { - List list = contextMap.get(modelId); - if (list == null) { - list = modelDal.listPreItem(modelId, null); - contextMap.put(modelId, list); - } - return list; + //noinspection unchecked + return (List) getByCache(modelId); } @Override @@ -53,8 +47,7 @@ public class PreItemServiceImpl implements PreItemService, SubscribeHandle { logger.info("prefield sub:{}", message); PreItemVO preItem = JSON.parseObject(message, PreItemVO.class); if (preItem != null) { - List list = modelDal.listPreItem(preItem.getModelId(), null); - contextMap.put(preItem.getModelId(), list); + invalidateCache(preItem.getModelId()); } } @@ -92,7 +85,7 @@ public class PreItemServiceImpl implements PreItemService, SubscribeHandle { preItem.setDestField("preItem_" + preItem.getId()); preItemDal.save(preItem); } - + result.getData().put("id", preItem.getId()); result.setSuccess(true); // 通知更新 @@ -113,7 +106,7 @@ public class PreItemServiceImpl implements PreItemService, SubscribeHandle { } return result; } - + @PostConstruct public void init() { cacheService.subscribePreItem(this); diff --git a/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/RuleServiceImpl.java b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/RuleServiceImpl.java index 390eda7..2b797dc 100644 --- a/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/RuleServiceImpl.java +++ b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/model/RuleServiceImpl.java @@ -27,11 +27,16 @@ import javax.annotation.PostConstruct; import java.util.*; @Service -public class RuleServiceImpl implements RuleService, SubscribeHandle { +public class RuleServiceImpl extends BaseLocalCacheService implements RuleService, SubscribeHandle { public static Logger logger = LoggerFactory .getLogger(RuleServiceImpl.class); + @Override + public Object query(Long activationId) { + return modelDal.listRules(null, activationId, null); + } + @Autowired private ModelDal modelDal; @Autowired @@ -53,12 +58,8 @@ public class RuleServiceImpl implements RuleService, SubscribeHandle { @Override public List listRule(Long activationId) { - List list = contextMap.get(activationId); - if (list == null) { - list = modelDal.listRules(null, activationId, null); - contextMap.put(activationId, list); - } - return list; + //noinspection unchecked + return (List) getByCache(activationId); } @Override @@ -66,9 +67,7 @@ public class RuleServiceImpl implements RuleService, SubscribeHandle { logger.info("rule sub:{}", message); RuleVO rule = JSON.parseObject(message, RuleVO.class); if (rule != null) { - List list = modelDal.listRules(null, - rule.getActivationId(), null); - contextMap.put(rule.getActivationId(), list); + invalidateCache(rule.getActivationId()); } } @@ -81,7 +80,7 @@ public class RuleServiceImpl implements RuleService, SubscribeHandle { public CommonResult query(RuleQuery query) { CommonResult result = new CommonResult(); ActivationVO activation = activationDal.get(query.getActivationId()); - + result.setSuccess(true); result.getData().put("ruleOrder", activation.getRuleOrder()); result.getData().put("page", ruleDal.query(query)); @@ -106,7 +105,7 @@ public class RuleServiceImpl implements RuleService, SubscribeHandle { } result.getData().put("id", rule.getId()); result.setSuccess(true); - + // 存储History RuleHistoryVO ruleHistoryVO=new RuleHistoryVO(); ruleHistoryVO.setRuleId(rule.getId()); @@ -120,7 +119,7 @@ public class RuleServiceImpl implements RuleService, SubscribeHandle { ruleHistoryVO.setRuleDefinition(rule.getRuleDefinition().asText()); ruleHistoryVO.setUpdateTime(rule.getUpdateTime()); ruleDal.saveHistory(ruleHistoryVO); - + // 通知更新 cacheService.publishRule(rule); } @@ -132,7 +131,7 @@ public class RuleServiceImpl implements RuleService, SubscribeHandle { CommonResult result = new CommonResult(); RuleVO rule = ruleDal.get(id[0]); int count = ruleDal.delete(id); - if (count > 0) { + if (count > 0) { result.setSuccess(true); // 通知更新 cacheService.publishRule(rule); @@ -194,7 +193,7 @@ public class RuleServiceImpl implements RuleService, SubscribeHandle { @Override public CommonResult queryHistory(RuleHistoryQuery query) { CommonResult result = new CommonResult(); - + result.setSuccess(true); result.getData().put("page", ruleDal.queryHistory(query)); return result; diff --git a/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/util/MongodbUtil.java b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/util/MongodbUtil.java deleted file mode 100644 index 55b69e1..0000000 --- a/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/util/MongodbUtil.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.pgmmers.radar.service.impl.util; - -import com.mongodb.client.AggregateIterable; -import com.mongodb.client.FindIterable; -import com.mongodb.client.MongoCollection; -import java.util.Iterator; -import java.util.List; -import org.bson.BsonValue; -import org.bson.Document; -import org.bson.conversions.Bson; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.data.mongodb.core.MongoTemplate; -import org.springframework.stereotype.Component; - -/** - * 重新封装类。 - * @author feihu.wang - * @since 2020.04.15 - */ -@Deprecated -//@Component -public class MongodbUtil implements InitializingBean { - - public static MongoTemplate mongoTemplate; - - @Override - public void afterPropertiesSet() { - mongoTemplate = (MongoTemplate) BeanUtils.getBean("mongoTemplate"); - } - - public static MongoCollection getCollection(String collectionName) { - return mongoTemplate.getCollection(collectionName); - } - - public static void insert(String collectionName, Document doc) { - MongoCollection collection = getCollection(collectionName); - collection.insertOne(doc); - } - - public static long count(String collectionName, Bson filter) { - MongoCollection collection = getCollection(collectionName); - return collection.countDocuments(filter); - } - - public static long distinctCount(String collectionName, Bson filter, String fieldName) { - MongoCollection collection =getCollection(collectionName); - long count = 0; - Iterator it = collection.distinct(fieldName, filter, BsonValue.class).iterator(); - while (it.hasNext()) { - it.next(); - count++; - } - return count; - } - - public static AggregateIterable aggregate(String collectionName, List pipeline) { - MongoCollection collection = getCollection(collectionName); - return collection.aggregate(pipeline); - } - - public static FindIterable find(String collectionName, Bson filter) { - MongoCollection collection = getCollection(collectionName); - return collection.find(filter); - } - -} diff --git a/radar-service/src/main/java/com/pgmmers/radar/service/cache/CacheService.java b/radar-service/src/main/java/com/pgmmers/radar/service/cache/CacheService.java index a0d4fd8..3ab8f85 100644 --- a/radar-service/src/main/java/com/pgmmers/radar/service/cache/CacheService.java +++ b/radar-service/src/main/java/com/pgmmers/radar/service/cache/CacheService.java @@ -1,31 +1,17 @@ package com.pgmmers.radar.service.cache; - import com.pgmmers.radar.service.common.CommonResult; -import com.pgmmers.radar.vo.model.*; - -import java.io.Serializable; -import java.util.List; +import com.pgmmers.radar.vo.model.AbstractionVO; +import com.pgmmers.radar.vo.model.ActivationVO; +import com.pgmmers.radar.vo.model.DataListRecordVO; +import com.pgmmers.radar.vo.model.DataListsVO; +import com.pgmmers.radar.vo.model.FieldVO; +import com.pgmmers.radar.vo.model.ModelVO; +import com.pgmmers.radar.vo.model.PreItemVO; +import com.pgmmers.radar.vo.model.RuleVO; public interface CacheService { - - void saveModel(ModelVO model); - - ModelVO getModel(Long modelId); - - void saveField(FieldVO field); - - List listFields(Long modelId); - - void saveAbstraction(AbstractionVO abstraction); - - List listAbstraction(Long modelId); - - void saveActivation(ActivationVO activation); - - List listActivation(Long modelId); - void saveAntiFraudResult(String modelId, String sessionId, CommonResult result); CommonResult getAntiFraudResult(String modelId, String sessionId); @@ -53,10 +39,10 @@ public interface CacheService { void publishActivation(ActivationVO activation); void subscribeActivation(SubscribeHandle handler); - + void publishDataListRecord(DataListRecordVO record); void subscribeDataListRecord(SubscribeHandle handler); - + void publishDataList(DataListsVO dataList); void subscribeDataList(SubscribeHandle handler); diff --git a/radar-service/src/main/java/com/pgmmers/radar/service/model/ModelService.java b/radar-service/src/main/java/com/pgmmers/radar/service/model/ModelService.java index 735a020..7023b3c 100644 --- a/radar-service/src/main/java/com/pgmmers/radar/service/model/ModelService.java +++ b/radar-service/src/main/java/com/pgmmers/radar/service/model/ModelService.java @@ -21,8 +21,6 @@ public interface ModelService { ModelVO getModelById(Long id); - ModelVO get(Long id); - CommonResult query(ModelQuery query); CommonResult save(ModelVO model);