mirror of
https://gitee.com/freshday/radar.git
synced 2026-03-22 04:37:16 +08:00
Merge pull request #66 from wfh45678/develop
1.经纬度转换成行政区域 2.HTTP插件支持多参数 3.前端支持系统黑白黑白名单 4.规则命中图标支持时间过滤
This commit is contained in:
@@ -81,7 +81,7 @@ The project code called Radar, like the code, monitor the transaction at the bac
|
||||
特征工程,例如用户小时交易次数,IP 一天交易金额,设备一小时交易次数。。。
|
||||
### Adaptation: 机器学习模型适配器
|
||||
使用训练好的机器学习模型,进行检测
|
||||
### Activation: 激活点
|
||||
### Activation: 激活器
|
||||
概念类似于机器学习里面的 (Activation Function), 一个模型可以定义多个 activation(相当于不同维度的检测报告),每个activation都可以独立配置规则,单独打分。
|
||||
例如,用户注册行为, 可以定义:异常注册, 垃圾注册, 可以输出多个activation。
|
||||
### Rule: 规则
|
||||
|
||||
2
pom.xml
2
pom.xml
@@ -20,7 +20,7 @@
|
||||
</parent>
|
||||
<groupId>com.pgmmers</groupId>
|
||||
<artifactId>radar</artifactId>
|
||||
<version>1.0.5-SNAPSHOT</version>
|
||||
<version>1.0.6-SNAPSHOT</version>
|
||||
<name>radar</name>
|
||||
<description>Demo project for Spring Boot</description>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>radar</artifactId>
|
||||
<groupId>com.pgmmers</groupId>
|
||||
<version>1.0.5-SNAPSHOT</version>
|
||||
<version>1.0.6-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>radar-admin</artifactId>
|
||||
|
||||
@@ -8,7 +8,7 @@ import com.pgmmers.radar.service.common.CommonResult;
|
||||
import com.pgmmers.radar.service.engine.PluginServiceV2;
|
||||
import com.pgmmers.radar.service.engine.vo.DataColumnInfo;
|
||||
import com.pgmmers.radar.service.enums.DataType;
|
||||
import com.pgmmers.radar.service.impl.engine.Plugin.PluginManager;
|
||||
import com.pgmmers.radar.service.impl.engine.plugin.PluginManager;
|
||||
import com.pgmmers.radar.service.model.AbstractionService;
|
||||
import com.pgmmers.radar.service.model.FieldService;
|
||||
import com.pgmmers.radar.service.model.PreItemService;
|
||||
|
||||
@@ -9,7 +9,7 @@ import com.pgmmers.radar.service.common.CommonResult;
|
||||
import com.pgmmers.radar.service.engine.PluginServiceV2;
|
||||
import com.pgmmers.radar.service.engine.vo.DataColumnInfo;
|
||||
import com.pgmmers.radar.service.enums.DataType;
|
||||
import com.pgmmers.radar.service.impl.engine.Plugin.PluginManager;
|
||||
import com.pgmmers.radar.service.impl.engine.plugin.PluginManager;
|
||||
import com.pgmmers.radar.service.model.AbstractionService;
|
||||
import com.pgmmers.radar.service.model.ActivationService;
|
||||
import com.pgmmers.radar.service.model.FieldService;
|
||||
|
||||
@@ -5,7 +5,7 @@ import com.alibaba.excel.util.IoUtils;
|
||||
import com.pgmmers.radar.enums.FieldType;
|
||||
import com.pgmmers.radar.service.cache.CacheService;
|
||||
import com.pgmmers.radar.service.common.CommonResult;
|
||||
import com.pgmmers.radar.service.impl.engine.Plugin.PluginManager;
|
||||
import com.pgmmers.radar.service.impl.engine.plugin.PluginManager;
|
||||
import com.pgmmers.radar.util.CaptchaUtil;
|
||||
import com.pgmmers.radar.util.ZipUtils;
|
||||
import com.pgmmers.radar.vo.common.PluginVO;
|
||||
|
||||
@@ -10,7 +10,7 @@ import com.pgmmers.radar.service.common.CommonResult;
|
||||
import com.pgmmers.radar.service.engine.PluginServiceV2;
|
||||
import com.pgmmers.radar.service.engine.vo.DataColumnInfo;
|
||||
import com.pgmmers.radar.service.enums.DataType;
|
||||
import com.pgmmers.radar.service.impl.engine.Plugin.PluginManager;
|
||||
import com.pgmmers.radar.service.impl.engine.plugin.PluginManager;
|
||||
import com.pgmmers.radar.service.logs.EventService;
|
||||
import com.pgmmers.radar.service.model.ActivationService;
|
||||
import com.pgmmers.radar.service.model.FieldService;
|
||||
@@ -78,7 +78,7 @@ public class EventApiController {
|
||||
@PostMapping("/search")
|
||||
public CommonResult search(@RequestBody TermQuery term, HttpSession session) {
|
||||
CommonResult result = new CommonResult();
|
||||
PageResult<Object> page = new PageResult<>(1, 10, 0, new ArrayList<>());
|
||||
PageResult<Object> page ;
|
||||
page = eventService.query(term);
|
||||
if (page != null) {
|
||||
result.getData().put("page", page);
|
||||
@@ -242,9 +242,10 @@ public class EventApiController {
|
||||
String file = "e:\\tmp\\" + System.currentTimeMillis() + ".xlsx";
|
||||
FileOutputStream fos = null;
|
||||
|
||||
|
||||
response.setContentType("application/ms-excel");// 设置相应类型,告诉浏览器输出的内容为图片
|
||||
response.setHeader("Pragma", "No-cache");// 设置响应头信息,告诉浏览器不要缓存此内容
|
||||
// 设置相应类型,告诉浏览器输出的内容为图片
|
||||
response.setContentType("application/ms-excel");
|
||||
// 设置响应头信息,告诉浏览器不要缓存此内容
|
||||
response.setHeader("Pragma", "No-cache");
|
||||
response.setHeader("Cache-Control", "no-cache");
|
||||
response.setDateHeader("Expire", 0);
|
||||
OutputStream os = null;
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package com.pgmmers.radar.controller;
|
||||
|
||||
import com.pgmmers.radar.dal.bean.EventQuery;
|
||||
import com.pgmmers.radar.dal.bean.RuleHistoryQuery;
|
||||
import com.pgmmers.radar.dal.bean.RuleQuery;
|
||||
import com.pgmmers.radar.intercpt.ContextHolder;
|
||||
import com.pgmmers.radar.service.common.CommonResult;
|
||||
import com.pgmmers.radar.service.model.ModelService;
|
||||
import com.pgmmers.radar.service.model.RuleService;
|
||||
import com.pgmmers.radar.vo.admin.UserVO;
|
||||
import com.pgmmers.radar.vo.model.ModelVO;
|
||||
import com.pgmmers.radar.vo.model.RuleVO;
|
||||
import io.swagger.annotations.Api;
|
||||
@@ -55,14 +55,14 @@ public class RuleApiController {
|
||||
return ruleService.delete(id);
|
||||
}
|
||||
|
||||
@GetMapping("/hitsSort/{modelId}")
|
||||
public CommonResult hitsSort(@PathVariable Long modelId) {
|
||||
@PostMapping("/hitsSort/{modelId}")
|
||||
public CommonResult hitsSort(@PathVariable Long modelId, @RequestBody EventQuery query) {
|
||||
CommonResult result = new CommonResult();
|
||||
ModelVO modelVO = modelService.getModelById(modelId);
|
||||
if (modelVO == null) {
|
||||
return result;
|
||||
}
|
||||
return ruleService.getHitSorts(modelId);
|
||||
return ruleService.getHitSorts(modelId, query.getBeginTime(), query.getEndTime());
|
||||
}
|
||||
|
||||
@PostMapping("/ruleHistory")
|
||||
|
||||
@@ -121,7 +121,7 @@ public class SysLoginApiController {
|
||||
userVO.setUserName(loginName);
|
||||
userVO.setPasswd(encrypt);
|
||||
userVO.setStatus("1");
|
||||
userVO.setVipLevel(0);
|
||||
userVO.setVipLevel(1);
|
||||
userVO.setGiteeAccount(giteeAccount);
|
||||
userVO.setCode(loginName);
|
||||
userVO.setCreateTime(new Date());
|
||||
|
||||
@@ -47,7 +47,6 @@ logging:
|
||||
root: info
|
||||
com.pgmmers.radar: info
|
||||
com.pgmmers.radar.mapper: debug
|
||||
org.elasticsearch: info
|
||||
|
||||
org.elasticsearch.client: debug
|
||||
server:
|
||||
port: 6580
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,3 +1,3 @@
|
||||
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>风控引擎管理平台</title> <link rel="shortcut icon" href="/images/anquan.png"> <!--[if lt IE 10]>
|
||||
<script src="https://as.alipayobjects.com/g/component/??console-polyfill/0.2.2/index.js,es5-shim/4.5.7/es5-shim.min.js,es5-shim/4.5.7/es5-sham.min.js,html5shiv/3.7.2/html5shiv.min.js,media-match/2.0.2/media.match.min.js"></script>
|
||||
<![endif]--> <link href="./index.16542f8e-1.css" rel="stylesheet"><link href="./index.16542f8e-2.css" rel="stylesheet"><link href="./index.16542f8e-3.css" rel="stylesheet"></head> <body> <div id="react-content"></div> <script type="text/javascript" src="./main.16542f8e.js"></script></body> </html>
|
||||
<![endif]--> <link href="./index.7269f78c-1.css" rel="stylesheet"><link href="./index.7269f78c-2.css" rel="stylesheet"><link href="./index.7269f78c-3.css" rel="stylesheet"></head> <body> <div id="react-content"></div> <script type="text/javascript" src="./main.7269f78c.js"></script></body> </html>
|
||||
317
radar-admin/src/main/resources/static/main.7269f78c.js
Normal file
317
radar-admin/src/main/resources/static/main.7269f78c.js
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1,17 @@
|
||||
package com.pgmmers.radar.test;
|
||||
import com.pgmmers.radar.util.CryptUtils;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class CryptUtilTest {
|
||||
|
||||
|
||||
@Test
|
||||
public void testSHA() {
|
||||
String str = CryptUtils.sha("123456", "admin").toUpperCase();
|
||||
System.out.println(str);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<artifactId>radar</artifactId>
|
||||
<groupId>com.pgmmers</groupId>
|
||||
<version>1.0.5-SNAPSHOT</version>
|
||||
<version>1.0.6-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
@@ -40,78 +40,6 @@ public class DateUtils {
|
||||
return dateTimeFormat.parse(str);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>getStartCurrentDate.</p>
|
||||
*
|
||||
* @return a {@link Date} object.
|
||||
*/
|
||||
public static Date getStartCurrentDate() {
|
||||
// Calendar cal = Calendar.getInstance();
|
||||
// cal.set(Calendar.HOUR_OF_DAY, 0);
|
||||
// cal.set(Calendar.MINUTE, 0);
|
||||
// cal.set(Calendar.SECOND, 0);
|
||||
// try {
|
||||
// return dateTimeFormat.parse(dateTimeFormat.format(cal.getTime()));
|
||||
// } catch (ParseException e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
// return null;
|
||||
return getCurrentDate();
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>getEndCurrentDate.</p>
|
||||
*
|
||||
* @return a {@link Date} object.
|
||||
*/
|
||||
public static Date getEndCurrentDate() {
|
||||
// Calendar cal = Calendar.getInstance();
|
||||
// cal.set(Calendar.HOUR_OF_DAY, 23);
|
||||
// cal.set(Calendar.MINUTE, 59);
|
||||
// cal.set(Calendar.SECOND, 59);
|
||||
//
|
||||
// try {
|
||||
// return dateTimeFormat.parse(dateTimeFormat.format(cal.getTime()));
|
||||
// } catch (ParseException e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
// return null;
|
||||
return addDate(1,getCurrentDate());
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>getDateTime.</p>
|
||||
*
|
||||
* @return a long.
|
||||
*/
|
||||
public static long getDateTime() {
|
||||
return new Date().getTime();
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>getCurrentDate.</p>
|
||||
*
|
||||
* @return a {@link Date} object.
|
||||
*/
|
||||
public static Date getCurrentDate() {
|
||||
return new Date();
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>getCurrentGMTDate.</p>
|
||||
*
|
||||
* @return a {@link Date} object.
|
||||
*/
|
||||
public static Date getCurrentGMTDate() {
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
dateFormat.setTimeZone(new SimpleTimeZone(0, "GMT"));
|
||||
try {
|
||||
return dateTimeFormat.parse(dateFormat.format(new Date()));
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>formatDate.</p>
|
||||
@@ -148,8 +76,6 @@ public class DateUtils {
|
||||
startCal.setTime(startDate);
|
||||
Calendar endCal = Calendar.getInstance();
|
||||
endCal.setTime(endDate);
|
||||
System.out.println(startCal.getTimeInMillis());
|
||||
System.out.println(endCal.getTimeInMillis());
|
||||
return (startCal.getTimeInMillis() - endCal.getTimeInMillis()) / (1000);
|
||||
}
|
||||
|
||||
@@ -200,9 +126,6 @@ public class DateUtils {
|
||||
* @param args an array of {@link String} objects.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
System.out.println(getStartCurrentDate());
|
||||
System.out.println(getEndCurrentDate());
|
||||
|
||||
System.out.println(formatDate(new Date(), "yyyy-MM-ww-dd"));
|
||||
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>radar</artifactId>
|
||||
<groupId>com.pgmmers</groupId>
|
||||
<version>1.0.5-SNAPSHOT</version>
|
||||
<version>1.0.6-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
|
||||
@@ -20,7 +20,11 @@ public interface DataListDal {
|
||||
|
||||
List<DataListsVO> listDataLists(Long modelId, Integer status);
|
||||
|
||||
//
|
||||
/**
|
||||
* get by id.
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
DataListsVO get(Long id);
|
||||
|
||||
List<DataListsVO> list(Long modelId);
|
||||
@@ -31,14 +35,22 @@ public interface DataListDal {
|
||||
|
||||
int delete(Long[] id);
|
||||
|
||||
//
|
||||
/**
|
||||
* get list meta.
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
DataListMetaVO getMeta(Long id);
|
||||
|
||||
int saveMeta(DataListMetaVO dataListMeta);
|
||||
|
||||
int deleteMeta(List<Long> listId);
|
||||
|
||||
//
|
||||
/**
|
||||
* get list record.
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
DataListRecordVO getRecord(Long id);
|
||||
|
||||
PageResult<DataListRecordVO> queryRecord(DataListRecordQuery query);
|
||||
|
||||
@@ -110,7 +110,7 @@ public class DataListDalImpl implements DataListDal {
|
||||
public List<DataListsVO> list(Long modelId) {
|
||||
Example example = new Example(DataListsPO.class);
|
||||
Example.Criteria criteria = example.createCriteria();
|
||||
criteria.andIn("modelId", Arrays.asList(modelId, 0L));
|
||||
criteria.andIn("modelId", Arrays.asList(modelId, 1L));
|
||||
List<DataListsPO> list = dataListMapper.selectByExample(example);
|
||||
if (CollectionUtils.isEmpty(list)) {
|
||||
return new ArrayList<>();
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>radar</artifactId>
|
||||
<groupId>com.pgmmers</groupId>
|
||||
<version>1.0.5-SNAPSHOT</version>
|
||||
<version>1.0.6-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>radar-dao</artifactId>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>radar</artifactId>
|
||||
<groupId>com.pgmmers</groupId>
|
||||
<version>1.0.5-SNAPSHOT</version>
|
||||
<version>1.0.6-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ sys:
|
||||
conf:
|
||||
app: engine # admin 或者 engine, 根据启动的项目名称进行选择
|
||||
entity-duplicate-insert: false # 事件是否允许重复插入
|
||||
mongo-restore-days: 93 # 事件保存时间,默认3个月
|
||||
mongo-restore-days: 3650 # 事件保存时间,默认3个月
|
||||
workdir: d:/radar # 工作目录
|
||||
machine-learning: true # 是否启用 机器学习
|
||||
server:
|
||||
|
||||
@@ -4,7 +4,7 @@ import com.alibaba.fastjson.JSONObject;
|
||||
import com.pgmmers.radar.EngineApplication;
|
||||
import com.pgmmers.radar.service.engine.PluginServiceV2;
|
||||
import com.pgmmers.radar.service.engine.vo.Location;
|
||||
import com.pgmmers.radar.service.impl.engine.Plugin.PluginManager;
|
||||
import com.pgmmers.radar.service.impl.engine.plugin.PluginManager;
|
||||
import com.pgmmers.radar.vo.model.PreItemVO;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>radar</artifactId>
|
||||
<groupId>com.pgmmers</groupId>
|
||||
<version>1.0.5-SNAPSHOT</version>
|
||||
<version>1.0.6-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>radar</artifactId>
|
||||
<groupId>com.pgmmers</groupId>
|
||||
<version>1.0.5-SNAPSHOT</version>
|
||||
<version>1.0.6-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@ 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.impl.util.JsonParserUtil;
|
||||
import com.pgmmers.radar.service.model.AbstractionService;
|
||||
import com.pgmmers.radar.service.model.ActivationService;
|
||||
import com.pgmmers.radar.service.model.DataListsService;
|
||||
@@ -48,7 +49,7 @@ import org.springframework.util.StringUtils;
|
||||
public class AntiFraudEngineImpl implements AntiFraudEngine {
|
||||
private static Logger logger = LoggerFactory.getLogger(AntiFraudEngineImpl.class);
|
||||
|
||||
private static Map<Long, Map<String, Object>> dataListCacheMap = new HashMap<Long, Map<String, Object>>();
|
||||
private static Map<Long, Map<String, Object>> dataListCacheMap = new HashMap<>();
|
||||
@Value("${sys.conf.machine-learning: true}")
|
||||
private boolean machineLearning;
|
||||
@Autowired
|
||||
@@ -149,6 +150,9 @@ public class AntiFraudEngineImpl implements AntiFraudEngine {
|
||||
Object searchFieldVal = data.get("fields").get(searchField);
|
||||
if (searchFieldVal == null) {
|
||||
searchFieldVal = data.get("preItems").get(searchField);
|
||||
if (searchFieldVal == null) {
|
||||
searchFieldVal = JsonParserUtil.value(data.get("preItems"), searchField, null);
|
||||
}
|
||||
}
|
||||
if (searchFieldVal == null) {
|
||||
result.setMsg("search field value eq null!");
|
||||
@@ -168,8 +172,11 @@ public class AntiFraudEngineImpl implements AntiFraudEngine {
|
||||
}
|
||||
}
|
||||
if (functionFieldType == null) {
|
||||
result.setMsg("function field type is null");
|
||||
return result;
|
||||
// 因为预处理字段没有字段类型,暂时设置为String
|
||||
// TODO: 目前只有高级函数使用了 functionFieldType。
|
||||
//result.setMsg("function field type is null");
|
||||
//return result;
|
||||
functionFieldType = FieldType.valueOf("STRING");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -241,6 +248,7 @@ public class AntiFraudEngineImpl implements AntiFraudEngine {
|
||||
* @author feihu.wang
|
||||
* 2016年8月10日
|
||||
*/
|
||||
@Deprecated
|
||||
private Map<String, Object> getPrepareDataCollection(Long modelId) {
|
||||
Map<String, Object> dataListMap = null;
|
||||
if (dataListCacheMap.containsKey(modelId)) {
|
||||
@@ -250,14 +258,14 @@ public class AntiFraudEngineImpl implements AntiFraudEngine {
|
||||
dataListMap = new HashMap<>();
|
||||
List<DataListsVO> list = dataListsService.listDataLists(modelId, StatusType.ACTIVE.getKey());
|
||||
// 系统自带黑/白名单
|
||||
List<DataListsVO> list2 = dataListsService.listDataLists(0L, StatusType.ACTIVE.getKey());
|
||||
List<DataListsVO> list2 = dataListsService.listDataLists(1L, StatusType.ACTIVE.getKey());
|
||||
list.addAll(list2);
|
||||
|
||||
Map<String, String> dataListRecords;
|
||||
for (DataListsVO vo : list) {
|
||||
Long dataListId = vo.getId();
|
||||
List<DataListRecordVO> records = dataListsService.listDataListRecords(dataListId);
|
||||
dataListRecords = new HashMap<String, String>();
|
||||
dataListRecords = new HashMap<>();
|
||||
for (DataListRecordVO record : records) {
|
||||
dataListRecords.put(record.getDataRecord(), "");
|
||||
}
|
||||
@@ -382,7 +390,7 @@ public class AntiFraudEngineImpl implements AntiFraudEngine {
|
||||
* @author feihu.wang
|
||||
* 2016年8月2日
|
||||
*/
|
||||
private boolean checkAbstractionScript(String ruleScript, Map entity, Map<String, Object> dataCollectionMap) {
|
||||
private Boolean checkAbstractionScript(String ruleScript, Map entity, Map<String, Object> dataCollectionMap) {
|
||||
Object[] args = { entity, dataCollectionMap };
|
||||
Boolean ret = false;
|
||||
try {
|
||||
@@ -394,7 +402,7 @@ public class AntiFraudEngineImpl implements AntiFraudEngine {
|
||||
return ret;
|
||||
}
|
||||
|
||||
private boolean checkActivationScript(String ruleScript, Map data, Map<String, Object> dataCollectionMap) {
|
||||
private Boolean checkActivationScript(String ruleScript, Map data, Map<String, Object> dataCollectionMap) {
|
||||
Object[] args = { data, dataCollectionMap };
|
||||
Boolean ret = false;
|
||||
try {
|
||||
|
||||
@@ -10,7 +10,7 @@ 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.AntiFraudProcessResult;
|
||||
import com.pgmmers.radar.service.impl.engine.Plugin.PluginManager;
|
||||
import com.pgmmers.radar.service.impl.engine.plugin.PluginManager;
|
||||
import com.pgmmers.radar.service.model.ModelService;
|
||||
import com.pgmmers.radar.service.model.PreItemService;
|
||||
import com.pgmmers.radar.vo.model.PreItemVO;
|
||||
@@ -24,7 +24,10 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
/**
|
||||
* 反欺诈主要服务,仅在引擎端启动的时候才需要加载。
|
||||
* @author feihu.wang
|
||||
*/
|
||||
@Service
|
||||
@ConditionalOnProperty(prefix = "sys.conf", name="app", havingValue = "engine")
|
||||
public class AntiFraudServiceImpl implements AntiFraudService {
|
||||
@@ -34,7 +37,7 @@ public class AntiFraudServiceImpl implements AntiFraudService {
|
||||
@Autowired
|
||||
private AntiFraudEngine antiFraudEngine;
|
||||
|
||||
@Autowired
|
||||
@Autowired(required = false)
|
||||
private PluginService pluginService;
|
||||
|
||||
@Autowired
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
package com.pgmmers.radar.service.impl.engine.Plugin;
|
||||
|
||||
import com.pgmmers.radar.service.engine.PluginServiceV2;
|
||||
import com.pgmmers.radar.vo.model.PreItemVO;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* author: wangcheng Date: 2020/5/19 Time: 上午11:44 Description:
|
||||
*/
|
||||
public class GPS2LOCATION implements PluginServiceV2 {
|
||||
|
||||
@Override
|
||||
public Integer key() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String desc() {
|
||||
return "GPS转换成地址";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMeta() {
|
||||
return "[{\"column\":\"country\", \"title\":\"国家\", \"type\":\"STRING\"},{\"column\":\"province\", \"title\":\"省份\", \"type\":\"STRING\"},{\"column\":\"city\", \"title\":\"城市\", \"type\":\"STRING\"}]";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object handle(PreItemVO item, Map<String, Object> jsonInfo,
|
||||
String[] sourceField) {
|
||||
// TODO 可以参考 http://jwd.funnyapi.com/#/index , 最好是本地库。
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -26,7 +26,11 @@ import javax.annotation.PostConstruct;
|
||||
import java.util.Calendar;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
/**
|
||||
* 建议使用v2.
|
||||
*/
|
||||
@Deprecated
|
||||
//@Service
|
||||
@ConditionalOnProperty(prefix = "sys.conf",name="app", havingValue = "engine")
|
||||
public class PluginServiceImpl implements PluginService {
|
||||
|
||||
@@ -40,7 +44,7 @@ public class PluginServiceImpl implements PluginService {
|
||||
@Autowired
|
||||
private MobileInfoService mobileInfoService;
|
||||
|
||||
@Autowired
|
||||
@Autowired(required = false)
|
||||
private RestTemplate restTemplate;
|
||||
|
||||
@PostConstruct
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.pgmmers.radar.service.impl.engine.Plugin;
|
||||
package com.pgmmers.radar.service.impl.engine.plugin;
|
||||
|
||||
import com.pgmmers.radar.service.engine.PluginServiceV2;
|
||||
import com.pgmmers.radar.vo.model.PreItemVO;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.pgmmers.radar.service.impl.engine.Plugin;
|
||||
package com.pgmmers.radar.service.impl.engine.plugin;
|
||||
|
||||
import com.pgmmers.radar.service.engine.PluginServiceV2;
|
||||
import com.pgmmers.radar.vo.model.PreItemVO;
|
||||
@@ -0,0 +1,90 @@
|
||||
package com.pgmmers.radar.service.impl.engine.plugin;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.pgmmers.radar.service.engine.PluginServiceV2;
|
||||
import com.pgmmers.radar.service.engine.vo.Location;
|
||||
import com.pgmmers.radar.vo.model.PreItemVO;
|
||||
import org.apache.http.HttpEntity;
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.client.methods.HttpGet;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClients;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.http.HttpStatus;
|
||||
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* author: wangcheng Date: 2020/5/19 Time: 上午11:44 Description:
|
||||
*/
|
||||
public class GPS2LOCATION implements PluginServiceV2 {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(GPS2LOCATION.class);
|
||||
@Override
|
||||
public Integer key() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String desc() {
|
||||
return "GPS转换成地址";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMeta() {
|
||||
return "[{\"column\":\"country\", \"title\":\"国家\", \"type\":\"STRING\"},{\"column\":\"province\", \"title\":\"省份\", \"type\":\"STRING\"},{\"column\":\"city\", \"title\":\"城市\", \"type\":\"STRING\"}]";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object handle(PreItemVO item, Map<String, Object> jsonInfo,
|
||||
String[] sourceField) {
|
||||
//参考 http://jwd.funnyapi.com/#/index , 最好是本地库。
|
||||
Location location = new Location();
|
||||
//纬度
|
||||
String latitude = String.valueOf(jsonInfo.get(sourceField[0]));
|
||||
//经度
|
||||
String longitude = String.valueOf(jsonInfo.get(sourceField[1]));
|
||||
if ("".equals(latitude) || "".equals(longitude)) {
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
String url ="http://106.75.35.67:60000/gis?auth_user=freevip&latitude="+latitude+"&longitude="+longitude;
|
||||
//创建httpclient对象
|
||||
CloseableHttpClient httpclient = HttpClients.createDefault();
|
||||
//创建GET对象
|
||||
HttpGet httpget = new HttpGet(url);
|
||||
//执行请求
|
||||
CloseableHttpResponse response = httpclient.execute(httpget);
|
||||
if(response.getStatusLine().getStatusCode()== HttpStatus.OK.value()) {
|
||||
HttpEntity entity = response.getEntity();
|
||||
//所需内容都在entity里面,这里可以对数据操作
|
||||
String detail = EntityUtils.toString(entity,"UTF-8");
|
||||
JSONObject parseObject = JSONObject.parseObject(detail);
|
||||
//String转map
|
||||
String data = parseObject.getString("data");
|
||||
Map stringToMap = JSONObject.parseObject(data);
|
||||
|
||||
location.setCountry(String.valueOf(stringToMap.get("zh0")));
|
||||
location.setRegion(String.valueOf(stringToMap.get("zh3")));
|
||||
location.setProvince(String.valueOf(stringToMap.get("zh1")));
|
||||
location.setCity(String.valueOf(stringToMap.get("zh2")));
|
||||
|
||||
}
|
||||
response.close();
|
||||
httpclient.close();
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("GPS2LOCATION error", e);
|
||||
}
|
||||
return location;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.pgmmers.radar.service.impl.engine.Plugin;
|
||||
package com.pgmmers.radar.service.impl.engine.plugin;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.pgmmers.radar.service.engine.PluginServiceV2;
|
||||
@@ -40,13 +40,13 @@ public class HTTP_UTIL implements PluginServiceV2 {
|
||||
public Object handle(PreItemVO item, Map<String, Object> jsonInfo, String[] sourceField) {
|
||||
String url = item.getArgs();
|
||||
String reqType = item.getReqType();
|
||||
String arg = jsonInfo.get(sourceField[0]).toString();
|
||||
//String arg = jsonInfo.get(sourceField[0]).toString();
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
HttpEntity<String> entity = new HttpEntity<>(headers);
|
||||
RestTemplate restTemplate = (RestTemplate) BeanUtils.getBean("restTemplate");
|
||||
ResponseEntity<JSONObject> responseEntity = restTemplate
|
||||
.exchange(url, HttpMethod.valueOf(reqType), entity, JSONObject.class, arg);
|
||||
logger.info("http plugin:{}\n{}\n {}", url, arg, responseEntity.toString());
|
||||
.exchange(url, HttpMethod.valueOf(reqType), entity, JSONObject.class, sourceField);
|
||||
logger.info("http plugin:{}\n{}\n {}", url, sourceField, responseEntity.toString());
|
||||
if (responseEntity.getStatusCode() == HttpStatus.OK) {
|
||||
return responseEntity.getBody();
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.pgmmers.radar.service.impl.engine.Plugin;
|
||||
package com.pgmmers.radar.service.impl.engine.plugin;
|
||||
|
||||
import com.pgmmers.radar.service.engine.PluginServiceV2;
|
||||
import com.pgmmers.radar.service.engine.vo.Location;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.pgmmers.radar.service.impl.engine.Plugin;
|
||||
package com.pgmmers.radar.service.impl.engine.plugin;
|
||||
|
||||
import com.pgmmers.radar.service.data.MobileInfoService;
|
||||
import com.pgmmers.radar.service.engine.PluginServiceV2;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.pgmmers.radar.service.impl.engine.Plugin;
|
||||
package com.pgmmers.radar.service.impl.engine.plugin;
|
||||
|
||||
import com.pgmmers.radar.service.engine.PluginServiceV2;
|
||||
import java.util.Comparator;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.pgmmers.radar.service.impl.engine.Plugin;
|
||||
package com.pgmmers.radar.service.impl.engine.plugin;
|
||||
|
||||
import com.pgmmers.radar.service.engine.PluginServiceV2;
|
||||
import com.pgmmers.radar.vo.model.PreItemVO;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.pgmmers.radar.service.impl.engine.Plugin;
|
||||
package com.pgmmers.radar.service.impl.engine.plugin;
|
||||
|
||||
import com.pgmmers.radar.service.engine.PluginServiceV2;
|
||||
import com.pgmmers.radar.vo.model.PreItemVO;
|
||||
@@ -224,55 +224,42 @@ public class DataListsServiceImpl implements DataListsService, SubscribeHandle {
|
||||
public void init() {
|
||||
cacheService.subscribeDataList(this);
|
||||
new Thread(() ->{
|
||||
|
||||
List<ModelVO> modelList = modelService.listModel(null);
|
||||
// 加载系统数据名单列表
|
||||
Map<String, Object> sysDataListMap = new HashMap<>();
|
||||
List<DataListsVO> sysList = dataListDal.listDataLists(0L, null);
|
||||
for (DataListsVO dataListVO : sysList) {
|
||||
Map<String, String> dataListRecords = new HashMap<String, String>();
|
||||
// record list
|
||||
List<DataListRecordVO> recordVOList = dataListDal.listDataRecord(dataListVO.getId());
|
||||
if (recordVOList != null) {
|
||||
for (DataListRecordVO record : recordVOList) {
|
||||
dataListRecords.put(record.getDataRecord(), "");
|
||||
}
|
||||
}
|
||||
sysDataListMap.put(dataListVO.getName(), dataListRecords);
|
||||
}
|
||||
|
||||
|
||||
Map<String, Object> sysDataListMap = new HashMap<>(32);
|
||||
List<DataListsVO> sysList = dataListDal.listDataLists(1L, null);
|
||||
buildList2Map(sysDataListMap, sysList);
|
||||
for (ModelVO model : modelList) {
|
||||
Map<String, Object> dataListMap = new HashMap<>();
|
||||
Map<String, Object> dataListMap = new HashMap<>(32);
|
||||
// datalist list
|
||||
List<DataListsVO> dataLists = dataListDal.listDataLists(model.getId(), null);
|
||||
if (dataLists != null) {
|
||||
for (DataListsVO dataListVO : dataLists) {
|
||||
Map<String, String> dataListRecords = new HashMap<>();
|
||||
// record list
|
||||
List<DataListRecordVO> recordVOList = dataListDal.listDataRecord(dataListVO.getId());
|
||||
if (recordVOList != null) {
|
||||
for (DataListRecordVO record : recordVOList) {
|
||||
dataListRecords.put(record.getDataRecord(), "");
|
||||
}
|
||||
}
|
||||
dataListMap.put(dataListVO.getName(), dataListRecords);
|
||||
|
||||
}
|
||||
buildList2Map(dataListMap, dataLists);
|
||||
}
|
||||
|
||||
|
||||
// add sys data list
|
||||
dataListMap.putAll(sysDataListMap);
|
||||
dataListRecordCacheMap.put(model.getId(), dataListMap);
|
||||
}
|
||||
|
||||
logger.info("data list has loaded.");
|
||||
|
||||
|
||||
}).start();
|
||||
}
|
||||
|
||||
private void buildList2Map(Map<String, Object> dataListMap, List<DataListsVO> dataLists) {
|
||||
for (DataListsVO dataListVO : dataLists) {
|
||||
Map<String, String> dataListRecords = new HashMap<>();
|
||||
// record list
|
||||
List<DataListRecordVO> recordVOList = dataListDal.listDataRecord(dataListVO.getId());
|
||||
if (recordVOList != null) {
|
||||
for (DataListRecordVO record : recordVOList) {
|
||||
dataListRecords.put(record.getDataRecord(), "");
|
||||
}
|
||||
}
|
||||
dataListMap.put(dataListVO.getName(), dataListRecords);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> getDataListMap(Long modelId) {
|
||||
Map<String, Object> listMap = dataListRecordCacheMap.get(modelId);
|
||||
|
||||
@@ -14,7 +14,7 @@ import com.pgmmers.radar.service.cache.SubscribeHandle;
|
||||
import com.pgmmers.radar.service.common.CommonResult;
|
||||
import com.pgmmers.radar.service.data.MongoService;
|
||||
import com.pgmmers.radar.service.engine.PluginServiceV2;
|
||||
import com.pgmmers.radar.service.impl.engine.Plugin.PluginManager;
|
||||
import com.pgmmers.radar.service.impl.engine.plugin.PluginManager;
|
||||
import com.pgmmers.radar.service.model.ModelService;
|
||||
import com.pgmmers.radar.service.search.SearchEngineService;
|
||||
import com.pgmmers.radar.util.JsonUtils;
|
||||
@@ -22,7 +22,11 @@ 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.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
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;
|
||||
|
||||
@@ -14,9 +14,11 @@ import com.pgmmers.radar.service.cache.SubscribeHandle;
|
||||
import com.pgmmers.radar.service.common.CommonResult;
|
||||
import com.pgmmers.radar.service.model.RuleService;
|
||||
import com.pgmmers.radar.service.search.SearchEngineService;
|
||||
import com.pgmmers.radar.util.DateUtils;
|
||||
import com.pgmmers.radar.util.GroovyScriptUtil;
|
||||
import com.pgmmers.radar.vo.model.*;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.elasticsearch.index.query.QueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryBuilders;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@@ -24,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import java.text.ParseException;
|
||||
import java.util.*;
|
||||
|
||||
@Service
|
||||
@@ -146,6 +149,13 @@ public class RuleServiceImpl extends BaseLocalCacheService implements RuleServic
|
||||
|
||||
@Override
|
||||
public CommonResult getHitSorts(Long modelId) {
|
||||
Calendar now = Calendar.getInstance();
|
||||
now.add(Calendar.MONTH , -1);
|
||||
return getHitSorts(modelId, now.getTimeInMillis(), Calendar.getInstance().getTimeInMillis());
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResult getHitSorts(Long modelId, Long beginTime, Long endTime) {
|
||||
CommonResult result = new CommonResult();
|
||||
Set<RuleHitsVO> treeSet = new TreeSet<>();
|
||||
ModelVO model = modelDal.getModelById(modelId);
|
||||
@@ -168,8 +178,11 @@ public class RuleServiceImpl extends BaseLocalCacheService implements RuleServic
|
||||
keyStr = keyStr.replace("${ruleId}", rule.getId() + "");
|
||||
long qty = 0;
|
||||
try {
|
||||
QueryBuilder filter = QueryBuilders
|
||||
.rangeQuery("fields." + model.getReferenceDate())
|
||||
.from(beginTime).to(endTime);
|
||||
qty = searchService.count(model.getGuid().toLowerCase(),
|
||||
QueryBuilders.termQuery(keyStr,rule.getId() + ""), null);
|
||||
QueryBuilders.termQuery(keyStr,rule.getId() + ""), filter);
|
||||
} catch (Exception e) {
|
||||
logger.error("search error", e);
|
||||
}
|
||||
@@ -190,7 +203,24 @@ public class RuleServiceImpl extends BaseLocalCacheService implements RuleServic
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Override
|
||||
public CommonResult getHitSorts(Long modelId, String beginTime, String endTime) {
|
||||
CommonResult result = new CommonResult();
|
||||
try {
|
||||
logger.info("search hits:{},{}", beginTime, endTime);
|
||||
long begin = DateUtils.parseDateTime(beginTime).getTime();
|
||||
long end = DateUtils.parseDateTime(endTime).getTime();
|
||||
if (end > begin) {
|
||||
return getHitSorts(modelId, begin, end);
|
||||
}
|
||||
} catch (ParseException e) {
|
||||
logger.error("时间格式错误", e);
|
||||
result.setMsg("时间格式错误!");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResult queryHistory(RuleHistoryQuery query) {
|
||||
CommonResult result = new CommonResult();
|
||||
|
||||
|
||||
@@ -126,7 +126,6 @@ public class SearchEngineServiceImpl implements SearchEngineService {
|
||||
public Long count(String index, QueryBuilder query, QueryBuilder filter) throws IOException {
|
||||
SearchRequest request = new SearchRequest(index);
|
||||
request.searchType(SearchType.DFS_QUERY_THEN_FETCH);
|
||||
// request.types(type);
|
||||
SearchSourceBuilder builder = new SearchSourceBuilder();
|
||||
builder.query(query)
|
||||
.postFilter(filter)
|
||||
|
||||
@@ -0,0 +1,122 @@
|
||||
package com.pgmmers.radar.service.impl.util;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
/**
|
||||
* @author 爱好者提供.
|
||||
* @since 2020-10-18
|
||||
*/
|
||||
public class JsonParserUtil {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(JsonParserUtil.class);
|
||||
|
||||
private static final String AQL_SEPARATOR = ".";
|
||||
|
||||
/**
|
||||
* 获取方法链的值
|
||||
*/
|
||||
public static JSONObject jsonObject(JSONObject json, String aql) {
|
||||
logger.debug("#获取 json 节点 safety ".concat(aql));
|
||||
StringTokenizer token = new StringTokenizer(aql, AQL_SEPARATOR);
|
||||
try {
|
||||
while (token.hasMoreElements()) {
|
||||
String argsString = token.nextToken();
|
||||
json = json.getJSONObject(argsString);
|
||||
}
|
||||
return json;
|
||||
} catch (Exception e) {
|
||||
logger.warn("解析 json 节点".concat(aql).concat("错误:"), e);
|
||||
}
|
||||
return new JSONObject();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取安全方法链的 JSONArray
|
||||
*/
|
||||
public static JSONArray array(JSONObject json, String aql) {
|
||||
logger.debug("#获取 json 节点组 safety ".concat(aql));
|
||||
JSONArray json_array = new JSONArray();
|
||||
StringTokenizer token = new StringTokenizer(aql, AQL_SEPARATOR);
|
||||
try {
|
||||
while (token.hasMoreElements()) {
|
||||
String argsString = token.nextToken();
|
||||
if (token.hasMoreElements()) {
|
||||
json = json.getJSONObject(argsString);
|
||||
} else {
|
||||
json_array = json.getJSONArray(argsString);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.warn("解析 json 节点".concat(aql).concat("错误:"), e);
|
||||
}
|
||||
if (json_array == null) {
|
||||
json_array = new JSONArray();
|
||||
}
|
||||
return json_array;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取安全方法链的值,方法中出现错误返回传入的 value
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <T> T value(String jsonStr, String aql, T defaultResult) {
|
||||
logger.debug("#获取 json 节点 safety ".concat(aql));
|
||||
JSONObject jsonObject = JSONObject.parseObject(jsonStr);
|
||||
StringTokenizer token = new StringTokenizer(aql, AQL_SEPARATOR);
|
||||
T tmp_result = null;
|
||||
try {
|
||||
while (token.hasMoreElements()) {
|
||||
String argsString = token.nextToken();
|
||||
if (token.hasMoreElements()) {
|
||||
jsonObject = jsonObject.getJSONObject(argsString);
|
||||
} else {
|
||||
tmp_result = (T) jsonObject.get(argsString);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
String message = "解析 json 节点".concat(aql).concat("错误:");
|
||||
logger.warn(message, e);
|
||||
}
|
||||
defaultResult = (tmp_result == null) ? defaultResult : tmp_result;
|
||||
return defaultResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取安全方法链的值,方法中出现错误返回传入的 value
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <T> T value(Object javaObject, String aql, T defaultValue) {
|
||||
logger.debug("#获取 json 节点 safety ".concat(aql));
|
||||
JSONObject json_object = (JSONObject) JSONObject.toJSON(javaObject);
|
||||
StringTokenizer token = new StringTokenizer(aql, AQL_SEPARATOR);
|
||||
T tmp_result = null;
|
||||
try {
|
||||
while (token.hasMoreElements()) {
|
||||
String args_string = token.nextToken();
|
||||
if (token.hasMoreElements()) {
|
||||
json_object = json_object.getJSONObject(args_string);
|
||||
} else {
|
||||
tmp_result = (T) json_object.get(args_string);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.warn("解析 json 节点".concat(aql).concat("错误:"), e);
|
||||
}
|
||||
defaultValue = (tmp_result == null) ? defaultValue : tmp_result;
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
JSONObject jsonObject = JSONObject.parseObject("{\"a\":{\"b\":{\"c\":1}}}");
|
||||
System.out.println(JsonParserUtil.jsonObject(jsonObject, "a.b"));
|
||||
Integer value = JsonParserUtil.value(jsonObject, "a.b.c", null);
|
||||
System.out.println(value);
|
||||
Integer value1 = JsonParserUtil.value("{\"a\":{\"b\":{\"c\":1}}}", "a.b.c", null);
|
||||
System.out.println(value1);
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,12 @@
|
||||
com.pgmmers.radar.service.engine.PluginServiceV2=\
|
||||
com.pgmmers.radar.service.impl.engine.Plugin.DATEFORMAT,\
|
||||
com.pgmmers.radar.service.impl.engine.Plugin.ALLINONE,\
|
||||
com.pgmmers.radar.service.impl.engine.Plugin.GPS2LOCATION,\
|
||||
com.pgmmers.radar.service.impl.engine.Plugin.HTTP_UTIL,\
|
||||
com.pgmmers.radar.service.impl.engine.Plugin.IP2LOCATION,\
|
||||
com.pgmmers.radar.service.impl.engine.Plugin.MOBILE2LOCATION,\
|
||||
com.pgmmers.radar.service.impl.engine.Plugin.SENSITIVE_TIME,\
|
||||
com.pgmmers.radar.service.impl.engine.Plugin.SUBSTRING
|
||||
com.pgmmers.radar.service.impl.engine.plugin.DATEFORMAT,\
|
||||
com.pgmmers.radar.service.impl.engine.plugin.ALLINONE,\
|
||||
com.pgmmers.radar.service.impl.engine.plugin.GPS2LOCATION,\
|
||||
com.pgmmers.radar.service.impl.engine.plugin.HTTP_UTIL,\
|
||||
com.pgmmers.radar.service.impl.engine.plugin.IP2LOCATION,\
|
||||
com.pgmmers.radar.service.impl.engine.plugin.MOBILE2LOCATION,\
|
||||
com.pgmmers.radar.service.impl.engine.plugin.SENSITIVE_TIME,\
|
||||
com.pgmmers.radar.service.impl.engine.plugin.SUBSTRING
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>radar</artifactId>
|
||||
<groupId>com.pgmmers</groupId>
|
||||
<version>1.0.5-SNAPSHOT</version>
|
||||
<version>1.0.6-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
|
||||
@@ -20,7 +20,11 @@ public interface RuleService {
|
||||
CommonResult delete(Long[] id);
|
||||
|
||||
CommonResult getHitSorts(Long modelId);
|
||||
|
||||
|
||||
CommonResult getHitSorts(Long modelId, Long beginTime, Long endTime);
|
||||
|
||||
CommonResult getHitSorts(Long modelId, String beginTime, String endTime);
|
||||
|
||||
CommonResult queryHistory(RuleHistoryQuery query);
|
||||
|
||||
List<RuleVO> listRuleByModelId(Long modelId);
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
ALTER TABLE `engine_pre_item`
|
||||
MODIFY COLUMN `ARGS` varchar(250) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT '' COMMENT '参数' AFTER `LABEL`;
|
||||
ALTER TABLE `engine_pre_item`
|
||||
ADD COLUMN `CONFIG_JSON` varchar(250) NULL COMMENT '响应字段配置信息' AFTER `PLUGIN`;
|
||||
ALTER TABLE `engine_pre_item`
|
||||
ADD COLUMN `REQ_TYPE` varchar(16) NULL COMMENT '请求方式' AFTER `CONFIG_JSON`;
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
/*
|
||||
Navicat MySQL Data Transfer
|
||||
|
||||
Source Server : test@172.30.0.6
|
||||
Source Server Version : 50726
|
||||
Source Host : 172.30.0.6:3306
|
||||
Source Database : radar
|
||||
|
||||
Target Server Type : MYSQL
|
||||
Target Server Version : 50726
|
||||
File Encoding : 65001
|
||||
|
||||
Date: 2019-12-24 18:02:12
|
||||
*/
|
||||
|
||||
SET FOREIGN_KEY_CHECKS=0;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for engine_model_conf
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `engine_model_conf`;
|
||||
CREATE TABLE `engine_model_conf` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`model_id` bigint(20) DEFAULT NULL,
|
||||
`name` varchar(255) DEFAULT NULL,
|
||||
`path` varchar(255) DEFAULT NULL,
|
||||
`tag` varchar(255) DEFAULT NULL,
|
||||
`operation` varchar(255) DEFAULT NULL,
|
||||
`update_date` datetime DEFAULT NULL,
|
||||
`type` varchar(255) DEFAULT NULL,
|
||||
`comment` varchar(128) DEFAULT NULL,
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
|
||||
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for engine_model_conf_param
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `engine_model_conf_param`;
|
||||
CREATE TABLE `engine_model_conf_param` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`mold_id` bigint(20) DEFAULT NULL,
|
||||
`feed` varchar(255) DEFAULT NULL,
|
||||
`expressions` varchar(255) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
|
||||
@@ -1,4 +0,0 @@
|
||||
ALTER TABLE `users` ADD COLUMN `VIP_LEVEL` int(0) NULL DEFAULT 1 AFTER `STATUS`;
|
||||
ALTER TABLE `users` ADD COLUMN `MOBILE` varchar(20) NULL AFTER `VIP_LEVEL`;
|
||||
ALTER TABLE `users` ADD COLUMN `EMAIL` varchar(32) NULL AFTER `MOBILE`;
|
||||
ALTER TABLE `users` ADD COLUMN `GITEE_ACCOUNT` varchar(32) NULL AFTER `EMAIL`;
|
||||
39
sql/radar-1.0.6.sql
Normal file
39
sql/radar-1.0.6.sql
Normal file
@@ -0,0 +1,39 @@
|
||||
CREATE TABLE `engine_model_conf` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`model_id` bigint(20) DEFAULT NULL,
|
||||
`name` varchar(255) DEFAULT NULL,
|
||||
`path` varchar(255) DEFAULT NULL,
|
||||
`tag` varchar(255) DEFAULT NULL,
|
||||
`operation` varchar(255) DEFAULT NULL,
|
||||
`update_date` datetime DEFAULT NULL,
|
||||
`type` varchar(255) DEFAULT NULL,
|
||||
`comment` varchar(128) DEFAULT NULL,
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
|
||||
|
||||
|
||||
|
||||
CREATE TABLE `engine_model_conf_param` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`mold_id` bigint(20) DEFAULT NULL,
|
||||
`feed` varchar(255) DEFAULT NULL,
|
||||
`expressions` varchar(255) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
|
||||
|
||||
ALTER TABLE `engine_pre_item`
|
||||
MODIFY COLUMN `ARGS` varchar(250) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT '' COMMENT '参数' AFTER `LABEL`;
|
||||
ALTER TABLE `engine_pre_item`
|
||||
ADD COLUMN `CONFIG_JSON` varchar(250) NULL COMMENT '响应字段配置信息' AFTER `PLUGIN`;
|
||||
ALTER TABLE `engine_pre_item`
|
||||
ADD COLUMN `REQ_TYPE` varchar(16) NULL COMMENT '请求方式' AFTER `CONFIG_JSON`;
|
||||
|
||||
|
||||
ALTER TABLE `users` ADD COLUMN `VIP_LEVEL` int(0) NULL DEFAULT 1 AFTER `STATUS`;
|
||||
ALTER TABLE `users` ADD COLUMN `MOBILE` varchar(20) NULL AFTER `VIP_LEVEL`;
|
||||
ALTER TABLE `users` ADD COLUMN `EMAIL` varchar(32) NULL AFTER `MOBILE`;
|
||||
ALTER TABLE `users` ADD COLUMN `GITEE_ACCOUNT` varchar(32) NULL AFTER `EMAIL`;
|
||||
|
||||
INSERT INTO `radar`.`engine_model`(`ID`, `GUID`, `MODEL_NAME`, `LABEL`, `ENTITY_NAME`, `ENTRY_NAME`, `REFERENCE_DATE`, `FIELD_VALIDATE`, `CODE`, `TEMPLATE`, `DASHBOARD_URL`, `STATUS`, `CREATE_TIME`, `UPDATE_TIME`) VALUES (1, '00000000-0000-0000-0000-000000000001', 'system', 'system', 'userId', 'eventId', 'loginTime', 0, 'pgmmer.top', 1, NULL, 0, '2016-11-17 10:59:43', '2016-11-18 18:02:15');
|
||||
@@ -168,15 +168,15 @@ CREATE TABLE `engine_data_lists` (
|
||||
-- ----------------------------
|
||||
-- Records of engine_data_lists
|
||||
-- ----------------------------
|
||||
INSERT INTO `engine_data_lists` VALUES ('1', 'radar_brand_black_List', '[系统]手机品牌黑名单', '0', '', 'BLACK', '1', '2016-08-10 16:02:29', '2016-08-10 16:02:31');
|
||||
INSERT INTO `engine_data_lists` VALUES ('3', 'radar_mobile_black_list', '[系统]手机号码黑名单', '0', '', 'BLACK', '1', '2016-08-24 18:37:52', '2016-08-24 18:37:55');
|
||||
INSERT INTO `engine_data_lists` VALUES ('5', 'radar_mobile_white_list', '[系统]手机号码白名单', '0', '', 'WHITE', '1', '2016-08-24 18:38:55', '2016-08-24 18:38:58');
|
||||
INSERT INTO `engine_data_lists` VALUES ('7', 'radar_ip_black_list', '[系统]IP黑名单', '0', '', 'BLACK', '1', '2016-08-25 11:22:12', '2016-08-25 11:22:16');
|
||||
INSERT INTO `engine_data_lists` VALUES ('9', 'radar_ip_white_list', '[系统]IP白名单', '0', '', 'WHITE', '1', '2016-09-18 10:27:25', '2016-09-18 10:27:25');
|
||||
INSERT INTO `engine_data_lists` VALUES ('1', 'radar_brand_black_List', '[系统]手机品牌黑名单', '1', '', 'BLACK', '1', '2016-08-10 16:02:29', '2016-08-10 16:02:31');
|
||||
INSERT INTO `engine_data_lists` VALUES ('3', 'radar_mobile_black_list', '[系统]手机号码黑名单', '1', '', 'BLACK', '1', '2016-08-24 18:37:52', '2016-08-24 18:37:55');
|
||||
INSERT INTO `engine_data_lists` VALUES ('5', 'radar_mobile_white_list', '[系统]手机号码白名单', '1', '', 'WHITE', '1', '2016-08-24 18:38:55', '2016-08-24 18:38:58');
|
||||
INSERT INTO `engine_data_lists` VALUES ('7', 'radar_ip_black_list', '[系统]IP黑名单', '1', '', 'BLACK', '1', '2016-08-25 11:22:12', '2016-08-25 11:22:16');
|
||||
INSERT INTO `engine_data_lists` VALUES ('9', 'radar_ip_white_list', '[系统]IP白名单', '1', '', 'WHITE', '1', '2016-09-18 10:27:25', '2016-09-18 10:27:25');
|
||||
INSERT INTO `engine_data_lists` VALUES ('10', 'mobile_brand_white_list', '[系统]手机品牌白名单', '1', '', 'WHITE', '1', '2016-11-23 16:07:31', '2016-11-23 16:07:31');
|
||||
INSERT INTO `engine_data_lists` VALUES ('29', 'mobile_white_list', '手机号码白名单', '101', '', 'WHITE', '1', '2016-11-21 14:07:29', '2016-11-21 14:07:29');
|
||||
INSERT INTO `engine_data_lists` VALUES ('31', 'mobile_white_list', '手机号码白名单', '103', '', 'WHITE', '1', '2016-11-21 14:09:57', '2016-11-21 14:09:57');
|
||||
INSERT INTO `engine_data_lists` VALUES ('33', 'mobile_white_list', '手机号码白名单', '99', '', 'WHITE', '1', '2016-11-21 14:11:37', '2016-11-21 14:11:37');
|
||||
INSERT INTO `engine_data_lists` VALUES ('35', 'mobile_brand_white_list', '[系统]手机品牌白名单', '0', '', 'WHITE', '1', '2016-11-23 16:07:31', '2016-11-23 16:07:31');
|
||||
INSERT INTO `engine_data_lists` VALUES ('84', 'mobile_white_list', '手机号码白名单', '222', '', 'WHITE', '1', '2019-09-10 11:16:12', '2019-09-10 11:16:12');
|
||||
INSERT INTO `engine_data_lists` VALUES ('85', 'mobile_white_list', '手机号码白名单', '224', '', 'WHITE', '1', '2019-09-11 18:05:35', '2019-09-11 18:05:35');
|
||||
|
||||
|
||||
Reference in New Issue
Block a user