Commit 6bd05d29 by shenjunjie

品见项目预警模块调整

parent 31bed0e8
......@@ -88,6 +88,8 @@ public class RedisKeyPrefix {
*/
public static final String PROJECT_WARN_HOT_TOP = "BRANDKBS:HOT_TOP:";
public static final String PROJECT_WARN_NEW_CASE = "BRANDKBS:NEW_CASE:";
public static String projectWarnHotTopKeyAll(String projectId, String type) {
return RedisKeyPrefix.generateRedisKey(RedisKeyPrefix.PROJECT_WARN_HOT_TOP, projectId, Tools.concat(type, "*"));
}
......@@ -118,10 +120,15 @@ public class RedisKeyPrefix {
private static String generateRedisKey(String... keys) {
Objects.requireNonNull(keys);
boolean contains = keys[0].endsWith(":");
StringBuilder sb = new StringBuilder(keys[0]);
for (int i = 1; i < keys.length; i++) {
if (1 == i && contains) {
sb.append(keys[i]);
} else {
sb.append(SEPARATOR).append(keys[i]);
}
}
return sb.toString();
}
}
......@@ -6,6 +6,7 @@ import com.zhiwei.brandkbs2.pojo.external.BrandkbsChannelConfig;
import com.zhiwei.brandkbs2.pojo.external.BrandkbsHotEventConfig;
import com.zhiwei.brandkbs2.pojo.external.BrandkbsHotTopConfig;
import com.zhiwei.brandkbs2.pojo.external.BrandkbsYuQingConfig;
import com.zhiwei.brandkbs2.pojo.vo.CrisisCaseWarnVO;
import com.zhiwei.brandkbs2.service.ProjectService;
import com.zhiwei.brandkbs2.service.ProjectWarnService;
import io.swagger.annotations.Api;
......@@ -73,7 +74,7 @@ public class InterfaceController {
return projectWarnService.getHotEventWaring(projectId, config);
}
@ApiOperation("获取热点事件-预警结果")
@ApiOperation("获取上榜热搜-预警结果")
@PostMapping("/warn/hotTop")
public ResponseResult getHotTopWaring(@RequestBody JSONObject json) {
String projectId = json.getString("projectId");
......@@ -81,11 +82,17 @@ public class InterfaceController {
return projectWarnService.getHotTopWaring(projectId, config);
}
@ApiOperation("获取热点事件-预警结果")
@ApiOperation("获取案例上新-预警结果")
@PostMapping("/warn/newCase")
public ResponseResult getNewCaseWaring(@RequestBody JSONObject json) {
String projectId = json.getString("projectId");
return projectWarnService.getNewCaseWaring(projectId);
}
@ApiOperation("案例上新预警(案例库项目调用)")
@PostMapping("/newCrisisCaseWarn")
public void newCrisisCaseWarn(@RequestBody CrisisCaseWarnVO caseWarnVO) {
projectWarnService.newCrisisCaseWarn(caseWarnVO);
}
}
package com.zhiwei.brandkbs2.pojo.vo;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.ToString;
import java.util.List;
@Data
@ToString
@ApiModel("危机案例预警展示")
public class CrisisCaseWarnVO {
/**
* id
*/
private String id;
/**
* 事件名
*/
private String eventName;
/**
* 简介
*/
private String introduction;
/**
* 主品牌名
*/
private String priBrand;
/**
* 主品牌危机标签
*/
private List<String> priCrisisTags;
/**
* 公关传播效果指数
*/
private Double interveneScore;
}
......@@ -5,6 +5,7 @@ import com.zhiwei.brandkbs2.pojo.external.BrandkbsChannelConfig;
import com.zhiwei.brandkbs2.pojo.external.BrandkbsHotEventConfig;
import com.zhiwei.brandkbs2.pojo.external.BrandkbsHotTopConfig;
import com.zhiwei.brandkbs2.pojo.external.BrandkbsYuQingConfig;
import com.zhiwei.brandkbs2.pojo.vo.CrisisCaseWarnVO;
public interface ProjectWarnService {
......@@ -16,16 +17,56 @@ public interface ProjectWarnService {
*/
ResponseResult getProjectWarnCriteria(String projectId, String type);
/**
* 获取项目预警条件默认值
* @param projectId
* @param type
* @return
*/
ResponseResult getProjectWarnCriteriaDefault(String projectId, String type);
/**
* 获取舆情动态预警
* @param projectId
* @param brandkbsYuQingConfig
* @return
*/
ResponseResult getYuqingWaring(String projectId, BrandkbsYuQingConfig brandkbsYuQingConfig);
/**
* 获取渠道参与预警
* @param projectId
* @param brandkbsChannelConfig
* @return
*/
ResponseResult getChannelWaring(String projectId, BrandkbsChannelConfig brandkbsChannelConfig);
/**
* 获取热点事件预警
* @param projectId
* @param brandkbsHotEventConfig
* @return
*/
ResponseResult getHotEventWaring(String projectId, BrandkbsHotEventConfig brandkbsHotEventConfig);
/**
* 获取上榜热搜预警
* @param projectId
* @param config
* @return
*/
ResponseResult getHotTopWaring(String projectId, BrandkbsHotTopConfig config);
/**
* 获取案例上新预警
* @param projectId
* @return
*/
ResponseResult getNewCaseWaring(String projectId);
/**
* 案例上新主动调用
* @param caseWarnVO
*/
void newCrisisCaseWarn(CrisisCaseWarnVO caseWarnVO);
}
......@@ -14,6 +14,7 @@ import com.zhiwei.brandkbs2.es.EsQueryTools;
import com.zhiwei.brandkbs2.model.ResponseResult;
import com.zhiwei.brandkbs2.pojo.*;
import com.zhiwei.brandkbs2.pojo.external.*;
import com.zhiwei.brandkbs2.pojo.vo.CrisisCaseWarnVO;
import com.zhiwei.brandkbs2.service.ProjectService;
import com.zhiwei.brandkbs2.service.ProjectWarnService;
import com.zhiwei.brandkbs2.util.RedisUtil;
......@@ -226,6 +227,7 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
postFilter.must(sourceBuilder);
// 关键词命中
postFilter.must(EsQueryTools.assembleNormalKeywordQuery(config.getKeyword(), new String[]{GenericAttribute.ES_IND_FULL_TEXT}));
helper.setPostFilter(postFilter);
SearchHits searchHits = esClientDao.searchHits(helper);
List<BaseMap> datas = Arrays.stream(searchHits.getHits()).map(hit -> {
Map<String, Object> sourceMap = hit.getSourceAsMap();
......@@ -321,6 +323,7 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
sourceBuilder.should(QueryBuilders.termQuery("brandkbs_mark_cache_maps.name.keyword", config.getMarkerTags()));
}
postFilter.must(sourceBuilder);
helper.setPostFilter(postFilter);
// 搜索结果
SearchHits searchHits = esClientDao.searchHits(helper);
List<BaseMap> datas = Arrays.stream(searchHits.getHits()).map(hit -> Tools.getBaseFromEsMap(hit.getSourceAsMap())).collect(Collectors.toList());
......@@ -431,10 +434,9 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
Event event = new Event();
event.setTitle(zhiweiEvent.getString("eventname"));
JSONObject eventTag = new JSONObject();
// TODO 存疑
eventTag.put("事件类型", zhiweiEvent.getString("type"));
event.setEventTag(eventTag);
event.setTotalDisseminationVolume(zhiweiEvent.getLong("total"));
event.setTotalDisseminationVolume(zhiweiEvent.getLong("allCount"));
event.setStartTime(zhiweiEvent.getLong("startTime"));
event.setInfluence(zhiweiEvent.getDouble("index"));
externalEvents.add(event);
......@@ -488,7 +490,7 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
try {
log.info("获取上榜热搜预警开始,project:{}", project.getProjectName());
if (null == config.getListType()) {
return ResponseResult.success();
return ResponseResult.success(null);
}
// 根据配置榜单类型
List<BrandkbsHotTopWarn.HotTop> resList = new ArrayList<>();
......@@ -827,7 +829,13 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
// return ResponseResult.success(getWarnTemplate(new BrandkbsNewCaseWarn(Arrays.asList(getNewCaseWarn(), getNewCaseWarn(), getNewCaseWarn(),
// getNewCaseWarn(), getNewCaseWarn()))));
// TODO
return ResponseResult.success();
return ResponseResult.success(null);
}
@Override
public void newCrisisCaseWarn(CrisisCaseWarnVO caseWarnVO) {
// 存入redis缓存
String listKey = RedisUtil.getNewCrisisCaseListKey();
}
public static class CriteriaHelper {
......
......@@ -5,6 +5,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
......@@ -56,6 +57,10 @@ public class RedisUtil {
return RedisKeyPrefix.CHANNEL_RECORD_LIST + Tools.concat(projectId, startTime, endTime);
}
public static String getNewCrisisCaseListKey() {
return RedisKeyPrefix.PROJECT_WARN_NEW_CASE + "LIST";
}
public void setExpire(String key, String value, long timeout, TimeUnit unit) {
stringRedisTemplate.opsForValue().set(key, value, timeout, unit);
}
......@@ -79,6 +84,17 @@ public class RedisUtil {
return stringRedisTemplate.keys(key);
}
public void setListLeft(String key, String value) {
if (null == key) {
return;
}
stringRedisTemplate.opsForList().leftPush(key, value);
}
public List<String> getListAll(String key) {
return stringRedisTemplate.opsForList().range(key, 0, -1);
}
public void remove(String key) {
setExpire(key, "-1", 1, TimeUnit.SECONDS);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment