Commit 7c2225a9 by shenjunjie

Merge branch 'feature' into 'release'

Feature

See merge request !103
parents 7c3e9315 5801c4ca
......@@ -35,6 +35,7 @@
<dubbo.version>2.7.4.1</dubbo.version>
<curator.version>2.12.0</curator.version>
<push.log.version>2.17.0-SNAPSHOT</push.log.version>
<event-client.version>0.0.1-SNAPSHOT</event-client.version>
</properties>
<dependencies>
......@@ -237,7 +238,12 @@
<artifactId>zhiwei-tools</artifactId>
<version>0.3.3-SNAPSHOT</version>
</dependency>
<!--事件中间件-->
<dependency>
<groupId>com.zhiwei.middleware</groupId>
<artifactId>event-client</artifactId>
<version>${event-client.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
......
package com.zhiwei.brandkbs2.common;
import com.zhiwei.middleware.event.core.EventClientFactory;
import com.zhiwei.middleware.event.core.EventTagClient;
import com.zhiwei.middleware.mark.service.MarkerClient;
import okhttp3.OkHttpClient;
import org.springframework.beans.factory.annotation.Value;
......@@ -26,6 +28,12 @@ public class CommonConfig {
@Value("${mark.provider.group}")
private String providerGroup;
@Value("${event.registry.address}")
private String eventClientRegistry;
@Value("${event.provider.group}")
private String eventProviderGroup;
@Bean
public RestTemplate restTemplate() {
final OkHttpClient client = new OkHttpClient().newBuilder()
......@@ -45,4 +53,13 @@ public class CommonConfig {
return MarkerClient.getService(clientRegistry, providerGroup, appName);
}
/**
* 获取事件中间件客户端
*
* @return 事件中间件客户端
*/
@Bean
public EventTagClient getEventTagClient(){
return EventClientFactory.markEventTagClient(eventClientRegistry, eventProviderGroup, appName);
}
}
......@@ -4,7 +4,7 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.zhiwei.brandkbs2.auth.Auth;
import com.zhiwei.brandkbs2.auth.UserThreadLocal;
import com.zhiwei.brandkbs2.common.GlobalPojo;
import com.zhiwei.brandkbs2.common.GenericAttribute;
import com.zhiwei.brandkbs2.controller.BaseController;
import com.zhiwei.brandkbs2.easyexcel.EasyExcelUtil;
import com.zhiwei.brandkbs2.easyexcel.dto.UploadKeywordDTO;
......@@ -16,6 +16,9 @@ import com.zhiwei.brandkbs2.service.BehaviorService;
import com.zhiwei.brandkbs2.service.CommonService;
import com.zhiwei.brandkbs2.service.ProjectService;
import com.zhiwei.brandkbs2.util.Tools;
import com.zhiwei.middleware.auth.util.JwtUtil;
import com.zhiwei.middleware.event.core.EventTagClient;
import com.zhiwei.middleware.event.pojo.dto.EventTagRelatedDTO;
import com.zhiwei.middleware.mark.vo.MarkerTag;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
......@@ -50,6 +53,9 @@ public class ProjectController extends BaseController {
@Autowired
private RestTemplate restTemplate;
@Autowired
private EventTagClient eventTagClient;
@Resource(name = "projectServiceImpl")
private ProjectService ProjectService;
......@@ -67,6 +73,9 @@ public class ProjectController extends BaseController {
@Value("${brandkbs.image.url}")
private String brandkbsImageUrl;
@Value("${qbjc.project.url}")
private String yqProjectUrl;
@Value("${hqd.groupAll.url}")
private String hqdGroupAllUrl;
......@@ -130,7 +139,7 @@ public class ProjectController extends BaseController {
@ApiImplicitParam(name = "pid", value = "项目ID", required = true, paramType = "path", dataType = "string")
@GetMapping("/get/{pid}")
public ResponseResult getProjectVOById(@PathVariable("pid") String pid) {
return ResponseResult.success(ProjectService.getProjectVOById(pid));
return ResponseResult.success(ProjectService.getProjectVOWithEventTagsById(pid));
}
@ApiOperation("图片上传")
......@@ -160,7 +169,15 @@ public class ProjectController extends BaseController {
@ApiImplicitParams({@ApiImplicitParam(name = "keyword", value = "搜索关键字", required = false, defaultValue = "", paramType = "query", dataType = "string")})
@GetMapping("/get/linkedGroups")
public ResponseResult getLinkedGroups(@RequestParam(value = "keyword", defaultValue = "") String keyword) {
List<JSONObject> resList = GlobalPojo.YU_QING_PROJECTS.stream().filter(json -> json.getString("groupName").contains(keyword)).collect(Collectors.toList());
ResponseEntity<JSONObject> entity = restTemplate.getForEntity(yqProjectUrl, JSONObject.class);
List<JSONObject> dataList = Objects.requireNonNull(entity.getBody()).getJSONArray("data").toJavaList(JSONObject.class);
List<JSONObject> resList = dataList.stream().filter(json -> json.getString("projectName").contains(keyword)).map(json -> {
JSONObject res = new JSONObject();
res.put("groupName", json.getString("projectName"));
res.put("id", json.getString("id"));
return res;
}).collect(Collectors.toList());
// List<String> groupNames = jsonArray.stream().map(object -> ((JSONObject) object).getString("groupName")).filter(group -> group.contains(keyword)).collect(Collectors.toList());
return ResponseResult.success(resList);
}
......@@ -195,4 +212,12 @@ public class ProjectController extends BaseController {
return ResponseResult.success(ProjectService.getUserAllProjects());
}
@ApiOperation("获取事件标签信息")
@ApiImplicitParam(name = "yuQingProjectId", value = "舆情项目id", required = true, paramType = "query", dataType = "string")
@GetMapping("/get/eventTags")
public ResponseResult getEventTagsInfo(@RequestParam(value = "yuQingProjectId") String yuQingProjectId){
Object eventTags = eventTagClient.getEventTagGroupInfoBrandkbsWithoutEmotion(yuQingProjectId).getData();
return ResponseResult.success(eventTags);
}
}
package com.zhiwei.brandkbs2.pojo;
import com.zhiwei.middleware.event.pojo.dto.EventTagRelatedDTO;
import com.zhiwei.middleware.mark.vo.MarkerTag;
import lombok.Getter;
import lombok.Setter;
......@@ -55,4 +56,9 @@ public abstract class AbstractProject extends AbstractBaseMongo{
*/
private String avatarUrl;
/**
* 竞品事件标签
*/
private List<EventTagRelatedDTO> eventTagsList;
}
......@@ -36,6 +36,7 @@ public class ChannelIndex extends AbstractBaseMongo {
/**
* 关联项目组ID
*/
@Deprecated
private String linkedGroupId;
/**
......
package com.zhiwei.brandkbs2.pojo;
import com.zhiwei.middleware.event.pojo.dto.EventTagRelatedDTO;
import lombok.*;
import org.springframework.data.annotation.Transient;
import java.util.List;
/**
* @author sjj
......
package com.zhiwei.brandkbs2.pojo;
import com.zhiwei.brandkbs2.pojo.vo.ProjectVO;
import com.zhiwei.middleware.event.pojo.dto.EventTagRelatedDTO;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.mongodb.core.mapping.Document;
......@@ -115,6 +116,7 @@ public class Project extends AbstractProject {
projectVO.setNegativeChannelParams(this.getNegativeChannelParams());
projectVO.setPositiveChannelParams(this.getPositiveChannelParams());
projectVO.setBlackChannelGroup(this.getBlackChannelGroup());
return projectVO;
}
......
......@@ -2,6 +2,8 @@ package com.zhiwei.brandkbs2.pojo.vo;
import com.zhiwei.brandkbs2.pojo.Contend;
import com.zhiwei.brandkbs2.pojo.Project;
import com.zhiwei.middleware.event.pojo.dto.EventTagRelatedDTO;
import com.zhiwei.middleware.event.pojo.vo.EventTagBrandkbsBindingVO;
import com.zhiwei.middleware.mark.vo.MarkerTag;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
......@@ -123,6 +125,11 @@ public class ProjectVO {
private Map<String,Double> positiveChannelParams;
/**
* 主品牌事件标签传输
*/
private List<EventTagRelatedDTO> eventTagsList;
/**
* 项目主品牌配置信息转换
*
* @return 项目对象
......
......@@ -41,6 +41,13 @@ public interface ProjectService {
*/
ProjectVO getProjectVOById(String pid);
/**
* 根据项目id获取项目信息,包含事件标签
* @param pid
* @return
*/
ProjectVO getProjectVOWithEventTagsById(String pid);
Project getProjectById(String pid);
/**
......
......@@ -2,7 +2,9 @@ package com.zhiwei.brandkbs2.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.zhiwei.brandkbs2.auth.UserThreadLocal;
import com.zhiwei.brandkbs2.common.GenericAttribute;
import com.zhiwei.brandkbs2.common.GlobalPojo;
import com.zhiwei.brandkbs2.config.Constant;
import com.zhiwei.brandkbs2.dao.ProjectDao;
import com.zhiwei.brandkbs2.dao.UserDao;
import com.zhiwei.brandkbs2.enmus.response.ProjectCodeEnum;
......@@ -15,15 +17,25 @@ import com.zhiwei.brandkbs2.pojo.User;
import com.zhiwei.brandkbs2.pojo.vo.PageVO;
import com.zhiwei.brandkbs2.pojo.vo.ProjectVO;
import com.zhiwei.brandkbs2.service.ProjectService;
import com.zhiwei.brandkbs2.service.UserService;
import com.zhiwei.brandkbs2.util.MongoUtil;
import com.zhiwei.brandkbs2.util.Tools;
import com.zhiwei.middleware.auth.util.JwtUtil;
import com.zhiwei.middleware.event.core.EventTagClient;
import com.zhiwei.middleware.event.pojo.dto.EventTagRelatedDTO;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.net.URLEncoder;
import java.util.*;
import java.util.stream.Collectors;
......@@ -45,6 +57,15 @@ public class ProjectServiceImpl implements ProjectService {
@Resource(name = "mongoUtil")
private com.zhiwei.brandkbs2.util.MongoUtil mongoUtil;
@Resource(name = "userServiceImpl")
private UserService userService;
@Value("${jwt.key}")
private String jwtKey;
@Autowired
private EventTagClient eventTagClient;
@Value("${brandkbs.file.url}")
private String brandkbsFileUrl;
......@@ -66,7 +87,27 @@ public class ProjectServiceImpl implements ProjectService {
// for (Integer SUPER_ADMINUid : userMapper.getAllSUPER_ADMINUids()) {
// UserService.insertAdminRoleAndWarn(SUPER_ADMINUid, project.getId());
// }
projectDao.insertOneWithoutId(projectVO.creatProject(new Date()));
Project project = projectVO.creatProject(new Date());
projectDao.insertOneWithoutId(project);
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = Objects.requireNonNull(requestAttributes).getRequest();
String submitterId = JwtUtil.unsign(request.getHeader(jwtKey), Map.class).get(GenericAttribute.USER_ID).toString();
String submitter = userService.queryUserInfo(submitterId, project.getId()).getNickname();
// 主品牌绑定事件标签
List<EventTagRelatedDTO> eventTagsList = projectVO.getEventTagsList();
eventTagClient.bindBrandkbs(project.getBrandLinkedGroup(), project.getBrandLinkedGroupId(), eventTagsList,
project.getProjectName(), project.getId(), project.getBrandName(), Constant.PRIMARY_CONTEND_ID, submitter, submitterId);
// 竞品绑定事件标签
List<Contend> contendList = project.getContendList();
if (CollectionUtils.isNotEmpty(contendList)) {
for (Contend contend : contendList) {
List<EventTagRelatedDTO> contendEventTagsList = contend.getEventTagsList();
eventTagClient.bindBrandkbs(contend.getBrandLinkedGroup(), contend.getBrandLinkedGroupId(), contendEventTagsList, project.getProjectName(),
project.getId(), contend.getBrandName(), contend.getId(), submitter, submitterId);
}
}
}
@Override
......@@ -102,6 +143,25 @@ public class ProjectServiceImpl implements ProjectService {
}
@Override
public ProjectVO getProjectVOWithEventTagsById(String pid) {
ProjectVO projectVO = getProjectVOById(pid);
Map<String, List<EventTagRelatedDTO>> eventTagsMap = (Map<String, List<EventTagRelatedDTO>>) eventTagClient.getBrandkbsBindingEventTags(pid).getData();
List<EventTagRelatedDTO> eventTagsList = new ArrayList<>();
if (!Tools.isEmpty(eventTagsMap)) {
eventTagsList = eventTagsMap.get(Constant.PRIMARY_CONTEND_ID);
List<Contend> contendList = projectVO.getContendList();
if (!Tools.isEmpty(contendList)) {
for (Contend contend : contendList) {
contend.setEventTagsList(eventTagsMap.get(contend.getId()));
}
}
}
projectVO.setEventTagsList(eventTagsList);
return projectVO;
}
@Override
public Project getProjectById(String pid) {
return projectDao.findOneById(pid);
}
......@@ -121,6 +181,25 @@ public class ProjectServiceImpl implements ProjectService {
}
Project project = packageProject(projectVO, existsProject);
projectDao.updateOne(project);
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = Objects.requireNonNull(requestAttributes).getRequest();
String submitterId = JwtUtil.unsign(request.getHeader(jwtKey), Map.class).get(GenericAttribute.USER_ID).toString();
String submitter = userService.queryUserInfo(submitterId, project.getId()).getNickname();
// 主品牌修改绑定事件标签
List<EventTagRelatedDTO> eventTagsList = projectVO.getEventTagsList();
eventTagClient.modifyBrandkbsEventTags(project.getBrandLinkedGroup(), project.getBrandLinkedGroupId(), eventTagsList,
project.getProjectName(), project.getId(), project.getBrandName(), Constant.PRIMARY_CONTEND_ID, submitter, submitterId);
// 竞品修改绑定事件标签
List<Contend> contendList = project.getContendList();
if (CollectionUtils.isNotEmpty(contendList)) {
for (Contend contend : contendList) {
List<EventTagRelatedDTO> contendEventTagsList = contend.getEventTagsList();
eventTagClient.modifyBrandkbsEventTags(contend.getBrandLinkedGroup(), contend.getBrandLinkedGroupId(), contendEventTagsList, project.getProjectName(),
project.getId(), contend.getBrandName(), contend.getId(), submitter, submitterId);
}
}
}
@Override
......
......@@ -787,7 +787,14 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
String cursorKey = RedisUtil.getNewCrisisCaseCursor(projectId);
String cursor = redisUtil.get(cursorKey);
Set<String> keys = redisUtil.keys(RedisUtil.getNewCrisisCaseListAllKey());
int recordCursor = null == cursor ? 0 : Integer.parseInt(cursor);
BrandkbsWarnTemplate brandkbsWarnTemplate = null;
if (CollectionUtils.isNotEmpty(keys)) {
int recordCursor;
// 不存在游标则记录最大值
if (null == cursor) {
recordCursor = keys.stream().mapToInt(Integer::valueOf).max().getAsInt();
} else {
recordCursor = Integer.parseInt(cursor);
List<BrandkbsNewCaseWarn.NewCase> resList = new ArrayList<>();
for (String key : keys) {
CrisisCaseWarnVO crisisCaseWarnVO = JSON.parseObject(redisUtil.get(key), CrisisCaseWarnVO.class);
......@@ -798,8 +805,10 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
getCrisisEventUrlByCrisisEventId(crisisCaseWarnVO.getId())));
}
}
BrandkbsWarnTemplate brandkbsWarnTemplate = brandkbsWarnTemplate4NewCase(resList, time, project);
brandkbsWarnTemplate = brandkbsWarnTemplate4NewCase(resList, time, project);
}
redisUtil.set(cursorKey, String.valueOf(recordCursor));
}
log.info("获取案例上新预警结束,project:{}", project.getProjectName());
return ResponseResult.success(brandkbsWarnTemplate);
} catch (Exception e) {
......@@ -812,7 +821,7 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
public void newCrisisCaseWarn(CrisisCaseWarnVO caseWarnVO) {
// 存入redis缓存
String listKey = RedisUtil.getNewCrisisCaseListKey(String.valueOf(caseWarnVO.getId()));
redisUtil.setExpire(listKey, JSON.toJSONString(caseWarnVO), Constant.ONE_DAY * 7, TimeUnit.DAYS);
redisUtil.setExpire(listKey, JSON.toJSONString(caseWarnVO), 7, TimeUnit.DAYS);
}
private String getCrisisEventUrlByCrisisEventId(int id) {
......
......@@ -46,6 +46,9 @@ hqd.groupAll.url= https://sensitive.zhiweidata.com/sensitive/planA/groupAll
#\u6807\u6CE8\u4E2D\u95F4\u4EF6
mark.registry.address=zookeeper://192.168.0.203:2182?backup=192.168.0.104:2182,192.168.0.105:2182
mark.provider.group=zhiwei-mark
#\u4E8B\u4EF6\u4E2D\u95F4\u4EF6
event.registry.address=zookeeper://192.168.0.203:2182?backup=192.168.0.104:2182,192.168.0.105:2182
event.provider.group=zhiwei-event
#\u7528\u6237\u4E2D\u5FC3
auth.center.client.consumer.group=zhiwei-auth
auth.center.client.registry.address=zookeeper://192.168.0.203:2182?backup=192.168.0.104:2182,192.168.0.105:2182
......
......@@ -48,6 +48,9 @@ hqd.groupAll.url= https://sensitive.zhiweidata.com/sensitive/planA/groupAll
#\u6807\u6CE8\u4E2D\u95F4\u4EF6
mark.registry.address=zookeeper://192.168.0.11:2181?backup=192.168.0.30:2181,192.168.0.35:2181
mark.provider.group=zhiwei-mark-test_liuyu
#\u4E8B\u4EF6\u4E2D\u95F4\u4EF6
event.registry.address=zookeeper://192.168.0.11:2181?backup=192.168.0.30:2181,192.168.0.35:2181
event.provider.group=zhiwei-event
#\u7528\u6237\u4E2D\u5FC3
auth.center.client.consumer.group=zhiwei-auth-dev-liuyu
auth.center.client.registry.address=zookeeper://192.168.0.11:2181?backup=192.168.0.30:2181,192.168.0.35:2181
......
......@@ -46,6 +46,9 @@ hqd.groupAll.url= https://sensitive.zhiweidata.com/sensitive/planA/groupAll
#\u6807\u6CE8\u4E2D\u95F4\u4EF6
mark.registry.address=zookeeper://192.168.0.203:2182?backup=192.168.0.104:2182,192.168.0.105:2182
mark.provider.group=zhiwei-mark
#\u4E8B\u4EF6\u4E2D\u95F4\u4EF6
event.registry.address=zookeeper://192.168.0.203:2182?backup=192.168.0.104:2182,192.168.0.105:2182
event.provider.group=zhiwei-event
#\u7528\u6237\u4E2D\u5FC3
auth.center.client.consumer.group=zhiwei-auth
auth.center.client.registry.address=zookeeper://192.168.0.203:2182?backup=192.168.0.104:2182,192.168.0.105:2182
......
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