Commit 6c536246 by shenjunjie

Merge branch 'feature' into 'dev'

Feature

See merge request !240
parents 574c80df a8d2485a
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
<dubbo.version>2.7.4.1</dubbo.version> <dubbo.version>2.7.4.1</dubbo.version>
<curator.version>2.12.0</curator.version> <curator.version>2.12.0</curator.version>
<push.log.version>2.17.0-SNAPSHOT</push.log.version> <push.log.version>2.17.0-SNAPSHOT</push.log.version>
<event-client.version>1.0.7-SNAPSHOT</event-client.version> <event-client.version>1.0.8-SNAPSHOT</event-client.version>
</properties> </properties>
<dependencies> <dependencies>
......
package com.zhiwei.brandkbs2.aop; package com.zhiwei.brandkbs2.aop;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.zhiwei.brandkbs2.common.GenericAttribute; import com.zhiwei.brandkbs2.common.GenericAttribute;
import com.zhiwei.brandkbs2.dao.BehaviorDao; import com.zhiwei.brandkbs2.dao.BehaviorDao;
import com.zhiwei.brandkbs2.model.ResponseResult;
import com.zhiwei.brandkbs2.pojo.Behavior; import com.zhiwei.brandkbs2.pojo.Behavior;
import com.zhiwei.brandkbs2.service.UserService; import com.zhiwei.brandkbs2.service.UserService;
import com.zhiwei.brandkbs2.util.Tools; import com.zhiwei.brandkbs2.util.Tools;
...@@ -9,8 +12,8 @@ import com.zhiwei.middleware.auth.util.JwtUtil; ...@@ -9,8 +12,8 @@ import com.zhiwei.middleware.auth.util.JwtUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.aspectj.lang.JoinPoint; import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.reflect.MethodSignature; import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -45,8 +48,8 @@ public class AopLogRecord { ...@@ -45,8 +48,8 @@ public class AopLogRecord {
private static final List<String> URL_PATTERNS = Arrays.asList("/getNewAll", "/getNew", "/schedule"); private static final List<String> URL_PATTERNS = Arrays.asList("/getNewAll", "/getNew", "/schedule");
@Before("execution(public * com..controller..admin..*Controller.*(..)) || execution(* com..controller..app..*Controller.*(..))") @AfterReturning(value = "execution(public * com..controller..admin..*Controller.*(..)) || execution(* com..controller..app..*Controller.*(..))", returning = "ResponseResult")
private void beforeLog(JoinPoint joinPoint) throws UnknownHostException, ClassNotFoundException, NoSuchMethodException { private void beforeLog(JoinPoint joinPoint, ResponseResult ResponseResult) throws UnknownHostException, ClassNotFoundException{
long now = System.currentTimeMillis(); long now = System.currentTimeMillis();
// RequestContextHolder 顾名思义 持有 request 上下文的容器 // RequestContextHolder 顾名思义 持有 request 上下文的容器
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
...@@ -87,8 +90,9 @@ public class AopLogRecord { ...@@ -87,8 +90,9 @@ public class AopLogRecord {
String ipAddress = Tools.getIpAddress(request); String ipAddress = Tools.getIpAddress(request);
// 接口传参信息 // 接口传参信息
List<Map<String, Object>> arguments = getRequestArguments(joinPoint); List<Map<String, Object>> arguments = getRequestArguments(joinPoint);
Behavior behavior = new Behavior(userId, projectId, nickName, ipAddress, now, controller, method, backstage,
Behavior behavior = new Behavior(userId, projectId, nickName, ipAddress, now, controller, method, backstage, uri, methodName, httpMethod, arguments, now, severAddress); uri, methodName, httpMethod, arguments, now, severAddress, null);
setInfo(behavior, uri, joinPoint, methodSignature, arguments, ResponseResult);
String collectionName = behaviorDao.generateCollectionName(); String collectionName = behaviorDao.generateCollectionName();
behaviorDao.insertOneWithoutId(behavior, collectionName); behaviorDao.insertOneWithoutId(behavior, collectionName);
} }
...@@ -96,6 +100,52 @@ public class AopLogRecord { ...@@ -96,6 +100,52 @@ public class AopLogRecord {
} }
/** /**
* 用户行为实体搜索关键词、渠道库渠道、事件详情事件名赋值
*
* @param behavior
* @param uri
* @param joinPoint
* @param methodSignature
* @param arguments
* @param ResponseResult
*/
private void setInfo(Behavior behavior, String uri, JoinPoint joinPoint, MethodSignature methodSignature, List<Map<String, Object>> arguments, ResponseResult ResponseResult) {
String record = null;
Object[] args = joinPoint.getArgs();
// 搜索接口关键词记录
if (uri.contains("/app/search") && !Tools.isEmpty(args)) {
if (1 == arguments.size()) {
if (!(args[0] instanceof Integer) && !(args[0] instanceof String)) {
JSONObject jsonObject = (JSONObject) JSON.toJSON(args[0]);
record = Objects.nonNull(jsonObject.get("keyword")) ? String.valueOf(jsonObject.get("keyword")) : String.valueOf(jsonObject.get("search"));
}
} else {
String[] parameterNames = methodSignature.getParameterNames();
for (int i = 0; i < parameterNames.length; i++) {
if (Objects.equals(parameterNames[i], "keyword")) {
record = String.valueOf(args[i]);
}
}
}
behavior.setRecord(record);
return;
}
// 渠道记录
if (uri.contains("/app/channel/baseInfo")) {
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(ResponseResult.getData());
record = Tools.concat(jsonObject.get("platform"), jsonObject.get("realSource"), jsonObject.get("source"));
behavior.setRecord(record);
return;
}
// 事件标题记录
if (uri.contains("/app/event/detail/baseInfo")) {
JSONObject jsonObject = (JSONObject) JSON.toJSON(ResponseResult.getData());
record = String.valueOf(jsonObject.get("title"));
behavior.setRecord(record);
}
}
/**
* 获取接口传参信息 * 获取接口传参信息
* @param joinPoint * @param joinPoint
* @return * @return
......
...@@ -14,6 +14,7 @@ public class Constant { ...@@ -14,6 +14,7 @@ public class Constant {
public static final Long EIGHT_HOUR = 8 * 60 * 60 * 1000L; public static final Long EIGHT_HOUR = 8 * 60 * 60 * 1000L;
public static final Long ONE_DAY = 24 * 60 * 60 * 1000L; public static final Long ONE_DAY = 24 * 60 * 60 * 1000L;
public static final Long ONE_WEEK = 7 * 24 * 60 * 60 * 1000L;
public static final Long ONE_MONTH = 30 * 24 * 60 * 60 * 1000L; public static final Long ONE_MONTH = 30 * 24 * 60 * 60 * 1000L;
public static final String SPEC_MINUTE_PATTERN = "yyyy.MM.dd HH:mm"; public static final String SPEC_MINUTE_PATTERN = "yyyy.MM.dd HH:mm";
......
...@@ -69,18 +69,25 @@ public class CommonController extends BaseController { ...@@ -69,18 +69,25 @@ public class CommonController extends BaseController {
return ResponseResult.success(projectService.getUserAllProjects()); return ResponseResult.success(projectService.getUserAllProjects());
} }
// @ApiOperation("获取默认间隔时间节点") // @ApiOperation("获取默认间隔时间节点")
// @GetMapping("/time/month") // @GetMapping("/time/format/day")
// @Auth(role = RoleEnum.CUSTOMER) // @Auth(role = RoleEnum.CUSTOMER)
// public ResponseResult getTimeRangeMonth() { // public ResponseResult getTimeRangeDay() {
// return ResponseResult.success(commonService.getTimeRangeMonth()); // return ResponseResult.success(commonService.getTimeRangeDay());
// } // }
// //
// @ApiOperation("获取默认周间隔时间节点") // @ApiOperation("获取默认周间隔时间节点")
// @GetMapping("/time/week") // @GetMapping("/time/format/week")
// @Auth(role = RoleEnum.CUSTOMER) // @Auth(role = RoleEnum.CUSTOMER)
// public ResponseResult getTimeRangeWeek() { // public ResponseResult getTimeRangeWeek() {
// return ResponseResult.success(commonService.getTimeRangeWeek()); // return ResponseResult.success(commonService.getTimeRangeFormatWeek());
// }
//
// @ApiOperation("获取默认月间隔时间节点")
// @GetMapping("/time/format/month")
// @Auth(role = RoleEnum.CUSTOMER)
// public ResponseResult getTimeRangeMonth() {
// return ResponseResult.success(commonService.getTimeRangeFormatMonth());
// } // }
} }
...@@ -9,8 +9,10 @@ import com.zhiwei.brandkbs2.pojo.external.BrandkbsYuQingConfig; ...@@ -9,8 +9,10 @@ import com.zhiwei.brandkbs2.pojo.external.BrandkbsYuQingConfig;
import com.zhiwei.brandkbs2.pojo.vo.CrisisCaseWarnVO; import com.zhiwei.brandkbs2.pojo.vo.CrisisCaseWarnVO;
import com.zhiwei.brandkbs2.service.ProjectService; import com.zhiwei.brandkbs2.service.ProjectService;
import com.zhiwei.brandkbs2.service.ProjectWarnService; import com.zhiwei.brandkbs2.service.ProjectWarnService;
import com.zhiwei.brandkbs2.util.TextUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
...@@ -33,6 +35,9 @@ public class InterfaceController { ...@@ -33,6 +35,9 @@ public class InterfaceController {
@Resource(name = "projectWarnServiceImpl") @Resource(name = "projectWarnServiceImpl")
private ProjectWarnService projectWarnService; private ProjectWarnService projectWarnService;
@Autowired
TextUtil textUtil;
@ApiOperation("获取项目预警详细信息") @ApiOperation("获取项目预警详细信息")
@GetMapping("/getProjectWarnCriteria") @GetMapping("/getProjectWarnCriteria")
public ResponseResult getProjectWarnCriteria(String projectId, String type) { public ResponseResult getProjectWarnCriteria(String projectId, String type) {
...@@ -101,4 +106,11 @@ public class InterfaceController { ...@@ -101,4 +106,11 @@ public class InterfaceController {
public ResponseResult getHitTagsByLinkedGroupId(String linkedGroupId) { public ResponseResult getHitTagsByLinkedGroupId(String linkedGroupId) {
return projectService.getHitTagsByLinkedGroupId(linkedGroupId); return projectService.getHitTagsByLinkedGroupId(linkedGroupId);
} }
@ApiOperation("获取事件详情页面词云(事件中间件项目调用)")
@PostMapping("/highWord")
public ResponseResult getEventDataHighWord(@RequestBody String texts){
List<String> list = JSONObject.parseObject(texts).getJSONArray("texts").toJavaList(String.class);
return ResponseResult.success(textUtil.getHighWordsJson(list, 30));
}
} }
...@@ -4,7 +4,6 @@ import com.alibaba.fastjson.JSONArray; ...@@ -4,7 +4,6 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.zhiwei.brandkbs2.auth.Auth; import com.zhiwei.brandkbs2.auth.Auth;
import com.zhiwei.brandkbs2.auth.UserThreadLocal; import com.zhiwei.brandkbs2.auth.UserThreadLocal;
import com.zhiwei.brandkbs2.common.GenericAttribute;
import com.zhiwei.brandkbs2.controller.BaseController; import com.zhiwei.brandkbs2.controller.BaseController;
import com.zhiwei.brandkbs2.easyexcel.EasyExcelUtil; import com.zhiwei.brandkbs2.easyexcel.EasyExcelUtil;
import com.zhiwei.brandkbs2.easyexcel.dto.UploadKeywordDTO; import com.zhiwei.brandkbs2.easyexcel.dto.UploadKeywordDTO;
...@@ -14,11 +13,9 @@ import com.zhiwei.brandkbs2.pojo.Behavior; ...@@ -14,11 +13,9 @@ import com.zhiwei.brandkbs2.pojo.Behavior;
import com.zhiwei.brandkbs2.pojo.vo.ProjectVO; import com.zhiwei.brandkbs2.pojo.vo.ProjectVO;
import com.zhiwei.brandkbs2.service.BehaviorService; import com.zhiwei.brandkbs2.service.BehaviorService;
import com.zhiwei.brandkbs2.service.CommonService; import com.zhiwei.brandkbs2.service.CommonService;
import com.zhiwei.brandkbs2.service.EventService;
import com.zhiwei.brandkbs2.service.ProjectService; import com.zhiwei.brandkbs2.service.ProjectService;
import com.zhiwei.brandkbs2.util.Tools; 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 com.zhiwei.middleware.mark.vo.MarkerTag;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
...@@ -53,9 +50,6 @@ public class ProjectController extends BaseController { ...@@ -53,9 +50,6 @@ public class ProjectController extends BaseController {
@Autowired @Autowired
private RestTemplate restTemplate; private RestTemplate restTemplate;
@Autowired
private EventTagClient eventTagClient;
@Resource(name = "projectServiceImpl") @Resource(name = "projectServiceImpl")
private ProjectService ProjectService; private ProjectService ProjectService;
...@@ -65,6 +59,9 @@ public class ProjectController extends BaseController { ...@@ -65,6 +59,9 @@ public class ProjectController extends BaseController {
@Resource(name = "commonServiceImpl") @Resource(name = "commonServiceImpl")
private CommonService commonService; private CommonService commonService;
@Resource(name = "eventServiceImpl")
private EventService eventService;
private static final Behavior.Operation OPERATION = new Behavior.Operation("项目管理", true); private static final Behavior.Operation OPERATION = new Behavior.Operation("项目管理", true);
@Value("${brandkbs.img.url}") @Value("${brandkbs.img.url}")
...@@ -216,7 +213,7 @@ public class ProjectController extends BaseController { ...@@ -216,7 +213,7 @@ public class ProjectController extends BaseController {
@ApiImplicitParam(name = "yuQingProjectId", value = "舆情项目id", required = true, paramType = "query", dataType = "string") @ApiImplicitParam(name = "yuQingProjectId", value = "舆情项目id", required = true, paramType = "query", dataType = "string")
@GetMapping("/get/eventTags") @GetMapping("/get/eventTags")
public ResponseResult getEventTagsInfo(@RequestParam(value = "yuQingProjectId") String yuQingProjectId){ public ResponseResult getEventTagsInfo(@RequestParam(value = "yuQingProjectId") String yuQingProjectId){
Object eventTags = eventTagClient.getEventTagGroupInfoBrandkbsWithoutEmotion(yuQingProjectId).getData(); Object eventTags = eventService.getEventTagGroupInfoBrandkbsWithoutEmotion(yuQingProjectId).getData();
return ResponseResult.success(eventTags); return ResponseResult.success(eventTags);
} }
......
...@@ -49,9 +49,6 @@ public class AppEventController extends BaseController { ...@@ -49,9 +49,6 @@ public class AppEventController extends BaseController {
@Value("${ef.checkCaptcha.url}") @Value("${ef.checkCaptcha.url}")
private String efCheckCaptchaUrl; private String efCheckCaptchaUrl;
@Autowired
private EventMonitorClient eventMonitorClient;
private final EventService eventService; private final EventService eventService;
public AppEventController(EventService eventService) { public AppEventController(EventService eventService) {
...@@ -186,7 +183,7 @@ public class AppEventController extends BaseController { ...@@ -186,7 +183,7 @@ public class AppEventController extends BaseController {
@ApiOperation("前台事件库-事件监测-新增事件监测") @ApiOperation("前台事件库-事件监测-新增事件监测")
@PostMapping("/addEventMonitor") @PostMapping("/addEventMonitor")
public ResponseResult addEventMonitor(@RequestBody EventDTO dto){ public ResponseResult addEventMonitor(@RequestBody EventDTO dto){
if (eventMonitorClient.countMonitoringEventsBrandkbs(UserThreadLocal.getProjectId()) >= 10){ if (eventService.getMonitoringEventsCount() >= 10){
return ResponseResult.failure("监测事件数量不得超过10"); return ResponseResult.failure("监测事件数量不得超过10");
} }
eventService.addEventMonitor(dto); eventService.addEventMonitor(dto);
...@@ -241,7 +238,7 @@ public class AppEventController extends BaseController { ...@@ -241,7 +238,7 @@ public class AppEventController extends BaseController {
public ResponseResult eventChannelVoices(@RequestParam(value = "eventId") String eventId, public ResponseResult eventChannelVoices(@RequestParam(value = "eventId") String eventId,
@RequestParam(value = "type", defaultValue = "重要渠道") String type, @RequestParam(value = "type", defaultValue = "重要渠道") String type,
@RequestParam(value = "page", defaultValue = "1") int page, @RequestParam(value = "page", defaultValue = "1") int page,
@RequestParam(value = "pageSize", defaultValue = "50") int pageSize, @RequestParam(value = "pageSize", defaultValue = "10") int pageSize,
@RequestParam(value = "sorter", required = false) String sorter){ @RequestParam(value = "sorter", required = false) String sorter){
return ResponseResult.success(eventService.eventChannelVoices(eventId, type, page, pageSize, sorter)); return ResponseResult.success(eventService.eventChannelVoices(eventId, type, page, pageSize, sorter));
} }
...@@ -256,6 +253,13 @@ public class AppEventController extends BaseController { ...@@ -256,6 +253,13 @@ public class AppEventController extends BaseController {
return ResponseResult.success(eventService.eventTopArticlesAnalysis(eventId, type, emotion, aggTitle)); return ResponseResult.success(eventService.eventTopArticlesAnalysis(eventId, type, emotion, aggTitle));
} }
@ApiOperation("前台事件库-事件详情-热门渠道发声、上榜热搜、词云")
@GetMapping("/detail/additional-info")
@Auth(role = RoleEnum.NO_AUTHORISE)
public ResponseResult eventDetailAdditionalInfo(@RequestParam(value = "eventId") String eventId){
return ResponseResult.success(eventService.eventDetailAdditionalInfo(eventId));
}
@ApiOperation("前台事件库-事件详情-持续事件") @ApiOperation("前台事件库-事件详情-持续事件")
@GetMapping("/detail/continue-event") @GetMapping("/detail/continue-event")
public ResponseResult continueEvent(@RequestParam(value = "eventId") String eventId){ public ResponseResult continueEvent(@RequestParam(value = "eventId") String eventId){
......
...@@ -4,6 +4,7 @@ package com.zhiwei.brandkbs2.controller.app; ...@@ -4,6 +4,7 @@ package com.zhiwei.brandkbs2.controller.app;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.zhiwei.brandkbs2.auth.Auth; import com.zhiwei.brandkbs2.auth.Auth;
import com.zhiwei.brandkbs2.auth.UserThreadLocal;
import com.zhiwei.brandkbs2.config.Constant; import com.zhiwei.brandkbs2.config.Constant;
import com.zhiwei.brandkbs2.controller.BaseController; import com.zhiwei.brandkbs2.controller.BaseController;
import com.zhiwei.brandkbs2.easyexcel.EasyExcelUtil; import com.zhiwei.brandkbs2.easyexcel.EasyExcelUtil;
...@@ -71,6 +72,9 @@ public class AppSearchController extends BaseController { ...@@ -71,6 +72,9 @@ public class AppSearchController extends BaseController {
@Resource(name = "commonServiceImpl") @Resource(name = "commonServiceImpl")
CommonService commonService; CommonService commonService;
@Resource(name = "projectServiceImpl")
ProjectService projectService;
@ApiOperation("搜索-查热点") @ApiOperation("搜索-查热点")
@GetMapping("/hot/list") @GetMapping("/hot/list")
public ResponseResult searchHotList(@RequestParam(value = "pageSize", defaultValue = "10") Integer limit, public ResponseResult searchHotList(@RequestParam(value = "pageSize", defaultValue = "10") Integer limit,
...@@ -129,15 +133,18 @@ public class AppSearchController extends BaseController { ...@@ -129,15 +133,18 @@ public class AppSearchController extends BaseController {
@ApiOperation("搜索-全网搜") @ApiOperation("搜索-全网搜")
@PostMapping("/searchWhole") @PostMapping("/searchWhole")
public ResponseResult searchWholeNetwork(@RequestBody SearchFilterDTO dto) { public ResponseResult searchWholeNetwork(@RequestBody SearchFilterDTO dto) {
long time = DateUtils.addDays(Tools.truncDate(new Date(), Constant.DAY_PATTERN), -89).getTime(); // 针对商业数据库做限制
if (time > dto.getStartTime()) { if (2 == projectService.getProjectById(UserThreadLocal.getProjectId()).getWholeSearchDataSource()) {
// 仅对查商业数据库时限制时间,查舆情库时本质上无时间限制 long time = DateUtils.addDays(Tools.truncDate(new Date(), Constant.DAY_PATTERN), -89).getTime();
return ResponseResult.failure("仅能搜索近3个月内信息"); if (time > dto.getStartTime()) {
} // 仅对查商业数据库时限制时间,查舆情库时本质上无时间限制
Period periodDay = new Period(dto.getStartTime(), dto.getEndTime(), PeriodType.days()); return ResponseResult.failure("仅能搜索近3个月内信息");
if (periodDay.getDays() > 30) { }
// 仅对查商业数据库时限制时间,查舆情库时本质上无时间限制 Period periodDay = new Period(dto.getStartTime(), dto.getEndTime(), PeriodType.days());
return ResponseResult.failure("时间跨度不能超过30天"); if (periodDay.getDays() > 30) {
// 仅对查商业数据库时限制时间,查舆情库时本质上无时间限制
return ResponseResult.failure("时间跨度不能超过30天");
}
} }
return ResponseResult.success(markDataService.searchWholeNetwork(dto)); return ResponseResult.success(markDataService.searchWholeNetwork(dto));
} }
...@@ -145,9 +152,18 @@ public class AppSearchController extends BaseController { ...@@ -145,9 +152,18 @@ public class AppSearchController extends BaseController {
@ApiOperation("搜索-全网搜-舆情导出") @ApiOperation("搜索-全网搜-舆情导出")
@PostMapping("/exportSearchWhole") @PostMapping("/exportSearchWhole")
public ResponseResult exportSearchWhole(@RequestBody SearchFilterDTO dto) { public ResponseResult exportSearchWhole(@RequestBody SearchFilterDTO dto) {
long time = DateUtils.addDays(Tools.truncDate(new Date(), Constant.DAY_PATTERN), -89).getTime(); // 针对商业数据库做限制
if (time > dto.getStartTime()) { if (2 == projectService.getProjectById(UserThreadLocal.getProjectId()).getWholeSearchDataSource()) {
return ResponseResult.failure("仅能导出近3个月内信息"); long time = DateUtils.addDays(Tools.truncDate(new Date(), Constant.DAY_PATTERN), -89).getTime();
if (time > dto.getStartTime()) {
// 仅对查商业数据库时限制时间,查舆情库时本质上无时间限制
return ResponseResult.failure("仅能导出近3个月内信息");
}
Period periodDay = new Period(dto.getStartTime(), dto.getEndTime(), PeriodType.days());
if (periodDay.getDays() > 30) {
// 仅对查商业数据库时限制时间,查舆情库时本质上无时间限制
return ResponseResult.failure("时间跨度不能超过30天");
}
} }
List<ExportSearchWholeDTO> exportList = markDataService.exportSearchWhole(dto); List<ExportSearchWholeDTO> exportList = markDataService.exportSearchWhole(dto);
EasyExcelUtil.download("全网搜舆情列表数据", "sheet1", ExportSearchWholeDTO.class, exportList, response); EasyExcelUtil.download("全网搜舆情列表数据", "sheet1", ExportSearchWholeDTO.class, exportList, response);
...@@ -197,6 +213,12 @@ public class AppSearchController extends BaseController { ...@@ -197,6 +213,12 @@ public class AppSearchController extends BaseController {
return ResponseResult.success(eventService.getLastEventTop(null, 5)); return ResponseResult.success(eventService.getLastEventTop(null, 5));
} }
@ApiOperation("搜索-热门事件")
@GetMapping("/lastEventTop")
public ResponseResult getLastEventTopMiddleware() {
return ResponseResult.success(eventService.getLastEventTopMiddleware(null, 5));
}
@ApiOperation("搜索-前台事件库-搜索条件") @ApiOperation("搜索-前台事件库-搜索条件")
@GetMapping("/event/list/criteria") @GetMapping("/event/list/criteria")
public ResponseResult getEventsSearchCriteria() { public ResponseResult getEventsSearchCriteria() {
......
package com.zhiwei.brandkbs2.dao;
import com.alibaba.fastjson.JSONObject;
import com.zhiwei.middleware.event.pojo.PageData;
import com.zhiwei.middleware.event.pojo.ReturnData;
import com.zhiwei.middleware.event.pojo.dto.BrandkbsEventSearchDTO;
import com.zhiwei.middleware.event.pojo.dto.EventBaseInfoDTO;
import com.zhiwei.middleware.event.pojo.dto.EventDTO;
import com.zhiwei.middleware.event.pojo.dto.EventTagRelatedDTO;
import com.zhiwei.middleware.event.pojo.entity.*;
import com.zhiwei.middleware.event.pojo.vo.EventListInfoVO;
import com.zhiwei.middleware.event.pojo.vo.EventVO;
import java.util.List;
import java.util.Map;
/**
* @ClassName: EventMiddlewareDao
* @Description 事件中间件
* @author: cjz
* @date: 2023-02-08 10:45
*/
public interface EventMiddlewareDao {
/**
* 按筛选条件获取事件列表
* @param dto
* @return
*/
PageData<EventListInfoVO> getEventListBrandkbs(BrandkbsEventSearchDTO dto);
/**
* 根据id删除事件
* @param eventId
* @return
*/
ReturnData deleteEvent(String eventId);
/**
* 获取事件基础信息
* @param eventId
* @return
*/
EventBaseInfoDTO eventBaseInfo(String eventId);
/**
* 获取传播趋势
* @param eventId
* @param type
* @return
*/
EventDisseminationTrend eventDisseminationTrends(String eventId, String type);
/**
* 持续事件
* @param eventId
* @param submitter
* @param submitterId
* @return
*/
ReturnData continueEvent(String eventId, String submitter, String submitterId);
/**
* 获取事件热门文章分析
* @param eventId
* @param type
* @param emotion
* @param aggTitle
* @return
*/
JSONObject eventTopArticlesAnalysis(String eventId, String type, String emotion, String aggTitle);
/**
* 获取事件渠道发声
* @param eventId
* @param type
* @param page
* @param pageSize
* @param sorter
* @return
*/
PageData<JSONObject> eventChannelVoices(String eventId, String type, int page, int pageSize, String sorter);
/**
* 统计事件数量
* @param eventIds
* @return
*/
Long countInEventIds(List<String> eventIds);
/**
* 统计事件数据数量
* @param event
* @return
*/
Long countEventDataByEventId(Event event);
/**
* 统计事件数据数量
* @param event
* @return
*/
Long countEventDataByEventIdAndFid(Event event, String fid);
/**
* 获取事件列表
* @param eventIds
* @return
*/
List<Event> findListInEventIds(List<String> eventIds, int page, int pageSize);
/**
* 获取事件列表
* @param eventIds
* @return
*/
List<Event> findListInEventIds(List<String> eventIds);
/**
* 获取参与事件数
*
* @param fid
* @return 参与事件数
*/
List<String> getEvents(String fid);
/**
* 获取参与事件数
*
* @param fid
* @return 参与事件数
*/
Map<Long, List<Event>> getEventDay(String fid, Long startTime, Long endTime);
/**
* 获取参与事件数
*
* @param fid
* @return 参与事件数
*/
Map<Long, List<Event>> getEventMonth(String fid, Long startTime, Long endTime);
/**
* 获取参与的反常事件数
*
* @param fid 渠道标识
* @param eventEmotions 事件情感倾向
* @param articleEmotion 文章情感倾向
* @return 参与的反常事件数
*/
Long getEventCount(String fid, List<String> eventEmotions, String articleEmotion);
/**
* 根据特征值获取事件数
*
* @param startTime
* @param endTime
* @param emotion
* @param projectId
* @param contendId
* @return
*/
Long getEventCountByProjectIdAndContendId(Long startTime, Long endTime, String emotion, String projectId, String contendId);
/**
* 根据特征值获取事件
*
* @param startTime
* @param endTime
* @param emotion
* @param projectId
* @param contendId
* @return
*/
List<Event> getEventsByProjectIdAndContendId(Long startTime, Long endTime, String emotion, String projectId, String contendId, int limit);
/**
* 根据特征值获取事件
*
* @param startTime
* @param endTime
* @param emotions
* @param projectId
* @param contendId
* @return
*/
List<Event> getEventsByProjectIdAndContendId(Long startTime, Long endTime, List<String> emotions, String projectId, String contendId, int limit);
List<Event> getEventsByTotalChannelVolumeTop(Long startTime, Long endTime, String emotion, String projectId, String contendId, int limit);
/**
* 获得最新的事件
*
* @return
*/
List<JSONObject> getLastEventTop(String keyword, int limit, String brandkbsProjectId);
/**
* 获取传播量
*
* @param event 事件
* @return 传播量
*/
Long getEventArticleCount(Event event);
/**
* 获取渠道参与传播量
*
* @param event 事件
* @return 传播量
*/
Long getEventArticleWithChannelCount(Event event, String source, String realSource, String platform);
/**
* 获取事件监测列表
* @param brandkbsBrandId
* @param page
* @param pageSize
* @return
*/
PageData<EventVO> getEventMonitorBrandkbs(String brandkbsBrandId, int page, int pageSize);
/**
* 新增事件监测
* @param eventDTO
* @return
*/
ReturnData addEventMonitor(EventDTO eventDTO);
/**
* 编辑单个监测事件
* @param eventId
* @param eventDTO
* @param brandkbsInfos
* @return
*/
ReturnData modifyEventMonitor(String eventId, EventDTO eventDTO, List<BrandkbsBasicInfo> brandkbsInfos);
/**
* 结束事件监测
* @param eventId
* @param submitter
* @param submitterId
* @return
*/
ReturnData endEventMonitor(String eventId, String submitter, String submitterId);
/**
* 统计状态为监测中的事件数量
* @param brandId
* @return
*/
Long countMonitoringEventsBrandkbs(String brandId);
/**
* 获取标签组信息
* @param projectId
* @return
*/
ReturnData getEventTagGroupInfoBrandkbs(String projectId);
/**
*
* @param yuQingProject
* @param yuQingProjectId
* @param eventTags
* @param brandkbsProject
* @param brandkbsProjectId
* @param brandkbsBrand
* @param brandkbsBrandId
* @param submitter
* @param submitterId
* @return
*/
ReturnData bindBrandkbs(String yuQingProject, String yuQingProjectId, List<EventTagRelatedDTO> eventTags, String brandkbsProject, String brandkbsProjectId, String brandkbsBrand, String brandkbsBrandId, String submitter, String submitterId);
/**
* 获取品见项目标签绑定情况
* @param brandkbsProjectId
* @return
*/
ReturnData getBrandkbsBindingEventTags(String brandkbsProjectId);
/**
* 修改品见关联关系,若存在则修改,否则新增
* @param yuQingProject
* @param yuQingProjectId
* @param eventTags
* @param brandkbsProject
* @param brandkbsProjectId
* @param brandkbsBrand
* @param brandkbsBrandId
* @param submitter
* @param submitterId
* @return
*/
ReturnData modifyBrandkbsEventTags(String yuQingProject, String yuQingProjectId, List<EventTagRelatedDTO> eventTags, String brandkbsProject, String brandkbsProjectId, String brandkbsBrand, String brandkbsBrandId, String submitter, String submitterId);
/**
* 获取标签组信息
* @param projectId
* @return
*/
ReturnData getEventTagGroupInfoBrandkbsWithoutEmotion(String projectId);
/**
* 事件详情页面高频渠道发声、词云、上榜热搜
* @param eventId 事件id
* @return EventDetailAdditionalInfo
*/
EventDetailAdditionalInfo eventDetailAdditionalInfo(String eventId);
}
package com.zhiwei.brandkbs2.dao.impl;
import com.alibaba.fastjson.JSONObject;
import com.zhiwei.brandkbs2.dao.EventMiddlewareDao;
import com.zhiwei.middleware.event.core.EventClient;
import com.zhiwei.middleware.event.core.EventMonitorClient;
import com.zhiwei.middleware.event.core.EventTagClient;
import com.zhiwei.middleware.event.pojo.PageData;
import com.zhiwei.middleware.event.pojo.ReturnData;
import com.zhiwei.middleware.event.pojo.dto.BrandkbsEventSearchDTO;
import com.zhiwei.middleware.event.pojo.dto.EventBaseInfoDTO;
import com.zhiwei.middleware.event.pojo.dto.EventDTO;
import com.zhiwei.middleware.event.pojo.dto.EventTagRelatedDTO;
import com.zhiwei.middleware.event.pojo.entity.BrandkbsBasicInfo;
import com.zhiwei.middleware.event.pojo.entity.Event;
import com.zhiwei.middleware.event.pojo.entity.EventDetailAdditionalInfo;
import com.zhiwei.middleware.event.pojo.entity.EventDisseminationTrend;
import com.zhiwei.middleware.event.pojo.vo.EventListInfoVO;
import com.zhiwei.middleware.event.pojo.vo.EventVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
/**
* @ClassName: EventMiddlewareDaoImpl
* @Description 事件中间件业务实现类
* @author: cjz
* @date: 2023-02-08 10:45
*/
@Component("eventMiddlewareDao")
public class EventMiddlewareDaoImpl implements EventMiddlewareDao {
@Autowired
private EventClient eventClient;
@Autowired
private EventTagClient eventTagClient;
@Autowired
private EventMonitorClient eventMonitorClient;
@Override
public PageData<EventListInfoVO> getEventListBrandkbs(BrandkbsEventSearchDTO dto) {
return eventClient.getEventListBrandkbs(dto);
}
@Override
public ReturnData deleteEvent(String eventId) {
return eventClient.deleteEvent(eventId);
}
@Override
public EventBaseInfoDTO eventBaseInfo(String eventId) {
return eventClient.eventBaseInfo(eventId);
}
@Override
public EventDisseminationTrend eventDisseminationTrends(String eventId, String type) {
return eventClient.eventDisseminationTrends(eventId, type);
}
@Override
public ReturnData continueEvent(String eventId, String submitter, String submitterId) {
return eventClient.continueEvent(eventId, submitter, submitterId);
}
@Override
public JSONObject eventTopArticlesAnalysis(String eventId, String type, String emotion, String aggTitle) {
return eventClient.eventTopArticlesAnalysis(eventId, type, emotion, aggTitle);
}
@Override
public PageData<JSONObject> eventChannelVoices(String eventId, String type, int page, int pageSize, String sorter) {
return eventClient.eventChannelVoices(eventId, type, page, pageSize, sorter);
}
@Override
public Long countInEventIds(List<String> eventIds) {
return eventClient.countInEventIds(eventIds);
}
@Override
public Long countEventDataByEventId(Event event) {
return eventClient.countEventDataByEventId(event);
}
@Override
public Long countEventDataByEventIdAndFid(Event event, String fid) {
return eventClient.countEventDataByEventIdAndFid(event, fid);
}
@Override
public List<Event> findListInEventIds(List<String> eventIds, int page, int pageSize) {
return eventClient.findListInEventIds(eventIds, page, pageSize);
}
@Override
public List<Event> findListInEventIds(List<String> eventIds) {
return eventClient.findListInEventIds(eventIds);
}
@Override
public List<String> getEvents(String fid) {
return eventClient.getEvents(fid);
}
@Override
public Map<Long, List<Event>> getEventDay(String fid, Long startTime, Long endTime) {
return eventClient.getEventDay(fid, startTime, endTime);
}
@Override
public Map<Long, List<Event>> getEventMonth(String fid, Long startTime, Long endTime) {
return eventClient.getEventMonth(fid, startTime, endTime);
}
@Override
public Long getEventCount(String fid, List<String> eventEmotions, String articleEmotion) {
return eventClient.getEventCount(fid, eventEmotions, articleEmotion);
}
@Override
public Long getEventCountByProjectIdAndContendId(Long startTime, Long endTime, String emotion, String projectId, String contendId) {
return eventClient.getEventCountByProjectIdAndContendId(startTime, endTime, emotion, projectId, contendId);
}
@Override
public List<Event> getEventsByProjectIdAndContendId(Long startTime, Long endTime, String emotion, String projectId, String contendId, int limit) {
return eventClient.getEventsByProjectIdAndContendId(startTime, endTime, emotion, projectId, contendId, limit);
}
@Override
public List<Event> getEventsByProjectIdAndContendId(Long startTime, Long endTime, List<String> emotions, String projectId, String contendId, int limit) {
return eventClient.getEventsByProjectIdAndContendId(startTime, endTime, emotions, projectId, contendId, limit);
}
@Override
public List<Event> getEventsByTotalChannelVolumeTop(Long startTime, Long endTime, String emotion, String projectId, String contendId, int limit) {
return eventClient.getEventsByTotalChannelVolumeTop(startTime, endTime, emotion, projectId, contendId, limit);
}
@Override
public List<JSONObject> getLastEventTop(String keyword, int limit, String brandkbsProjectId) {
return eventClient.getLastEventTop(keyword, limit, brandkbsProjectId);
}
@Override
public Long getEventArticleCount(Event event) {
return eventClient.getEventArticleCount(event);
}
@Override
public Long getEventArticleWithChannelCount(Event event, String source, String realSource, String platform) {
return eventClient.getEventArticleWithChannelCount(event, source, realSource, platform);
}
@Override
public PageData<EventVO> getEventMonitorBrandkbs(String brandkbsBrandId, int page, int pageSize) {
return eventMonitorClient.getEventMonitorBrandkbs(brandkbsBrandId, page, pageSize);
}
@Override
public ReturnData addEventMonitor(EventDTO eventDTO) {
return eventMonitorClient.addEventMonitor(eventDTO);
}
@Override
public ReturnData modifyEventMonitor(String eventId, EventDTO eventDTO, List<BrandkbsBasicInfo> brandkbsInfos) {
return eventMonitorClient.modifyEventMonitor(eventId, eventDTO, brandkbsInfos);
}
@Override
public ReturnData endEventMonitor(String eventId, String submitter, String submitterId) {
return eventMonitorClient.endEventMonitor(eventId, submitter, submitterId);
}
@Override
public Long countMonitoringEventsBrandkbs(String brandId) {
return eventMonitorClient.countMonitoringEventsBrandkbs(brandId);
}
@Override
public ReturnData getEventTagGroupInfoBrandkbs(String projectId) {
return eventTagClient.getEventTagGroupInfoBrandkbs(projectId);
}
@Override
public ReturnData bindBrandkbs(String yuQingProject, String yuQingProjectId, List<EventTagRelatedDTO> eventTags, String brandkbsProject, String brandkbsProjectId, String brandkbsBrand, String brandkbsBrandId, String submitter, String submitterId) {
return eventTagClient.bindBrandkbs(yuQingProject, yuQingProjectId, eventTags, brandkbsProject, brandkbsProjectId, brandkbsBrand, brandkbsBrandId, submitter, submitterId);
}
@Override
public ReturnData getBrandkbsBindingEventTags(String brandkbsProjectId) {
return eventTagClient.getBrandkbsBindingEventTags(brandkbsProjectId);
}
@Override
public ReturnData modifyBrandkbsEventTags(String yuQingProject, String yuQingProjectId, List<EventTagRelatedDTO> eventTags, String brandkbsProject, String brandkbsProjectId, String brandkbsBrand, String brandkbsBrandId, String submitter, String submitterId) {
return eventTagClient.modifyBrandkbsEventTags(yuQingProject, yuQingProjectId, eventTags, brandkbsProject, brandkbsProjectId, brandkbsBrand, brandkbsBrandId, submitter, submitterId);
}
@Override
public ReturnData getEventTagGroupInfoBrandkbsWithoutEmotion(String projectId) {
return eventTagClient.getEventTagGroupInfoBrandkbsWithoutEmotion(projectId);
}
@Override
public EventDetailAdditionalInfo eventDetailAdditionalInfo(String eventId) {
return eventClient.eventDetailAdditionalInfo(eventId);
}
}
...@@ -85,11 +85,13 @@ public class ResponseResult { ...@@ -85,11 +85,13 @@ public class ResponseResult {
/** /**
* 操作失败带返回数据 * 操作失败带返回数据
* *
* @param data 返回数据 * @param message 失败信息
* @return 操作失败带返回数据 * @return 操作失败带返回数据
*/ */
public static ResponseResult failure(Object data) { public static ResponseResult failure(String message) {
return new ResponseResult(CommonCodeEnum.FAIL, data); ResponseResult responseResult = new ResponseResult(CommonCodeEnum.FAIL, null);
responseResult.setMessage(message);
return responseResult;
} }
/** /**
......
...@@ -74,6 +74,11 @@ public class Behavior extends AbstractBaseMongo { ...@@ -74,6 +74,11 @@ public class Behavior extends AbstractBaseMongo {
*/ */
private String severAddress; private String severAddress;
/**
* 需要的记录
*/
private String record;
@Getter @Getter
public static class Operation { public static class Operation {
......
...@@ -93,7 +93,7 @@ public class Report extends AbstractBaseMongo { ...@@ -93,7 +93,7 @@ public class Report extends AbstractBaseMongo {
case MONTH: case MONTH:
report.setTitle(project.getBrandName() + Constant.DAY_FORMAT.format(now) + reportSettings.getType()); report.setTitle(project.getBrandName() + Constant.DAY_FORMAT.format(now) + reportSettings.getType());
now = Tools.truncDate(new Date(), Constant.DAY_PATTERN); now = Tools.truncDate(new Date(), Constant.DAY_PATTERN);
report.setStartTime(DateUtils.addMonths(now, 1).getTime()); report.setStartTime(DateUtils.addMonths(now, -1).getTime());
report.setEndTime(now.getTime()); report.setEndTime(now.getTime());
break; break;
case CUSTOM: case CUSTOM:
......
...@@ -5,6 +5,7 @@ import com.alibaba.excel.annotation.write.style.ColumnWidth; ...@@ -5,6 +5,7 @@ import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import lombok.Data; import lombok.Data;
import lombok.ToString; import lombok.ToString;
import org.apache.commons.lang3.StringUtils;
import java.util.Date; import java.util.Date;
...@@ -43,9 +44,10 @@ public class ExportSearchWholeDTO { ...@@ -43,9 +44,10 @@ public class ExportSearchWholeDTO {
dto.setTime(new Date((Long) jsonObject.get("time"))); dto.setTime(new Date((Long) jsonObject.get("time")));
dto.setPlatform(jsonObject.getString("platform")); dto.setPlatform(jsonObject.getString("platform"));
dto.setChannel(jsonObject.getString("channel")); dto.setChannel(jsonObject.getString("channel"));
dto.setTitle(jsonObject.getString("title")); // 截取为excel单元格允许的最大长度
dto.setContent(jsonObject.getString("content")); dto.setTitle(StringUtils.substring(jsonObject.getString("title"), 0, 32767));
dto.setUrl(jsonObject.getString("url")); dto.setContent(StringUtils.substring(jsonObject.getString("content"), 0, 32767));
dto.setUrl(StringUtils.substring(jsonObject.getString("url"), 0, 32767));
return dto; return dto;
} }
} }
...@@ -4,6 +4,7 @@ import com.zhiwei.middleware.event.pojo.entity.Event; ...@@ -4,6 +4,7 @@ import com.zhiwei.middleware.event.pojo.entity.Event;
import com.zhiwei.middleware.event.pojo.entity.EventTagBasicInfo; import com.zhiwei.middleware.event.pojo.entity.EventTagBasicInfo;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import org.apache.commons.collections4.CollectionUtils;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -74,8 +75,11 @@ public class BrandkbsHotEventWarn { ...@@ -74,8 +75,11 @@ public class BrandkbsHotEventWarn {
hotEvent.setInfluence(event.getInfluence()); hotEvent.setInfluence(event.getInfluence());
// List<String> tagList = event.getEventTag().entrySet().stream().filter(entry -> !"情感倾向".equals(entry.getKey())) // List<String> tagList = event.getEventTag().entrySet().stream().filter(entry -> !"情感倾向".equals(entry.getKey()))
// .map(entry -> String.valueOf(entry.getValue())).collect(Collectors.toList()); // .map(entry -> String.valueOf(entry.getValue())).collect(Collectors.toList());
List<String> tagList = event.getEventTags().stream().filter(eventTagBasicInfo -> !"情感倾向".equals(eventTagBasicInfo.getGroupName())) List<String> tagList = null;
.map(EventTagBasicInfo::getName).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(event.getEventTags())) {
tagList = event.getEventTags().stream().filter(eventTagBasicInfo -> !"情感倾向".equals(eventTagBasicInfo.getGroupName()))
.map(EventTagBasicInfo::getName).collect(Collectors.toList());
}
hotEvent.setTagList(tagList); hotEvent.setTagList(tagList);
return hotEvent; return hotEvent;
} }
......
...@@ -44,6 +44,11 @@ public class BehaviorVO { ...@@ -44,6 +44,11 @@ public class BehaviorVO {
*/ */
private Integer roleId; private Integer roleId;
/**
* 需要的纪录
*/
private String record;
public static BehaviorVO createFromBehavior(Behavior behavior, Integer roleId) { public static BehaviorVO createFromBehavior(Behavior behavior, Integer roleId) {
BehaviorVO behaviorVO = Tools.convertMap(behavior, BehaviorVO.class); BehaviorVO behaviorVO = Tools.convertMap(behavior, BehaviorVO.class);
// 补充role // 补充role
......
...@@ -14,9 +14,11 @@ import com.zhiwei.brandkbs2.pojo.vo.EventVO; ...@@ -14,9 +14,11 @@ import com.zhiwei.brandkbs2.pojo.vo.EventVO;
import com.zhiwei.brandkbs2.pojo.vo.PageVO; import com.zhiwei.brandkbs2.pojo.vo.PageVO;
import com.zhiwei.brandkbs2.pojo.vo.YqEventSearchVO; import com.zhiwei.brandkbs2.pojo.vo.YqEventSearchVO;
import com.zhiwei.middleware.event.pojo.PageData; import com.zhiwei.middleware.event.pojo.PageData;
import com.zhiwei.middleware.event.pojo.ReturnData;
import com.zhiwei.middleware.event.pojo.dto.BrandkbsEventSearchDTO; import com.zhiwei.middleware.event.pojo.dto.BrandkbsEventSearchDTO;
import com.zhiwei.middleware.event.pojo.dto.EventBaseInfoDTO; import com.zhiwei.middleware.event.pojo.dto.EventBaseInfoDTO;
import com.zhiwei.middleware.event.pojo.dto.EventDTO; import com.zhiwei.middleware.event.pojo.dto.EventDTO;
import com.zhiwei.middleware.event.pojo.entity.EventDetailAdditionalInfo;
import com.zhiwei.middleware.event.pojo.vo.EventTagBrandkbsVO; import com.zhiwei.middleware.event.pojo.vo.EventTagBrandkbsVO;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
...@@ -290,6 +292,19 @@ public interface EventService { ...@@ -290,6 +292,19 @@ public interface EventService {
List<JSONObject> getLastEventTop(String keyword,int limit); List<JSONObject> getLastEventTop(String keyword,int limit);
/** /**
* 事件中间件获得最新的事件
*
* @return
*/
List<JSONObject> getLastEventTopMiddleware(String keyword,int limit);
/**
* 事件中间件获取标签组信息
* @return
*/
ReturnData getEventTagGroupInfoBrandkbsWithoutEmotion(String yuqingProjectId);
/**
* 获取未结束的事件 * 获取未结束的事件
* @param projectId * @param projectId
* @return * @return
...@@ -396,6 +411,13 @@ public interface EventService { ...@@ -396,6 +411,13 @@ public interface EventService {
JSONObject eventTopArticlesAnalysis(String eventId, String type, String emotion, String aggTitle); JSONObject eventTopArticlesAnalysis(String eventId, String type, String emotion, String aggTitle);
/** /**
* 事件详情页面高频渠道发声、词云、上榜热搜
* @param eventId 事件id
* @return EventDetailAdditionalInfo
*/
EventDetailAdditionalInfo eventDetailAdditionalInfo(String eventId);
/**
* 持续事件 * 持续事件
* @param eventId 事件id * @param eventId 事件id
*/ */
......
...@@ -29,7 +29,7 @@ public interface ReportService { ...@@ -29,7 +29,7 @@ public interface ReportService {
*/ */
Map<String, ReportSettingsDTO> getReportSettings(); Map<String, ReportSettingsDTO> getReportSettings();
List<Report> getCustomReportByStatus(String projectId,boolean status); List<Report> getReportByStatus(String projectId,boolean status);
/** /**
* 保存报告配置 * 保存报告配置
......
...@@ -24,6 +24,11 @@ public interface TaskService{ ...@@ -24,6 +24,11 @@ public interface TaskService{
void messageFlowCache(); void messageFlowCache();
/** /**
* 自定义事件标题聚合分析缓存
*/
void customEventCache();
/**
* 生成简报任务并推送 * 生成简报任务并推送
*/ */
void generateReportAndSend(); void generateReportAndSend();
......
...@@ -11,8 +11,6 @@ import com.zhiwei.brandkbs2.pojo.UserRole; ...@@ -11,8 +11,6 @@ import com.zhiwei.brandkbs2.pojo.UserRole;
import com.zhiwei.brandkbs2.pojo.vo.BehaviorVO; import com.zhiwei.brandkbs2.pojo.vo.BehaviorVO;
import com.zhiwei.brandkbs2.pojo.vo.PageVO; import com.zhiwei.brandkbs2.pojo.vo.PageVO;
import com.zhiwei.brandkbs2.service.BehaviorService; import com.zhiwei.brandkbs2.service.BehaviorService;
import com.zhiwei.brandkbs2.util.MongoUtil;
import com.zhiwei.brandkbs2.util.Tools;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
...@@ -123,6 +121,8 @@ public class BehaviorServiceImpl implements BehaviorService { ...@@ -123,6 +121,8 @@ public class BehaviorServiceImpl implements BehaviorService {
Date end = new Date(endTime); Date end = new Date(endTime);
Query query = new Query(); Query query = new Query();
query.addCriteria(Criteria.where("cTime").gte(startTime).lt(endTime).and("backstage").is(backstage)); query.addCriteria(Criteria.where("cTime").gte(startTime).lt(endTime).and("backstage").is(backstage));
query.addCriteria(Criteria.where("projectId").is(UserThreadLocal.getProjectId()));
behaviorDao.addSort(query, "{\"cTime\":\"descend\"}");
List<Behavior> behaviorList = behaviorDao.findList(query, behaviorDao.generateCollectionNames(start, end)); List<Behavior> behaviorList = behaviorDao.findList(query, behaviorDao.generateCollectionNames(start, end));
List<ExportBehaviorDTO> resList = new ArrayList<>(behaviorList.size()); List<ExportBehaviorDTO> resList = new ArrayList<>(behaviorList.size());
behaviorList.forEach(behavior -> { behaviorList.forEach(behavior -> {
......
...@@ -32,7 +32,6 @@ import com.zhiwei.brandkbs2.service.ProjectService; ...@@ -32,7 +32,6 @@ import com.zhiwei.brandkbs2.service.ProjectService;
import com.zhiwei.brandkbs2.util.MongoUtil; import com.zhiwei.brandkbs2.util.MongoUtil;
import com.zhiwei.brandkbs2.util.RedisUtil; import com.zhiwei.brandkbs2.util.RedisUtil;
import com.zhiwei.brandkbs2.util.Tools; import com.zhiwei.brandkbs2.util.Tools;
import com.zhiwei.middleware.event.core.EventClient;
import com.zhiwei.middleware.event.pojo.entity.Event; import com.zhiwei.middleware.event.pojo.entity.Event;
import com.zhiwei.middleware.event.pojo.entity.EventTagBasicInfo; import com.zhiwei.middleware.event.pojo.entity.EventTagBasicInfo;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
...@@ -55,7 +54,6 @@ import org.elasticsearch.search.sort.SortBuilders; ...@@ -55,7 +54,6 @@ import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder; import org.elasticsearch.search.sort.SortOrder;
import org.joda.time.Period; import org.joda.time.Period;
import org.joda.time.PeriodType; import org.joda.time.PeriodType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update; import org.springframework.data.mongodb.core.query.Update;
...@@ -110,6 +108,9 @@ public class ChannelServiceImpl implements ChannelService { ...@@ -110,6 +108,9 @@ public class ChannelServiceImpl implements ChannelService {
@Resource(name = "markDataServiceImpl") @Resource(name = "markDataServiceImpl")
MarkDataService markDataService; MarkDataService markDataService;
@Resource(name = "eventMiddlewareDao")
EventMiddlewareDao eventMiddlewareDao;
@Resource(name = "mongoUtil") @Resource(name = "mongoUtil")
MongoUtil mongoUtil; MongoUtil mongoUtil;
...@@ -119,9 +120,6 @@ public class ChannelServiceImpl implements ChannelService { ...@@ -119,9 +120,6 @@ public class ChannelServiceImpl implements ChannelService {
@Resource(name = "esSearchExecutor") @Resource(name = "esSearchExecutor")
ThreadPoolTaskExecutor esSearchExecutor; ThreadPoolTaskExecutor esSearchExecutor;
@Autowired
private EventClient eventClient;
@Override @Override
public PageVO<JSONObject> findChannelList(int page, int size, String contendId, String emotion, String platform, public PageVO<JSONObject> findChannelList(int page, int size, String contendId, String emotion, String platform,
Boolean show, String keyword, String sorter) { Boolean show, String keyword, String sorter) {
...@@ -236,10 +234,10 @@ public class ChannelServiceImpl implements ChannelService { ...@@ -236,10 +234,10 @@ public class ChannelServiceImpl implements ChannelService {
@Override @Override
public PageVO<JSONObject> findEventList(int page, int size, String channelId) { public PageVO<JSONObject> findEventList(int page, int size, String channelId) {
Channel channel = channelDao.findOneById(channelId); Channel channel = channelDao.findOneById(channelId);
List<String> eventIds = eventClient.getEvents(channel.getChannelIndex().getFid()); List<String> eventIds = eventMiddlewareDao.getEvents(channel.getChannelIndex().getFid());
long total = eventClient.countInEventIds(eventIds); long total = eventMiddlewareDao.countInEventIds(eventIds);
// mongoUtil.start(page, size, query); // mongoUtil.start(page, size, query);
List<com.zhiwei.middleware.event.pojo.entity.Event> list = eventClient.findListInEventIds(eventIds, page, size); List<com.zhiwei.middleware.event.pojo.entity.Event> list = eventMiddlewareDao.findListInEventIds(eventIds, page, size);
List<JSONObject> resList = new ArrayList<>(); List<JSONObject> resList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(list)) { if (CollectionUtils.isNotEmpty(list)) {
resList = list.stream().map(event -> { resList = list.stream().map(event -> {
...@@ -250,10 +248,10 @@ public class ChannelServiceImpl implements ChannelService { ...@@ -250,10 +248,10 @@ public class ChannelServiceImpl implements ChannelService {
json.put("emotion", event.getEmotionEventTag().getName()); json.put("emotion", event.getEmotionEventTag().getName());
// Query query1 = new Query(); // Query query1 = new Query();
// query1.addCriteria(Criteria.where("eventId").is(event.getId())); // query1.addCriteria(Criteria.where("eventId").is(event.getId()));
json.put("total", eventClient.countEventDataByEventId(event)); json.put("total", eventMiddlewareDao.countEventDataByEventId(event));
// query1.addCriteria(channelDao.addChannelIndex(channel.getChannelIndex())); // query1.addCriteria(channelDao.addChannelIndex(channel.getChannelIndex()));
// query1.addCriteria(Criteria.where("eventBrandkbsChannels.channelFid").is(channel.getChannelIndex().getFid())); // query1.addCriteria(Criteria.where("eventBrandkbsChannels.channelFid").is(channel.getChannelIndex().getFid()));
json.put("channelTotal", eventClient.countEventDataByEventIdAndFid(event, channel.getChannelIndex().getFid())); json.put("channelTotal", eventMiddlewareDao.countEventDataByEventIdAndFid(event, channel.getChannelIndex().getFid()));
return json; return json;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
} }
...@@ -336,11 +334,11 @@ public class ChannelServiceImpl implements ChannelService { ...@@ -336,11 +334,11 @@ public class ChannelServiceImpl implements ChannelService {
public List<ExportAdminChannelEventDTO> findDownloadChannelEventList(String channelId) { public List<ExportAdminChannelEventDTO> findDownloadChannelEventList(String channelId) {
List<ExportAdminChannelEventDTO> resList = new ArrayList<>(); List<ExportAdminChannelEventDTO> resList = new ArrayList<>();
Channel channel = channelDao.findOneById(channelId); Channel channel = channelDao.findOneById(channelId);
List<String> eventIds = eventClient.getEvents(channel.getChannelIndex().getFid()); List<String> eventIds = eventMiddlewareDao.getEvents(channel.getChannelIndex().getFid());
if (CollectionUtils.isEmpty(eventIds)) { if (CollectionUtils.isEmpty(eventIds)) {
return resList; return resList;
} }
List<com.zhiwei.middleware.event.pojo.entity.Event> events = eventClient.findListInEventIds(eventIds); List<com.zhiwei.middleware.event.pojo.entity.Event> events = eventMiddlewareDao.findListInEventIds(eventIds);
return events.stream().map(event -> { return events.stream().map(event -> {
ExportAdminChannelEventDTO dto = Tools.convertMap(event, ExportAdminChannelEventDTO.class); ExportAdminChannelEventDTO dto = Tools.convertMap(event, ExportAdminChannelEventDTO.class);
dto.setTitle(event.getName()); dto.setTitle(event.getName());
...@@ -351,9 +349,9 @@ public class ChannelServiceImpl implements ChannelService { ...@@ -351,9 +349,9 @@ public class ChannelServiceImpl implements ChannelService {
dto.setFirstRealSource(firstData.getRealSource()); dto.setFirstRealSource(firstData.getRealSource());
dto.setFirstSource(firstData.getSource()); dto.setFirstSource(firstData.getSource());
} }
dto.setEventArticleCount(eventClient.getEventArticleCount(event)); dto.setEventArticleCount(eventMiddlewareDao.getEventArticleCount(event));
ChannelIndex channelIndex = Tools.convertMap(channel, ChannelIndex.class); ChannelIndex channelIndex = Tools.convertMap(channel, ChannelIndex.class);
dto.setChannelArticleCount(eventClient.getEventArticleWithChannelCount(event, channelIndex.getSource(), channelIndex.getRealSource(), channelIndex.getPlatform())); dto.setChannelArticleCount(eventMiddlewareDao.getEventArticleWithChannelCount(event, channelIndex.getSource(), channelIndex.getRealSource(), channelIndex.getPlatform()));
dto.setEventType(null); dto.setEventType(null);
for (EventTagBasicInfo eventTag : event.getEventTags()) { for (EventTagBasicInfo eventTag : event.getEventTags()) {
if (eventTag.getGroupName().equals(EventTagEnum.EVENT_TYPE.getName())){ if (eventTag.getGroupName().equals(EventTagEnum.EVENT_TYPE.getName())){
...@@ -594,6 +592,7 @@ public class ChannelServiceImpl implements ChannelService { ...@@ -594,6 +592,7 @@ public class ChannelServiceImpl implements ChannelService {
jsonObject.put("id", channel.getId()); jsonObject.put("id", channel.getId());
jsonObject.put("avatarUrl", channel.getAvatarUrl()); jsonObject.put("avatarUrl", channel.getAvatarUrl());
jsonObject.put("platform", channel.getPlatform()); jsonObject.put("platform", channel.getPlatform());
jsonObject.put("realSource", channel.getRealSource());
jsonObject.put("source", channel.getSource()); jsonObject.put("source", channel.getSource());
jsonObject.put("emotion", ChannelEmotion.getNameFromState(channel.getEmotion())); jsonObject.put("emotion", ChannelEmotion.getNameFromState(channel.getEmotion()));
jsonObject.put("emotionIndex", BigDecimal.valueOf(channel.getEmotionIndex()).setScale(2, RoundingMode.UP)); jsonObject.put("emotionIndex", BigDecimal.valueOf(channel.getEmotionIndex()).setScale(2, RoundingMode.UP));
...@@ -820,7 +819,7 @@ public class ChannelServiceImpl implements ChannelService { ...@@ -820,7 +819,7 @@ public class ChannelServiceImpl implements ChannelService {
List<JSONObject> dayList = new ArrayList<>(); List<JSONObject> dayList = new ArrayList<>();
Channel channel = channelDao.findOneById(channelId); Channel channel = channelDao.findOneById(channelId);
Map<Long, List<com.zhiwei.middleware.event.pojo.entity.Event>> eventDay = Map<Long, List<com.zhiwei.middleware.event.pojo.entity.Event>> eventDay =
eventClient.getEventDay(new ChannelIndex(channel, contendId).getFid(), startTime, endTime); eventMiddlewareDao.getEventDay(new ChannelIndex(channel, contendId).getFid(), startTime, endTime);
eventDay = Tools.sortTimeKeyMap(eventDay, true); eventDay = Tools.sortTimeKeyMap(eventDay, true);
eventDay.forEach((time, list) -> dayList.add(getDayResultWithEvent(list, page, pageSize, time))); eventDay.forEach((time, list) -> dayList.add(getDayResultWithEvent(list, page, pageSize, time)));
res.put("list", dayList); res.put("list", dayList);
...@@ -833,7 +832,7 @@ public class ChannelServiceImpl implements ChannelService { ...@@ -833,7 +832,7 @@ public class ChannelServiceImpl implements ChannelService {
List<ExportAppChannelEventDTO> res = new ArrayList<>(); List<ExportAppChannelEventDTO> res = new ArrayList<>();
Channel channel = channelDao.findOneById(channelId); Channel channel = channelDao.findOneById(channelId);
Map<Long, List<com.zhiwei.middleware.event.pojo.entity.Event>> eventDay = Map<Long, List<com.zhiwei.middleware.event.pojo.entity.Event>> eventDay =
eventClient.getEventDay(new ChannelIndex(channel, contendId).getFid(), startTime, endTime); eventMiddlewareDao.getEventDay(new ChannelIndex(channel, contendId).getFid(), startTime, endTime);
Tools.sortTimeKeyMap(eventDay, true).values().forEach(events -> { Tools.sortTimeKeyMap(eventDay, true).values().forEach(events -> {
events.forEach(event -> { events.forEach(event -> {
res.add(ExportAppChannelEventDTO.createFromEvent(event)); res.add(ExportAppChannelEventDTO.createFromEvent(event));
...@@ -863,10 +862,10 @@ public class ChannelServiceImpl implements ChannelService { ...@@ -863,10 +862,10 @@ public class ChannelServiceImpl implements ChannelService {
// 是否友好渠道 // 是否友好渠道
boolean isPositive = false; boolean isPositive = false;
boolean isNegative = false; boolean isNegative = false;
long specNegativeCount = eventClient.getEventCount(new ChannelIndex(channel).getFid(), long specNegativeCount = eventMiddlewareDao.getEventCount(new ChannelIndex(channel).getFid(),
Arrays.asList(EmotionEnum.POSITIVE.getName(), EmotionEnum.NEUTRAL.getName()), Arrays.asList(EmotionEnum.POSITIVE.getName(), EmotionEnum.NEUTRAL.getName()),
EmotionEnum.NEGATIVE.getName()); EmotionEnum.NEGATIVE.getName());
long specPositiveCount = eventClient.getEventCount(new ChannelIndex(channel).getFid(), long specPositiveCount = eventMiddlewareDao.getEventCount(new ChannelIndex(channel).getFid(),
Collections.singletonList(EmotionEnum.NEGATIVE.getName()), EmotionEnum.POSITIVE.getName()); Collections.singletonList(EmotionEnum.NEGATIVE.getName()), EmotionEnum.POSITIVE.getName());
// 特殊情况:若皆有发布过反常稿件 // 特殊情况:若皆有发布过反常稿件
if (specNegativeCount > 0 && specPositiveCount > 0) { if (specNegativeCount > 0 && specPositiveCount > 0) {
...@@ -1128,7 +1127,7 @@ public class ChannelServiceImpl implements ChannelService { ...@@ -1128,7 +1127,7 @@ public class ChannelServiceImpl implements ChannelService {
} }
channel.setEmotionIndex(index); channel.setEmotionIndex(index);
channel.setEmotion(emotion); channel.setEmotion(emotion);
channel.setEventCount(eventClient.getEvents(new ChannelIndex(channel).getFid()).size()); channel.setEventCount(eventMiddlewareDao.getEvents(new ChannelIndex(channel).getFid()).size());
} }
/** /**
...@@ -1152,7 +1151,7 @@ public class ChannelServiceImpl implements ChannelService { ...@@ -1152,7 +1151,7 @@ public class ChannelServiceImpl implements ChannelService {
// 正面-负面得分 // 正面-负面得分
double negativeScore = this.getNegativeScore(value); double negativeScore = this.getNegativeScore(value);
// 正面事件 // 正面事件
value = eventClient.getEventCount(new ChannelIndex(channel).getFid(), value = eventMiddlewareDao.getEventCount(new ChannelIndex(channel).getFid(),
Collections.singletonList(EmotionEnum.POSITIVE.getName()), null); Collections.singletonList(EmotionEnum.POSITIVE.getName()), null);
// 正面事件得分 // 正面事件得分
double positiveEventScore = this.getPositiveEventScore(value); double positiveEventScore = this.getPositiveEventScore(value);
...@@ -1329,7 +1328,7 @@ public class ChannelServiceImpl implements ChannelService { ...@@ -1329,7 +1328,7 @@ public class ChannelServiceImpl implements ChannelService {
// 负面稿件数得分 // 负面稿件数得分
double negativeArticlesScore = this.getNegativeArticlesScore(value); double negativeArticlesScore = this.getNegativeArticlesScore(value);
// 参与负面事件 // 参与负面事件
value = eventClient.getEventCount(channel.getFid(), Collections.singletonList(EmotionEnum.NEGATIVE.getName()), null); value = eventMiddlewareDao.getEventCount(channel.getFid(), Collections.singletonList(EmotionEnum.NEGATIVE.getName()), null);
// 参与负面事件得分 // 参与负面事件得分
double negativeEventScore = this.getNegativeEventScore(value); double negativeEventScore = this.getNegativeEventScore(value);
// 特殊稿件 // 特殊稿件
...@@ -1450,7 +1449,7 @@ public class ChannelServiceImpl implements ChannelService { ...@@ -1450,7 +1449,7 @@ public class ChannelServiceImpl implements ChannelService {
} }
private double inEventCountMonthAverage(Channel channel, String eventEmotion) { private double inEventCountMonthAverage(Channel channel, String eventEmotion) {
long eventCount = eventClient.getEventCount(new ChannelIndex(channel).getFid(), Collections.singletonList(eventEmotion), null); long eventCount = eventMiddlewareDao.getEventCount(new ChannelIndex(channel).getFid(), Collections.singletonList(eventEmotion), null);
Period periodDays = new Period(channel.getCTime(), System.currentTimeMillis(), PeriodType.months()); Period periodDays = new Period(channel.getCTime(), System.currentTimeMillis(), PeriodType.months());
return (double) eventCount / periodDays.getMonths(); return (double) eventCount / periodDays.getMonths();
} }
...@@ -1512,9 +1511,9 @@ public class ChannelServiceImpl implements ChannelService { ...@@ -1512,9 +1511,9 @@ public class ChannelServiceImpl implements ChannelService {
JSONObject res = new JSONObject(); JSONObject res = new JSONObject();
Map<Long, List<com.zhiwei.middleware.event.pojo.entity.Event>> eventCount; Map<Long, List<com.zhiwei.middleware.event.pojo.entity.Event>> eventCount;
if (endTime - startTime > Constant.ONE_MONTH) { if (endTime - startTime > Constant.ONE_MONTH) {
eventCount = eventClient.getEventMonth(new ChannelIndex(channel, contendId).getFid(), startTime, endTime); eventCount = eventMiddlewareDao.getEventMonth(new ChannelIndex(channel, contendId).getFid(), startTime, endTime);
} else { } else {
eventCount = eventClient.getEventDay(new ChannelIndex(channel, contendId).getFid(), startTime, endTime); eventCount = eventMiddlewareDao.getEventDay(new ChannelIndex(channel, contendId).getFid(), startTime, endTime);
} }
// 事件部分 // 事件部分
long positiveEventCount = 0; long positiveEventCount = 0;
...@@ -1552,9 +1551,9 @@ public class ChannelServiceImpl implements ChannelService { ...@@ -1552,9 +1551,9 @@ public class ChannelServiceImpl implements ChannelService {
private List<JSONObject> spreadingTendEvent(Long startTime, Long endTime, Channel channel, String contendId, String timePattern) { private List<JSONObject> spreadingTendEvent(Long startTime, Long endTime, Channel channel, String contendId, String timePattern) {
Map<Long, List<Event>> eventCount = completeTimes(startTime, endTime, timePattern); Map<Long, List<Event>> eventCount = completeTimes(startTime, endTime, timePattern);
if (Constant.MONTH_PATTERN.equals(timePattern)) { if (Constant.MONTH_PATTERN.equals(timePattern)) {
eventCount.putAll(eventClient.getEventMonth(new ChannelIndex(channel, contendId).getFid(), startTime, endTime)); eventCount.putAll(eventMiddlewareDao.getEventMonth(new ChannelIndex(channel, contendId).getFid(), startTime, endTime));
} else { } else {
eventCount.putAll(eventClient.getEventDay(new ChannelIndex(channel, contendId).getFid(), startTime, endTime)); eventCount.putAll(eventMiddlewareDao.getEventDay(new ChannelIndex(channel, contendId).getFid(), startTime, endTime));
} }
return eventCount.entrySet().stream().sorted(Comparator.comparingLong(Map.Entry::getKey)).map(e -> { return eventCount.entrySet().stream().sorted(Comparator.comparingLong(Map.Entry::getKey)).map(e -> {
JSONObject spreadJson = new JSONObject(); JSONObject spreadJson = new JSONObject();
......
...@@ -113,7 +113,7 @@ public class CommonServiceImpl implements CommonService { ...@@ -113,7 +113,7 @@ public class CommonServiceImpl implements CommonService {
@Override @Override
public Long[] getTimeRangeMonth() { public Long[] getTimeRangeMonth() {
long endTime = DateUtils.addDays(Tools.truncDate(new Date(), Constant.DAY_PATTERN), 1).getTime(); long endTime = Tools.truncDate(new Date(), Constant.DAY_PATTERN).getTime();
long startTime = DateUtils.addMonths(new Date(endTime), -1).getTime(); long startTime = DateUtils.addMonths(new Date(endTime), -1).getTime();
return new Long[]{startTime, endTime}; return new Long[]{startTime, endTime};
} }
......
...@@ -7,10 +7,7 @@ import com.zhiwei.brandkbs2.auth.UserThreadLocal; ...@@ -7,10 +7,7 @@ import com.zhiwei.brandkbs2.auth.UserThreadLocal;
import com.zhiwei.brandkbs2.common.GenericAttribute; import com.zhiwei.brandkbs2.common.GenericAttribute;
import com.zhiwei.brandkbs2.common.RedisKeyPrefix; import com.zhiwei.brandkbs2.common.RedisKeyPrefix;
import com.zhiwei.brandkbs2.config.Constant; import com.zhiwei.brandkbs2.config.Constant;
import com.zhiwei.brandkbs2.dao.EventDao; import com.zhiwei.brandkbs2.dao.*;
import com.zhiwei.brandkbs2.dao.EventDataDao;
import com.zhiwei.brandkbs2.dao.EventDisseminationTrendDao;
import com.zhiwei.brandkbs2.dao.EventTopArticlesAnalysisDao;
import com.zhiwei.brandkbs2.easyexcel.EasyExcelUtil; import com.zhiwei.brandkbs2.easyexcel.EasyExcelUtil;
import com.zhiwei.brandkbs2.easyexcel.config.ReadExcelDTO; import com.zhiwei.brandkbs2.easyexcel.config.ReadExcelDTO;
import com.zhiwei.brandkbs2.easyexcel.dto.ExportEventDTO; import com.zhiwei.brandkbs2.easyexcel.dto.ExportEventDTO;
...@@ -39,14 +36,13 @@ import com.zhiwei.brandkbs2.util.MongoUtil; ...@@ -39,14 +36,13 @@ import com.zhiwei.brandkbs2.util.MongoUtil;
import com.zhiwei.brandkbs2.util.RedisUtil; import com.zhiwei.brandkbs2.util.RedisUtil;
import com.zhiwei.brandkbs2.util.Tools; import com.zhiwei.brandkbs2.util.Tools;
import com.zhiwei.middleware.auth.util.JwtUtil; import com.zhiwei.middleware.auth.util.JwtUtil;
import com.zhiwei.middleware.event.core.EventClient;
import com.zhiwei.middleware.event.core.EventMonitorClient;
import com.zhiwei.middleware.event.core.EventTagClient;
import com.zhiwei.middleware.event.pojo.PageData; import com.zhiwei.middleware.event.pojo.PageData;
import com.zhiwei.middleware.event.pojo.ReturnData;
import com.zhiwei.middleware.event.pojo.dto.BrandkbsEventSearchDTO; import com.zhiwei.middleware.event.pojo.dto.BrandkbsEventSearchDTO;
import com.zhiwei.middleware.event.pojo.dto.EventBaseInfoDTO; import com.zhiwei.middleware.event.pojo.dto.EventBaseInfoDTO;
import com.zhiwei.middleware.event.pojo.dto.EventDTO; import com.zhiwei.middleware.event.pojo.dto.EventDTO;
import com.zhiwei.middleware.event.pojo.entity.BrandkbsBasicInfo; import com.zhiwei.middleware.event.pojo.entity.BrandkbsBasicInfo;
import com.zhiwei.middleware.event.pojo.entity.EventDetailAdditionalInfo;
import com.zhiwei.middleware.event.pojo.vo.EventTagBrandkbsVO; import com.zhiwei.middleware.event.pojo.vo.EventTagBrandkbsVO;
import lombok.Data; import lombok.Data;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
...@@ -101,6 +97,9 @@ public class EventServiceImpl implements EventService { ...@@ -101,6 +97,9 @@ public class EventServiceImpl implements EventService {
@Resource(name = "eventDao") @Resource(name = "eventDao")
private EventDao eventDao; private EventDao eventDao;
@Resource(name = "eventMiddlewareDao")
private EventMiddlewareDao eventMiddlewareDao;
@Resource(name = "eventDataDao") @Resource(name = "eventDataDao")
private EventDataDao eventDataDao; private EventDataDao eventDataDao;
...@@ -131,15 +130,6 @@ public class EventServiceImpl implements EventService { ...@@ -131,15 +130,6 @@ public class EventServiceImpl implements EventService {
@Autowired @Autowired
private StringRedisTemplate stringRedisTemplate; private StringRedisTemplate stringRedisTemplate;
@Autowired
private EventMonitorClient eventMonitorClient;
@Autowired
private EventClient eventClient;
@Autowired
private EventTagClient eventTagClient;
@Resource @Resource
private RedisUtil redisUtil; private RedisUtil redisUtil;
...@@ -711,6 +701,17 @@ public class EventServiceImpl implements EventService { ...@@ -711,6 +701,17 @@ public class EventServiceImpl implements EventService {
} }
@Override @Override
public List<JSONObject> getLastEventTopMiddleware(String keyword, int limit) {
return eventMiddlewareDao.getLastEventTop(keyword, limit, UserThreadLocal.getProjectId());
}
@Override
public ReturnData getEventTagGroupInfoBrandkbsWithoutEmotion(String yuqingProjectId) {
return eventMiddlewareDao.getEventTagGroupInfoBrandkbsWithoutEmotion(yuqingProjectId);
}
@Override
public List<Event> findNotEndEventByProjectId(String projectId) { public List<Event> findNotEndEventByProjectId(String projectId) {
Query query = Query.query(Criteria.where("projectId").is(projectId).and("endStatus").is(false)); Query query = Query.query(Criteria.where("projectId").is(projectId).and("endStatus").is(false));
return eventDao.findList(query); return eventDao.findList(query);
...@@ -751,7 +752,7 @@ public class EventServiceImpl implements EventService { ...@@ -751,7 +752,7 @@ public class EventServiceImpl implements EventService {
result.put("brands", projectService.getBrands(projectId, true)); result.put("brands", projectService.getBrands(projectId, true));
// 事件调性 // 事件调性
AbstractProject abstractProject = projectService.getProjectByContendId(UserThreadLocal.getProjectId(), brandId); AbstractProject abstractProject = projectService.getProjectByContendId(UserThreadLocal.getProjectId(), brandId);
List<EventTagBrandkbsVO> eventTags = (List<EventTagBrandkbsVO>)eventTagClient.getEventTagGroupInfoBrandkbs(abstractProject.getBrandLinkedGroupId()).getData(); List<EventTagBrandkbsVO> eventTags = (List<EventTagBrandkbsVO>)eventMiddlewareDao.getEventTagGroupInfoBrandkbs(abstractProject.getBrandLinkedGroupId()).getData();
List<EventTagBrandkbsVO> emotion = eventTags.stream().filter(eventTag -> EventTagEnum.EVENT_ATTRIBUTE.getName().equals(eventTag.getGroupName())).collect(Collectors.toList()); List<EventTagBrandkbsVO> emotion = eventTags.stream().filter(eventTag -> EventTagEnum.EVENT_ATTRIBUTE.getName().equals(eventTag.getGroupName())).collect(Collectors.toList());
result.put("emotions", emotion); result.put("emotions", emotion);
// 时间 // 时间
...@@ -763,21 +764,22 @@ public class EventServiceImpl implements EventService { ...@@ -763,21 +764,22 @@ public class EventServiceImpl implements EventService {
@Override @Override
public PageData<com.zhiwei.middleware.event.pojo.vo.EventListInfoVO> getEventListMiddleware(BrandkbsEventSearchDTO dto) { public PageData<com.zhiwei.middleware.event.pojo.vo.EventListInfoVO> getEventListMiddleware(BrandkbsEventSearchDTO dto) {
dto.setProjectId(UserThreadLocal.getProjectId());
if (Constant.PRIMARY_CONTEND_ID.equals(dto.getBrandId())){ if (Constant.PRIMARY_CONTEND_ID.equals(dto.getBrandId())){
dto.setBrandId(UserThreadLocal.getProjectId()); dto.setBrandId(UserThreadLocal.getProjectId());
} }
return eventClient.getEventListBrandkbs(dto); return eventMiddlewareDao.getEventListBrandkbs(dto);
} }
@Override @Override
public List<EventTagBrandkbsVO> getEventTagsCriteria() { public List<EventTagBrandkbsVO> getEventTagsCriteria() {
Project project = projectService.getProjectById(UserThreadLocal.getProjectId()); Project project = projectService.getProjectById(UserThreadLocal.getProjectId());
return (List<EventTagBrandkbsVO>)eventTagClient.getEventTagGroupInfoBrandkbs(project.getBrandLinkedGroupId()).getData(); return (List<EventTagBrandkbsVO>)eventMiddlewareDao.getEventTagGroupInfoBrandkbs(project.getBrandLinkedGroupId()).getData();
} }
@Override @Override
public PageData<com.zhiwei.middleware.event.pojo.vo.EventVO> getEventMonitor(int page, int pageSize) { public PageData<com.zhiwei.middleware.event.pojo.vo.EventVO> getEventMonitor(int page, int pageSize) {
return eventMonitorClient.getEventMonitorBrandkbs(UserThreadLocal.getProjectId(), page, pageSize); return eventMiddlewareDao.getEventMonitorBrandkbs(UserThreadLocal.getProjectId(), page, pageSize);
} }
@Override @Override
...@@ -805,7 +807,7 @@ public class EventServiceImpl implements EventService { ...@@ -805,7 +807,7 @@ public class EventServiceImpl implements EventService {
brandkbsBasicInfo.setBrandkbsBrandId(project.getId()); brandkbsBasicInfo.setBrandkbsBrandId(project.getId());
brandkbsBasicInfos.add(brandkbsBasicInfo); brandkbsBasicInfos.add(brandkbsBasicInfo);
dto.setBrandkbsInfos(brandkbsBasicInfos); dto.setBrandkbsInfos(brandkbsBasicInfos);
eventMonitorClient.addEventMonitor(dto); eventMiddlewareDao.addEventMonitor(dto);
} }
@Override @Override
...@@ -819,7 +821,7 @@ public class EventServiceImpl implements EventService { ...@@ -819,7 +821,7 @@ public class EventServiceImpl implements EventService {
dto.setProjectId(project.getBrandLinkedGroupId()); dto.setProjectId(project.getBrandLinkedGroupId());
dto.setSubmitter(submitter); dto.setSubmitter(submitter);
dto.setSubmitterId(submitterId); dto.setSubmitterId(submitterId);
eventMonitorClient.modifyEventMonitor(dto.getId(), dto, null); eventMiddlewareDao.modifyEventMonitor(dto.getId(), dto, null);
} }
@Override @Override
...@@ -829,37 +831,42 @@ public class EventServiceImpl implements EventService { ...@@ -829,37 +831,42 @@ public class EventServiceImpl implements EventService {
String submitterId = JwtUtil.unsign(request.getHeader(jwtKey), Map.class).get(GenericAttribute.USER_ID).toString(); String submitterId = JwtUtil.unsign(request.getHeader(jwtKey), Map.class).get(GenericAttribute.USER_ID).toString();
String submitter = userService.queryUserInfo(submitterId, UserThreadLocal.getProjectId()).getNickname(); String submitter = userService.queryUserInfo(submitterId, UserThreadLocal.getProjectId()).getNickname();
eventMonitorClient.endEventMonitor(eventId, submitter, submitterId); eventMiddlewareDao.endEventMonitor(eventId, submitter, submitterId);
} }
@Override @Override
public void deleteEventMonitor(String eventId) { public void deleteEventMonitor(String eventId) {
eventClient.deleteEvent(eventId); eventMiddlewareDao.deleteEvent(eventId);
} }
@Override @Override
public Long getMonitoringEventsCount() { public Long getMonitoringEventsCount() {
return eventMonitorClient.countMonitoringEventsBrandkbs(UserThreadLocal.getProjectId()); return eventMiddlewareDao.countMonitoringEventsBrandkbs(UserThreadLocal.getProjectId());
} }
@Override @Override
public EventBaseInfoDTO eventBaseInfo(String eventId) { public EventBaseInfoDTO eventBaseInfo(String eventId) {
return eventClient.eventBaseInfo(eventId); return eventMiddlewareDao.eventBaseInfo(eventId);
} }
@Override @Override
public com.zhiwei.middleware.event.pojo.entity.EventDisseminationTrend eventDisseminationTrends(String eventId, String type) { public com.zhiwei.middleware.event.pojo.entity.EventDisseminationTrend eventDisseminationTrends(String eventId, String type) {
return eventClient.eventDisseminationTrends(eventId, type); return eventMiddlewareDao.eventDisseminationTrends(eventId, type);
} }
@Override @Override
public PageData<JSONObject> eventChannelVoices(String eventId, String type, int page, int pageSize, String sorter) { public PageData<JSONObject> eventChannelVoices(String eventId, String type, int page, int pageSize, String sorter) {
return eventClient.eventChannelVoices(eventId, type, page, pageSize, sorter); return eventMiddlewareDao.eventChannelVoices(eventId, type, page, pageSize, sorter);
} }
@Override @Override
public JSONObject eventTopArticlesAnalysis(String eventId, String type, String emotion, String aggTitle) { public JSONObject eventTopArticlesAnalysis(String eventId, String type, String emotion, String aggTitle) {
return eventClient.eventTopArticlesAnalysis(eventId, type, emotion, aggTitle); return eventMiddlewareDao.eventTopArticlesAnalysis(eventId, type, emotion, aggTitle);
}
@Override
public EventDetailAdditionalInfo eventDetailAdditionalInfo(String eventId) {
return eventMiddlewareDao.eventDetailAdditionalInfo(eventId);
} }
@Override @Override
...@@ -869,7 +876,7 @@ public class EventServiceImpl implements EventService { ...@@ -869,7 +876,7 @@ public class EventServiceImpl implements EventService {
String submitterId = JwtUtil.unsign(request.getHeader(jwtKey), Map.class).get(GenericAttribute.USER_ID).toString(); String submitterId = JwtUtil.unsign(request.getHeader(jwtKey), Map.class).get(GenericAttribute.USER_ID).toString();
String submitter = userService.queryUserInfo(submitterId, UserThreadLocal.getProjectId()).getNickname(); String submitter = userService.queryUserInfo(submitterId, UserThreadLocal.getProjectId()).getNickname();
eventClient.continueEvent(eventId, submitter, submitterId); eventMiddlewareDao.continueEvent(eventId, submitter, submitterId);
} }
@Data @Data
......
...@@ -7,6 +7,7 @@ import com.zhiwei.brandkbs2.common.GlobalPojo; ...@@ -7,6 +7,7 @@ import com.zhiwei.brandkbs2.common.GlobalPojo;
import com.zhiwei.brandkbs2.config.Constant; import com.zhiwei.brandkbs2.config.Constant;
import com.zhiwei.brandkbs2.dao.EventDao; import com.zhiwei.brandkbs2.dao.EventDao;
import com.zhiwei.brandkbs2.dao.EventDataDao; import com.zhiwei.brandkbs2.dao.EventDataDao;
import com.zhiwei.brandkbs2.dao.EventMiddlewareDao;
import com.zhiwei.brandkbs2.enmus.EmotionEnum; import com.zhiwei.brandkbs2.enmus.EmotionEnum;
import com.zhiwei.brandkbs2.exception.ExceptionCast; import com.zhiwei.brandkbs2.exception.ExceptionCast;
import com.zhiwei.brandkbs2.listener.ApplicationProjectListener; import com.zhiwei.brandkbs2.listener.ApplicationProjectListener;
...@@ -60,12 +61,12 @@ public class IndexServiceImpl implements IndexService { ...@@ -60,12 +61,12 @@ public class IndexServiceImpl implements IndexService {
@Resource @Resource
private EventDataDao eventDataDao; private EventDataDao eventDataDao;
@Resource(name = "eventMiddlewareDao")
EventMiddlewareDao eventMiddlewareDao;
@Resource @Resource
private RedisUtil redisUtil; private RedisUtil redisUtil;
@Autowired
private EventClient eventClient;
@Override @Override
public JSONObject getYuqingAmount(Long startTime, Long endTime, boolean cache) { public JSONObject getYuqingAmount(Long startTime, Long endTime, boolean cache) {
if (null == startTime || null == endTime) { if (null == startTime || null == endTime) {
...@@ -190,9 +191,9 @@ public class IndexServiceImpl implements IndexService { ...@@ -190,9 +191,9 @@ public class IndexServiceImpl implements IndexService {
int selectMonths = new Period(startTime, endTime, PeriodType.months()).getMonths(); int selectMonths = new Period(startTime, endTime, PeriodType.months()).getMonths();
selectMonths = 0 == selectMonths ? 1 : selectMonths; selectMonths = 0 == selectMonths ? 1 : selectMonths;
// 调用事件中间件时,主品牌id使用项目id // 调用事件中间件时,主品牌id使用项目id
long total = eventClient.getEventCountByProjectIdAndContendId(null, null, EmotionEnum.ALL.getName(), projectId, projectId); long total = eventMiddlewareDao.getEventCountByProjectIdAndContendId(null, null, EmotionEnum.ALL.getName(), projectId, projectId);
long eventTotal = eventClient.getEventCountByProjectIdAndContendId(startTime, endTime, EmotionEnum.ALL.getName(), projectId, projectId); long eventTotal = eventMiddlewareDao.getEventCountByProjectIdAndContendId(startTime, endTime, EmotionEnum.ALL.getName(), projectId, projectId);
long oldEventTotal = eventClient.getEventCountByProjectIdAndContendId(oldStartTime, endTime, EmotionEnum.ALL.getName(), projectId, projectId); long oldEventTotal = eventMiddlewareDao.getEventCountByProjectIdAndContendId(oldStartTime, endTime, EmotionEnum.ALL.getName(), projectId, projectId);
jsonObject.put("eventTotal", eventTotal); jsonObject.put("eventTotal", eventTotal);
jsonObject.put("avgEventTotal", total * selectMonths / (totalMonths + 1)); jsonObject.put("avgEventTotal", total * selectMonths / (totalMonths + 1));
jsonObject.put("compare", oldEventTotal == 0 ? 0d : (eventTotal - oldEventTotal) / (double) oldEventTotal); jsonObject.put("compare", oldEventTotal == 0 ? 0d : (eventTotal - oldEventTotal) / (double) oldEventTotal);
...@@ -424,10 +425,10 @@ public class IndexServiceImpl implements IndexService { ...@@ -424,10 +425,10 @@ public class IndexServiceImpl implements IndexService {
JSONObject result = new JSONObject(); JSONObject result = new JSONObject();
contendId = Objects.equals(contendId, Constant.PRIMARY_CONTEND_ID) ? projectId : contendId; contendId = Objects.equals(contendId, Constant.PRIMARY_CONTEND_ID) ? projectId : contendId;
List<com.zhiwei.middleware.event.pojo.entity.Event> eventList = List<com.zhiwei.middleware.event.pojo.entity.Event> eventList =
eventClient.getEventsByProjectIdAndContendId(startTime, endTime, EmotionEnum.ALL.getName(), projectId, contendId, 1); eventMiddlewareDao.getEventsByProjectIdAndContendId(startTime, endTime, EmotionEnum.ALL.getName(), projectId, contendId, 1);
if (CollectionUtils.isNotEmpty(eventList)) { if (CollectionUtils.isNotEmpty(eventList)) {
com.zhiwei.middleware.event.pojo.entity.Event event = eventList.get(0); com.zhiwei.middleware.event.pojo.entity.Event event = eventList.get(0);
long articleCount = eventClient.getEventArticleCount(event); long articleCount = eventMiddlewareDao.getEventArticleCount(event);
result.put("id", event.getId()); result.put("id", event.getId());
result.put("title", event.getName()); result.put("title", event.getName());
result.put("influence", event.getInfluence()); result.put("influence", event.getInfluence());
...@@ -542,7 +543,7 @@ public class IndexServiceImpl implements IndexService { ...@@ -542,7 +543,7 @@ public class IndexServiceImpl implements IndexService {
result.put("time", startTime); result.put("time", startTime);
//统计时间段总事件数 //统计时间段总事件数
// 调用事件中间件时,主品牌id使用项目id // 调用事件中间件时,主品牌id使用项目id
long eventCount = eventClient.getEventCountByProjectIdAndContendId(startTime, endTime, EmotionEnum.ALL.getName(), projectId, projectId); long eventCount = eventMiddlewareDao.getEventCountByProjectIdAndContendId(startTime, endTime, EmotionEnum.ALL.getName(), projectId, projectId);
result.put("eventCount", eventCount); result.put("eventCount", eventCount);
lineList.add(result); lineList.add(result);
} }
...@@ -564,10 +565,10 @@ public class IndexServiceImpl implements IndexService { ...@@ -564,10 +565,10 @@ public class IndexServiceImpl implements IndexService {
Long endTime = map.get("endTime"); Long endTime = map.get("endTime");
//统计时间段总事件数 //统计时间段总事件数
// 调用事件中间件时,主品牌id使用项目id // 调用事件中间件时,主品牌id使用项目id
long totalEventCount = eventClient.getEventCountByProjectIdAndContendId(startTime, endTime, EmotionEnum.ALL.getName(), projectId, projectId); long totalEventCount = eventMiddlewareDao.getEventCountByProjectIdAndContendId(startTime, endTime, EmotionEnum.ALL.getName(), projectId, projectId);
long posEventCount = eventClient.getEventCountByProjectIdAndContendId(startTime, endTime, EmotionEnum.POSITIVE.getName(), projectId, projectId); long posEventCount = eventMiddlewareDao.getEventCountByProjectIdAndContendId(startTime, endTime, EmotionEnum.POSITIVE.getName(), projectId, projectId);
long neuEventCount = eventClient.getEventCountByProjectIdAndContendId(startTime, endTime, EmotionEnum.NEUTRAL.getName(), projectId, projectId); long neuEventCount = eventMiddlewareDao.getEventCountByProjectIdAndContendId(startTime, endTime, EmotionEnum.NEUTRAL.getName(), projectId, projectId);
long negEventCount = eventClient.getEventCountByProjectIdAndContendId(startTime, endTime, EmotionEnum.NEGATIVE.getName(), projectId, projectId); long negEventCount = eventMiddlewareDao.getEventCountByProjectIdAndContendId(startTime, endTime, EmotionEnum.NEGATIVE.getName(), projectId, projectId);
JSONObject result = new JSONObject(); JSONObject result = new JSONObject();
result.put("totalCount", totalEventCount); result.put("totalCount", totalEventCount);
result.put("posCount", posEventCount); result.put("posCount", posEventCount);
......
...@@ -131,6 +131,9 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -131,6 +131,9 @@ public class MarkDataServiceImpl implements MarkDataService {
@Resource(name = "channelDao") @Resource(name = "channelDao")
ChannelDao channelDao; ChannelDao channelDao;
@Resource(name = "userServiceImpl")
private UserService userService;
@Resource(name = "redisUtil") @Resource(name = "redisUtil")
RedisUtil redisUtil; RedisUtil redisUtil;
...@@ -1125,19 +1128,18 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -1125,19 +1128,18 @@ public class MarkDataServiceImpl implements MarkDataService {
return JSON.parseObject(result); return JSON.parseObject(result);
} }
} }
List<Map<String, Long>> dayList = Tools.parseToDays(startTime, endTime);
List<JSONObject> resList = new ArrayList<>(2); List<JSONObject> resList = new ArrayList<>(2);
JSONObject result = new JSONObject(); JSONObject result = new JSONObject();
// 开始时间 // 开始时间
result.put("startTime", startTime); result.put("startTime", startTime);
// 结束时间 // 结束时间
result.put("endTime", endTime); result.put("endTime", endTime);
List<Map<String, Long>> cutList = Tools.getCutList(startTime, endTime).getRight();
// 主品牌图谱 // 主品牌图谱
JSONObject primaryLine = new JSONObject(); JSONObject primaryLine = new JSONObject();
primaryLine.put("id", Constant.PRIMARY_CONTEND_ID); primaryLine.put("id", Constant.PRIMARY_CONTEND_ID);
primaryLine.put("brand", project.getBrandName()); primaryLine.put("brand", project.getBrandName());
List<LineVO> primarySpread = getArticleSpread(projectId, project.getBrandLinkedGroupId(), Constant.PRIMARY_CONTEND_ID, dayList); List<LineVO> primarySpread = getArticleSpread(projectId, project.getBrandLinkedGroupId(), Constant.PRIMARY_CONTEND_ID, cutList);
primaryLine.put("spread", primarySpread); primaryLine.put("spread", primarySpread);
resList.add(primaryLine); resList.add(primaryLine);
result.put("days", primarySpread.size()); result.put("days", primarySpread.size());
...@@ -1146,7 +1148,7 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -1146,7 +1148,7 @@ public class MarkDataServiceImpl implements MarkDataService {
JSONObject contendLine = new JSONObject(); JSONObject contendLine = new JSONObject();
contendLine.put("id", contendId); contendLine.put("id", contendId);
contendLine.put("brand", brandName); contendLine.put("brand", brandName);
List<LineVO> contendSpread = getArticleSpread(projectId, contendLinkedGroupId, contendId, dayList); List<LineVO> contendSpread = getArticleSpread(projectId, contendLinkedGroupId, contendId, cutList);
contendLine.put("spread", contendSpread); contendLine.put("spread", contendSpread);
resList.add(contendLine); resList.add(contendLine);
result.put("spread", resList); result.put("spread", resList);
...@@ -1161,10 +1163,10 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -1161,10 +1163,10 @@ public class MarkDataServiceImpl implements MarkDataService {
result.put("priGtAvg", priGreaterThanAvg); result.put("priGtAvg", priGreaterThanAvg);
// 获取主品牌传播峰值时信息 // 获取主品牌传播峰值时信息
LineVO primaryMax = primarySpread.stream().max(Comparator.comparing(LineVO::getCount)).orElse(new LineVO()); LineVO primaryMax = primarySpread.stream().max(Comparator.comparing(LineVO::getCount)).orElse(new LineVO());
result.put("priMaxTime", sdf.format(primaryMax.getDate())); result.put("priMaxTime", primaryMax.getDate());
result.put("priMaxCount", primaryMax.getCount()); result.put("priMaxCount", primaryMax.getCount());
long priMaxDayStartTime = primaryMax.getDate(); long priMaxDayStartTime = Tools.truncDate(primaryMax.getDate(), Constant.DAY_PATTERN);
long priMaxDayEndTime = DateUtils.addDays(new Date(primaryMax.getDate()), 1).getTime(); long priMaxDayEndTime = DateUtils.addDays(new Date(priMaxDayStartTime), 1).getTime();
// 获取时间段某情感数据最多的标题 // 获取时间段某情感数据最多的标题
List<Map.Entry<String, Integer>> priTopTitle = getMarkTopTitle(priMaxDayStartTime, priMaxDayEndTime, EmotionEnum.ALL.getName(), projectId, List<Map.Entry<String, Integer>> priTopTitle = getMarkTopTitle(priMaxDayStartTime, priMaxDayEndTime, EmotionEnum.ALL.getName(), projectId,
project.getBrandLinkedGroupId(), Constant.PRIMARY_CONTEND_ID, 1); project.getBrandLinkedGroupId(), Constant.PRIMARY_CONTEND_ID, 1);
...@@ -1176,7 +1178,8 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -1176,7 +1178,8 @@ public class MarkDataServiceImpl implements MarkDataService {
result.put("priTopTitleUrl", priFirstArticle.getUrl()); result.put("priTopTitleUrl", priFirstArticle.getUrl());
} }
// 获取主品牌热门媒体方向 // 获取主品牌热门媒体方向
List<Map.Entry<String, Integer>> priHotTitles = getMarkTopTitle(priMaxDayStartTime, priMaxDayEndTime, EmotionEnum.ALL.getName(), projectId, project.getBrandLinkedGroupId(), Constant.PRIMARY_CONTEND_ID, hotArticleSize); List<Map.Entry<String, Integer>> priHotTitles = getMarkTopTitle(startTime, endTime, EmotionEnum.ALL.getName(), projectId,
project.getBrandLinkedGroupId(), Constant.PRIMARY_CONTEND_ID, hotArticleSize);
if (CollectionUtils.isNotEmpty(priHotTitles)) { if (CollectionUtils.isNotEmpty(priHotTitles)) {
List<JSONObject> priHotArticle = priHotTitles.stream().map(map -> { List<JSONObject> priHotArticle = priHotTitles.stream().map(map -> {
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
...@@ -1207,10 +1210,11 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -1207,10 +1210,11 @@ public class MarkDataServiceImpl implements MarkDataService {
result.put("conGtAvg", conGreaterThanAvg); result.put("conGtAvg", conGreaterThanAvg);
//获取竞品传播峰值信息 //获取竞品传播峰值信息
LineVO contendMax = contendSpread.stream().max(Comparator.comparing(LineVO::getCount)).orElse(new LineVO()); LineVO contendMax = contendSpread.stream().max(Comparator.comparing(LineVO::getCount)).orElse(new LineVO());
result.put("conMaxTime", sdf.format(contendMax.getDate())); result.put("conMaxTime", contendMax.getDate());
result.put("conMaxCount", contendMax.getCount()); result.put("conMaxCount", contendMax.getCount());
long conMaxDayStartTime = contendMax.getDate(); long conMaxDayStartTime = Tools.truncDate(contendMax.getDate(), Constant.DAY_PATTERN);
long conMaxDayEndTime = DateUtils.addDays(new Date(contendMax.getDate()), 1).getTime(); long conMaxDayEndTime = DateUtils.addDays(new Date(conMaxDayStartTime), 1).getTime();
List<Map.Entry<String, Integer>> conTopTitle = getMarkTopTitle(conMaxDayStartTime, conMaxDayEndTime, EmotionEnum.ALL.getName(),projectId, List<Map.Entry<String, Integer>> conTopTitle = getMarkTopTitle(conMaxDayStartTime, conMaxDayEndTime, EmotionEnum.ALL.getName(),projectId,
contendLinkedGroupId, contendId, 1); contendLinkedGroupId, contendId, 1);
if (CollectionUtils.isNotEmpty(conTopTitle)) { if (CollectionUtils.isNotEmpty(conTopTitle)) {
...@@ -1221,7 +1225,7 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -1221,7 +1225,7 @@ public class MarkDataServiceImpl implements MarkDataService {
result.put("conTopTitleUrl", conFirstArticle.getUrl()); result.put("conTopTitleUrl", conFirstArticle.getUrl());
} }
// 获取竞品热门媒体方向 // 获取竞品热门媒体方向
List<Map.Entry<String, Integer>> conHotTitles = getMarkTopTitle(conMaxDayStartTime, conMaxDayEndTime, EmotionEnum.ALL.getName(), projectId, List<Map.Entry<String, Integer>> conHotTitles = getMarkTopTitle(startTime, endTime, EmotionEnum.ALL.getName(), projectId,
contendLinkedGroupId, contendId, hotArticleSize); contendLinkedGroupId, contendId, hotArticleSize);
if (CollectionUtils.isNotEmpty(conHotTitles)) { if (CollectionUtils.isNotEmpty(conHotTitles)) {
List<JSONObject> conHotArticle = conHotTitles.stream().map(map -> { List<JSONObject> conHotArticle = conHotTitles.stream().map(map -> {
...@@ -1336,8 +1340,24 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -1336,8 +1340,24 @@ public class MarkDataServiceImpl implements MarkDataService {
@Override @Override
public List<ExportSearchWholeDTO> exportSearchWhole(SearchFilterDTO dto) { public List<ExportSearchWholeDTO> exportSearchWhole(SearchFilterDTO dto) {
JSONObject jsonObject = searchWholeNetwork(dto); Integer exportAmount = userService.queryUserInfo(UserThreadLocal.getUserId(), UserThreadLocal.getProjectId()).getExportAmount();
JSONArray jsonArray = jsonObject.getJSONArray("list"); exportAmount = Objects.isNull(exportAmount) ? 10000 : exportAmount;
JSONArray jsonArray = new JSONArray();
dto.setPageSize(50);
dto.setPage(1);
while (true){
if (dto.getPage() * dto.getPageSize() > exportAmount){
break;
}
// 获取当页数据
JSONObject jsonObject = searchWholeNetwork(dto);
JSONArray array = jsonObject.getJSONArray("list");
if (Objects.isNull(array) || 0 == array.size()){
break;
}
jsonArray.addAll(array);
dto.setPage(dto.getPage() + 1);
}
return jsonArray.stream().map(json -> ExportSearchWholeDTO.creatExportSearchWholeDTO((JSONObject) json)).collect(Collectors.toList()); return jsonArray.stream().map(json -> ExportSearchWholeDTO.creatExportSearchWholeDTO((JSONObject) json)).collect(Collectors.toList());
} }
...@@ -1574,16 +1594,16 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -1574,16 +1594,16 @@ public class MarkDataServiceImpl implements MarkDataService {
* @param projectId 项目ID * @param projectId 项目ID
* @param linkedGroupId 关联组Id * @param linkedGroupId 关联组Id
* @param contendId 竞品ID * @param contendId 竞品ID
* @param dayList 以天为最小单位分割的时间 * @param cutList 拆分list
* @return * @return
*/ */
private List<LineVO> getArticleSpread(String projectId, String linkedGroupId, String contendId, List<Map<String, Long>> dayList) { private List<LineVO> getArticleSpread(String projectId, String linkedGroupId, String contendId, List<Map<String, Long>> cutList) {
List<LineVO> lineList = new ArrayList<>(dayList.size()); List<LineVO> lineList = new ArrayList<>(cutList.size());
dayList.forEach(day -> { cutList.forEach(day -> {
LineVO lineVO = new LineVO(); LineVO lineVO = new LineVO();
Long startTime = day.get("startTime"); Long startTime = day.get("startTime");
Long endTime = day.get("endTime"); Long endTime = day.get("endTime");
Long articleCount = null; Long articleCount;
try { try {
articleCount = getMarkArticleCount(startTime, endTime, projectId, linkedGroupId, contendId); articleCount = getMarkArticleCount(startTime, endTime, projectId, linkedGroupId, contendId);
} catch (IOException e) { } catch (IOException e) {
...@@ -1905,5 +1925,4 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -1905,5 +1925,4 @@ public class MarkDataServiceImpl implements MarkDataService {
return instance; return instance;
} }
} }
\ No newline at end of file
...@@ -5,6 +5,7 @@ import com.zhiwei.brandkbs2.auth.UserThreadLocal; ...@@ -5,6 +5,7 @@ import com.zhiwei.brandkbs2.auth.UserThreadLocal;
import com.zhiwei.brandkbs2.common.GenericAttribute; import com.zhiwei.brandkbs2.common.GenericAttribute;
import com.zhiwei.brandkbs2.common.GlobalPojo; import com.zhiwei.brandkbs2.common.GlobalPojo;
import com.zhiwei.brandkbs2.config.Constant; import com.zhiwei.brandkbs2.config.Constant;
import com.zhiwei.brandkbs2.dao.EventMiddlewareDao;
import com.zhiwei.brandkbs2.dao.ProjectDao; import com.zhiwei.brandkbs2.dao.ProjectDao;
import com.zhiwei.brandkbs2.dao.QbjcPojoDao; import com.zhiwei.brandkbs2.dao.QbjcPojoDao;
import com.zhiwei.brandkbs2.dao.UserDao; import com.zhiwei.brandkbs2.dao.UserDao;
...@@ -79,12 +80,12 @@ public class ProjectServiceImpl implements ProjectService { ...@@ -79,12 +80,12 @@ public class ProjectServiceImpl implements ProjectService {
@Resource(name = "userServiceImpl") @Resource(name = "userServiceImpl")
private UserService userService; private UserService userService;
@Resource(name = "eventMiddlewareDao")
private EventMiddlewareDao eventMiddlewareDao;
@Value("${jwt.key}") @Value("${jwt.key}")
private String jwtKey; private String jwtKey;
@Autowired
private EventTagClient eventTagClient;
@Value("${brandkbs.file.url}") @Value("${brandkbs.file.url}")
private String brandkbsFileUrl; private String brandkbsFileUrl;
...@@ -116,14 +117,14 @@ public class ProjectServiceImpl implements ProjectService { ...@@ -116,14 +117,14 @@ public class ProjectServiceImpl implements ProjectService {
// 主品牌绑定事件标签,主品牌品牌id使用项目id // 主品牌绑定事件标签,主品牌品牌id使用项目id
List<EventTagRelatedDTO> eventTagsList = projectVO.getEventTagsList(); List<EventTagRelatedDTO> eventTagsList = projectVO.getEventTagsList();
eventTagClient.bindBrandkbs(project.getBrandLinkedGroup(), project.getBrandLinkedGroupId(), eventTagsList, eventMiddlewareDao.bindBrandkbs(project.getBrandLinkedGroup(), project.getBrandLinkedGroupId(), eventTagsList,
project.getProjectName(), project.getId(), project.getBrandName(), project.getId(), submitter, submitterId); project.getProjectName(), project.getId(), project.getBrandName(), project.getId(), submitter, submitterId);
// 竞品绑定事件标签 // 竞品绑定事件标签
List<Contend> contendList = project.getContendList(); List<Contend> contendList = project.getContendList();
if (CollectionUtils.isNotEmpty(contendList)) { if (CollectionUtils.isNotEmpty(contendList)) {
for (Contend contend : contendList) { for (Contend contend : contendList) {
List<EventTagRelatedDTO> contendEventTagsList = contend.getEventTagsList(); List<EventTagRelatedDTO> contendEventTagsList = contend.getEventTagsList();
eventTagClient.bindBrandkbs(contend.getBrandLinkedGroup(), contend.getBrandLinkedGroupId(), contendEventTagsList, project.getProjectName(), eventMiddlewareDao.bindBrandkbs(contend.getBrandLinkedGroup(), contend.getBrandLinkedGroupId(), contendEventTagsList, project.getProjectName(),
project.getId(), contend.getBrandName(), contend.getId(), submitter, submitterId); project.getId(), contend.getBrandName(), contend.getId(), submitter, submitterId);
} }
} }
...@@ -165,7 +166,7 @@ public class ProjectServiceImpl implements ProjectService { ...@@ -165,7 +166,7 @@ public class ProjectServiceImpl implements ProjectService {
@Override @Override
public ProjectVO getProjectVOWithEventTagsById(String pid) { public ProjectVO getProjectVOWithEventTagsById(String pid) {
ProjectVO projectVO = getProjectVOById(pid); ProjectVO projectVO = getProjectVOById(pid);
Map<String, List<EventTagRelatedDTO>> eventTagsMap = (Map<String, List<EventTagRelatedDTO>>) eventTagClient.getBrandkbsBindingEventTags(pid).getData(); Map<String, List<EventTagRelatedDTO>> eventTagsMap = (Map<String, List<EventTagRelatedDTO>>) eventMiddlewareDao.getBrandkbsBindingEventTags(pid).getData();
List<EventTagRelatedDTO> eventTagsList = new ArrayList<>(); List<EventTagRelatedDTO> eventTagsList = new ArrayList<>();
if (!Tools.isEmpty(eventTagsMap)) { if (!Tools.isEmpty(eventTagsMap)) {
// 获取主品牌标签 // 获取主品牌标签
...@@ -210,14 +211,14 @@ public class ProjectServiceImpl implements ProjectService { ...@@ -210,14 +211,14 @@ public class ProjectServiceImpl implements ProjectService {
// 主品牌修改绑定事件标签, 主品牌id使用项目id // 主品牌修改绑定事件标签, 主品牌id使用项目id
List<EventTagRelatedDTO> eventTagsList = projectVO.getEventTagsList(); List<EventTagRelatedDTO> eventTagsList = projectVO.getEventTagsList();
eventTagClient.modifyBrandkbsEventTags(project.getBrandLinkedGroup(), project.getBrandLinkedGroupId(), eventTagsList, eventMiddlewareDao.modifyBrandkbsEventTags(project.getBrandLinkedGroup(), project.getBrandLinkedGroupId(), eventTagsList,
project.getProjectName(), project.getId(), project.getBrandName(), project.getId(), submitter, submitterId); project.getProjectName(), project.getId(), project.getBrandName(), project.getId(), submitter, submitterId);
// 竞品修改绑定事件标签 // 竞品修改绑定事件标签
List<Contend> contendList = project.getContendList(); List<Contend> contendList = project.getContendList();
if (CollectionUtils.isNotEmpty(contendList)) { if (CollectionUtils.isNotEmpty(contendList)) {
for (Contend contend : contendList) { for (Contend contend : contendList) {
List<EventTagRelatedDTO> contendEventTagsList = contend.getEventTagsList(); List<EventTagRelatedDTO> contendEventTagsList = contend.getEventTagsList();
eventTagClient.modifyBrandkbsEventTags(contend.getBrandLinkedGroup(), contend.getBrandLinkedGroupId(), contendEventTagsList, project.getProjectName(), eventMiddlewareDao.modifyBrandkbsEventTags(contend.getBrandLinkedGroup(), contend.getBrandLinkedGroupId(), contendEventTagsList, project.getProjectName(),
project.getId(), contend.getBrandName(), contend.getId(), submitter, submitterId); project.getId(), contend.getBrandName(), contend.getId(), submitter, submitterId);
} }
} }
......
...@@ -7,6 +7,7 @@ import com.zhiwei.brandkbs2.common.RedisKeyPrefix; ...@@ -7,6 +7,7 @@ import com.zhiwei.brandkbs2.common.RedisKeyPrefix;
import com.zhiwei.brandkbs2.config.Constant; import com.zhiwei.brandkbs2.config.Constant;
import com.zhiwei.brandkbs2.dao.ChannelDao; import com.zhiwei.brandkbs2.dao.ChannelDao;
import com.zhiwei.brandkbs2.dao.EventDao; import com.zhiwei.brandkbs2.dao.EventDao;
import com.zhiwei.brandkbs2.dao.EventMiddlewareDao;
import com.zhiwei.brandkbs2.enmus.EmotionEnum; import com.zhiwei.brandkbs2.enmus.EmotionEnum;
import com.zhiwei.brandkbs2.es.EsClientDao; import com.zhiwei.brandkbs2.es.EsClientDao;
import com.zhiwei.brandkbs2.es.EsQueryTools; import com.zhiwei.brandkbs2.es.EsQueryTools;
...@@ -78,12 +79,12 @@ public class ProjectWarnServiceImpl implements ProjectWarnService { ...@@ -78,12 +79,12 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
@Resource(name = "eventDao") @Resource(name = "eventDao")
EventDao eventDao; EventDao eventDao;
@Resource(name = "eventMiddlewareDao")
EventMiddlewareDao eventMiddlewareDao;
@Resource(name = "redisUtil") @Resource(name = "redisUtil")
RedisUtil redisUtil; RedisUtil redisUtil;
@Autowired
private EventClient eventClient;
private static final Map<String, String> TYPE_SEARCH = new HashMap<>(); private static final Map<String, String> TYPE_SEARCH = new HashMap<>();
static { static {
...@@ -729,14 +730,14 @@ public class ProjectWarnServiceImpl implements ProjectWarnService { ...@@ -729,14 +730,14 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
if (CollectionUtils.isNotEmpty(config.getOwnEvent())) { if (CollectionUtils.isNotEmpty(config.getOwnEvent())) {
// 调用事件中间件时,使用项目id作为主品牌id // 调用事件中间件时,使用项目id作为主品牌id
List<com.zhiwei.middleware.event.pojo.entity.Event> ownEvents = List<com.zhiwei.middleware.event.pojo.entity.Event> ownEvents =
eventClient.getEventsByProjectIdAndContendId(start, end, config.getOwnEvent(), projectId, projectId, config.getEventTop()); eventMiddlewareDao.getEventsByProjectIdAndContendId(start, end, config.getOwnEvent(), projectId, projectId, config.getEventTop());
eventMap.put("品牌动态", ownEvents); eventMap.put("品牌动态", ownEvents);
} }
if (CollectionUtils.isNotEmpty(config.getContendsEvent())) { if (CollectionUtils.isNotEmpty(config.getContendsEvent())) {
List<com.zhiwei.middleware.event.pojo.entity.Event> contentEvents = new ArrayList<>(); List<com.zhiwei.middleware.event.pojo.entity.Event> contentEvents = new ArrayList<>();
for (String contendId : config.getContendsEvent()) { for (String contendId : config.getContendsEvent()) {
contendId = Objects.equals(Constant.PRIMARY_CONTEND_ID, contendId) ? projectId : contendId; contendId = Objects.equals(Constant.PRIMARY_CONTEND_ID, contendId) ? projectId : contendId;
contentEvents.addAll(eventClient.getEventsByProjectIdAndContendId(start, end, config.getOwnEvent(), projectId, contendId, config.getEventTop())); contentEvents.addAll(eventMiddlewareDao.getEventsByProjectIdAndContendId(start, end, config.getOwnEvent(), projectId, contendId, config.getEventTop()));
} }
eventMap.put("友商动态", contentEvents); eventMap.put("友商动态", contentEvents);
} }
......
...@@ -5,10 +5,7 @@ import com.alibaba.fastjson.JSONObject; ...@@ -5,10 +5,7 @@ import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.zhiwei.brandkbs2.auth.UserThreadLocal; import com.zhiwei.brandkbs2.auth.UserThreadLocal;
import com.zhiwei.brandkbs2.common.RedisKeyPrefix; import com.zhiwei.brandkbs2.common.RedisKeyPrefix;
import com.zhiwei.brandkbs2.dao.EventDao; import com.zhiwei.brandkbs2.dao.*;
import com.zhiwei.brandkbs2.dao.EventDataDao;
import com.zhiwei.brandkbs2.dao.ReportDao;
import com.zhiwei.brandkbs2.dao.ReportSettingsDao;
import com.zhiwei.brandkbs2.enmus.EmotionEnum; import com.zhiwei.brandkbs2.enmus.EmotionEnum;
import com.zhiwei.brandkbs2.enmus.ReportTypeEnum; import com.zhiwei.brandkbs2.enmus.ReportTypeEnum;
import com.zhiwei.brandkbs2.enmus.response.ReportCodeEnum; import com.zhiwei.brandkbs2.enmus.response.ReportCodeEnum;
...@@ -31,7 +28,6 @@ import com.zhiwei.brandkbs2.service.ReportService; ...@@ -31,7 +28,6 @@ import com.zhiwei.brandkbs2.service.ReportService;
import com.zhiwei.brandkbs2.util.MongoUtil; import com.zhiwei.brandkbs2.util.MongoUtil;
import com.zhiwei.brandkbs2.util.RedisUtil; import com.zhiwei.brandkbs2.util.RedisUtil;
import com.zhiwei.brandkbs2.util.Tools; import com.zhiwei.brandkbs2.util.Tools;
import com.zhiwei.middleware.event.core.EventClient;
import com.zhiwei.middleware.event.pojo.entity.BrandkbsBasicInfo; import com.zhiwei.middleware.event.pojo.entity.BrandkbsBasicInfo;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
...@@ -82,6 +78,9 @@ public class ReportServiceImpl implements ReportService { ...@@ -82,6 +78,9 @@ public class ReportServiceImpl implements ReportService {
@Resource(name = "indexServiceImpl") @Resource(name = "indexServiceImpl")
IndexService indexService; IndexService indexService;
@Resource(name = "eventMiddlewareDao")
EventMiddlewareDao eventMiddlewareDao;
@Resource(name = "mongoUtil") @Resource(name = "mongoUtil")
com.zhiwei.brandkbs2.util.MongoUtil mongoUtil; com.zhiwei.brandkbs2.util.MongoUtil mongoUtil;
...@@ -91,9 +90,6 @@ public class ReportServiceImpl implements ReportService { ...@@ -91,9 +90,6 @@ public class ReportServiceImpl implements ReportService {
@Autowired @Autowired
StringRedisTemplate stringRedisTemplate; StringRedisTemplate stringRedisTemplate;
@Autowired
private EventClient eventClient;
@Override @Override
public Map<String, ReportSettingsDTO> getReportSettings() { public Map<String, ReportSettingsDTO> getReportSettings() {
Map<String, ReportSettingsDTO> res = new HashMap<>(); Map<String, ReportSettingsDTO> res = new HashMap<>();
...@@ -104,7 +100,17 @@ public class ReportServiceImpl implements ReportService { ...@@ -104,7 +100,17 @@ public class ReportServiceImpl implements ReportService {
} }
ReportSettingsDTO reportSettingsDTO = ReportSettingsDTO.createFromReportSettings(settings); ReportSettingsDTO reportSettingsDTO = ReportSettingsDTO.createFromReportSettings(settings);
if (!CollectionUtils.isEmpty(reportSettingsDTO.getContendIds())) { if (!CollectionUtils.isEmpty(reportSettingsDTO.getContendIds())) {
reportSettingsDTO.setContendBrandNames(reportSettingsDTO.getContendIds().stream().map(contendId -> projectService.getProjectByContendId(UserThreadLocal.getProjectId(), contendId).getBrandName()).collect(Collectors.toList())); List<String> collect = reportSettingsDTO.getContendIds().stream().map(contendId -> {
AbstractProject project = projectService.getProjectByContendId(UserThreadLocal.getProjectId(), contendId);
if (null != project) {
return project.getBrandName();
}
return null;
}).filter(Objects::nonNull).collect(Collectors.toList());
// 历史竞品信息已失效
if (!collect.isEmpty()) {
reportSettingsDTO.setContendBrandNames(collect);
}
} }
res.put(key, reportSettingsDTO); res.put(key, reportSettingsDTO);
} }
...@@ -112,8 +118,8 @@ public class ReportServiceImpl implements ReportService { ...@@ -112,8 +118,8 @@ public class ReportServiceImpl implements ReportService {
} }
@Override @Override
public List<Report> getCustomReportByStatus(String projectId, boolean status) { public List<Report> getReportByStatus(String projectId, boolean status) {
Criteria criteria = Criteria.where("projectId").is(projectId).and("status").is(status).and("type").is(ReportTypeEnum.CUSTOM.getState()); Criteria criteria = Criteria.where("projectId").is(projectId).and("status").is(status);
return reportDao.findList(Query.query(criteria)); return reportDao.findList(Query.query(criteria));
} }
...@@ -240,8 +246,9 @@ public class ReportServiceImpl implements ReportService { ...@@ -240,8 +246,9 @@ public class ReportServiceImpl implements ReportService {
JSONObject result = null; JSONObject result = null;
try { try {
result = getPcReportResult(report); result = getPcReportResult(report);
} catch (IOException e) { } catch (Exception e) {
ExceptionCast.cast(CommonCodeEnum.FAIL, "es查询异常"); log.error("生成报告数据异常,id:{}", report.getId(), e);
ExceptionCast.cast(CommonCodeEnum.FAIL, "生成报告数据异常");
} }
redisUtil.set(redisKey, JSON.toJSONString(result)); redisUtil.set(redisKey, JSON.toJSONString(result));
return result; return result;
...@@ -333,7 +340,7 @@ public class ReportServiceImpl implements ReportService { ...@@ -333,7 +340,7 @@ public class ReportServiceImpl implements ReportService {
* @param report 报告对象 * @param report 报告对象
* @return 月报结果 * @return 月报结果
*/ */
private JSONObject getPcReportResult(Report report) throws IOException { private JSONObject getPcReportResult(Report report) throws Exception {
switchReportStatus(report.getId(), false); switchReportStatus(report.getId(), false);
log.info("getPcReportResult-生成报告开始,id:{}", report.getId()); log.info("getPcReportResult-生成报告开始,id:{}", report.getId());
Long startTime = report.getStartTime(); Long startTime = report.getStartTime();
...@@ -349,21 +356,26 @@ public class ReportServiceImpl implements ReportService { ...@@ -349,21 +356,26 @@ public class ReportServiceImpl implements ReportService {
result.put("status", true); result.put("status", true);
result.put("type", ReportTypeEnum.getInstanceByState(report.getType()).getDescribe()); result.put("type", ReportTypeEnum.getInstanceByState(report.getType()).getDescribe());
result.put("brandSummary", this.getPcBrandSummary(startTime, endTime, lastStartTimeStr, projectId, linkedGroupId, contendId)); result.put("brandSummary", this.getPcBrandSummary(startTime, endTime, lastStartTimeStr, projectId, linkedGroupId, contendId));
List<Map<String, Long>> dayList = Tools.parseToDays(startTime, DateUtils.addDays(new Date(endTime), -1).getTime()); Pair<Boolean, List<Map<String, Long>>> pair = Tools.getCutList(startTime, endTime);
result.put("brandSpread", this.getPcBrandSpread(dayList, projectId, linkedGroupId, contendId)); result.put("timeType", pair.getLeft() ? "day" : "hour");
result.put("brandSpread", this.getPcBrandSpread(pair.getRight(), projectId, linkedGroupId, contendId));
result.put("brandEvent", this.getPcBrandEvent(startTime, endTime, projectId, contendId)); result.put("brandEvent", this.getPcBrandEvent(startTime, endTime, projectId, contendId));
List<JSONObject> contendCompare = report.getContends().stream().map(brandContendId -> { List<JSONObject> contendCompare = report.getContends().stream().map(brandContendId -> {
JSONObject json = new JSONObject(); JSONObject json = new JSONObject();
AbstractProject abstractProject = projectService.getProjectByContendId(projectId, brandContendId); AbstractProject abstractProject = projectService.getProjectByContendId(projectId, brandContendId);
json.put("id", brandContendId); // 历史竞品信息已失效
json.put("brand", abstractProject.getBrandName()); if (null != abstractProject) {
try { json.put("id", brandContendId);
json.put("brandCompare", markDataService.getContendSpreadAnalyze(startTime, endTime, projectId, brandContendId, 5, true)); json.put("brand", abstractProject.getBrandName());
} catch (IOException e) { try {
log.error("getPcReportResult-brandCompare-", e); json.put("brandCompare", markDataService.getContendSpreadAnalyze(startTime, endTime, projectId, brandContendId, 5, false));
} catch (Exception e) {
log.error("getPcReportResult-brandCompare-", e);
}
return json;
} }
return json; return null;
}).collect(Collectors.toList()); }).filter(Objects::nonNull).collect(Collectors.toList());
result.put("contendCompare", contendCompare); result.put("contendCompare", contendCompare);
log.info("getPcReportResult-生成报告结束,id:{}", report.getId()); log.info("getPcReportResult-生成报告结束,id:{}", report.getId());
switchReportStatus(report.getId(), true); switchReportStatus(report.getId(), true);
...@@ -395,12 +407,12 @@ public class ReportServiceImpl implements ReportService { ...@@ -395,12 +407,12 @@ public class ReportServiceImpl implements ReportService {
//正面事件传播量top //正面事件传播量top
// 调用事件中间件时,主品牌id使用项目id // 调用事件中间件时,主品牌id使用项目id
List<com.zhiwei.middleware.event.pojo.entity.Event> topPosEventList = List<com.zhiwei.middleware.event.pojo.entity.Event> topPosEventList =
eventClient.getEventsByTotalChannelVolumeTop(startTime, endTime, EmotionEnum.POSITIVE.getName(), projectId, projectId, 3); eventMiddlewareDao.getEventsByTotalChannelVolumeTop(startTime, endTime, EmotionEnum.POSITIVE.getName(), projectId, projectId, 3);
if (CollectionUtils.isEmpty(topPosEventList)) { if (CollectionUtils.isEmpty(topPosEventList)) {
List<Map.Entry<String, Integer>> topPosArticleList = markDataService.getMarkTopTitle(startTime, endTime, EmotionEnum.POSITIVE.getName(), projectId, linkedGroupId, contendId, 3); List<Map.Entry<String, Integer>> topPosArticleList = markDataService.getMarkTopTitle(startTime, endTime, EmotionEnum.POSITIVE.getName(), projectId, linkedGroupId, contendId, 3);
result.put("topPosSummary", this.getTopArticlesMsg(startTime, endTime, projectId, linkedGroupId, contendId, topPosArticleList)); result.put("topPosSummary", this.getTopArticlesMsg(startTime, endTime, projectId, linkedGroupId, contendId, topPosArticleList));
} else { } else {
result.put("topPosSummary", this.getTopEventMsg(topPosEventList)); result.put("topPosSummary", this.getTopEventMsg(topPosEventList, projectId));
} }
//获取上个周期时间范围内总正面稿件数 //获取上个周期时间范围内总正面稿件数
long lastPositiveTotal = markDataService.getYuqingMarkCount(lastStartTime, startTime, EmotionEnum.POSITIVE.getName(), projectId, contendId); long lastPositiveTotal = markDataService.getYuqingMarkCount(lastStartTime, startTime, EmotionEnum.POSITIVE.getName(), projectId, contendId);
...@@ -413,12 +425,12 @@ public class ReportServiceImpl implements ReportService { ...@@ -413,12 +425,12 @@ public class ReportServiceImpl implements ReportService {
//中性事件传播量top //中性事件传播量top
// 调用事件中间件时,主品牌id使用项目id // 调用事件中间件时,主品牌id使用项目id
List<com.zhiwei.middleware.event.pojo.entity.Event> topNeuEventList = List<com.zhiwei.middleware.event.pojo.entity.Event> topNeuEventList =
eventClient.getEventsByTotalChannelVolumeTop(startTime, endTime, EmotionEnum.NEUTRAL.getName(), projectId, projectId, 4); eventMiddlewareDao.getEventsByTotalChannelVolumeTop(startTime, endTime, EmotionEnum.NEUTRAL.getName(), projectId, projectId, 4);
if (CollectionUtils.isEmpty(topNeuEventList)) { if (CollectionUtils.isEmpty(topNeuEventList)) {
List<Map.Entry<String, Integer>> topNeuArticleList = markDataService.getMarkTopTitle(startTime, endTime, EmotionEnum.NEUTRAL.getName(), projectId, linkedGroupId, contendId, 4); List<Map.Entry<String, Integer>> topNeuArticleList = markDataService.getMarkTopTitle(startTime, endTime, EmotionEnum.NEUTRAL.getName(), projectId, linkedGroupId, contendId, 4);
result.put("topNeuSummary", this.getTopArticlesMsg(startTime, endTime, projectId, linkedGroupId, contendId, topNeuArticleList)); result.put("topNeuSummary", this.getTopArticlesMsg(startTime, endTime, projectId, linkedGroupId, contendId, topNeuArticleList));
} else { } else {
result.put("topNeuSummary", this.getTopEventMsg(topNeuEventList)); result.put("topNeuSummary", this.getTopEventMsg(topNeuEventList, projectId));
} }
//获取上个周期时间范围内总中性稿件数 //获取上个周期时间范围内总中性稿件数
long lastNeutralTotal = markDataService.getYuqingMarkCount(lastStartTime, startTime, EmotionEnum.NEUTRAL.getName(), projectId, contendId); long lastNeutralTotal = markDataService.getYuqingMarkCount(lastStartTime, startTime, EmotionEnum.NEUTRAL.getName(), projectId, contendId);
...@@ -431,12 +443,12 @@ public class ReportServiceImpl implements ReportService { ...@@ -431,12 +443,12 @@ public class ReportServiceImpl implements ReportService {
//中性事件传播量top //中性事件传播量top
// 调用事件中间件时,主品牌id使用项目id // 调用事件中间件时,主品牌id使用项目id
List<com.zhiwei.middleware.event.pojo.entity.Event> topNegEventList = List<com.zhiwei.middleware.event.pojo.entity.Event> topNegEventList =
eventClient.getEventsByTotalChannelVolumeTop(startTime, endTime, EmotionEnum.NEGATIVE.getName(), projectId, projectId, 4); eventMiddlewareDao.getEventsByTotalChannelVolumeTop(startTime, endTime, EmotionEnum.NEGATIVE.getName(), projectId, projectId, 4);
if (CollectionUtils.isEmpty(topNegEventList)) { if (CollectionUtils.isEmpty(topNegEventList)) {
List<Map.Entry<String, Integer>> topNegArticleList = markDataService.getMarkTopTitle(startTime, endTime, EmotionEnum.NEGATIVE.getName(), projectId, linkedGroupId, contendId, 4); List<Map.Entry<String, Integer>> topNegArticleList = markDataService.getMarkTopTitle(startTime, endTime, EmotionEnum.NEGATIVE.getName(), projectId, linkedGroupId, contendId, 4);
result.put("topNegSummary", this.getTopArticlesMsg(startTime, endTime, projectId, linkedGroupId, contendId, topNegArticleList)); result.put("topNegSummary", this.getTopArticlesMsg(startTime, endTime, projectId, linkedGroupId, contendId, topNegArticleList));
} else { } else {
result.put("topNegSummary", this.getTopEventMsg(topNegEventList)); result.put("topNegSummary", this.getTopEventMsg(topNegEventList, projectId));
} }
//获取上个周期时间范围内总负面稿件数 //获取上个周期时间范围内总负面稿件数
long lastNegativeTotal = markDataService.getYuqingMarkCount(lastStartTime, startTime, EmotionEnum.NEGATIVE.getName(), projectId, contendId); long lastNegativeTotal = markDataService.getYuqingMarkCount(lastStartTime, startTime, EmotionEnum.NEGATIVE.getName(), projectId, contendId);
...@@ -510,7 +522,7 @@ public class ReportServiceImpl implements ReportService { ...@@ -510,7 +522,7 @@ public class ReportServiceImpl implements ReportService {
result.put("name", Objects.equals(emotion, EmotionEnum.POSITIVE.getName()) ? "正面事件" : Objects.equals(emotion, EmotionEnum.NEGATIVE.getName()) ? "负面事件" : "中性事件"); result.put("name", Objects.equals(emotion, EmotionEnum.POSITIVE.getName()) ? "正面事件" : Objects.equals(emotion, EmotionEnum.NEGATIVE.getName()) ? "负面事件" : "中性事件");
// 调用事件中间件时,主品牌id使用项目id // 调用事件中间件时,主品牌id使用项目id
List<com.zhiwei.middleware.event.pojo.entity.Event> topEventList = List<com.zhiwei.middleware.event.pojo.entity.Event> topEventList =
eventClient.getEventsByTotalChannelVolumeTop(startTime, endTime, emotion, projectId, projectId, 10); eventMiddlewareDao.getEventsByTotalChannelVolumeTop(startTime, endTime, emotion, projectId, projectId, 10);
result.put("events", topEventList.stream().map(event -> { result.put("events", topEventList.stream().map(event -> {
JSONObject topEvent = new JSONObject(); JSONObject topEvent = new JSONObject();
boolean hasAnalyze = false; boolean hasAnalyze = false;
...@@ -574,8 +586,7 @@ public class ReportServiceImpl implements ReportService { ...@@ -574,8 +586,7 @@ public class ReportServiceImpl implements ReportService {
* @param topEventList top事件集合 * @param topEventList top事件集合
* @return top事件信息 * @return top事件信息
*/ */
private List<JSONObject> getTopEventMsg(List<com.zhiwei.middleware.event.pojo.entity.Event> topEventList) { private List<JSONObject> getTopEventMsg(List<com.zhiwei.middleware.event.pojo.entity.Event> topEventList,String projectId) {
String projectId = UserThreadLocal.getProjectId();
return topEventList.stream().map(event -> { return topEventList.stream().map(event -> {
boolean hasAnalyze = false; boolean hasAnalyze = false;
for (BrandkbsBasicInfo brandkbsInfo : event.getBrandkbsInfos()) { for (BrandkbsBasicInfo brandkbsInfo : event.getBrandkbsInfos()) {
......
...@@ -78,6 +78,9 @@ public class TaskServiceImpl implements TaskService { ...@@ -78,6 +78,9 @@ public class TaskServiceImpl implements TaskService {
@Resource(name = "eventServiceImpl") @Resource(name = "eventServiceImpl")
EventService eventService; EventService eventService;
@Resource(name = "customEventServiceImpl")
CustomEventService customEventService;
@Resource(name = "taskServiceExecutor") @Resource(name = "taskServiceExecutor")
ThreadPoolTaskExecutor taskServiceExecutor; ThreadPoolTaskExecutor taskServiceExecutor;
...@@ -121,7 +124,7 @@ public class TaskServiceImpl implements TaskService { ...@@ -121,7 +124,7 @@ public class TaskServiceImpl implements TaskService {
Long[] timeMinMax = Tools.timeMinMax(rangeTimeRecords.stream().map(Pair::getLeft).collect(Collectors.toList())); Long[] timeMinMax = Tools.timeMinMax(rangeTimeRecords.stream().map(Pair::getLeft).collect(Collectors.toList()));
List<ChannelRecord> channelRecords = ChannelRecord.createChannelRecords(timeMinMax[0], timeMinMax[1], channelIndexRecordMap); List<ChannelRecord> channelRecords = ChannelRecord.createChannelRecords(timeMinMax[0], timeMinMax[1], channelIndexRecordMap);
channelEsDao.upsertChannelRecord(channelRecords); channelEsDao.upsertChannelRecord(channelRecords);
// 同步channelCopy // 同步ES-channelCopy,区分insertList和updateList
ListUtils.partition(insertList, 1000).forEach(list -> { ListUtils.partition(insertList, 1000).forEach(list -> {
channelEsDao.batchInsert(list.stream().map(Channel::createChannelCopyMap).collect(Collectors.toList())); channelEsDao.batchInsert(list.stream().map(Channel::createChannelCopyMap).collect(Collectors.toList()));
}); });
...@@ -145,7 +148,6 @@ public class TaskServiceImpl implements TaskService { ...@@ -145,7 +148,6 @@ public class TaskServiceImpl implements TaskService {
channelService.getPositiveList(Constant.PRIMARY_CONTEND_ID, null, null, sorter, times[0], times[1], 50, false); channelService.getPositiveList(Constant.PRIMARY_CONTEND_ID, null, null, sorter, times[0], times[1], 50, false);
// 敏感渠道榜 // 敏感渠道榜
channelService.getNegativeList(Constant.PRIMARY_CONTEND_ID, null, null, sorter, times[0], times[1], 50, false); channelService.getNegativeList(Constant.PRIMARY_CONTEND_ID, null, null, sorter, times[0], times[1], 50, false);
}); });
log.info("项目:{}-渠道榜单缓存已完成:{}个", project.getProjectName(), total.incrementAndGet()); log.info("项目:{}-渠道榜单缓存已完成:{}个", project.getProjectName(), total.incrementAndGet());
return null; return null;
...@@ -172,6 +174,23 @@ public class TaskServiceImpl implements TaskService { ...@@ -172,6 +174,23 @@ public class TaskServiceImpl implements TaskService {
}, cacheServiceExecutor)).toArray(CompletableFuture[]::new)).join(); }, cacheServiceExecutor)).toArray(CompletableFuture[]::new)).join();
} }
@Override
public void customEventCache() {
AtomicInteger total = new AtomicInteger();
Long[] timeRangeFormatWeek = commonService.getTimeRangeFormatWeek();
Long[] timeRangeLastWeek = new Long[]{timeRangeFormatWeek[0] - Constant.ONE_WEEK, timeRangeFormatWeek[1] - Constant.ONE_WEEK};
List<Long[]> timeList = Arrays.asList(commonService.getTimeRangeDay(), timeRangeLastWeek);
CompletableFuture.allOf(GlobalPojo.PROJECT_MAP.values().stream().map(project -> CompletableFuture.supplyAsync(() -> {
UserThreadLocal.set(new UserInfo().setProjectId(project.getId()));
timeList.forEach(times -> {
// 自定义事件标题缓存
customEventService.getCustomEventRankList(times[0], times[1]);
});
log.info("项目:{}-自定义事件标题缓存已完成:{}个", project.getProjectName(), total.incrementAndGet());
return null;
}, cacheServiceExecutor)).toArray(CompletableFuture[]::new)).join();
}
private Pair<List<Channel>, List<Channel>> batchHandle(List<Map.Entry<ChannelIndex, ChannelIndex.Record>> batchList, Map<ChannelIndex, private Pair<List<Channel>, List<Channel>> batchHandle(List<Map.Entry<ChannelIndex, ChannelIndex.Record>> batchList, Map<ChannelIndex,
ChannelIndex.Record> newRecordMap) { ChannelIndex.Record> newRecordMap) {
List<Channel> insertList = Collections.synchronizedList(new ArrayList<>()); List<Channel> insertList = Collections.synchronizedList(new ArrayList<>());
...@@ -296,24 +315,26 @@ public class TaskServiceImpl implements TaskService { ...@@ -296,24 +315,26 @@ public class TaskServiceImpl implements TaskService {
private boolean reportSendByProject(Project project) { private boolean reportSendByProject(Project project) {
boolean flag = false; boolean flag = false;
// 扫描setting信息 // 扫描setting信息并生成对应报告
for (ReportSettings reportSettings : reportSettingsDao.getReportSettingByProjectWithUsed(project.getId())) { for (ReportSettings reportSettings : reportSettingsDao.getReportSettingByProjectWithUsed(project.getId())) {
ReportTypeEnum reportType = ReportTypeEnum.getInstanceByState(reportSettings.getType()); ReportTypeEnum reportType = ReportTypeEnum.getInstanceByState(reportSettings.getType());
if (ReportTypeEnum.canPublishNow(reportType)) { if (ReportTypeEnum.canPublishNow(reportType)) {
Pair<Boolean, Report> booleanReportPair = reportService.generateReportBySettings(reportSettings, project); Pair<Boolean, Report> booleanReportPair = reportService.generateReportBySettings(reportSettings, project);
// 生成新的简报之后的处理 // 生成新的简报之后的处理
if (booleanReportPair.getLeft()) { // if (booleanReportPair.getLeft()) {
Report report = booleanReportPair.getRight(); // Report report = booleanReportPair.getRight();
// 用作生成缓存 // // 用作生成缓存
reportService.getPcReportAnalyze(report.getId(), false); // reportService.getPcReportAnalyze(report.getId(), false);
} // reportService.switchReportStatus(report.getId(), true);
// }
flag = true; flag = true;
} }
} }
// 自定义简报不通过setting生效 // 生成对应报告
for (Report report : reportService.getCustomReportByStatus(project.getId(), false)) { for (Report report : reportService.getReportByStatus(project.getId(), false)) {
// 用作生成缓存 // 用作生成缓存
reportService.getPcReportAnalyze(report.getId(), false); reportService.getPcReportAnalyze(report.getId(), false);
reportService.switchReportStatus(report.getId(), true);
} }
return flag; return flag;
} }
......
...@@ -41,13 +41,14 @@ public class ControlCenter { ...@@ -41,13 +41,14 @@ public class ControlCenter {
@Async("scheduledExecutor") @Async("scheduledExecutor")
@Scheduled(cron = "0 0 1 * * ?") @Scheduled(cron = "0 0 1 * * ?")
public void messageFlowCache() { public void messageFlowCache() {
log.info("定时按天缓存消息流信息-启动"); log.info("定时按天缓存数据-启动");
try { try {
taskService.messageFlowCache(); taskService.messageFlowCache();
taskService.customEventCache();
} catch (Exception e) { } catch (Exception e) {
log.error("定时按天缓存消息流信息-出错", e); log.error("定时按天缓存数据-出错", e);
} finally { } finally {
log.info("定时按天缓存消息流信息-结束"); log.info("定时按天缓存数据-结束");
} }
} }
......
...@@ -24,6 +24,7 @@ import org.apache.commons.collections4.MapUtils; ...@@ -24,6 +24,7 @@ import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils; import org.apache.commons.lang3.time.DateUtils;
import org.apache.commons.lang3.time.FastDateFormat; import org.apache.commons.lang3.time.FastDateFormat;
import org.apache.commons.lang3.tuple.Pair;
import org.dozer.DozerBeanMapper; import org.dozer.DozerBeanMapper;
import org.joda.time.Period; import org.joda.time.Period;
import org.joda.time.PeriodType; import org.joda.time.PeriodType;
...@@ -853,6 +854,19 @@ public class Tools { ...@@ -853,6 +854,19 @@ public class Tools {
return dayList; return dayList;
} }
public static Pair<Boolean, List<Map<String, Long>>> getCutList(Long startTime, Long endTime) {
// 时间超过三天则选用day
boolean dayType = true;
List<Map<String, Long>> cutList;
if (endTime - startTime > Constant.ONE_DAY * 3) {
cutList = Tools.parseToDays(startTime, endTime);
} else {
cutList = Tools.parseToHours(startTime, endTime);
dayType = false;
}
return Pair.of(dayType, cutList);
}
public static boolean isContains(String keyword, String content) { public static boolean isContains(String keyword, String content) {
if (null == keyword) { if (null == keyword) {
return true; return true;
......
...@@ -32,7 +32,7 @@ public class ReportServiceTest { ...@@ -32,7 +32,7 @@ public class ReportServiceTest {
@Test @Test
public void getCustomReportByStatusTest(){ public void getCustomReportByStatusTest(){
List<Report> customReportByStatus = reportService.getCustomReportByStatus(UserThreadLocal.getProjectId(), false); List<Report> customReportByStatus = reportService.getReportByStatus(UserThreadLocal.getProjectId(), false);
for (Report reportByStatus : customReportByStatus) { for (Report reportByStatus : customReportByStatus) {
System.out.println(reportByStatus); System.out.println(reportByStatus);
} }
......
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