Commit c302d3c1 by shenjunjie

Merge branch 'release' into 'master'

Release

See merge request !53
parents f36f6f14 33a26549
...@@ -232,6 +232,11 @@ ...@@ -232,6 +232,11 @@
<artifactId>nlp-aggree</artifactId> <artifactId>nlp-aggree</artifactId>
<version>0.0.5-SNAPSHOT</version> <version>0.0.5-SNAPSHOT</version>
</dependency> </dependency>
<dependency>
<groupId>com.zhiwei.tools</groupId>
<artifactId>zhiwei-tools</artifactId>
<version>0.3.3-SNAPSHOT</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
package com.zhiwei.brandkbs2.aop;
import com.zhiwei.brandkbs2.common.GenericAttribute;
import com.zhiwei.brandkbs2.dao.BehaviorDao;
import com.zhiwei.brandkbs2.pojo.Behavior;
import com.zhiwei.brandkbs2.service.UserService;
import com.zhiwei.brandkbs2.util.Tools;
import com.zhiwei.middleware.auth.util.JwtUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.context.request.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.HandlerMapping;
import javax.annotation.Resource;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.*;
import java.util.stream.Collectors;
import static java.util.Objects.nonNull;
/**
* @author cjz
* @ClassName AopLogRecord
* @Description 接口访问日志记录
* @date 2022-09-13 15:25
*/
@Aspect
@Component
public class AopLogRecord {
@Value("${jwt.key}")
private String jwtKey;
@Resource(name = "userServiceImpl")
private UserService userService;
@Resource(name = "behaviorDao")
private BehaviorDao behaviorDao;
private static final List<String> URL_PATTERNS = Arrays.asList("/getNewAll", "/getNew", "/schedule");
@Before("execution(public * com..controller..admin..*Controller.*(..)) || execution(* com..controller..app..*Controller.*(..))")
private void beforeLog(JoinPoint joinPoint) throws UnknownHostException, ClassNotFoundException, NoSuchMethodException {
long now = System.currentTimeMillis();
// RequestContextHolder 顾名思义 持有 request 上下文的容器
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
// 获取request对象
HttpServletRequest request = Objects.requireNonNull(requestAttributes).getRequest();
// webRequest拿路径的uri和request拿的uri有区别
NativeWebRequest webRequest = new ServletWebRequest(request);
Object webRequestAttribute = webRequest.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE, RequestAttributes.SCOPE_REQUEST);
if (filterUrl(webRequestAttribute)) {
// controller接口信息
String httpMethod = request.getMethod();
String uri = request.getRequestURI();
String methodName = joinPoint.getSignature().getName();
// 访问页面
String className = joinPoint.getTarget().getClass().getName();
Class<?> clazz = Class.forName(className);
String controller = clazz.getAnnotation(Api.class).tags()[0];
// 操作模块
MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
String method = methodSignature.getMethod().getAnnotation(ApiOperation.class).value();
// 前后台,false:前台,true:后台
boolean backstage = uri.contains("admin");
if (!(Tools.isNullOrUndefined(request.getHeader(jwtKey)) || Tools.isNullOrUndefined(request.getHeader("pid")))) {
// 用户信息
String userId = JwtUtil.unsign(request.getHeader(jwtKey), Map.class).get(GenericAttribute.USER_ID).toString();
String projectId = request.getHeader("pid");
String nickName = userService.queryUserInfo(userId, projectId).getNickname();
// 请求地址和服务器地址
String severAddress = InetAddress.getLocalHost().getHostAddress();
String ipAddress = Tools.getIpAddress(request);
// 接口传参信息
List<Map<String, Object>> arguments = getRequestArguments(joinPoint);
Behavior behavior = new Behavior(userId, projectId, nickName, ipAddress, now, controller, method, backstage, uri, methodName, httpMethod, arguments, now, severAddress);
String collectionName = behaviorDao.generateCollectionName();
behaviorDao.insertOneWithoutId(behavior, collectionName);
}
}
}
/**
* 获取接口传参信息
* @param joinPoint
* @return
*/
private List<Map<String, Object>> getRequestArguments(JoinPoint joinPoint) {
List<Map<String, Object>> arguments = new ArrayList<>();
// 获取参数名
MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
String[] parameterNames = methodSignature.getParameterNames();
// 获取参数值
for (int i = 0; i < joinPoint.getArgs().length; i++) {
// 过滤HttpServletRequest参数
if (joinPoint.getArgs()[i] instanceof ServletRequest) {
continue;
}
// formdata文件类型判断
if (joinPoint.getArgs()[i] instanceof MultipartFile) {
Map<String, Object> fileMap = new HashMap<>();
fileMap.put("name", parameterNames[i]);
MultipartFile file = (MultipartFile) joinPoint.getArgs()[i];
// 文件名
fileMap.put("value", file.getOriginalFilename());
arguments.add(fileMap);
continue;
}
// 参数pathId、param、body
Map<String, Object> parameterMap = new HashMap<>();
parameterMap.put("name", parameterNames[i]);
parameterMap.put("value", String.valueOf(joinPoint.getArgs()[i]));
arguments.add(parameterMap);
}
return arguments;
}
/**
* url过滤
* @param attribute url
* @return
*/
private boolean filterUrl(Object attribute){
if (!nonNull(attribute)) {
return false;
}
String requestURI = String.valueOf(attribute);
for (String urlPattern : URL_PATTERNS) {
if (requestURI.contains(urlPattern)) {
return false;
}
}
return true;
}
}
...@@ -5,7 +5,8 @@ import com.zhiwei.brandkbs2.common.GenericAttribute; ...@@ -5,7 +5,8 @@ import com.zhiwei.brandkbs2.common.GenericAttribute;
import com.zhiwei.brandkbs2.model.CommonCodeEnum; import com.zhiwei.brandkbs2.model.CommonCodeEnum;
import com.zhiwei.brandkbs2.model.ResponseResult; import com.zhiwei.brandkbs2.model.ResponseResult;
import com.zhiwei.brandkbs2.pojo.UserInfo; import com.zhiwei.brandkbs2.pojo.UserInfo;
import com.zhiwei.brandkbs2.service.IUserService; import com.zhiwei.brandkbs2.service.UserService;
import com.zhiwei.brandkbs2.util.Tools;
import com.zhiwei.middleware.auth.util.JwtUtil; import com.zhiwei.middleware.auth.util.JwtUtil;
import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature; import org.aspectj.lang.Signature;
...@@ -40,7 +41,7 @@ public class AuthAspect { ...@@ -40,7 +41,7 @@ public class AuthAspect {
private String jwtKey; private String jwtKey;
@Resource(name = "userServiceImpl") @Resource(name = "userServiceImpl")
private IUserService iUserService; private UserService UserService;
@Pointcut("execution(com.zhiwei.brandkbs2.model.ResponseResult com.zhiwei.brandkbs2.controller..*.*(..))") @Pointcut("execution(com.zhiwei.brandkbs2.model.ResponseResult com.zhiwei.brandkbs2.controller..*.*(..))")
// @Pointcut("within(com.zhiwei.brandkbs2.controller..*)") // @Pointcut("within(com.zhiwei.brandkbs2.controller..*)")
...@@ -48,6 +49,28 @@ public class AuthAspect { ...@@ -48,6 +49,28 @@ public class AuthAspect {
} }
@Around("auth()") @Around("auth()")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
ServletRequestAttributes servletRequestAttributes = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes());
HttpServletRequest request = servletRequestAttributes.getRequest();
String token = request.getHeader(jwtKey);
// 存在有效token
if (null != token && !Tools.tokenEmpty(token)) {
Map<String, Object> tokenInfo = JwtUtil.unsign(token, Map.class);
String uid = tokenInfo.get(GenericAttribute.USER_ID).toString();
UserInfo userInfo = UserService.queryUserInfo(uid, request.getHeader("pid"));
if (null == userInfo) {
userInfo = new UserInfo().setUserId(uid).setProjectId(request.getHeader("pid"));
}
UserThreadLocal.set(userInfo);
Object proceed = joinPoint.proceed();
UserThreadLocal.clear();
// todo 操作记录收集
return proceed;
}
return joinPoint.proceed();
}
// @Around("auth()")
public Object aroundCheckToken(ProceedingJoinPoint joinPoint) throws Throwable { public Object aroundCheckToken(ProceedingJoinPoint joinPoint) throws Throwable {
Signature signature = joinPoint.getSignature(); Signature signature = joinPoint.getSignature();
Method method = ((MethodSignature) signature).getMethod(); Method method = ((MethodSignature) signature).getMethod();
...@@ -73,7 +96,7 @@ public class AuthAspect { ...@@ -73,7 +96,7 @@ public class AuthAspect {
return unAuthenticatedResponse(response, noAuth, joinPoint); return unAuthenticatedResponse(response, noAuth, joinPoint);
} }
String uid = tokenInfo.get(GenericAttribute.USER_ID).toString(); String uid = tokenInfo.get(GenericAttribute.USER_ID).toString();
UserInfo userInfo = iUserService.queryUserInfo(uid, request.getHeader("pid")); UserInfo userInfo = UserService.queryUserInfo(uid, request.getHeader("pid"));
if (!noAuth && null == userInfo) { if (!noAuth && null == userInfo) {
return unAuthoriseResponse(response); return unAuthoriseResponse(response);
} }
......
package com.zhiwei.brandkbs2.auth; package com.zhiwei.brandkbs2.auth;
import com.zhiwei.brandkbs2.enmus.response.LoginCodeEnum;
import com.zhiwei.brandkbs2.exception.ExceptionCast;
import com.zhiwei.brandkbs2.pojo.UserInfo; import com.zhiwei.brandkbs2.pojo.UserInfo;
import java.util.Map; import java.util.Map;
...@@ -18,18 +20,22 @@ public class UserThreadLocal { ...@@ -18,18 +20,22 @@ public class UserThreadLocal {
} }
public static String getNickname() { public static String getNickname() {
checkExist();
return TOKEN_USER_INFO.get().getNickname(); return TOKEN_USER_INFO.get().getNickname();
} }
public static String getUserId() { public static String getUserId() {
checkExist();
return TOKEN_USER_INFO.get().getUserId(); return TOKEN_USER_INFO.get().getUserId();
} }
public static String getProjectId() { public static String getProjectId() {
checkExist();
return TOKEN_USER_INFO.get().getProjectId(); return TOKEN_USER_INFO.get().getProjectId();
} }
public static int getRoleId() { public static int getRoleId() {
checkExist();
return TOKEN_USER_INFO.get().getRoleId(); return TOKEN_USER_INFO.get().getRoleId();
} }
...@@ -41,4 +47,10 @@ public class UserThreadLocal { ...@@ -41,4 +47,10 @@ public class UserThreadLocal {
TOKEN_USER_INFO.remove(); TOKEN_USER_INFO.remove();
} }
private static void checkExist() {
if (null == TOKEN_USER_INFO.get()) {
ExceptionCast.cast(LoginCodeEnum.LOGIN_EXPIRED_ERROR);
}
}
} }
...@@ -7,6 +7,7 @@ package com.zhiwei.brandkbs2.common; ...@@ -7,6 +7,7 @@ package com.zhiwei.brandkbs2.common;
* @date: 2022-04-21 10:10 * @date: 2022-04-21 10:10
*/ */
public class GenericAttribute { public class GenericAttribute {
private GenericAttribute() { private GenericAttribute() {
} }
...@@ -14,7 +15,9 @@ public class GenericAttribute { ...@@ -14,7 +15,9 @@ public class GenericAttribute {
* es index * es index
*/ */
public static final String ES_INDEX_PRE = "brandkbs2"; public static final String ES_INDEX_PRE = "brandkbs2";
public static final String ES_INDEX_TEST = "brandkbs2_test"; // public static final String ES_INDEX_TEST = "brandkbs2_test";
public static final String ES_INDEX_TEST = "brandkbs2_2022";
public static final String ES_CHANNEL_INDEX_TEST = "brandkbs2_channel_record_test";
/** /**
* es ind_title * es ind_title
**/ **/
...@@ -24,41 +27,91 @@ public class GenericAttribute { ...@@ -24,41 +27,91 @@ public class GenericAttribute {
**/ **/
public static final String ES_IND_FULL_TEXT = "ind_full_text"; public static final String ES_IND_FULL_TEXT = "ind_full_text";
/** /**
* es followers_num
*/
public static final String ES_FOLLOWERS_NUM = "channel_followers_num";
/**
* es media_type
*/
// public static final String ES_MEDIA_TYPE = "media_type";
// es platform_id
public static final String ES_PLATFORM_ID = "platform_id";
// es channel_influence
public static final String ES_CHANNEL_INFLUENCE = "channel_influence";
/**
* es rootSource
**/
public static final String ES_ROOT_SOURCE = "root_source";
/**
* es gid * es gid
**/ **/
public static final String ES_GID = "gid"; public static final String ES_GID = "gid";
public static final String ES_PROJECT_ID = "project_id";
public static final String ES_CONTEND_ID = "contend_id";
public static final String ES_CHANNEL_FID = "fid";
public static final String ES_CNAME = "cname"; public static final String ES_CNAME = "cname";
/** es c2 **/ /**
* es c2
**/
public static final String ES_C2 = "c2"; public static final String ES_C2 = "c2";
/** es c5 **/ /**
* es c4
**/
public static final String ES_C4 = "c4";
/**
* es c5
**/
public static final String ES_C5 = "c5"; public static final String ES_C5 = "c5";
/** es foreign **/ /**
* es foreign
**/
public static final String ES_FOREIGN = "foreign"; public static final String ES_FOREIGN = "foreign";
/** es source **/ /**
* es source
**/
public static final String ES_SOURCE = "source"; public static final String ES_SOURCE = "source";
/** es real_source **/ /**
* es real_source
**/
public static final String ES_REAL_SOURCE = "real_source"; public static final String ES_REAL_SOURCE = "real_source";
/** es time **/ /**
* es time
**/
public static final String ES_TIME = "time"; public static final String ES_TIME = "time";
/** es ctime **/ /**
* es ctime
**/
public static final String ES_CTIME = "ctime"; public static final String ES_CTIME = "ctime";
/** es mtime **/ /**
* es mtime
**/
public static final String ES_MTIME = "mtime"; public static final String ES_MTIME = "mtime";
/** es mtag **/ /**
* es mtag
**/
public static final String ES_MTAG = "mtag"; public static final String ES_MTAG = "mtag";
/** es mgroup **/ /**
* es mgroup
**/
public static final String ES_MGROUP = "mgroup"; public static final String ES_MGROUP = "mgroup";
/** es forward **/ /**
* es forward
**/
public static final String ES_FORWARD = "forward"; public static final String ES_FORWARD = "forward";
/** es brandkbs_cache_maps **/ /**
* es brandkbs_cache_maps
**/
public static final String ES_BRANDKBS_CACHE_MAPS = "brandkbs_cache_maps"; public static final String ES_BRANDKBS_CACHE_MAPS = "brandkbs_cache_maps";
/** es mark_cache_maps **/ /**
public static final String ES_MARK_CACHE_MAPS = "mark_cache_maps"; * es mark_cache_maps
**/
public static final String ES_MARK_CACHE_MAPS = "brandkbs_mark_cache_maps";
public static final String LINKED_GROUP_ID = "linkedGroupId"; public static final String ES_LINKED_GROUP_ID = "linked_group_id";
// public static final String ES_CACHE_MAP_PROJECT = "brandkbs_cache_maps.projectId.keyword"; // public static final String ES_CACHE_MAP_PROJECT = "brandkbs_cache_maps.project_id.keyword";
// public static final String ES_CACHE_MAP_LINKED_GROUP_ID = "brandkbs_cache_maps.linkedGroupId.keyword"; // public static final String ES_CACHE_MAP_LINKED_GROUP_ID = "brandkbs_cache_maps.linked_group_id.keyword";
// public static final String PLATFORM = "platform"; // public static final String PLATFORM = "platform";
/** /**
...@@ -68,17 +121,9 @@ public class GenericAttribute { ...@@ -68,17 +121,9 @@ public class GenericAttribute {
public static final String USER_ID = "userId"; public static final String USER_ID = "userId";
public static final String ROLE_ID = "roleId"; public static final String ROLE_ID = "roleId";
public static final String PROJECT_ID = "projectId"; public static final String PROJECT_ID = "projectId";
public static final String AVATAR_URL= "avatarUrl"; public static final String AVATAR_URL = "avatarUrl";
/** public static final String EXPORT_AMOUNT = "exportAmount";
* 标签相关 public static final String EXPIRED_TIME = "expiredTime";
*/
public static final String EMOTION_LABEL_KEY = "情感倾向";
public static final String BRAND_LABEL_KEY = "品牌归属";
/**
* 报告相关
*/
public static final String MONTH_REPORT = "月报";
public static final String WEEK_REPORT = "周报";
// public enum ChannelParam{ // public enum ChannelParam{
// 负面稿件数("negativeArticles"), // 负面稿件数("negativeArticles"),
......
package com.zhiwei.brandkbs2.common; package com.zhiwei.brandkbs2.common;
import com.zhiwei.brandkbs2.service.ISystemInfoService; import com.zhiwei.brandkbs2.pojo.ChannelTag;
import com.zhiwei.brandkbs2.pojo.Project;
import com.zhiwei.brandkbs2.service.SystemInfoService;
import com.zhiwei.qbjc.bean.pojo.common.MessagePlatform; import com.zhiwei.qbjc.bean.pojo.common.MessagePlatform;
import com.zhiwei.qbjc.bean.pojo.common.Tag; import com.zhiwei.qbjc.bean.pojo.common.Tag;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
...@@ -11,6 +13,7 @@ import org.springframework.stereotype.Component; ...@@ -11,6 +13,7 @@ import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -26,7 +29,7 @@ public class GlobalPojo { ...@@ -26,7 +29,7 @@ public class GlobalPojo {
public static final Logger log = LogManager.getLogger(GlobalPojo.class); public static final Logger log = LogManager.getLogger(GlobalPojo.class);
@Resource(name = "systemInfoServiceImpl") @Resource(name = "systemInfoServiceImpl")
private ISystemInfoService systemInfoService; private SystemInfoService systemInfoService;
/** /**
* 监测系统平台 * 监测系统平台
...@@ -38,6 +41,20 @@ public class GlobalPojo { ...@@ -38,6 +41,20 @@ public class GlobalPojo {
**/ **/
public static Map<String, List<Tag>> TAGS; public static Map<String, List<Tag>> TAGS;
public static Map<String, String> CHANNEL_TAGS;
/**
* 渠道类型(划分重要渠道)
*/
public static Map<String, Map<String, String>> MEDIA_TYPE;
public static Map<String, Project> PROJECT_MAP;
public static final List<String> PERMANENT_PLATFORM_NAMES = Arrays.asList("网媒", "微博", "微信", "今日头条");
public static final String ELSE_PLATFORM_NAME = "其他自媒体";
@PostConstruct @PostConstruct
public void start() { public void start() {
try { try {
...@@ -60,6 +77,45 @@ public class GlobalPojo { ...@@ -60,6 +77,45 @@ public class GlobalPojo {
private void updatePojo(String logMsg) { private void updatePojo(String logMsg) {
PLATFORMS = systemInfoService.getPlatforms(); PLATFORMS = systemInfoService.getPlatforms();
TAGS = systemInfoService.getTags().stream().collect(Collectors.groupingBy(Tag::getGroupName)); TAGS = systemInfoService.getTags().stream().collect(Collectors.groupingBy(Tag::getGroupName));
CHANNEL_TAGS = systemInfoService.getChannelTags().stream().collect(Collectors.toMap(ChannelTag::getChannel, ChannelTag::getTag));
MEDIA_TYPE = systemInfoService.getMediaTypes();
PROJECT_MAP = systemInfoService.getProjects();
log.info("{}-获取PLATFORMS-size:{},TAGS-size:{},CHANNEL_TAGS:{},MEDIA_TYPE:{},PROJECT_MAP:{}", logMsg, PLATFORMS.size(), TAGS.size(),
CHANNEL_TAGS.size(), MEDIA_TYPE.size(), PROJECT_MAP.size());
}
public static String getPlatformIdByName(String platformName) {
for (MessagePlatform platform : PLATFORMS) {
if (platform.getName().equals(platformName)) {
return platform.getId();
}
}
return null;
}
public static String getPlatformNameById(String platformId) {
for (MessagePlatform platform : PLATFORMS) {
if (platform.getId().equals(platformId)) {
return platform.getName();
}
}
return null;
}
public static String getPermanentPlatformNameById(String platformId) {
String platformName = getPlatformNameById(platformId);
if (PERMANENT_PLATFORM_NAMES.contains(platformName)) {
return platformName;
}
return ELSE_PLATFORM_NAME;
}
public static String getMediaType(String projectId, String platform, String source) {
Map<String, String> projectMap = MEDIA_TYPE.get(projectId);
if (null == projectMap) {
return null;
}
return projectMap.get(platform + source);
} }
} }
...@@ -15,12 +15,55 @@ public class RedisKeyPrefix { ...@@ -15,12 +15,55 @@ public class RedisKeyPrefix {
private RedisKeyPrefix() { private RedisKeyPrefix() {
} }
public static final String MARK_ANALYZE_SUMMARY = "BRANDKBS:MARK:ANALYZE:SUMMARY:";
public static final String ARTICLE_SPREAD = "BRANDKBS:MARK:ANALYZE:SPREAD:";
private static final String SEPARATOR = ":"; private static final String SEPARATOR = ":";
/** /**
* 首页相关缓存KEY
*/
public static final String INDEX_YUQING = "BRANDKBS:INDEX:YUQING:";
public static final String INDEX_REPUTATION = "BRANDKBS:INDEX:REPUTATION:";
public static final String INDEX_EVENT = "BRANDKBS:INDEX:EVENT:";
public static final String INDEX_PLATFORM = "BRANDKBS:INDEX:PLATFORM:";
public static final String INDEX_SPREAD = "BRANDKBS:INDEX:SPREAD:";
public static final String INDEX_COMPARE_SUMMARY_MOBILE = "BRANDKBS:INDEX:COMPARE_SUMMARY:MOBILE:";
/**
* 竞品库-获取竞品对比舆情解读数据(PC
*/
public static final String INDEX_COMPARE_SUMMARY_PC = "BRANDKBS:CONTEND:COMPARE_SUMMARY:PC:";
/**
* 竞品库-获取竞品对比传播分析数据
*/
public static final String INDEX_COMPARE_ANALYZE = "BRANDKBS:CONTEND:COMPARE_ANALYZE:";
public static final String MARK_ANALYZE_SUMMARY = "BRANDKBS:MARK:ANALYZE_SUMMARY:";
public static final String MARK_PLATFORM_PROPORTION = "BRANDKBS:MARK:PLATFORM_PROPORTION:";
public static final String MARK_SPREAD = "BRANDKBS:MARK:SPREAD:";
public static final String MARK_CHANNEL_PROPORTION = "BRANDKBS:MARK:CHANNEL_PROPORTION:";
public static final String MARK_EMOTION_PROPORTION = "BRANDKBS:MARK:EMOTION_PROPORTION:";
public static final String MARK_HIGH_WORD = "BRANDKBS:MARK:HIGH_WORD:";
public static final String REDIS_SYSTEM_COPY = "BRANDKBS:SYSTEM:COPY:";
public static final String AGGREE_RESULT_CACHE = "BRANDKBS:AGGREE_CACHE:";
/**
* 自定义事件相关缓存
*/
public static final String CUSTOM_EVENT_LIST = "BRANDKBS:CUSTOM_EVENT:LIST:";
public static final String CUSTOM_EVENT_ANALYZE_SHARE = "BRANDKBS:CUSTOM_EVENT:SHARE:";
public static final String CUSTOM_EVENT_ANALYZE = "BRANDKBS:CUSTOM_EVENT:ANALYZE:";
/**
* 热点相关缓存KEY
*/
public static final String HOT_RANK_LIST = "BRANDKBS:HOT:RANK_LIST:";
public static final String HOT_LIST = "BRANDKBS:HOT:LIST:";
/**
* 项目简报报相关缓存KEY
*/
public static final String REPORT_PC = "BRANDKBS:REPORT:PC:";
/**
* 稿件数据上传缓存key * 稿件数据上传缓存key
*/ */
private static final String EVENT_DATA_UPLOAD_PROGRESS = "BRANDKBS:EVENT:EVENT_DATA:PROGRESS:"; private static final String EVENT_DATA_UPLOAD_PROGRESS = "BRANDKBS:EVENT:EVENT_DATA:PROGRESS:";
...@@ -35,6 +78,10 @@ public class RedisKeyPrefix { ...@@ -35,6 +78,10 @@ public class RedisKeyPrefix {
*/ */
private static final String EVENT_ANALYZE_PROGRESS = "BRANDKBS:EVENT:ANALYZE:PROGRESS:"; private static final String EVENT_ANALYZE_PROGRESS = "BRANDKBS:EVENT:ANALYZE:PROGRESS:";
public static String eventAnalysisProgress(String eventId, String projectId) {
return RedisKeyPrefix.generateRedisKey(RedisKeyPrefix.EVENT_ANALYZE_PROGRESS, projectId, eventId);
}
public static String eventAnalysisProgress(String eventId) { public static String eventAnalysisProgress(String eventId) {
return RedisKeyPrefix.generateRedisKey(RedisKeyPrefix.EVENT_ANALYZE_PROGRESS, UserThreadLocal.getProjectId(), eventId); return RedisKeyPrefix.generateRedisKey(RedisKeyPrefix.EVENT_ANALYZE_PROGRESS, UserThreadLocal.getProjectId(), eventId);
} }
......
package com.zhiwei.brandkbs2.config; package com.zhiwei.brandkbs2.config;
import org.apache.commons.lang3.time.FastDateFormat;
import java.text.ParseException;
/** /**
* @ClassName: Constant * @ClassName: Constant
* @Description 常量 * @Description 常量
...@@ -8,10 +12,50 @@ package com.zhiwei.brandkbs2.config; ...@@ -8,10 +12,50 @@ package com.zhiwei.brandkbs2.config;
*/ */
public class Constant { public class Constant {
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_MONTH = 30 * 24 * 60 * 60 * 1000L;
public static final String HOUR_PATTERN = "yyyy-MM-dd HH";
public static final String DAY_PATTERN = "yyyy-MM-dd"; public static final String DAY_PATTERN = "yyyy-MM-dd";
public static final String MONTH_PATTERN = "yyyy-MM";
public static final String YEAR_PATTERN = "yyyy";
public static final FastDateFormat HOUR_FORMAT = FastDateFormat.getInstance(HOUR_PATTERN);
public static final FastDateFormat DAY_FORMAT = FastDateFormat.getInstance(DAY_PATTERN);
public static final FastDateFormat SPEC_DAY_FORMAT = FastDateFormat.getInstance("yyyy/MM/dd");
public static final FastDateFormat MONTH_FORMAT = FastDateFormat.getInstance(MONTH_PATTERN);
/** /**
* 自定义fid分隔符号 * 自定义fid分隔符号
*/ */
public static final String DEFAULT_SEPARATOR = "_"; public static final String DEFAULT_SEPARATOR = "_";
/**
* 标签相关
*/
public static final String EMOTION_LABEL_KEY = "情感倾向";
public static final String EMOTION_SENSITIVE = "敏感";
public static final String EMOTION_NEGATIVE = "负面";
public static final String BRAND_LABEL_KEY = "品牌归属";
/**
* 任务名分类
*/
public static final String TASK_REPORT_JOB = "定时生成项目简报数据";
public static final int INIT_VERSION = 0;
public static Long add8Hours(String time, FastDateFormat dateFormat) {
try {
return dateFormat.parse(time).getTime() + EIGHT_HOUR;
} catch (ParseException ignored) {
}
return -1L;
}
/**
* 主品牌默认竞品ID
*/
public static final String PRIMARY_CONTEND_ID = "0";
} }
...@@ -61,4 +61,40 @@ public class TaskPoolConfig { ...@@ -61,4 +61,40 @@ public class TaskPoolConfig {
return executor; return executor;
} }
@Bean
public ThreadPoolTaskExecutor mongoQueryExecutor() {
log.info("start mongoQueryExecutor");
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
// 配置核心线程数
executor.setCorePoolSize(8);
// 配置最大线程数
executor.setMaxPoolSize(16);
// 配置线程池中的线程的名称前缀
executor.setThreadNamePrefix("mongoQuery-");
// rejection-policy:当pool已经达到max size的时候,如何处理新任务
// CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
// 执行初始化
executor.initialize();
return executor;
}
@Bean
public ThreadPoolTaskExecutor taskServiceExecutor() {
log.info("start taskServiceExecutor");
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
// 配置核心线程数
executor.setCorePoolSize(16);
// 配置最大线程数
executor.setMaxPoolSize(32);
// 配置线程池中的线程的名称前缀
executor.setThreadNamePrefix("taskServiceExecutor-");
// rejection-policy:当pool已经达到max size的时候,如何处理新任务
// CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
// 执行初始化
executor.initialize();
return executor;
}
} }
package com.zhiwei.brandkbs2.controller;
import com.zhiwei.brandkbs2.auth.Auth;
import com.zhiwei.brandkbs2.enmus.RoleEnum;
import com.zhiwei.brandkbs2.model.ResponseResult;
import com.zhiwei.brandkbs2.pojo.dto.MarkSearchDTO;
import com.zhiwei.brandkbs2.service.IMarkDataService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @author sjj
* @ClassName AppArticleController
* @Description 提供前台稿件相关信息展示
* @date 2022-06-20 09:27
*/
@RestController
@RequestMapping("/app/yuqing")
@Api(tags = "前台稿件展示接口", description = "提供前台稿件相关信息展示")
@Auth(role = RoleEnum.CUSTOMER)
public class AppArticleController extends BaseController {
@Resource(name = "markDataServiceImpl")
IMarkDataService markDataService;
@ApiOperation("舆情标注数据列表")
@GetMapping("/list/mark")
public ResponseResult getYuqingMarkList(MarkSearchDTO markSearchDTO) {
return ResponseResult.success(markDataService.getYuqingMarkList(markSearchDTO));
}
@ApiOperation("舆情标注数据搜索条件")
@GetMapping("/list/mark/criteria")
public ResponseResult getYuqingMark(@RequestParam(required = false) String linkedGroupId) {
return ResponseResult.success(markDataService.getYuqingMarkCriteria(linkedGroupId));
}
@ApiOperation("舆情标注数据提要")
@ApiImplicitParams({
@ApiImplicitParam(name = "startTime", value = "开始时间", paramType = "query", dataType = "long"),
@ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "long")
})
@GetMapping("/analyze/summary")
public ResponseResult getArticleSummary(@RequestParam(value = "startTime", required = false) Long startTime,
@RequestParam(value = "endTime", required = false) Long endTime) {
return ResponseResult.success(markDataService.getAnalyzeSummary(startTime, endTime, true));
}
}
package com.zhiwei.brandkbs2.controller; package com.zhiwei.brandkbs2.controller;
import com.zhiwei.brandkbs2.auth.Auth; import com.zhiwei.brandkbs2.auth.Auth;
import com.zhiwei.brandkbs2.auth.UserThreadLocal;
import com.zhiwei.brandkbs2.enmus.RoleEnum; import com.zhiwei.brandkbs2.enmus.RoleEnum;
import com.zhiwei.brandkbs2.model.ResponseResult; import com.zhiwei.brandkbs2.model.ResponseResult;
import com.zhiwei.brandkbs2.service.ICommonService; import com.zhiwei.brandkbs2.service.CommonService;
import com.zhiwei.brandkbs2.service.ProjectService;
import com.zhiwei.middleware.mark.pojo.enums.TagField; import com.zhiwei.middleware.mark.pojo.enums.TagField;
import com.zhiwei.middleware.mark.vo.MarkerTag; import com.zhiwei.middleware.mark.vo.MarkerTag;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
...@@ -32,13 +34,17 @@ import java.util.stream.Collectors; ...@@ -32,13 +34,17 @@ import java.util.stream.Collectors;
public class CommonController extends BaseController { public class CommonController extends BaseController {
@Resource(name = "commonServiceImpl") @Resource(name = "commonServiceImpl")
ICommonService commonService; CommonService commonService;
@Resource(name = "projectServiceImpl")
ProjectService projectService;
@ApiOperation("获取情感倾向标签信息") @ApiOperation("获取情感倾向标签信息")
@ApiImplicitParam(name = "linkedGroupId", value = "关联项目ID", required = true, paramType = "path", dataType = "string") @ApiImplicitParam(name = "contendId", value = "品牌id", required = true, paramType = "path", dataType = "string")
@GetMapping("/get/tag/emotion/{linkedGroupId}") @GetMapping("/get/tag/emotion/{contendId}")
public ResponseResult getTagsWithEmotion(@PathVariable(value = "linkedGroupId") String linkedGroupId) { public ResponseResult getTagsWithEmotion(@PathVariable(value = "contendId") String contendId) {
List<String> res = new ArrayList<>(); List<String> res = new ArrayList<>();
String linkedGroupId = projectService.getProjectByContendId(UserThreadLocal.getProjectId(), contendId).getBrandLinkedGroupId();
List<MarkerTag> tags = commonService.getQbjcTags(linkedGroupId, TagField.GROUP_NAME.is("情感倾向")); List<MarkerTag> tags = commonService.getQbjcTags(linkedGroupId, TagField.GROUP_NAME.is("情感倾向"));
if (null != tags) { if (null != tags) {
res = tags.stream().map(MarkerTag::getName).collect(Collectors.toList()); res = tags.stream().map(MarkerTag::getName).collect(Collectors.toList());
...@@ -56,10 +62,25 @@ public class CommonController extends BaseController { ...@@ -56,10 +62,25 @@ public class CommonController extends BaseController {
} }
} }
@ApiOperation("测试接口") @ApiOperation("获取当前用户拥有的所有项目及品牌列表")
@GetMapping("/test") @GetMapping("/user/getUserAllProjects")
public ResponseResult test() { @Auth(role = RoleEnum.CUSTOMER)
return ResponseResult.success("true"); public ResponseResult getUserAllProjects() {
return ResponseResult.success(projectService.getUserAllProjects());
} }
// @ApiOperation("获取默认月间隔时间节点")
// @GetMapping("/time/month")
// @Auth(role = RoleEnum.CUSTOMER)
// public ResponseResult getTimeRangeMonth() {
// return ResponseResult.success(commonService.getTimeRangeMonth());
// }
//
// @ApiOperation("获取默认周间隔时间节点")
// @GetMapping("/time/week")
// @Auth(role = RoleEnum.CUSTOMER)
// public ResponseResult getTimeRangeWeek() {
// return ResponseResult.success(commonService.getTimeRangeWeek());
// }
} }
...@@ -2,11 +2,10 @@ package com.zhiwei.brandkbs2.controller; ...@@ -2,11 +2,10 @@ package com.zhiwei.brandkbs2.controller;
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.enmus.RoleEnum; import com.zhiwei.brandkbs2.enmus.RoleEnum;
import com.zhiwei.brandkbs2.model.ResponseResult; import com.zhiwei.brandkbs2.model.ResponseResult;
import com.zhiwei.brandkbs2.service.IProjectService; import com.zhiwei.brandkbs2.service.ProjectService;
import com.zhiwei.brandkbs2.service.IUserService; import com.zhiwei.brandkbs2.service.UserService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiImplicitParams;
...@@ -36,22 +35,22 @@ public class LoginController extends BaseController { ...@@ -36,22 +35,22 @@ public class LoginController extends BaseController {
private int jwtHour; private int jwtHour;
@Resource(name = "userServiceImpl") @Resource(name = "userServiceImpl")
private IUserService iUserService; private UserService UserService;
@Resource(name = "projectServiceImpl") @Resource(name = "projectServiceImpl")
private IProjectService iProjectService; private ProjectService ProjectService;
@ApiOperation("用户登录") @ApiOperation("用户登录")
@PostMapping("/user/login") @PostMapping("/user/login")
public ResponseResult login() { public ResponseResult login() {
return ResponseResult.success(iUserService.login().toMap()); return ResponseResult.success(UserService.login().toMap());
} }
@ApiOperation("用户信息获取") @ApiOperation("用户信息获取")
@GetMapping("/user/getLoginInfo") @GetMapping("/user/getLoginInfo")
@Auth(role = RoleEnum.CUSTOMER) @Auth(role = RoleEnum.CUSTOMER)
public ResponseResult getLoginInfo() { public ResponseResult getLoginInfo() {
return ResponseResult.success(UserThreadLocal.get()); return ResponseResult.success(UserService.getLoginInfo());
} }
@ApiOperation("重置绑定关系(本地测试)") @ApiOperation("重置绑定关系(本地测试)")
...@@ -59,7 +58,7 @@ public class LoginController extends BaseController { ...@@ -59,7 +58,7 @@ public class LoginController extends BaseController {
@ApiImplicitParam(name = "username", value = "用户名", required = false, paramType = "query", dataType = "string")) @ApiImplicitParam(name = "username", value = "用户名", required = false, paramType = "query", dataType = "string"))
@PostMapping("/user/bind/reset") @PostMapping("/user/bind/reset")
public ResponseResult resetBind(@RequestBody JSONObject json) { public ResponseResult resetBind(@RequestBody JSONObject json) {
iUserService.resetBind(json.getString("username")); UserService.resetBind(json.getString("username"));
return ResponseResult.success(); return ResponseResult.success();
} }
...@@ -71,25 +70,31 @@ public class LoginController extends BaseController { ...@@ -71,25 +70,31 @@ public class LoginController extends BaseController {
public ResponseResult bindUser(@RequestBody JSONObject json) { public ResponseResult bindUser(@RequestBody JSONObject json) {
String username = json.getString("username"); String username = json.getString("username");
String password = json.getString("password"); String password = json.getString("password");
return ResponseResult.success(iUserService.bindUser(username, password)); return ResponseResult.success(UserService.bindUser(username, password));
} }
@ApiOperation("跳过绑定(赋默认权限)") @ApiOperation("跳过绑定(赋默认权限)")
@PostMapping("/user/bind/skip") @PostMapping("/user/bind/skip")
public ResponseResult skipBindUser() { public ResponseResult skipBindUser() {
return ResponseResult.success(iUserService.skipBindUser()); return ResponseResult.success(UserService.skipBindUser());
} }
@ApiOperation("校验用户是否已有绑定关系") @ApiOperation("校验用户是否已有绑定关系")
@GetMapping("/user/login/checkBind") @GetMapping("/user/login/checkBind")
public ResponseResult checkBind() { public ResponseResult checkBind() {
return ResponseResult.success(iUserService.checkUserRoles()); return ResponseResult.success(UserService.checkUserRoles());
} }
@ApiOperation("获取当前用户拥有的所有项目(含过期)") @ApiOperation("获取当前用户拥有的所有项目(含过期)")
@GetMapping("/user/login/getUserAllProjects") @GetMapping("/user/login/getUserAllProjects")
public ResponseResult getLoginUserAllProjects() { public ResponseResult getLoginUserAllProjects() {
return ResponseResult.success(iProjectService.getLoginUserAllProjects()); return ResponseResult.success(ProjectService.getLoginUserAllProjects());
}
@ApiOperation("测试接口")
@GetMapping("/test")
public ResponseResult test() {
return ResponseResult.success("brandkbs2-success 2022/7/8");
} }
} }
......
...@@ -6,9 +6,10 @@ import com.zhiwei.brandkbs2.auth.UserThreadLocal; ...@@ -6,9 +6,10 @@ import com.zhiwei.brandkbs2.auth.UserThreadLocal;
import com.zhiwei.brandkbs2.controller.BaseController; import com.zhiwei.brandkbs2.controller.BaseController;
import com.zhiwei.brandkbs2.enmus.RoleEnum; import com.zhiwei.brandkbs2.enmus.RoleEnum;
import com.zhiwei.brandkbs2.model.ResponseResult; import com.zhiwei.brandkbs2.model.ResponseResult;
import com.zhiwei.brandkbs2.pojo.AbstractProject;
import com.zhiwei.brandkbs2.pojo.Behavior; import com.zhiwei.brandkbs2.pojo.Behavior;
import com.zhiwei.brandkbs2.service.IBehaviorService; import com.zhiwei.brandkbs2.service.BehaviorService;
import com.zhiwei.brandkbs2.service.IProjectService; import com.zhiwei.brandkbs2.service.ProjectService;
import com.zhiwei.brandkbs2.util.Tools; import com.zhiwei.brandkbs2.util.Tools;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
...@@ -40,7 +41,7 @@ import java.util.Map; ...@@ -40,7 +41,7 @@ import java.util.Map;
*/ */
@RestController @RestController
@RequestMapping("/admin/article") @RequestMapping("/admin/article")
@Api(tags = "稿件上传接口", description = "提供稿件的上传功能") @Api(tags = "稿件上传", description = "提供稿件的上传功能")
@Auth(role = RoleEnum.COMMON_ADMIN) @Auth(role = RoleEnum.COMMON_ADMIN)
public class ArticleController extends BaseController { public class ArticleController extends BaseController {
public static final Logger log = LogManager.getLogger(ArticleController.class); public static final Logger log = LogManager.getLogger(ArticleController.class);
...@@ -55,23 +56,24 @@ public class ArticleController extends BaseController { ...@@ -55,23 +56,24 @@ public class ArticleController extends BaseController {
private RestTemplate restTemplate; private RestTemplate restTemplate;
@javax.annotation.Resource(name = "behaviorServiceImpl") @javax.annotation.Resource(name = "behaviorServiceImpl")
private IBehaviorService behaviorService; private BehaviorService behaviorService;
@javax.annotation.Resource(name = "projectServiceImpl") @javax.annotation.Resource(name = "projectServiceImpl")
private IProjectService projectService; private ProjectService projectService;
private static final Behavior.Operation OPERATION = new Behavior.Operation("稿件上传", true); private static final Behavior.Operation OPERATION = new Behavior.Operation("稿件上传", true);
@ApiOperation("稿件上传-稿件模板下载") @ApiOperation("稿件上传-稿件模板下载")
@ApiImplicitParams(@ApiImplicitParam(name = "linkedGroupId", value = "绑定项目组名", required = true, paramType = "query", dataType = "string")) @ApiImplicitParams(@ApiImplicitParam(name = "contendId", value = "品牌id", paramType = "query", dataType = "string"))
@GetMapping("/upload/template/form") @GetMapping("/upload/template/form")
public ResponseResult downloadTemplateForm(@RequestParam String linkedGroupId) { public ResponseResult downloadTemplateForm(@RequestParam(defaultValue = "0") String contendId) {
try { try {
String group = projectService.getProjectByLinkedGroupId(linkedGroupId).getBrandLinkedGroup(); AbstractProject project = projectService.getProjectByContendId(UserThreadLocal.getProjectId(), contendId);
HttpEntity<String> requestEntity = new HttpEntity<>(getHeaders()); HttpEntity<String> requestEntity = new HttpEntity<>(getHeaders());
HttpEntity<Resource> entity = restTemplate.exchange(yuqingInterface + "/upload/template/form?project=" + group, HttpMethod.GET, requestEntity, Resource.class); HttpEntity<Resource> entity = restTemplate.exchange(yuqingInterface + "/upload/template/form?projectId=" + project.getBrandLinkedGroupId(), HttpMethod.GET,
requestEntity, Resource.class);
if (null != entity.getBody()) { if (null != entity.getBody()) {
Tools.download(entity.getBody().getInputStream(), response.getOutputStream(), group + "_稿件模板", response); Tools.download(entity.getBody().getInputStream(), response.getOutputStream(), project.getBrandName() + "_稿件模板", response);
} }
return ResponseResult.success(); return ResponseResult.success();
} catch (Exception e) { } catch (Exception e) {
...@@ -125,16 +127,18 @@ public class ArticleController extends BaseController { ...@@ -125,16 +127,18 @@ public class ArticleController extends BaseController {
@ApiOperation("稿件上传-获取列表") @ApiOperation("稿件上传-获取列表")
@ApiImplicitParams({@ApiImplicitParam(name = "page", value = "页码", defaultValue = "1", paramType = "query", dataType = "int"), @ApiImplicitParam(name = "pageSize", value = "每页记录数", defaultValue = "10", paramType = "query", dataType = "int"), @ApiImplicitParams({@ApiImplicitParam(name = "page", value = "页码", defaultValue = "1", paramType = "query", dataType = "int"), @ApiImplicitParam(name = "pageSize", value = "每页记录数", defaultValue = "10", paramType = "query", dataType = "int"),
@ApiImplicitParam(name = "linkedGroupId", value = "绑定项目组ID", required = true, paramType = "query", dataType = "string")}) @ApiImplicitParam(name = "contendId", value = "品牌id", paramType = "query", dataType = "string")})
@GetMapping("/upload/list") @GetMapping("/upload/list")
public ResponseResult getList(@RequestParam(value = "linkedGroupId") String linkedGroupId, @RequestParam(value = "page", defaultValue = "1") int page, @RequestParam(value = "pageSize", defaultValue = "10") int pageSize) { public ResponseResult getList(@RequestParam(value = "contendId", defaultValue = "0") String contendId, @RequestParam(value = "page", defaultValue = "1") int page,
@RequestParam(value = "pageSize", defaultValue = "10") int pageSize) {
try { try {
Map<String, Object> params = new HashMap<>(); Map<String, Object> params = new HashMap<>();
params.put("page", page); params.put("page", page);
params.put("pageSize", pageSize); params.put("pageSize", pageSize);
params.put("project", projectService.getProjectByLinkedGroupId(linkedGroupId).getBrandLinkedGroup()); params.put("projectId", projectService.getProjectByContendId(UserThreadLocal.getProjectId(), contendId).getBrandLinkedGroupId());
HttpEntity<JSONObject> requestEntity = new HttpEntity<>(getHeaders()); HttpEntity<JSONObject> requestEntity = new HttpEntity<>(getHeaders());
HttpEntity<JSONObject> entity = restTemplate.exchange(yuqingInterface + "/upload/list?page={page}&pageSize={pageSize}&project={project}", HttpMethod.GET, requestEntity, JSONObject.class, params); HttpEntity<JSONObject> entity = restTemplate.exchange(yuqingInterface + "/upload/list?page={page}&pageSize={pageSize}&projectId={projectId}",
HttpMethod.GET, requestEntity, JSONObject.class, params);
return ResponseResult.convertFromYuQingInterface(entity.getBody(), pageSize); return ResponseResult.convertFromYuQingInterface(entity.getBody(), pageSize);
} catch (Exception e) { } catch (Exception e) {
log.error("稿件上传-获取列表异常", e); log.error("稿件上传-获取列表异常", e);
...@@ -158,9 +162,9 @@ public class ArticleController extends BaseController { ...@@ -158,9 +162,9 @@ public class ArticleController extends BaseController {
@ApiOperation("稿件上传-上传表格") @ApiOperation("稿件上传-上传表格")
@ApiImplicitParams({@ApiImplicitParam(name = "file", value = "上传表格", required = true, paramType = "form", dataType = "multipartFile"), @ApiImplicitParams({@ApiImplicitParam(name = "file", value = "上传表格", required = true, paramType = "form", dataType = "multipartFile"),
@ApiImplicitParam(name = "linkedGroupId", value = "绑定项目组ID", required = true, paramType = "form", dataType = "string")}) @ApiImplicitParam(name = "contendId", value = "品牌id", paramType = "form", dataType = "string")})
@PostMapping(value = "/upload/form", headers = "content-type=multipart/form-data") @PostMapping(value = "/upload/form", headers = "content-type=multipart/form-data")
public ResponseResult uploadForm(@RequestParam("file") MultipartFile file, @RequestParam String linkedGroupId) { public ResponseResult uploadForm(@RequestParam("file") MultipartFile file, @RequestParam(defaultValue = "0") String contendId) {
try { try {
MultiValueMap<String, Object> requestMap = new LinkedMultiValueMap<>(1); MultiValueMap<String, Object> requestMap = new LinkedMultiValueMap<>(1);
ByteArrayResource byteArrayResource = new ByteArrayResource(file.getBytes()) { ByteArrayResource byteArrayResource = new ByteArrayResource(file.getBytes()) {
...@@ -171,10 +175,10 @@ public class ArticleController extends BaseController { ...@@ -171,10 +175,10 @@ public class ArticleController extends BaseController {
}; };
requestMap.add("file", byteArrayResource); requestMap.add("file", byteArrayResource);
requestMap.add("nickName", UserThreadLocal.getNickname()); requestMap.add("nickName", UserThreadLocal.getNickname());
requestMap.add("project", projectService.getProjectByLinkedGroupId(linkedGroupId).getBrandLinkedGroup()); requestMap.add("projectId", projectService.getProjectByContendId(UserThreadLocal.getProjectId(), contendId).getBrandLinkedGroupId());
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(requestMap, getHeadersForm()); HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(requestMap, getHeadersForm());
HttpEntity<JSONObject> entity = restTemplate.exchange(yuqingInterface + "/upload/form", HttpMethod.POST, requestEntity, JSONObject.class); HttpEntity<JSONObject> entity = restTemplate.exchange(yuqingInterface + "/upload/form", HttpMethod.POST, requestEntity, JSONObject.class);
behaviorService.pushBehavior(OPERATION, "上传表格", request); behaviorService.pushBehaviorOld(OPERATION, "上传表格", request);
return ResponseResult.convertFromYuQingInterface(entity.getBody(), null); return ResponseResult.convertFromYuQingInterface(entity.getBody(), null);
} catch (Exception e) { } catch (Exception e) {
log.error("稿件上传-上传表格异常", e); log.error("稿件上传-上传表格异常", e);
......
...@@ -10,9 +10,9 @@ import com.zhiwei.brandkbs2.enmus.RoleEnum; ...@@ -10,9 +10,9 @@ import com.zhiwei.brandkbs2.enmus.RoleEnum;
import com.zhiwei.brandkbs2.model.ResponseResult; import com.zhiwei.brandkbs2.model.ResponseResult;
import com.zhiwei.brandkbs2.pojo.dto.TagFilterDTO; import com.zhiwei.brandkbs2.pojo.dto.TagFilterDTO;
import com.zhiwei.brandkbs2.pojo.vo.ProjectVO; import com.zhiwei.brandkbs2.pojo.vo.ProjectVO;
import com.zhiwei.brandkbs2.service.IHighWordService; import com.zhiwei.brandkbs2.service.HighWordService;
import com.zhiwei.brandkbs2.service.IProjectService; import com.zhiwei.brandkbs2.service.ProjectService;
import com.zhiwei.brandkbs2.service.ITagFilterService; import com.zhiwei.brandkbs2.service.TagFilterService;
import com.zhiwei.brandkbs2.util.Tools; import com.zhiwei.brandkbs2.util.Tools;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
...@@ -37,13 +37,13 @@ import java.util.List; ...@@ -37,13 +37,13 @@ import java.util.List;
public class BaseModuleController extends BaseController { public class BaseModuleController extends BaseController {
@Resource(name = "tagFilterServiceImpl") @Resource(name = "tagFilterServiceImpl")
ITagFilterService tagFilterService; TagFilterService tagFilterService;
@Resource(name = "highWordServiceImpl") @Resource(name = "highWordServiceImpl")
IHighWordService highWordService; HighWordService highWordService;
@Resource(name = "projectServiceImpl") @Resource(name = "projectServiceImpl")
IProjectService projectService; ProjectService projectService;
@ApiOperation("获取在用筛选器列表") @ApiOperation("获取在用筛选器列表")
@GetMapping("/tagFilter") @GetMapping("/tagFilter")
......
...@@ -7,8 +7,8 @@ import com.zhiwei.brandkbs2.easyexcel.EasyExcelUtil; ...@@ -7,8 +7,8 @@ import com.zhiwei.brandkbs2.easyexcel.EasyExcelUtil;
import com.zhiwei.brandkbs2.easyexcel.dto.ExportBehaviorDTO; import com.zhiwei.brandkbs2.easyexcel.dto.ExportBehaviorDTO;
import com.zhiwei.brandkbs2.enmus.RoleEnum; import com.zhiwei.brandkbs2.enmus.RoleEnum;
import com.zhiwei.brandkbs2.model.ResponseResult; import com.zhiwei.brandkbs2.model.ResponseResult;
import com.zhiwei.brandkbs2.service.IBehaviorService; import com.zhiwei.brandkbs2.service.BehaviorService;
import com.zhiwei.brandkbs2.service.IProjectService; import com.zhiwei.brandkbs2.service.ProjectService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiImplicitParams;
...@@ -29,20 +29,20 @@ import java.util.List; ...@@ -29,20 +29,20 @@ import java.util.List;
*/ */
@RestController @RestController
@RequestMapping("/admin/behavior") @RequestMapping("/admin/behavior")
@Api(tags = "用户行为管理接口", description = "提供用户行为的查询和导出功能") @Api(tags = "用户行为管理", description = "提供用户行为的查询和导出功能")
@Auth(role = RoleEnum.COMMON_ADMIN) @Auth(role = RoleEnum.COMMON_ADMIN)
public class BehaviorController extends BaseController { public class BehaviorController extends BaseController {
@Resource(name = "behaviorServiceImpl") @Resource(name = "behaviorServiceImpl")
private IBehaviorService behaviorService; private BehaviorService behaviorService;
@Resource(name = "projectServiceImpl") @Resource(name = "projectServiceImpl")
private IProjectService iProjectService; private ProjectService ProjectService;
@ApiOperation("分页查询用户行为列表") @ApiOperation("分页查询用户行为列表")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "page", value = "页码", defaultValue = "1", paramType = "query", dataType = "int"), @ApiImplicitParam(name = "page", value = "页码", defaultValue = "1", paramType = "query", dataType = "int"),
@ApiImplicitParam(name = "size", value = "每页记录数", defaultValue = "10", paramType = "query", dataType = "int"), @ApiImplicitParam(name = "pageSize", value = "每页记录数", defaultValue = "10", paramType = "query", dataType = "int"),
@ApiImplicitParam(name = "startTime", value = "开始时间", required = true, paramType = "query", dataType = "long"), @ApiImplicitParam(name = "startTime", value = "开始时间", required = true, paramType = "query", dataType = "long"),
@ApiImplicitParam(name = "endTime", value = "结束时间", required = true, paramType = "query", dataType = "long"), @ApiImplicitParam(name = "endTime", value = "结束时间", required = true, paramType = "query", dataType = "long"),
@ApiImplicitParam(name = "behavior", value = "行为所属(前台=false,后台=true)", defaultValue = "true", paramType = "query", dataType = @ApiImplicitParam(name = "behavior", value = "行为所属(前台=false,后台=true)", defaultValue = "true", paramType = "query", dataType =
...@@ -51,12 +51,12 @@ public class BehaviorController extends BaseController { ...@@ -51,12 +51,12 @@ public class BehaviorController extends BaseController {
}) })
@GetMapping("/list") @GetMapping("/list")
public ResponseResult findList(@RequestParam(value = "page", defaultValue = "1") int page, public ResponseResult findList(@RequestParam(value = "page", defaultValue = "1") int page,
@RequestParam(value = "size", defaultValue = "10") int size, @RequestParam(value = "pageSize", defaultValue = "10") int pageSize,
@RequestParam("startTime") long startTime, @RequestParam("startTime") long startTime,
@RequestParam("endTime") long endTime, @RequestParam("endTime") long endTime,
@RequestParam(value = "behavior", defaultValue = "true") boolean behavior, @RequestParam(value = "behavior", defaultValue = "true") boolean behavior,
@RequestParam(value = "keyword", defaultValue = "") String keyword) { @RequestParam(value = "keyword", defaultValue = "") String keyword) {
return ResponseResult.success(behaviorService.findBehaviorList(page, size, startTime, endTime, behavior, keyword)); return ResponseResult.success(behaviorService.findBehaviorList(page, pageSize, startTime, endTime, behavior, keyword));
} }
@ApiOperation("导出用户行为列表") @ApiOperation("导出用户行为列表")
...@@ -72,7 +72,7 @@ public class BehaviorController extends BaseController { ...@@ -72,7 +72,7 @@ public class BehaviorController extends BaseController {
@RequestParam(value = "behavior", defaultValue = "true") boolean behavior) { @RequestParam(value = "behavior", defaultValue = "true") boolean behavior) {
List<ExportBehaviorDTO> downloadList = behaviorService.download(startTime, endTime, behavior); List<ExportBehaviorDTO> downloadList = behaviorService.download(startTime, endTime, behavior);
String behaviorName = behavior ? "后台" : "前台"; String behaviorName = behavior ? "后台" : "前台";
String sheetName = iProjectService.getProjectVOById(UserThreadLocal.getProjectId()).getProjectName() + "_" + behaviorName; String sheetName = ProjectService.getProjectVOById(UserThreadLocal.getProjectId()).getProjectName() + "_" + behaviorName;
EasyExcelUtil.download(sheetName + "用户行为", sheetName, ExportBehaviorDTO.class, downloadList, response); EasyExcelUtil.download(sheetName + "用户行为", sheetName, ExportBehaviorDTO.class, downloadList, response);
return ResponseResult.success(); return ResponseResult.success();
} }
......
...@@ -2,6 +2,7 @@ package com.zhiwei.brandkbs2.controller.admin; ...@@ -2,6 +2,7 @@ package com.zhiwei.brandkbs2.controller.admin;
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.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.ExportAdminChannelArticleDTO; import com.zhiwei.brandkbs2.easyexcel.dto.ExportAdminChannelArticleDTO;
...@@ -12,8 +13,8 @@ import com.zhiwei.brandkbs2.enmus.RoleEnum; ...@@ -12,8 +13,8 @@ import com.zhiwei.brandkbs2.enmus.RoleEnum;
import com.zhiwei.brandkbs2.model.ResponseResult; import com.zhiwei.brandkbs2.model.ResponseResult;
import com.zhiwei.brandkbs2.pojo.dto.ChannelDTO; import com.zhiwei.brandkbs2.pojo.dto.ChannelDTO;
import com.zhiwei.brandkbs2.pojo.vo.PageVO; import com.zhiwei.brandkbs2.pojo.vo.PageVO;
import com.zhiwei.brandkbs2.service.IChannelService; import com.zhiwei.brandkbs2.service.ChannelService;
import com.zhiwei.brandkbs2.service.IProjectService; import com.zhiwei.brandkbs2.service.ProjectService;
import com.zhiwei.brandkbs2.util.Tools; import com.zhiwei.brandkbs2.util.Tools;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
...@@ -36,15 +37,15 @@ import java.util.stream.Collectors; ...@@ -36,15 +37,15 @@ import java.util.stream.Collectors;
*/ */
@RestController @RestController
@RequestMapping("/admin/channel") @RequestMapping("/admin/channel")
@Api(tags = "渠道模块接口", description = "提供渠道相关功能") @Api(tags = "渠道管理", description = "提供渠道相关功能")
@Auth(role = RoleEnum.COMMON_ADMIN) @Auth(role = RoleEnum.COMMON_ADMIN)
public class ChannelController extends BaseController { public class ChannelController extends BaseController {
@Resource(name = "channelServiceImpl") @Resource(name = "channelServiceImpl")
IChannelService channelService; ChannelService channelService;
@Resource(name = "projectServiceImpl") @Resource(name = "projectServiceImpl")
IProjectService projectService; ProjectService projectService;
@Value("${brandkbs.img.url}") @Value("${brandkbs.img.url}")
private String brandkbsImgPath; private String brandkbsImgPath;
...@@ -56,7 +57,7 @@ public class ChannelController extends BaseController { ...@@ -56,7 +57,7 @@ public class ChannelController extends BaseController {
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "page", value = "页码", defaultValue = "1", paramType = "query", dataType = "int"), @ApiImplicitParam(name = "page", value = "页码", defaultValue = "1", paramType = "query", dataType = "int"),
@ApiImplicitParam(name = "pageSize", value = "每页记录数", defaultValue = "10", paramType = "query", dataType = "int"), @ApiImplicitParam(name = "pageSize", value = "每页记录数", defaultValue = "10", paramType = "query", dataType = "int"),
@ApiImplicitParam(name = "linkedGroupId", value = "关联项目组ID", required = true, paramType = "query", dataType = "string"), @ApiImplicitParam(name = "contendId", value = "品牌id", required = false, paramType = "query", dataType = "string"),
@ApiImplicitParam(name = "emotion", value = "倾向筛选", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "emotion", value = "倾向筛选", paramType = "query", dataType = "string"),
@ApiImplicitParam(name = "platform", value = "平台筛选", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "platform", value = "平台筛选", paramType = "query", dataType = "string"),
@ApiImplicitParam(name = "show", value = "是否展示", paramType = "query", dataType = "Boolean"), @ApiImplicitParam(name = "show", value = "是否展示", paramType = "query", dataType = "Boolean"),
...@@ -66,13 +67,13 @@ public class ChannelController extends BaseController { ...@@ -66,13 +67,13 @@ public class ChannelController extends BaseController {
@GetMapping("/list") @GetMapping("/list")
public ResponseResult findChannelList(@RequestParam(value = "page", defaultValue = "1") int page, public ResponseResult findChannelList(@RequestParam(value = "page", defaultValue = "1") int page,
@RequestParam(value = "pageSize", defaultValue = "10") int size, @RequestParam(value = "pageSize", defaultValue = "10") int size,
@RequestParam(value = "linkedGroupId") String linkedGroupId, @RequestParam(value = "contendId",defaultValue = "0") String contendId,
@RequestParam(value = "emotion", defaultValue = "") String emotion, @RequestParam(value = "emotion", defaultValue = "") String emotion,
@RequestParam(value = "platform", defaultValue = "") String platform, @RequestParam(value = "platform", defaultValue = "") String platform,
@RequestParam(value = "show", required = false) Boolean show, @RequestParam(value = "show", required = false) Boolean show,
@RequestParam(value = "keyword", defaultValue = "") String keyword, @RequestParam(value = "keyword", defaultValue = "") String keyword,
@RequestParam(value = "sorter", defaultValue = "{\"lastTime\":\"descend\"}") String sorter) { @RequestParam(value = "sorter", defaultValue = "{\"lastTime\":\"descend\"}") String sorter) {
PageVO<JSONObject> channelList = channelService.findChannelList(page, size, linkedGroupId, emotion, platform, show, keyword, sorter); PageVO<JSONObject> channelList = channelService.findChannelList(page, size, contendId, emotion, platform, show, keyword, sorter);
return ResponseResult.success(channelList); return ResponseResult.success(channelList);
} }
...@@ -152,20 +153,20 @@ public class ChannelController extends BaseController { ...@@ -152,20 +153,20 @@ public class ChannelController extends BaseController {
@ApiOperation("下载渠道列表") @ApiOperation("下载渠道列表")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "linkedGroupId", value = "关联项目组ID", required = true, paramType = "query", dataType = "string"), @ApiImplicitParam(name = "contendId", value = "品牌id", required = true, paramType = "query", dataType = "string"),
@ApiImplicitParam(name = "emotion", value = "倾向筛选", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "emotion", value = "倾向筛选", paramType = "query", dataType = "string"),
@ApiImplicitParam(name = "platform", value = "平台筛选", paramType = "query", dataType = "string"), @ApiImplicitParam(name = "platform", value = "平台筛选", paramType = "query", dataType = "string"),
@ApiImplicitParam(name = "show", value = "是否展示", paramType = "query", dataType = "boolean"), @ApiImplicitParam(name = "show", value = "是否展示", paramType = "query", dataType = "boolean"),
@ApiImplicitParam(name = "keyword", value = "关键字搜索", paramType = "query", dataType = "string") @ApiImplicitParam(name = "keyword", value = "关键字搜索", paramType = "query", dataType = "string")
}) })
@GetMapping("/list/download") @GetMapping("/list/download")
public ResponseResult downloadChannelList(@RequestParam(value = "linkedGroupId") String linkedGroupId, public ResponseResult downloadChannelList(@RequestParam(value = "contendId",defaultValue = "0") String contendId,
@RequestParam(value = "emotion", defaultValue = "") String emotion, @RequestParam(value = "emotion", defaultValue = "") String emotion,
@RequestParam(value = "platform", defaultValue = "") String platform, @RequestParam(value = "platform", defaultValue = "") String platform,
@RequestParam(value = "show", required = false) Boolean show, @RequestParam(value = "show", required = false) Boolean show,
@RequestParam(value = "keyword", defaultValue = "") String keyword) { @RequestParam(value = "keyword", defaultValue = "") String keyword) {
List<ExportChannelDTO> downloadChannelList = channelService.findDownloadChannelList(linkedGroupId, emotion, platform, show, keyword); List<ExportChannelDTO> downloadChannelList = channelService.findDownloadChannelList(contendId, emotion, platform, show, keyword);
String brandName = projectService.getProjectByLinkedGroupId(linkedGroupId).getBrandName(); String brandName = projectService.getProjectByContendId(UserThreadLocal.getProjectId(), contendId).getBrandName();
EasyExcelUtil.download(brandName + "_渠道列表数据", brandName, ExportChannelDTO.class, downloadChannelList, response); EasyExcelUtil.download(brandName + "_渠道列表数据", brandName, ExportChannelDTO.class, downloadChannelList, response);
return ResponseResult.success(); return ResponseResult.success();
} }
......
...@@ -6,8 +6,8 @@ import com.zhiwei.brandkbs2.controller.BaseController; ...@@ -6,8 +6,8 @@ import com.zhiwei.brandkbs2.controller.BaseController;
import com.zhiwei.brandkbs2.enmus.RoleEnum; import com.zhiwei.brandkbs2.enmus.RoleEnum;
import com.zhiwei.brandkbs2.model.ResponseResult; import com.zhiwei.brandkbs2.model.ResponseResult;
import com.zhiwei.brandkbs2.pojo.Behavior; import com.zhiwei.brandkbs2.pojo.Behavior;
import com.zhiwei.brandkbs2.service.IBehaviorService; import com.zhiwei.brandkbs2.service.BehaviorService;
import com.zhiwei.brandkbs2.service.ICustomTagService; import com.zhiwei.brandkbs2.service.CustomTagService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiImplicitParams;
...@@ -28,15 +28,15 @@ import static com.alibaba.fastjson.JSON.parseArray; ...@@ -28,15 +28,15 @@ import static com.alibaba.fastjson.JSON.parseArray;
*/ */
@RestController @RestController
@RequestMapping("/admin/custom") @RequestMapping("/admin/custom")
@Api(tags = "自定义标签管理接口", description = "提供自定义标签的增、删、改、查") @Api(tags = "自定义标签管理", description = "提供自定义标签的增、删、改、查")
@Auth(role = RoleEnum.COMMON_ADMIN) @Auth(role = RoleEnum.COMMON_ADMIN)
public class CustomTagController extends BaseController { public class CustomTagController extends BaseController {
@Resource(name = "customTagServiceImpl") @Resource(name = "customTagServiceImpl")
private ICustomTagService customTagService; private CustomTagService customTagService;
@Resource(name = "behaviorServiceImpl") @Resource(name = "behaviorServiceImpl")
private IBehaviorService behaviorService; private BehaviorService behaviorService;
private static final Behavior.Operation OPERATION = new Behavior.Operation("自定义标签管理", true); private static final Behavior.Operation OPERATION = new Behavior.Operation("自定义标签管理", true);
...@@ -53,7 +53,7 @@ public class CustomTagController extends BaseController { ...@@ -53,7 +53,7 @@ public class CustomTagController extends BaseController {
public ResponseResult addCustomTag(@ApiIgnore @RequestBody JSONObject json) { public ResponseResult addCustomTag(@ApiIgnore @RequestBody JSONObject json) {
customTagService.addCustomTag(json.getString("tagName"), parseArray(json.getString("sonTagNames"), String.class)); customTagService.addCustomTag(json.getString("tagName"), parseArray(json.getString("sonTagNames"), String.class));
// 添加用户行为 // 添加用户行为
behaviorService.pushBehavior(OPERATION, "添加自定义标签", request); behaviorService.pushBehaviorOld(OPERATION, "添加自定义标签", request);
return ResponseResult.success(); return ResponseResult.success();
} }
...@@ -66,7 +66,7 @@ public class CustomTagController extends BaseController { ...@@ -66,7 +66,7 @@ public class CustomTagController extends BaseController {
String tagId = json.getString("tagId"); String tagId = json.getString("tagId");
customTagService.updateCustomTag(tagName, sonTagNames, tagId); customTagService.updateCustomTag(tagName, sonTagNames, tagId);
// 添加用户行为 // 添加用户行为
behaviorService.pushBehavior(OPERATION, "修改自定义标签", request); behaviorService.pushBehaviorOld(OPERATION, "修改自定义标签", request);
return ResponseResult.success(); return ResponseResult.success();
} }
...@@ -77,7 +77,7 @@ public class CustomTagController extends BaseController { ...@@ -77,7 +77,7 @@ public class CustomTagController extends BaseController {
public ResponseResult deleteCustomTag(@PathVariable String tagId) { public ResponseResult deleteCustomTag(@PathVariable String tagId) {
customTagService.deleteCustomTagByTagId(tagId); customTagService.deleteCustomTagByTagId(tagId);
// 添加用户行为 // 添加用户行为
behaviorService.pushBehavior(OPERATION, "删除自定义标签", request); behaviorService.pushBehaviorOld(OPERATION, "删除自定义标签", request);
return ResponseResult.success(); return ResponseResult.success();
} }
} }
...@@ -11,9 +11,9 @@ import com.zhiwei.brandkbs2.enmus.RoleEnum; ...@@ -11,9 +11,9 @@ import com.zhiwei.brandkbs2.enmus.RoleEnum;
import com.zhiwei.brandkbs2.model.ResponseResult; import com.zhiwei.brandkbs2.model.ResponseResult;
import com.zhiwei.brandkbs2.pojo.Behavior; 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.IBehaviorService; import com.zhiwei.brandkbs2.service.BehaviorService;
import com.zhiwei.brandkbs2.service.ICommonService; import com.zhiwei.brandkbs2.service.CommonService;
import com.zhiwei.brandkbs2.service.IProjectService; import com.zhiwei.brandkbs2.service.ProjectService;
import com.zhiwei.brandkbs2.util.Tools; import com.zhiwei.brandkbs2.util.Tools;
import com.zhiwei.middleware.mark.vo.MarkerTag; import com.zhiwei.middleware.mark.vo.MarkerTag;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
...@@ -42,7 +42,7 @@ import java.util.stream.Collectors; ...@@ -42,7 +42,7 @@ import java.util.stream.Collectors;
*/ */
@RestController @RestController
@RequestMapping("/admin/project") @RequestMapping("/admin/project")
@Api(tags = "项目管理接口", description = "提供项目的增、删、改、查") @Api(tags = "项目管理", description = "提供项目的增、删、改、查")
@Auth(role = RoleEnum.SUPER_ADMIN) @Auth(role = RoleEnum.SUPER_ADMIN)
public class ProjectController extends BaseController { public class ProjectController extends BaseController {
...@@ -50,13 +50,13 @@ public class ProjectController extends BaseController { ...@@ -50,13 +50,13 @@ public class ProjectController extends BaseController {
private RestTemplate restTemplate; private RestTemplate restTemplate;
@Resource(name = "projectServiceImpl") @Resource(name = "projectServiceImpl")
private IProjectService iProjectService; private ProjectService ProjectService;
@Resource(name = "behaviorServiceImpl") @Resource(name = "behaviorServiceImpl")
private IBehaviorService behaviorService; private BehaviorService behaviorService;
@Resource(name = "commonServiceImpl") @Resource(name = "commonServiceImpl")
private ICommonService commonService; private CommonService commonService;
private static final Behavior.Operation OPERATION = new Behavior.Operation("项目管理", true); private static final Behavior.Operation OPERATION = new Behavior.Operation("项目管理", true);
...@@ -75,8 +75,8 @@ public class ProjectController extends BaseController { ...@@ -75,8 +75,8 @@ public class ProjectController extends BaseController {
@ApiOperation("添加项目配置") @ApiOperation("添加项目配置")
@PostMapping("/add") @PostMapping("/add")
public ResponseResult addProject(@RequestBody ProjectVO projectVO) { public ResponseResult addProject(@RequestBody ProjectVO projectVO) {
iProjectService.addProject(projectVO); ProjectService.addProject(projectVO);
behaviorService.pushBehavior(OPERATION, "添加项目配置:" + projectVO.getId(), request); behaviorService.pushBehaviorOld(OPERATION, "添加项目配置:" + projectVO.getId(), request);
return ResponseResult.success(); return ResponseResult.success();
} }
...@@ -85,15 +85,15 @@ public class ProjectController extends BaseController { ...@@ -85,15 +85,15 @@ public class ProjectController extends BaseController {
@ApiImplicitParam(name = "size", value = "每页记录数", required = false, defaultValue = "10", paramType = "query", dataType = "int"), @ApiImplicitParam(name = "keyword", value = "搜索关键字", required = false, defaultValue = "", paramType = "query", dataType = "string")}) @ApiImplicitParam(name = "size", value = "每页记录数", required = false, defaultValue = "10", paramType = "query", dataType = "int"), @ApiImplicitParam(name = "keyword", value = "搜索关键字", required = false, defaultValue = "", paramType = "query", dataType = "string")})
@GetMapping("/list") @GetMapping("/list")
public ResponseResult findProjectList(@RequestParam(value = "page", defaultValue = "1") int page, @RequestParam(value = "size", defaultValue = "10") int size, @RequestParam(value = "keyword", defaultValue = "") String keyword) { public ResponseResult findProjectList(@RequestParam(value = "page", defaultValue = "1") int page, @RequestParam(value = "size", defaultValue = "10") int size, @RequestParam(value = "keyword", defaultValue = "") String keyword) {
return ResponseResult.success(iProjectService.findProjectList(page, size, keyword)); return ResponseResult.success(ProjectService.findProjectList(page, size, keyword));
} }
@ApiOperation("修改项目") @ApiOperation("修改项目")
@PutMapping("/update") @PutMapping("/update")
public ResponseResult updateProject(@RequestBody ProjectVO projectVO) { public ResponseResult updateProject(@RequestBody ProjectVO projectVO) {
iProjectService.updateProject(projectVO); ProjectService.updateProject(projectVO);
behaviorService.pushBehavior(OPERATION, "修改项目:" + projectVO.getId(), request); behaviorService.pushBehaviorOld(OPERATION, "修改项目:" + projectVO.getId(), request);
return ResponseResult.success(); return ResponseResult.success();
} }
...@@ -101,8 +101,8 @@ public class ProjectController extends BaseController { ...@@ -101,8 +101,8 @@ public class ProjectController extends BaseController {
@ApiImplicitParam(name = "pid", value = "项目ID", required = true, paramType = "path", dataType = "string") @ApiImplicitParam(name = "pid", value = "项目ID", required = true, paramType = "path", dataType = "string")
@DeleteMapping("/delete/{pid}") @DeleteMapping("/delete/{pid}")
public ResponseResult deleteProject(@PathVariable("pid") String pid) { public ResponseResult deleteProject(@PathVariable("pid") String pid) {
iProjectService.deleteProject(pid, UserThreadLocal.getProjectId()); ProjectService.deleteProject(pid, UserThreadLocal.getProjectId());
behaviorService.pushBehavior(OPERATION, "删除项目:" + pid, request); behaviorService.pushBehaviorOld(OPERATION, "删除项目:" + pid, request);
return ResponseResult.success(); return ResponseResult.success();
} }
...@@ -110,9 +110,9 @@ public class ProjectController extends BaseController { ...@@ -110,9 +110,9 @@ public class ProjectController extends BaseController {
@ApiImplicitParam(name = "pid", value = "项目ID", required = true, paramType = "path", dataType = "string") @ApiImplicitParam(name = "pid", value = "项目ID", required = true, paramType = "path", dataType = "string")
@PutMapping("/switch/projectShow/{pid}") @PutMapping("/switch/projectShow/{pid}")
public ResponseResult switchProjectShow(@PathVariable String pid) { public ResponseResult switchProjectShow(@PathVariable String pid) {
boolean result = iProjectService.switchProjectShow(pid); boolean result = ProjectService.switchProjectShow(pid);
if (result) { if (result) {
behaviorService.pushBehavior(OPERATION, "切换项目展示状态:" + pid, request); behaviorService.pushBehaviorOld(OPERATION, "切换项目展示状态:" + pid, request);
return ResponseResult.success(); return ResponseResult.success();
} else { } else {
return ResponseResult.failure("启动状态下的项目,不允许调整展示状态"); return ResponseResult.failure("启动状态下的项目,不允许调整展示状态");
...@@ -123,8 +123,8 @@ public class ProjectController extends BaseController { ...@@ -123,8 +123,8 @@ public class ProjectController extends BaseController {
@ApiImplicitParam(name = "pid", value = "项目ID", required = true, paramType = "path", dataType = "string") @ApiImplicitParam(name = "pid", value = "项目ID", required = true, paramType = "path", dataType = "string")
@PutMapping("/switch/projectStart/{pid}") @PutMapping("/switch/projectStart/{pid}")
public ResponseResult switchProjectStart(@PathVariable String pid) { public ResponseResult switchProjectStart(@PathVariable String pid) {
iProjectService.switchProjectStart(pid); ProjectService.switchProjectStart(pid);
behaviorService.pushBehavior(OPERATION, "切换项目状态:" + pid, request); behaviorService.pushBehaviorOld(OPERATION, "切换项目状态:" + pid, request);
return ResponseResult.success(); return ResponseResult.success();
} }
...@@ -132,14 +132,14 @@ public class ProjectController extends BaseController { ...@@ -132,14 +132,14 @@ public class ProjectController extends BaseController {
@ApiImplicitParam(name = "pid", value = "项目ID", required = true, paramType = "path", dataType = "string") @ApiImplicitParam(name = "pid", value = "项目ID", required = true, paramType = "path", dataType = "string")
@GetMapping("/get/{pid}") @GetMapping("/get/{pid}")
public ResponseResult getProjectVOById(@PathVariable("pid") String pid) { public ResponseResult getProjectVOById(@PathVariable("pid") String pid) {
return ResponseResult.success(iProjectService.getProjectVOById(pid)); return ResponseResult.success(ProjectService.getProjectVOById(pid));
} }
@ApiOperation("图片上传") @ApiOperation("图片上传")
@PostMapping(value = "/upload/img", headers = "content-type=multipart/form-data") @PostMapping(value = "/upload/img", headers = "content-type=multipart/form-data")
public ResponseResult uploadImg(@RequestParam("file") MultipartFile file) { public ResponseResult uploadImg(@RequestParam("file") MultipartFile file) {
ResponseResult responseResult = Tools.uploadFile(file, brandkbsImgPath, brandkbsImageUrl); ResponseResult responseResult = Tools.uploadFile(file, brandkbsImgPath, brandkbsImageUrl);
behaviorService.pushBehavior(OPERATION, "图片上传", request); behaviorService.pushBehaviorOld(OPERATION, "图片上传", request);
return responseResult; return responseResult;
} }
...@@ -153,7 +153,7 @@ public class ProjectController extends BaseController { ...@@ -153,7 +153,7 @@ public class ProjectController extends BaseController {
@ApiImplicitParam(name = "pid", value = "项目ID", required = true, paramType = "path", dataType = "string") @ApiImplicitParam(name = "pid", value = "项目ID", required = true, paramType = "path", dataType = "string")
@GetMapping("/download/keyword/{pid}") @GetMapping("/download/keyword/{pid}")
public ResponseResult downloadArticles(@PathVariable("pid") String pid) { public ResponseResult downloadArticles(@PathVariable("pid") String pid) {
ProjectVO project = iProjectService.getProjectVOById(pid); ProjectVO project = ProjectService.getProjectVOById(pid);
EasyExcelUtil.download(project.getBrandName() + "_命中关键词", "sheet1", UploadKeywordDTO.class, UploadKeywordDTO.change2This(project.getHitKeywords()), response); EasyExcelUtil.download(project.getBrandName() + "_命中关键词", "sheet1", UploadKeywordDTO.class, UploadKeywordDTO.change2This(project.getHitKeywords()), response);
return ResponseResult.success(); return ResponseResult.success();
} }
...@@ -202,7 +202,7 @@ public class ProjectController extends BaseController { ...@@ -202,7 +202,7 @@ public class ProjectController extends BaseController {
@GetMapping("/user/getUserAllProjects") @GetMapping("/user/getUserAllProjects")
@Auth(role = RoleEnum.CUSTOMER) @Auth(role = RoleEnum.CUSTOMER)
public ResponseResult getUserAllProjects() { public ResponseResult getUserAllProjects() {
return ResponseResult.success(iProjectService.getUserAllProjects()); return ResponseResult.success(ProjectService.getUserAllProjects());
} }
} }
...@@ -4,7 +4,7 @@ import com.zhiwei.brandkbs2.auth.Auth; ...@@ -4,7 +4,7 @@ import com.zhiwei.brandkbs2.auth.Auth;
import com.zhiwei.brandkbs2.enmus.RoleEnum; import com.zhiwei.brandkbs2.enmus.RoleEnum;
import com.zhiwei.brandkbs2.model.ResponseResult; import com.zhiwei.brandkbs2.model.ResponseResult;
import com.zhiwei.brandkbs2.pojo.dto.ReportSettingsDTO; import com.zhiwei.brandkbs2.pojo.dto.ReportSettingsDTO;
import com.zhiwei.brandkbs2.service.IReportService; import com.zhiwei.brandkbs2.service.ReportService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -19,12 +19,12 @@ import javax.annotation.Resource; ...@@ -19,12 +19,12 @@ import javax.annotation.Resource;
*/ */
@RestController @RestController
@RequestMapping("/admin/module/report") @RequestMapping("/admin/module/report")
@Api(tags = "简报配置接口", description = "提供简报配置功能") @Api(tags = "简报配置", description = "提供简报配置功能")
@Auth(role= RoleEnum.COMMON_ADMIN) @Auth(role= RoleEnum.COMMON_ADMIN)
public class ReportController { public class ReportController {
@Resource(name = "reportServiceImpl") @Resource(name = "reportServiceImpl")
private IReportService reportService; private ReportService reportService;
@ApiOperation("获取简报设置") @ApiOperation("获取简报设置")
......
...@@ -6,8 +6,8 @@ import com.zhiwei.brandkbs2.enmus.RoleEnum; ...@@ -6,8 +6,8 @@ import com.zhiwei.brandkbs2.enmus.RoleEnum;
import com.zhiwei.brandkbs2.model.ResponseResult; import com.zhiwei.brandkbs2.model.ResponseResult;
import com.zhiwei.brandkbs2.pojo.Behavior; import com.zhiwei.brandkbs2.pojo.Behavior;
import com.zhiwei.brandkbs2.pojo.dto.UserDTO; import com.zhiwei.brandkbs2.pojo.dto.UserDTO;
import com.zhiwei.brandkbs2.service.IBehaviorService; import com.zhiwei.brandkbs2.service.BehaviorService;
import com.zhiwei.brandkbs2.service.IUserService; import com.zhiwei.brandkbs2.service.UserService;
import com.zhiwei.middleware.auth.pojo.CenterUser; import com.zhiwei.middleware.auth.pojo.CenterUser;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
...@@ -26,15 +26,15 @@ import javax.annotation.Resource; ...@@ -26,15 +26,15 @@ import javax.annotation.Resource;
*/ */
@RestController @RestController
@RequestMapping("/admin/user") @RequestMapping("/admin/user")
@Api(tags = "用户管理接口", description = "提供用户的增、删、改、查") @Api(tags = "用户管理", description = "提供用户的增、删、改、查")
@Auth(role = RoleEnum.COMMON_ADMIN) @Auth(role = RoleEnum.COMMON_ADMIN)
public class UserController extends BaseController { public class UserController extends BaseController {
@Resource(name = "userServiceImpl") @Resource(name = "userServiceImpl")
private IUserService iUserService; private UserService UserService;
@Resource(name = "behaviorServiceImpl") @Resource(name = "behaviorServiceImpl")
private IBehaviorService behaviorService; private BehaviorService behaviorService;
private static final Behavior.Operation OPERATION = new Behavior.Operation("用户管理", true); private static final Behavior.Operation OPERATION = new Behavior.Operation("用户管理", true);
...@@ -55,7 +55,7 @@ public class UserController extends BaseController { ...@@ -55,7 +55,7 @@ public class UserController extends BaseController {
@RequestParam(value = "keyword", defaultValue = "") String keyword, @RequestParam(value = "keyword", defaultValue = "") String keyword,
@RequestParam(value = "pid") String pid, @RequestParam(value = "pid") String pid,
@RequestParam(value = "role", defaultValue = "-1") int role) { @RequestParam(value = "role", defaultValue = "-1") int role) {
return ResponseResult.success(iUserService.findUserList(page, size, keyword, pid, role)); return ResponseResult.success(UserService.findUserList(page, size, keyword, pid, role));
} }
@ApiOperation("根据手机号搜索用户信息") @ApiOperation("根据手机号搜索用户信息")
...@@ -77,8 +77,8 @@ public class UserController extends BaseController { ...@@ -77,8 +77,8 @@ public class UserController extends BaseController {
@ApiOperation("添加用户") @ApiOperation("添加用户")
@PostMapping("/add") @PostMapping("/add")
public ResponseResult addUser(@RequestBody UserDTO userDTO) { public ResponseResult addUser(@RequestBody UserDTO userDTO) {
iUserService.addUser(userDTO); UserService.addUser(userDTO);
behaviorService.pushBehavior(OPERATION, "添加用户:" + userDTO.getId(), request); behaviorService.pushBehaviorOld(OPERATION, "添加用户:" + userDTO.getId(), request);
return ResponseResult.success(); return ResponseResult.success();
} }
...@@ -89,16 +89,16 @@ public class UserController extends BaseController { ...@@ -89,16 +89,16 @@ public class UserController extends BaseController {
@DeleteMapping("/delete") @DeleteMapping("/delete")
@Auth(role = RoleEnum.ADMIN) @Auth(role = RoleEnum.ADMIN)
public ResponseResult deleteUser(@RequestParam(value = "uid") String userId, @RequestParam(value = "pid") String pid) { public ResponseResult deleteUser(@RequestParam(value = "uid") String userId, @RequestParam(value = "pid") String pid) {
iUserService.deleteUser(userId, pid); UserService.deleteUser(userId, pid);
behaviorService.pushBehavior(OPERATION, "删除用户:" + userId, request); behaviorService.pushBehaviorOld(OPERATION, "删除用户:" + userId, request);
return ResponseResult.success(); return ResponseResult.success();
} }
@ApiOperation("编辑用户") @ApiOperation("编辑用户")
@PutMapping("/update") @PutMapping("/update")
public ResponseResult updateUser(@RequestBody UserDTO userDTO) { public ResponseResult updateUser(@RequestBody UserDTO userDTO) {
iUserService.updateUser(userDTO); UserService.updateUser(userDTO);
behaviorService.pushBehavior(OPERATION, "编辑用户:" + userDTO, request); behaviorService.pushBehaviorOld(OPERATION, "编辑用户:" + userDTO, request);
return ResponseResult.success(); return ResponseResult.success();
} }
...@@ -113,15 +113,15 @@ public class UserController extends BaseController { ...@@ -113,15 +113,15 @@ public class UserController extends BaseController {
public ResponseResult findSuperAdminList(@RequestParam(value = "page", defaultValue = "1") int page, public ResponseResult findSuperAdminList(@RequestParam(value = "page", defaultValue = "1") int page,
@RequestParam(value = "size", defaultValue = "10") int size, @RequestParam(value = "size", defaultValue = "10") int size,
@RequestParam(value = "keyword", defaultValue = "") String keyword) { @RequestParam(value = "keyword", defaultValue = "") String keyword) {
return ResponseResult.success(iUserService.findSuperAdminList(page, size, keyword)); return ResponseResult.success(UserService.findSuperAdminList(page, size, keyword));
} }
@ApiOperation("添加超级管理员") @ApiOperation("添加超级管理员")
@PostMapping("/add/superAdmin") @PostMapping("/add/superAdmin")
@Auth(role = RoleEnum.SUPER_ADMIN) @Auth(role = RoleEnum.SUPER_ADMIN)
public ResponseResult addSuperAdmin(@RequestBody UserDTO userDTO) { public ResponseResult addSuperAdmin(@RequestBody UserDTO userDTO) {
iUserService.addSuperAdmin(userDTO); UserService.addSuperAdmin(userDTO);
behaviorService.pushBehavior(OPERATION, "添加超级管理员:" + userDTO.getId(), request); behaviorService.pushBehaviorOld(OPERATION, "添加超级管理员:" + userDTO.getId(), request);
return ResponseResult.success(); return ResponseResult.success();
} }
...@@ -131,8 +131,8 @@ public class UserController extends BaseController { ...@@ -131,8 +131,8 @@ public class UserController extends BaseController {
@DeleteMapping("/delete/superAdmin") @DeleteMapping("/delete/superAdmin")
@Auth(role = RoleEnum.SUPER_ADMIN) @Auth(role = RoleEnum.SUPER_ADMIN)
public ResponseResult deleteSuperAdmin(@RequestParam(value = "uid") String userId) { public ResponseResult deleteSuperAdmin(@RequestParam(value = "uid") String userId) {
iUserService.deleteSuperAdmin(userId); UserService.deleteSuperAdmin(userId);
behaviorService.pushBehavior(OPERATION, "删除超级管理员:" + userId, request); behaviorService.pushBehaviorOld(OPERATION, "删除超级管理员:" + userId, request);
return ResponseResult.success(); return ResponseResult.success();
} }
......
package com.zhiwei.brandkbs2.controller.app;
import com.alibaba.fastjson.JSONObject;
import com.zhiwei.brandkbs2.auth.Auth;
import com.zhiwei.brandkbs2.controller.BaseController;
import com.zhiwei.brandkbs2.easyexcel.EasyExcelUtil;
import com.zhiwei.brandkbs2.enmus.RoleEnum;
import com.zhiwei.brandkbs2.model.ResponseResult;
import com.zhiwei.brandkbs2.pojo.dto.ExportAppYuqingDTO;
import com.zhiwei.brandkbs2.pojo.dto.MarkSearchDTO;
import com.zhiwei.brandkbs2.pojo.dto.ReportDTO;
import com.zhiwei.brandkbs2.pojo.dto.ReportSearchDTO;
import com.zhiwei.brandkbs2.service.CommonService;
import com.zhiwei.brandkbs2.service.MarkDataService;
import com.zhiwei.brandkbs2.service.ReportService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.tuple.Pair;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
* @author sjj
* @ClassName AppArticleController
* @Description 提供前台舆情库相关信息展示
* @date 2022-06-20 09:27
*/
@RestController
@RequestMapping("/app/yuqing")
@Api(tags = "前台舆情库", description = "提供前台舆情库相关信息展示")
@Auth(role = RoleEnum.CUSTOMER)
public class AppArticleController extends BaseController {
@Resource(name = "markDataServiceImpl")
MarkDataService markDataService;
@Resource(name = "reportServiceImpl")
ReportService reportService;
@Resource(name = "commonServiceImpl")
CommonService commonService;
@ApiOperation("舆情列表")
@PostMapping("/mark/list")
public ResponseResult getYuqingMarkList(@RequestBody MarkSearchDTO markSearchDTO) {
return ResponseResult.success(markDataService.getYuqingMarkList(markSearchDTO));
}
@ApiOperation("舆情列表-生成聚合")
@PostMapping("/mark/aggree")
public ResponseResult generateYuqingMarkAggreeList(@RequestBody JSONObject info) {
Long startTime = info.getLong("startTime");
Long endTime = info.getLong("endTime");
return ResponseResult.success(markDataService.generateYuqingMarkAggreeList(startTime, endTime));
}
@ApiOperation("舆情列表-聚合进度查询")
@GetMapping("/mark/aggree/schedule/{aggreeId}")
public ResponseResult getYuqingMarkAggreeProgress(@PathVariable String aggreeId) {
return ResponseResult.success(markDataService.getYuqingMarkAggreeProgress(aggreeId));
}
@ApiOperation("舆情列表-获取聚合结果")
@PostMapping("/mark/aggree/list")
public ResponseResult getYuqingMarkAggreeList(@RequestBody MarkSearchDTO markSearchDTO) {
return ResponseResult.success(markDataService.getYuqingMarkAggreeList(markSearchDTO));
}
@ApiOperation("舆情列表-搜索条件")
@GetMapping("/mark/list/criteria")
public ResponseResult getYuqingMarkCriteria(@RequestParam(required = false) String linkedGroupId) {
return ResponseResult.success(markDataService.getYuqingMarkCriteria(linkedGroupId));
}
@ApiOperation("舆情导出")
@PostMapping(value = "mark/list/export")
public ResponseResult exportYuqingMarkList(@RequestBody MarkSearchDTO markSearchDTO) {
Pair<String, List<ExportAppYuqingDTO>> stringListPair = markDataService.downloadYuqingMarkList(markSearchDTO);
EasyExcelUtil.download(stringListPair.getLeft() + "_舆情列表数据", "sheet1", ExportAppYuqingDTO.class, stringListPair.getRight(), response);
return ResponseResult.success();
}
@ApiOperation("舆情分析-舆情概览")
@ApiImplicitParams({@ApiImplicitParam(name = "startTime", value = "开始时间", paramType = "query", dataType = "long"), @ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "long")})
@GetMapping("/analyze/summary")
public ResponseResult getAnalyzeSummary(@RequestParam(value = "startTime", required = false) Long startTime, @RequestParam(value = "endTime", required = false) Long endTime) {
return ResponseResult.success(markDataService.getAnalyzeSummary(startTime, endTime, true));
}
@ApiOperation("舆情分析-舆情趋势分布")
@ApiImplicitParams({
@ApiImplicitParam(name = "startTime", value = "开始时间", paramType = "query", dataType = "long"),
@ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "long")
})
@GetMapping("/spread")
public ResponseResult getMarkSpread(@RequestParam(value = "startTime", required = false) Long startTime,
@RequestParam(value = "endTime", required = false) Long endTime) {
return ResponseResult.success(markDataService.getMarkSpread(startTime, endTime, true));
}
@ApiOperation("舆情分析-品牌曝光对比")
@ApiImplicitParams({
@ApiImplicitParam(name = "startTime", value = "开始时间", paramType = "query", dataType = "long"),
@ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "long")
})
@GetMapping("/emotion/proportion")
public ResponseResult getMarkEmotionProportion(@RequestParam(value = "startTime", required = false) Long startTime,
@RequestParam(value = "endTime", required = false) Long endTime) {
return ResponseResult.success(markDataService.getMarkEmotionProportion(startTime, endTime, true));
}
@ApiOperation("舆情分析-平台分布")
@ApiImplicitParams({
@ApiImplicitParam(name = "startTime", value = "开始时间", paramType = "query", dataType = "long"),
@ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "long")
})
@GetMapping("/platform/proportion")
public ResponseResult getMarkPlatformProportion(@RequestParam(value = "startTime", required = false) Long startTime,
@RequestParam(value = "endTime", required = false) Long endTime) {
return ResponseResult.success(markDataService.getMarkPlatformProportion(startTime, endTime, true));
}
@ApiOperation("舆情分析-渠道参与")
@ApiImplicitParams({@ApiImplicitParam(name = "startTime", value = "开始时间", paramType = "query", dataType = "long"), @ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "long")})
@GetMapping("/channel/proportion")
public ResponseResult getMarkChannelProportion(@RequestParam(value = "startTime", required = false) Long startTime, @RequestParam(value = "endTime", required = false) Long endTime) {
return ResponseResult.success(markDataService.getMarkChannelProportion(startTime, endTime, true));
}
@ApiOperation("舆情分析-舆情高频词")
@ApiImplicitParams({
@ApiImplicitParam(name = "startTime", value = "开始时间", paramType = "query", dataType = "long"),
@ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "long")
})
@GetMapping("/highWord")
public ResponseResult getMarkHighWord(@RequestParam(value = "startTime", required = false) Long startTime,
@RequestParam(value = "endTime", required = false) Long endTime) {
return ResponseResult.success(markDataService.getMarkHighWord(startTime, endTime));
}
@ApiOperation("舆情分析-获取默认时间")
@GetMapping("/default/time")
public ResponseResult getDefaultTime() {
return ResponseResult.success(commonService.getTimeRangeMonth());
}
@ApiOperation("舆情简报-分类统计")
@GetMapping("/report/aggCount")
public ResponseResult getReportsAggCount() {
return ResponseResult.success(reportService.getReportsAggCount());
}
@ApiOperation("舆情简报-全部报告列表")
@GetMapping("/report/list")
public ResponseResult findReportList(ReportSearchDTO reportSearch) {
return ResponseResult.success(reportService.findReportList(reportSearch));
}
@ApiOperation("舆情简报-添加自定义简报")
@PostMapping("report/custom/add")
public ResponseResult addCustomReport(@RequestBody ReportDTO reportDTO) {
reportService.addCustomReport(reportDTO);
return ResponseResult.success();
}
@ApiOperation("舆情简报-删除简报")
@ApiImplicitParam(name = "id", value = "报告ID", required = true, paramType = "path", dataType = "String")
@DeleteMapping("report/{id}")
public ResponseResult deleteReportById(@PathVariable String id) {
reportService.deleteReportById(id);
return ResponseResult.success();
}
@ApiOperation("舆情简报-获取报告结果")
@ApiImplicitParam(name = "id", value = "报告ID", required = true, paramType = "path", dataType = "String")
@GetMapping("/analyze/{id}")
public ResponseResult getReportAnalyze(@PathVariable String id) {
return ResponseResult.success(reportService.getPcReportAnalyze(id, true));
}
}
package com.zhiwei.brandkbs2.controller.app;
import com.alibaba.fastjson.JSONObject;
import com.zhiwei.brandkbs2.auth.Auth;
import com.zhiwei.brandkbs2.auth.UserThreadLocal;
import com.zhiwei.brandkbs2.controller.BaseController;
import com.zhiwei.brandkbs2.easyexcel.EasyExcelUtil;
import com.zhiwei.brandkbs2.enmus.RoleEnum;
import com.zhiwei.brandkbs2.model.ResponseResult;
import com.zhiwei.brandkbs2.pojo.BaseMap;
import com.zhiwei.brandkbs2.pojo.dto.ExportAppYuqingDTO;
import com.zhiwei.brandkbs2.pojo.dto.MarkSearchDTO;
import com.zhiwei.brandkbs2.service.MarkDataService;
import com.zhiwei.brandkbs2.service.ProjectService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @ClassName AppContendController
* @Description 提供前台竞品库相关信息展示
* @author cjz
* @date 2022-08-09 10:22
*/
@RestController
@RequestMapping("/app/contend")
@Api(tags = "前台竞品库",description = "提供前台竞品库相关信息展示")
@Auth(role = RoleEnum.CUSTOMER)
public class AppContendController extends BaseController {
@Resource(name = "markDataServiceImpl")
MarkDataService markDataService;
@ApiOperation("竞品库-竞品舆情-搜索条件")
@GetMapping("/searchCriteria")
public ResponseResult getContendSearchCriteria(@RequestParam(required = false) String contendId) {
return ResponseResult.success(markDataService.getContendSearchCriteria(contendId));
}
@ApiOperation("竞品库-竞品舆情-搜索结果列表")
@PostMapping("/list")
public ResponseResult getContendSearchList(@RequestBody MarkSearchDTO markSearchDTO){
return ResponseResult.success(markDataService.getContendSearchList(markSearchDTO));
}
@ApiOperation("竞品库-竞品分析-舆情总结页面")
@PostMapping("/summary")
public ResponseResult getSummary(@RequestBody MarkSearchDTO markSearchDTO) throws IOException {
return ResponseResult.success(markDataService.getContendSummary(markSearchDTO, true)); // 测试时关闭缓存,记得打开
}
@ApiOperation("竞品库-竞品对比-传播分析页面")
@PostMapping("/spread/analyze")
public ResponseResult getSpreadAnalyze(@RequestBody MarkSearchDTO markSearchDTO) throws IOException {
return ResponseResult.success(markDataService.getContendSpreadAnalyze(markSearchDTO, 5, true)); // 测试时关闭缓存,记得打开
}
@ApiOperation("竞品库-竞品舆情-舆情导出")
@PostMapping(value = "/list/export")
public ResponseResult exportContendMarkList(@RequestBody MarkSearchDTO markSearchDTO) {
Pair<String, List<ExportAppYuqingDTO>> stringListPair = markDataService.downloadContendMarkList(markSearchDTO);
EasyExcelUtil.download(stringListPair.getLeft() + "_舆情列表数据", "sheet1", ExportAppYuqingDTO.class, stringListPair.getRight(), response);
return ResponseResult.success();
}
}
package com.zhiwei.brandkbs2.controller.app;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.zhiwei.brandkbs2.auth.Auth;
import com.zhiwei.brandkbs2.auth.UserThreadLocal;
import com.zhiwei.brandkbs2.controller.BaseController;
import com.zhiwei.brandkbs2.enmus.RoleEnum;
import com.zhiwei.brandkbs2.model.ResponseResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
/**
* @ClassName AppCrisisController
* @Description 提供前台危机相关信息展示
* @author cjz
* @date 2022-07-19 10:20
*/
@RestController
@RequestMapping("/app/crisis")
@Api(tags = "前台危机库",description = "提供前台危机相关信息展示")
@Auth(role = RoleEnum.CUSTOMER)
public class AppCrisisController extends BaseController {
@Value("${crisis.searchTags.url}")
private String crisisTagsUrl;
@Value("${crisis.top3.url}")
private String crisisTop3Url;
@Value("${crisis.searchCriteria.url}")
private String crisisSearchCriteriaUrl;
@Value("${crisis.list.url}")
private String crisisListUrl;
@Value("${crisis.share.url}")
private String crisisEventShareUrl;
@Autowired
private RestTemplate restTemplate;
@ApiOperation("危机库-通过标签查危机")
@GetMapping("/crisisTags")
public ResponseResult crisisTags(@RequestParam(value = "page",defaultValue = "1") Integer page,
@RequestParam(value = "pageSize",defaultValue = "10") Integer pageSize,
@RequestParam(value = "brand",required = false) String brand,
@RequestParam(value = "category",required = false) String category){
ResponseEntity<String> responseEntity = restTemplate.getForEntity(crisisTagsUrl, String.class, page, pageSize, brand, category);
Object data = JSON.parseObject(responseEntity.getBody()).get("data");
return ResponseResult.success(data);
}
@ApiOperation("危机库-近期热点危机")
@GetMapping("/recentHotCrisis")
public ResponseResult recentHotCrisis(){
ResponseEntity<String> responseEntity = restTemplate.getForEntity(crisisTop3Url, String.class);
Object data = JSON.parseObject(responseEntity.getBody()).get("data");
return ResponseResult.success(data);
}
@ApiOperation("危机库-危机搜索条件")
@GetMapping("/crisisSearchCriteria")
public ResponseResult crisisSearchCriteria(){
ResponseEntity<String> responseEntity = restTemplate.getForEntity(crisisSearchCriteriaUrl, String.class);
Object data = JSON.parseObject(responseEntity.getBody()).get("data");
return ResponseResult.success(data);
}
@ApiOperation("危机库-危机库列表")
@GetMapping("/crisisList")
public ResponseResult crisisList(@RequestParam(value = "page",defaultValue = "1") Integer page,
@RequestParam(value = "pageSize",defaultValue = "10") Integer pageSize,
@RequestParam(value = "startTime",required = false) String startTime,
@RequestParam(value = "endTime",required = false) String endTime,
@RequestParam(value = "category",defaultValue = "不限") String category){
ResponseEntity<String> responseEntity = restTemplate.getForEntity(crisisListUrl, String.class, page, pageSize, startTime, endTime, category);
Object data = JSON.parseObject(responseEntity.getBody()).get("data");
return ResponseResult.success(data);
}
@ApiOperation("危机库-获取危机事件分享id")
@GetMapping("/getCrisisEventShareId/{id}")
public ResponseResult getCrisisEventShareId(@PathVariable int id){
ResponseEntity<String> responseEntity = restTemplate.getForEntity(crisisEventShareUrl, String.class, id);
Object data = JSON.parseObject(responseEntity.getBody()).get("data");
return ResponseResult.success(data);
}
}
package com.zhiwei.brandkbs2.controller.app;
import com.zhiwei.brandkbs2.auth.Auth;
import com.zhiwei.brandkbs2.enmus.RoleEnum;
import com.zhiwei.brandkbs2.model.ResponseResult;
import com.zhiwei.brandkbs2.pojo.dto.CustomEventDTO;
import com.zhiwei.brandkbs2.service.CustomEventService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
* @author sjj
* @ClassName AppCrisisController
* @Description 前台自定义事件展示接口
* @date 2022-07-19 10:20
*/
@RestController
@RequestMapping("/app/customEvent")
@Api(tags = "前台自定义事件", description = "提供前台自定义事件模块信息展示及操作")
@Auth(role = RoleEnum.CUSTOMER)
public class AppCustomEventController {
@Resource
private CustomEventService customEventService;
@ApiOperation("事件库-我的事件列表")
@ApiImplicitParams({
@ApiImplicitParam(name = "startTime", value = "开始时间", required = true, paramType = "query", dataType = "Long"),
@ApiImplicitParam(name = "endTime", value = "结束时间", required = true, paramType = "query", dataType = "Long")
})
@GetMapping("/rankList")
public ResponseResult getCustomEventRankList(@RequestParam(value = "startTime") Long startTime,
@RequestParam(value = "endTime") Long endTime) {
return ResponseResult.success(customEventService.getCustomEventRankList(startTime, endTime));
}
@ApiOperation("事件库-保存事件")
@PostMapping()
public ResponseResult saveCustomEvent(@RequestBody CustomEventDTO customEventDTO) {
customEventService.saveCustomEvent(customEventDTO);
return ResponseResult.success();
}
@ApiOperation("事件库-修改自定义事件")
@PatchMapping()
public ResponseResult updateCustomEvent(@RequestBody CustomEventDTO customEventDTO) {
customEventService.updateCustomEvent(customEventDTO);
return ResponseResult.success();
}
@ApiOperation("事件库-自定义事件列表")
@ApiImplicitParams({
@ApiImplicitParam(name = "page", value = "页码", defaultValue = "1", paramType = "query", dataType = "int"),
@ApiImplicitParam(name = "pageSize", value = "页码大小", defaultValue = "10", paramType = "query", dataType = "int"),
@ApiImplicitParam(name = "keyword", value = "关键词", paramType = "query", dataType = "string")
})
@GetMapping("/list")
public ResponseResult getCustomEventList(@RequestParam(value = "page", defaultValue = "1") int page,
@RequestParam(value = "size", defaultValue = "10") int pageSize,
@RequestParam(value = "keyword", defaultValue = "") String keyword) {
return ResponseResult.success(customEventService.getCustomEventList(page, pageSize, keyword));
}
@ApiOperation("事件库-删除自定义事件信息")
@ApiImplicitParam(name = "id", value = "自定义事件ID", required = true, paramType = "path", dataType = "string")
@DeleteMapping("/{id}")
public ResponseResult deleteCustomEventById(@PathVariable String id) {
customEventService.deleteCustomEventById(id);
return ResponseResult.success();
}
@ApiOperation("事件库-更新自定义事件数据")
@ApiImplicitParam(name = "id", value = "自定义事件ID", required = true, paramType = "path", dataType = "string")
@PatchMapping("/{id}")
public ResponseResult analyzeCustomEvent(@PathVariable String id) {
customEventService.analyzeCustomEvent(id);
return ResponseResult.success();
}
@ApiOperation("事件库-获取自定义事件分享id")
@ApiImplicitParam(name = "id", value = "自定义事件ID", required = true, paramType = "path", dataType = "string")
@GetMapping("/share/{id}")
public ResponseResult getCustomEventAnalyzeShareId(@PathVariable String id) {
return ResponseResult.success(customEventService.getCustomEventAnalyzeShareId(id));
}
@ApiOperation("获取自定义事件分析结果")
@ApiImplicitParam(name = "id", value = "自定义事件ID", required = true, paramType = "path", dataType = "string")
@GetMapping("/analyze/{id}")
public ResponseResult getCustomEventAnalyze(@PathVariable String id) {
return ResponseResult.success(customEventService.getCustomEventAnalyze(id, true));
}
}
package com.zhiwei.brandkbs2.controller.app;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.zhiwei.brandkbs2.auth.Auth;
import com.zhiwei.brandkbs2.controller.BaseController;
import com.zhiwei.brandkbs2.enmus.RoleEnum;
import com.zhiwei.brandkbs2.model.ResponseResult;
import com.zhiwei.brandkbs2.pojo.dto.EventSearchDTO;
import com.zhiwei.brandkbs2.service.EventService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
/**
* @Description: 前台事件库
* @Author: shentao
* @Date: 2022/7/26 17:36
*/
@RestController
@RequestMapping("/app/event")
@Api(tags = "前台事件库", description = "提供前台事件相关信息展示")
@Auth(role = RoleEnum.CUSTOMER)
public class AppEventController extends BaseController {
@Autowired
private RestTemplate restTemplate;
@Value("${ef.search.url}")
private String getEfSearchUrl;
@Value("${ef.searchCriteria.url}")
private String getEfSearchCriteriaUrl;
@Value("${ef.filterNew.url}")
private String getFilterNewUrl;
@Value("${ef.captcha.url}")
private String efCaptchaUrl;
@Value("${ef.checkCaptcha.url}")
private String efCheckCaptchaUrl;
private final EventService eventService;
public AppEventController(EventService eventService) {
this.eventService = eventService;
}
@ApiOperation("前台事件库-搜索条件")
@GetMapping("/search/criteria")
public ResponseResult getEventsSearchCriteria() {
return ResponseResult.success(eventService.getEventsSearchCriteria());
}
@ApiOperation("前台事件库-品牌事件库")
@PostMapping("/list")
public ResponseResult getEventList(@RequestBody EventSearchDTO eventSearchDTO) {
return ResponseResult.success(eventService.getEventList(eventSearchDTO));
}
@ApiOperation("前台事件库-事件详情-基础信息")
@GetMapping("/info/base/{id}")
public ResponseResult getEventBaseInfo(@PathVariable String id) {
return ResponseResult.success(eventService.getEventBaseInfo(id));
}
@ApiOperation("前台事件库-事件详情-传播趋势图")
@GetMapping("/info/dissemination-trends/{id}")
public ResponseResult getEventDisseminationTrends(@PathVariable String id, @RequestParam(value = "type", defaultValue = "小时") String type) {
return ResponseResult.success(eventService.getEventDisseminationTrends(id, type));
}
@ApiOperation("前台事件库-事件详情-渠道发声")
@GetMapping("/info/channel-voices/{id}")
public ResponseResult getEventChannelVoices(@PathVariable String id,
@RequestParam(value = "type", defaultValue = "重要渠道") String type,
@RequestParam(value = "page", defaultValue = "1") int page,
@RequestParam(value = "pageSize", defaultValue = "50") int pageSize,
@RequestParam(value = "sorter", required = false) String sorter) {
return ResponseResult.success(eventService.getEventChannelVoices(id, type, page, pageSize, sorter));
}
@ApiOperation("前台事件库-事件详情-热门文章分析")
@GetMapping("/info/top-articles-analysis/{id}")
public ResponseResult getEventTopArticlesAnalysis(@PathVariable String id,
@RequestParam(value = "type", defaultValue = "按时间") String type,
@RequestParam(value = "emotion", defaultValue = "全部") String emotion,
@RequestParam(value = "aggTitle", required = false) String aggTitle) {
return ResponseResult.success(eventService.getEventTopArticlesAnalysis(id, type, emotion, aggTitle));
}
@ApiOperation("前台事件库-全网事件库-搜索")
@GetMapping("/getWholeNetworkEvents")
public ResponseResult getWholeNetworkEvents(@RequestParam("keyword") String keyword,
@RequestParam(value = "page", defaultValue = "1") Integer page) {
String name = keyword.trim();
ResponseEntity<String> responseEntity = restTemplate.getForEntity(getEfSearchUrl, String.class, name, page);
JSONObject jsonObject = JSON.parseObject(responseEntity.getBody());
return ResponseResult.success(jsonObject);
}
@ApiOperation("前台事件库-全网事件库-搜索条件")
@GetMapping("/getWholeNetworkSearchCriteria")
public ResponseResult getWholeNetworkSearchCriteria() {
ResponseEntity<String> responseEntity = restTemplate.getForEntity(getEfSearchCriteriaUrl, String.class);
JSONObject jsonObject = JSON.parseObject(responseEntity.getBody());
return ResponseResult.success(jsonObject);
}
@ApiOperation("前台事件库-全网事件库-列表")
@GetMapping("/getWholeNetworkEventsList")
public ResponseResult getWholeNetworkEventsList(@RequestParam(value = "firstType", required = false, defaultValue = "") String firstType,
@RequestParam(value = "start", required = false, defaultValue = "0") long start,
@RequestParam(value = "end", required = false, defaultValue = "0") long end,
@RequestParam(value = "page", required = false, defaultValue = "1") int page) {
ResponseEntity<String> responseEntity = restTemplate.getForEntity(getFilterNewUrl, String.class, firstType, start, end, page);
JSONObject jsonObject = JSON.parseObject(responseEntity.getBody());
return ResponseResult.success(jsonObject);
}
@ApiOperation("前台事件库-全网事件库-得到验证码")
@GetMapping("/getWholeNetworkCaptcha")
public ResponseResult getWholeNetworkCaptcha() {
ResponseEntity<String> responseEntity = restTemplate.getForEntity(efCaptchaUrl, String.class);
JSONObject jsonObject = JSON.parseObject(responseEntity.getBody());
return ResponseResult.success(jsonObject);
}
@ApiOperation("前台事件库-全网事件库-校验验证码")
@GetMapping("/checkWholeNetworkCaptcha")
public ResponseResult checkWholeNetworkCaptcha(@RequestParam(value = "id", required = false, defaultValue = "") String id,
@RequestParam(value = "captcha", required = false, defaultValue = "") String captcha) {
ResponseEntity<String> responseEntity = restTemplate.getForEntity(efCheckCaptchaUrl, String.class, id, captcha);
JSONObject jsonObject = JSON.parseObject(responseEntity.getBody());
return ResponseResult.success(jsonObject);
}
@ApiOperation("关联事件")
@ApiImplicitParam(name = "keyword", value = "关键词", paramType = "query", dataType = "String")
@GetMapping("/getRelevanceEvent")
public ResponseResult getRelevanceEvent(@RequestParam(value = "keyword", required = false) String keyword) {
return ResponseResult.success(eventService.getLastEventTop(keyword, 5));
}
}
package com.zhiwei.brandkbs2.controller.app;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.zhiwei.brandkbs2.auth.Auth;
import com.zhiwei.brandkbs2.auth.UserThreadLocal;
import com.zhiwei.brandkbs2.common.RedisKeyPrefix;
import com.zhiwei.brandkbs2.config.Constant;
import com.zhiwei.brandkbs2.controller.BaseController;
import com.zhiwei.brandkbs2.enmus.RoleEnum;
import com.zhiwei.brandkbs2.model.ResponseResult;
import com.zhiwei.brandkbs2.pojo.BaseMap;
import com.zhiwei.brandkbs2.service.MarkDataService;
import com.zhiwei.brandkbs2.service.ProjectService;
import com.zhiwei.brandkbs2.util.RedisUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
* @author cjz
* @ClassName AppCrisisController
* @Description 提供前台危机相关信息展示
* @date 2022-07-19 16:17
*/
@RestController
@RequestMapping("/app/hot")
@Api(tags = "前台热点库", description = "提供前台热点相关信息展示")
@Auth(role = RoleEnum.CUSTOMER)
public class AppHotController extends BaseController {
private static final long ONE_HOUR = 1L;
@Value("${trends.longTimeInListSearchByInner.url}")
private String trendsListUrl;
@Value("${trends.longTimeInListSearch.url}")
private String longTimeInListSearchUrl;
@Autowired
private RestTemplate restTemplate;
@Autowired
private RedisUtil redisUtil;
@Autowired
private ProjectService projectService;
@Autowired
private MarkDataService markDataService;
@Resource(name = "esSearchExecutor")
ThreadPoolTaskExecutor executor;
/**
* weibo 热搜
* weibo-topic 话题
* weibo-rise 预热
* zhihu 知乎
* toutiao 头条
* douyin 抖音
* bilibili-ranking B站
*/
@ApiOperation("热点库-列表")
@GetMapping("/getHotList")
public ResponseResult getHotList(@RequestParam(value = "sortType", defaultValue = "realTime") String sortType,
@RequestParam(value = "type", defaultValue = "weibo") String type) {
ResponseEntity<JSONObject> jsonObjectResponseEntity = restTemplate.getForEntity(trendsListUrl, JSONObject.class, sortType, type);
Object data = jsonObjectResponseEntity.getBody().get("data");
String redisKey = RedisKeyPrefix.HOT_LIST + type;
String result = redisUtil.get(redisKey);
//当舆论场崩溃时从缓存里获取
if (Objects.nonNull(data)) {
if (Objects.isNull(result)) {
redisUtil.setExpire(redisKey, JSON.toJSONString(data), ONE_HOUR, TimeUnit.HOURS);
}
return ResponseResult.success(data);
} else {
if (Objects.nonNull(result)) {
return ResponseResult.success(result);
}
return ResponseResult.failure("响应超时");
}
}
@ApiOperation("热点库-热点榜单")
@GetMapping("/hot")
public ResponseResult hot() {
ResponseEntity<String> responseEntity = restTemplate.getForEntity(longTimeInListSearchUrl, String.class, "weibo");
JSONObject jsonObject = JSON.parseObject(responseEntity.getBody());
String redisKey = RedisKeyPrefix.HOT_RANK_LIST;
String result = redisUtil.get(redisKey);
//当舆论场崩溃时从缓存里获取
if (jsonObject.getBoolean("state")) {
Object data = jsonObject.get("data");
if (Objects.isNull(result)) {
redisUtil.setExpire(redisKey, JSON.toJSONString(data), ONE_HOUR, TimeUnit.HOURS);
}
return ResponseResult.success(data);
} else {
if (Objects.nonNull(result)) {
return ResponseResult.success(result);
}
return ResponseResult.failure("响应超时");
}
}
@ApiOperation("首页-近24小时热门舆情,查竞品-竞品动态")
@GetMapping("/latestNews")
public ResponseResult latestNews(@RequestParam(value = "size", defaultValue = "5") Integer size,
@RequestParam(value = "include", defaultValue = "true") boolean include) throws IOException {
String projectId = UserThreadLocal.getProjectId();
String linkedGroupId = projectService.getProjectVOById(projectId).getBrandLinkedGroupId();
Date endDate = new Date();
Date startDate = DateUtils.addHours(endDate, -24);
List<Map.Entry<String, Integer>> markTopTitleList =
markDataService.getMarkTopTitle(startDate.getTime(), endDate.getTime(), null, projectId, linkedGroupId, Constant.PRIMARY_CONTEND_ID, size, include);
List<JSONObject> resultList = markTopTitleList.stream().map(map -> {
JSONObject json = new JSONObject();
json.put("title", map.getKey());
json.put("num", map.getValue());
return json;
}).collect(Collectors.toList());
CompletableFuture.allOf(resultList.stream().map(json -> CompletableFuture.supplyAsync(() -> {
try {
BaseMap firstArticle = markDataService.getFirstArticle(startDate.getTime(), endDate.getTime(), json.getString("title"), projectId, linkedGroupId, Constant.PRIMARY_CONTEND_ID, include);
json.put("content", firstArticle.getContent());
json.put("url", firstArticle.getUrl());
json.put("realSource", firstArticle.getRealSource());
json.put("emotion", firstArticle.getEmotion());
} catch (IOException ignored) {
}
return null;
}, executor)).toArray(CompletableFuture[]::new)).join();
return ResponseResult.success(resultList);
}
}
package com.zhiwei.brandkbs2.controller.app;
import com.zhiwei.brandkbs2.auth.Auth;
import com.zhiwei.brandkbs2.controller.BaseController;
import com.zhiwei.brandkbs2.enmus.RoleEnum;
import com.zhiwei.brandkbs2.model.ResponseResult;
import com.zhiwei.brandkbs2.service.IndexService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @author lxj
* @version 1.0
* @description 前台首页展示接口
* @date 2019/9/11 14:38
*/
@RestController
@RequestMapping("/app/index")
@Api(tags = "前台首页", description = "提供前台首页相关信息展示")
@Auth(role = RoleEnum.CUSTOMER)
public class AppIndexController extends BaseController {
@Resource
private IndexService indexService;
@ApiOperation("首页-舆情总量")
@ApiImplicitParams({
@ApiImplicitParam(name = "startTime", value = "开始时间", paramType = "query", dataType = "long"),
@ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "long")
})
@GetMapping("/yuqing-amount")
public ResponseResult getYuqingAmount(@RequestParam(value = "startTime", required = false) Long startTime,
@RequestParam(value = "endTime", required = false) Long endTime) {
return ResponseResult.success(indexService.getYuqingAmount(startTime, endTime, true));
}
@ApiOperation("首页-美誉度")
@ApiImplicitParams({
@ApiImplicitParam(name = "startTime", value = "开始时间", paramType = "query", dataType = "long"),
@ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "long")
})
@GetMapping("/reputation")
public ResponseResult getReputation(@RequestParam(value = "startTime", required = false) Long startTime,
@RequestParam(value = "endTime", required = false) Long endTime) {
return ResponseResult.success(indexService.getReputation(startTime, endTime, true));
}
@ApiOperation("首页-事件数")
@ApiImplicitParams({
@ApiImplicitParam(name = "startTime", value = "开始时间", paramType = "query", dataType = "long"),
@ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "long")
})
@GetMapping("/event-amount")
public ResponseResult getEvent(@RequestParam(value = "startTime", required = false) Long startTime,
@RequestParam(value = "endTime", required = false) Long endTime) {
return ResponseResult.success(indexService.getEventAmount(startTime, endTime, true));
}
@ApiOperation("首页-平台贡献信息")
@ApiImplicitParams({
@ApiImplicitParam(name = "startTime", value = "开始时间", paramType = "query", dataType = "long"),
@ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "long")
})
@GetMapping("/platform-info")
public ResponseResult getPlatformInfo(@RequestParam(value = "startTime", required = false) Long startTime,
@RequestParam(value = "endTime", required = false) Long endTime) {
return ResponseResult.success(indexService.getPlatformInfo(startTime, endTime, true));
}
@ApiOperation("传播趋势")
@ApiImplicitParams({
@ApiImplicitParam(name = "startTime", value = "开始时间", paramType = "query", dataType = "long"),
@ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "long")
})
@GetMapping("/spreadingTend")
public ResponseResult getSpreadingTend(@RequestParam(value = "startTime", required = false) Long startTime,
@RequestParam(value = "endTime", required = false) Long endTime) {
return ResponseResult.success(indexService.getSpreadingTend(startTime, endTime, true));
}
}
package com.zhiwei.brandkbs2.controller.app;
import com.zhiwei.brandkbs2.auth.Auth;
import com.zhiwei.brandkbs2.controller.BaseController;
import com.zhiwei.brandkbs2.enmus.RoleEnum;
import com.zhiwei.brandkbs2.model.ResponseResult;
import com.zhiwei.brandkbs2.service.CustomEventService;
import com.zhiwei.brandkbs2.service.MarkFlowService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
* @ClassName: GlobalController
* @Description 全局通用获取Controller
* @author: sjj
* @date: 2022-07-15 10:33
*/
@RestController
@RequestMapping("/app/global")
@Api(tags = "全局通用接口", description = "提供全局通用相关")
public class GlobalController extends BaseController {
@Resource(name = "markFlowServiceImpl")
MarkFlowService markFlowService;
@Resource
CustomEventService customEventService;
@ApiOperation("内部快照-组装页面")
@Auth(role = RoleEnum.CUSTOMER)
@PostMapping("/shotPage")
public ResponseResult setShotPage(@RequestBody String markFlowEntity) {
return ResponseResult.success(markFlowService.setShotPage(markFlowEntity));
}
@ApiOperation("内部快照-获取页面")
@Auth(role = RoleEnum.CUSTOMER)
@GetMapping("/shotPage/{id}")
public ResponseResult getShotPage(@PathVariable(name = "id") String id) {
return ResponseResult.success(markFlowService.getShotPageFromCache(id));
}
@ApiOperation("分享自定义事件分析展示")
@ApiImplicitParam(name = "share", value = "自定义事件分享id", required = true, paramType = "path", dataType = "string")
@GetMapping("/customEvent/analyze/{share}")
public ResponseResult getShareCustomEventAnalyze(@PathVariable String share) {
return ResponseResult.success(customEventService.getShareCustomEventAnalyze(share));
}
}
package com.zhiwei.brandkbs2.dao;
import com.zhiwei.brandkbs2.pojo.AggreeResult;
/**
* @ClassName: AggreeResultDao
* @Description AggreeResultDao
* @author: sjj
* @date: 2022-07-18 09:47
*/
public interface AggreeResultDao extends BaseMongoDao<AggreeResult>{
long deleteExpire(long expireTime);
}
...@@ -15,7 +15,7 @@ import java.util.List; ...@@ -15,7 +15,7 @@ import java.util.List;
* @date: 2022-04-29 14:45 * @date: 2022-04-29 14:45
*/ */
public interface IBaseMongoDao<T extends AbstractBaseMongo> { public interface BaseMongoDao<T extends AbstractBaseMongo> {
/** /**
* 插入一条数据 * 插入一条数据
...@@ -54,6 +54,20 @@ public interface IBaseMongoDao<T extends AbstractBaseMongo> { ...@@ -54,6 +54,20 @@ public interface IBaseMongoDao<T extends AbstractBaseMongo> {
void deleteOneById(String id, String... collectionNames); void deleteOneById(String id, String... collectionNames);
/** /**
* 通过id删除数据
*
* @param query 查询条件
*/
void deleteOneByQuery(Query query, String... collectionNames);
/**
* 通过id删除数据
*
* @param id 数据库唯一id
*/
void deleteOneByIdWithQuery(String id, Query query, String... collectionNames);
/**
* 通过id查找单条数据 * 通过id查找单条数据
* *
* @param id 数据库唯一id * @param id 数据库唯一id
...@@ -95,7 +109,7 @@ public interface IBaseMongoDao<T extends AbstractBaseMongo> { ...@@ -95,7 +109,7 @@ public interface IBaseMongoDao<T extends AbstractBaseMongo> {
* @param preQuery 查询请求 * @param preQuery 查询请求
* @return list<T> * @return list<T>
*/ */
List<T> findList(Query preQuery,String... collectionNames); List<T> findList(Query preQuery, String... collectionNames);
/** /**
* 量查询 * 量查询
...@@ -106,13 +120,21 @@ public interface IBaseMongoDao<T extends AbstractBaseMongo> { ...@@ -106,13 +120,21 @@ public interface IBaseMongoDao<T extends AbstractBaseMongo> {
long count(Query preQuery, String... collectionNames); long count(Query preQuery, String... collectionNames);
/** /**
* 量查询with关键词
*
* @param preQuery 查询请求
* @return long
*/
long count(Query preQuery, String keyword, String[] matchFields, String... collectionNames);
/**
* 添加模糊查询条件 * 添加模糊查询条件
* *
* @param query query * @param query query
* @param keyword 关键字 * @param keyword 关键字
* @param fuzzKeys 匹配keys * @param fuzzKeys 匹配keys
*/ */
void addKeywordFuzz(Query query,String keyword,String... fuzzKeys); void addKeywordFuzz(Query query, String keyword, String... fuzzKeys);
/** /**
* 添加排序 * 添加排序
...@@ -130,10 +152,8 @@ public interface IBaseMongoDao<T extends AbstractBaseMongo> { ...@@ -130,10 +152,8 @@ public interface IBaseMongoDao<T extends AbstractBaseMongo> {
*/ */
default Criteria addChannelIndex(ChannelIndex channelIndex) { default Criteria addChannelIndex(ChannelIndex channelIndex) {
Criteria criteria = new Criteria(); Criteria criteria = new Criteria();
criteria.and("platform").is(channelIndex.getPlatform()); criteria.and("channelFid").is(channelIndex.getFid());
criteria.and("realSource").is(channelIndex.getRealSource());
criteria.and("source").is(channelIndex.getSource());
criteria.and("linkedGroupId").is(channelIndex.getLinkedGroupId());
return criteria; return criteria;
} }
} }
...@@ -3,10 +3,10 @@ package com.zhiwei.brandkbs2.dao; ...@@ -3,10 +3,10 @@ package com.zhiwei.brandkbs2.dao;
import com.zhiwei.brandkbs2.pojo.Behavior; import com.zhiwei.brandkbs2.pojo.Behavior;
/** /**
* @ClassName: IBehaviorDao * @ClassName: BehaviorDao
* @Description IBehaviorDao * @Description BehaviorDao
* @author: sjj * @author: sjj
* @date: 2022-05-27 13:46 * @date: 2022-05-27 13:46
*/ */
public interface IBehaviorDao extends IBaseMongoDao<Behavior>, IShardingMongo { public interface BehaviorDao extends BaseMongoDao<Behavior>, ShardingMongo {
} }
package com.zhiwei.brandkbs2.dao;
import com.zhiwei.brandkbs2.pojo.BrandkbsTask;
/**
* @ClassName: BrandkbsTaskDao
* @Description BrandkbsTaskDao
* @author: sjj
* @date: 2022-07-12 17:25
*/
public interface BrandkbsTaskDao extends BaseMongoDao<BrandkbsTask> {
/**
* 根据任务名称获取任务
*
* @param taskName 任务名称
* @param version 版本号
* @return 任务对象
*/
BrandkbsTask findTaskByTaskNameAndVersion(String taskName, int version);
/**
* 修改定时任务版本
*
* @param task 任务对象
* @return 改变的行数
*/
long updateTaskVersion(BrandkbsTask task);
}
...@@ -3,14 +3,21 @@ package com.zhiwei.brandkbs2.dao; ...@@ -3,14 +3,21 @@ package com.zhiwei.brandkbs2.dao;
import com.zhiwei.brandkbs2.pojo.Channel; import com.zhiwei.brandkbs2.pojo.Channel;
import com.zhiwei.brandkbs2.pojo.ChannelIndex; import com.zhiwei.brandkbs2.pojo.ChannelIndex;
import java.util.Collection;
import java.util.Map;
/** /**
* @ClassName: IChannelDao * @ClassName: ChannelDao
* @Description IChannelDao * @Description ChannelDao
* @author: sjj * @author: sjj
* @date: 2022-06-16 15:30 * @date: 2022-06-16 15:30
*/ */
public interface IChannelDao extends IBaseMongoDao<Channel>{ public interface ChannelDao extends BaseMongoDao<Channel> {
Channel queryUnique(String channelFid);
Channel queryUnique(ChannelIndex channelIndex); Channel queryUnique(ChannelIndex channelIndex);
Map<String, Channel> queryUniqueAsync(Collection<String> channelFids);
} }
...@@ -10,7 +10,7 @@ import java.util.List; ...@@ -10,7 +10,7 @@ import java.util.List;
* @author: sjj * @author: sjj
* @date: 2022-06-20 16:53 * @date: 2022-06-20 16:53
*/ */
public interface IChannelLabelDao extends IBaseMongoDao<ChannelLabel>{ public interface ChannelLabelDao extends BaseMongoDao<ChannelLabel>{
List<String> getChannelLabelType(); List<String> getChannelLabelType();
......
package com.zhiwei.brandkbs2.dao;
import com.zhiwei.brandkbs2.pojo.ChannelTag;
/**
* @ClassName: ChannelTagDao
* @Description ChannelTagDao
* @author: sjj
* @date: 2022-07-13 14:28
*/
public interface ChannelTagDao extends BaseMongoDao<ChannelTag>{
String getTagByChannelName(String name);
}
package com.zhiwei.brandkbs2.dao;
import com.zhiwei.brandkbs2.pojo.CustomEvent;
/**
* @ClassName: CustomEventDao
* @Description CustomEventDao
* @author: sjj
* @date: 2022-08-04 14:00
*/
public interface CustomEventDao extends BaseMongoDao<CustomEvent>{
}
package com.zhiwei.brandkbs2.dao;
import com.zhiwei.brandkbs2.pojo.CustomEventData;
/**
* @ClassName: CustomEventDataDao
* @Description CustomEventDataDao
* @author: sjj
* @date: 2022-08-04 16:07
*/
public interface CustomEventDataDao extends BaseMongoDao<CustomEventData>{
CustomEventData queryUnique(CustomEventData customEventData);
}
...@@ -5,12 +5,12 @@ import com.zhiwei.brandkbs2.pojo.CustomTag; ...@@ -5,12 +5,12 @@ import com.zhiwei.brandkbs2.pojo.CustomTag;
import java.util.List; import java.util.List;
/** /**
* @ClassName: ICustomTagDao * @ClassName: CustomTagDao
* @Description ICustomTagDao * @Description CustomTagDao
* @author: sjj * @author: sjj
* @date: 2022-07-04 13:43 * @date: 2022-07-04 13:43
*/ */
public interface ICustomTagDao extends IBaseMongoDao<CustomTag> { public interface CustomTagDao extends BaseMongoDao<CustomTag> {
/** /**
* 查询所有自定义标签(按创建时间降序) * 查询所有自定义标签(按创建时间降序)
......
package com.zhiwei.brandkbs2.dao;
import com.zhiwei.brandkbs2.pojo.ChannelIndex;
import com.zhiwei.brandkbs2.pojo.Event;
import java.util.List;
import java.util.Map;
/**
* @ClassName: EventDao
* @Description EventDao
* @author: sjj
* @date: 2022-05-18 14:35
*/
public interface EventDao extends BaseMongoDao<Event> {
/**
* 是否已存在事件
*
* @param yqEventId 舆情事件id
* @param projectId 项目id
* @param linkedGroupId 关联项目组id
* @return 是否存在
*/
boolean existEventByUniqueIds(String yqEventId, String projectId, String linkedGroupId);
/**
* 根据联合id查询事件
*
* @param yqEventId 舆情事件id
* @param projectId 项目id
* @param contendId 竞品id
* @return 事件
*/
Event getEventByUniqueIds(String yqEventId, String projectId, String contendId);
/**
* 获取参与事件数
*
* @param channelIndex 渠道标识
* @return 参与事件数
*/
List<String> getEvents(ChannelIndex channelIndex);
/**
* 获取参与事件数
*
* @param channelIndex 渠道标识
* @return 参与事件数
*/
Map<Long, List<Event>> getEventDay(ChannelIndex channelIndex, Long startTime, Long endTime);
/**
* 获取参与事件数
*
* @param channelIndex 渠道标识
* @return 参与事件数
*/
Map<Long, List<Event>> getEventMonth(ChannelIndex channelIndex, Long startTime, Long endTime);
/**
* 获取参与的反常事件数
*
* @param channelIndex 渠道标识
* @param eventEmotions 事件情感倾向
* @param articleEmotion 文章情感倾向
* @return 参与的反常事件数
*/
long getEventCount(ChannelIndex channelIndex, 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);
List<Event> getEventsByTotalChannelVolumeTop(Long startTime, Long endTime, String emotion, String projectId, String contendId, int limit);
}
...@@ -6,14 +6,15 @@ import com.zhiwei.brandkbs2.pojo.EventData; ...@@ -6,14 +6,15 @@ import com.zhiwei.brandkbs2.pojo.EventData;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.concurrent.CompletableFuture;
/** /**
* @ClassName: IEventDataDao * @ClassName: EventDataDao
* @Description IEventDataDao * @Description EventDataDao
* @author: sjj * @author: sjj
* @date: 2022-05-19 16:08 * @date: 2022-05-19 16:08
*/ */
public interface IEventDataDao extends IBaseMongoDao<EventData>, IShardingMongo { public interface EventDataDao extends BaseMongoDao<EventData>, ShardingMongo {
/** /**
* 获取首发稿件 * 获取首发稿件
...@@ -23,12 +24,11 @@ public interface IEventDataDao extends IBaseMongoDao<EventData>, IShardingMongo ...@@ -23,12 +24,11 @@ public interface IEventDataDao extends IBaseMongoDao<EventData>, IShardingMongo
EventData findFirstData(String eventId, String collectionName); EventData findFirstData(String eventId, String collectionName);
/** /**
* 获取参与事件数 * 异步获取首发稿件并设置相关操作
* *
* @param channelIndex 渠道标识 * @return EventData
* @return 参与事件数
*/ */
List<String> getEventCount(ChannelIndex channelIndex); CompletableFuture<EventData> findFirstDataAsync(String eventId, String collectionName);
/** /**
* 获取传播量 * 获取传播量
......
package com.zhiwei.brandkbs2.dao;
import com.zhiwei.brandkbs2.pojo.EventDisseminationTrend;
import org.springframework.data.mongodb.core.query.Query;
/**
* @Description:EventDisseminationTrendDao
* @Author: shentao
* @Date: 2022/8/3 16:21
*/
public interface EventDisseminationTrendDao extends BaseMongoDao<EventDisseminationTrend>{
/**
* 按条件获取单个
* @param query
* @return
*/
EventDisseminationTrend findOne(Query query);
}
package com.zhiwei.brandkbs2.dao;
import com.zhiwei.brandkbs2.pojo.EventTopArticlesAnalysis;
/**
* @Description:EventTopArticlesAnalysisDao
* @Author: shentao
* @Date: 2022/8/3 16:23
*/
public interface EventTopArticlesAnalysisDao extends BaseMongoDao<EventTopArticlesAnalysis>{
void deleteByEventId(String eventId);
}
...@@ -3,10 +3,10 @@ package com.zhiwei.brandkbs2.dao; ...@@ -3,10 +3,10 @@ package com.zhiwei.brandkbs2.dao;
import com.zhiwei.brandkbs2.pojo.HighWord; import com.zhiwei.brandkbs2.pojo.HighWord;
/** /**
* @ClassName: IHighWordDao * @ClassName: HighWordDao
* @Description IHighWordDao * @Description HighWordDao
* @author: sjj * @author: sjj
* @date: 2022-06-06 09:47 * @date: 2022-06-06 09:47
*/ */
public interface IHighWordDao extends IBaseMongoDao<HighWord>{ public interface HighWordDao extends BaseMongoDao<HighWord>{
} }
package com.zhiwei.brandkbs2.dao;
import com.zhiwei.brandkbs2.pojo.Event;
/**
* @ClassName: IEventDao
* @Description IEventDao
* @author: sjj
* @date: 2022-05-18 14:35
*/
public interface IEventDao extends IBaseMongoDao<Event>{
/**
* 是否已存在事件
*
* @param yqEventId 舆情事件id
* @param projectId 项目id
* @param linkedGroupId 关联项目组id
* @return 是否存在
*/
boolean existEventByUniqueIds(String yqEventId, String projectId, String linkedGroupId);
/**
* 根据联合id查询事件
*
* @param yqEventId 舆情事件id
* @param projectId 项目id
* @param linkedGroupId 关联项目id
* @return 事件
*/
Event getEventByUniqueIds(String yqEventId,String projectId,String linkedGroupId);
}
package com.zhiwei.brandkbs2.dao;
import com.zhiwei.brandkbs2.pojo.MediaType;
/**
* @ClassName: MediaTypeDao
* @Description MediaTypeDao
* @author: sjj
* @date: 2022-08-05 09:49
*/
public interface MediaTypeDao extends BaseMongoDao<MediaType>{
MediaType queryUnique(String source,String platform,String projectId);
}
...@@ -5,9 +5,9 @@ import com.zhiwei.brandkbs2.pojo.Project; ...@@ -5,9 +5,9 @@ import com.zhiwei.brandkbs2.pojo.Project;
/** /**
* @author sjj * @author sjj
* @version 1.0 * @version 1.0
* @description IProjectDao * @description ProjectDao
* @date 2022年4月20日17:38:54 * @date 2022年4月20日17:38:54
*/ */
public interface IProjectDao extends IBaseMongoDao<Project>{ public interface ProjectDao extends BaseMongoDao<Project>{
} }
...@@ -6,14 +6,14 @@ import com.zhiwei.qbjc.bean.pojo.common.Tag; ...@@ -6,14 +6,14 @@ import com.zhiwei.qbjc.bean.pojo.common.Tag;
import java.util.List; import java.util.List;
/** /**
* IQbjcPojoDao-interface * QbjcPojoDao-interface
* *
* @ClassName: IQbjcPojoDao * @ClassName: QbjcPojoDao
* @Description IQbjcPojoDao-interface * @Description QbjcPojoDao-interface
* @author sjj * @author sjj
* @date 2022年6月16日14:23:36 * @date 2022年6月16日14:23:36
*/ */
public interface IQbjcPojoDao { public interface QbjcPojoDao {
/** /**
* 获取qbjcPlatform * 获取qbjcPlatform
......
package com.zhiwei.brandkbs2.dao; package com.zhiwei.brandkbs2.dao;
import com.alibaba.fastjson.JSONObject;
import com.zhiwei.brandkbs2.pojo.Report; import com.zhiwei.brandkbs2.pojo.Report;
import java.util.List;
/** /**
* @ClassName: IReportDao * @ClassName: ReportDao
* @Description IReportDao * @Description ReportDao
* @author: sjj * @author: sjj
* @date: 2022-05-31 18:13 * @date: 2022-05-31 18:13
*/ */
public interface IReportDao extends IBaseMongoDao<Report> { public interface ReportDao extends BaseMongoDao<Report> {
List<JSONObject> getReportAggCount(String projectId);
} }
...@@ -2,11 +2,16 @@ package com.zhiwei.brandkbs2.dao; ...@@ -2,11 +2,16 @@ package com.zhiwei.brandkbs2.dao;
import com.zhiwei.brandkbs2.pojo.ReportSettings; import com.zhiwei.brandkbs2.pojo.ReportSettings;
import java.util.List;
/** /**
* @ClassName: IReportSettingsDao * @ClassName: ReportSettingsDao
* @Description IReportSettingsDao * @Description ReportSettingsDao
* @author: sjj * @author: sjj
* @date: 2022-05-31 18:13 * @date: 2022-05-31 18:13
*/ */
public interface IReportSettingsDao extends IBaseMongoDao<ReportSettings> { public interface ReportSettingsDao extends BaseMongoDao<ReportSettings> {
List<ReportSettings> getReportSettingByProjectWithUsed(String projectId);
} }
...@@ -5,12 +5,12 @@ import com.zhiwei.brandkbs2.util.IndexUtil; ...@@ -5,12 +5,12 @@ import com.zhiwei.brandkbs2.util.IndexUtil;
import java.util.Date; import java.util.Date;
/** /**
* @ClassName: IShardingMongo * @ClassName: ShardingMongo
* @Description 分库mongo接口 * @Description 分库mongo接口
* @author: sjj * @author: sjj
* @date: 2022-05-27 11:29 * @date: 2022-05-27 11:29
*/ */
public interface IShardingMongo { public interface ShardingMongo {
String collectionPrefix(); String collectionPrefix();
......
...@@ -3,10 +3,10 @@ package com.zhiwei.brandkbs2.dao; ...@@ -3,10 +3,10 @@ package com.zhiwei.brandkbs2.dao;
import com.zhiwei.brandkbs2.pojo.TagFilter; import com.zhiwei.brandkbs2.pojo.TagFilter;
/** /**
* @ClassName: ITagFilterDao * @ClassName: TagFilterDao
* @Description ITagFilterDao * @Description TagFilterDao
* @author: sjj * @author: sjj
* @date: 2022-06-01 13:52 * @date: 2022-06-01 13:52
*/ */
public interface ITagFilterDao extends IBaseMongoDao<TagFilter>{ public interface TagFilterDao extends BaseMongoDao<TagFilter>{
} }
...@@ -3,11 +3,11 @@ package com.zhiwei.brandkbs2.dao; ...@@ -3,11 +3,11 @@ package com.zhiwei.brandkbs2.dao;
import com.zhiwei.brandkbs2.pojo.User; import com.zhiwei.brandkbs2.pojo.User;
/** /**
* @ClassName: IUserDao * @ClassName: UserDao
* @Description 用户相关接口 * @Description 用户相关接口
* @author: sjj * @author: sjj
* @date: 2022-04-28 18:10 * @date: 2022-04-28 18:10
*/ */
public interface IUserDao extends IBaseMongoDao<User>{ public interface UserDao extends BaseMongoDao<User>{
} }
package com.zhiwei.brandkbs2.dao.impl;
import com.mongodb.client.result.DeleteResult;
import com.zhiwei.brandkbs2.dao.AggreeResultDao;
import com.zhiwei.brandkbs2.pojo.AggreeResult;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
/**
* @ClassName: AggreeResultDaoImpl
* @Description AggreeResultDaoImpl
* @author: sjj
* @date: 2022-07-18 09:50
*/
@Service("aggreeResultDaoImpl")
public class AggreeResultDaoImpl extends BaseMongoDaoImpl<AggreeResult> implements AggreeResultDao {
private static final String COLLECTION_NAME = "brandkbs_aggree_result";
public AggreeResultDaoImpl() {
super(COLLECTION_NAME);
}
@Override
public long deleteExpire(long expireTime) {
Query query = Query.query(Criteria.where("cTime").lt(expireTime));
DeleteResult remove = mongoTemplate.remove(query, COLLECTION_NAME);
return remove.getDeletedCount();
}
}
package com.zhiwei.brandkbs2.dao.impl; package com.zhiwei.brandkbs2.dao.impl;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.zhiwei.brandkbs2.dao.IBaseMongoDao; import com.zhiwei.brandkbs2.dao.BaseMongoDao;
import com.zhiwei.brandkbs2.pojo.AbstractBaseMongo; import com.zhiwei.brandkbs2.pojo.AbstractBaseMongo;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.bson.Document; import org.bson.Document;
...@@ -10,6 +10,7 @@ import org.springframework.data.mongodb.core.MongoTemplate; ...@@ -10,6 +10,7 @@ import org.springframework.data.mongodb.core.MongoTemplate;
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;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.lang.reflect.ParameterizedType; import java.lang.reflect.ParameterizedType;
...@@ -24,7 +25,7 @@ import java.util.regex.Pattern; ...@@ -24,7 +25,7 @@ import java.util.regex.Pattern;
* @author: sjj * @author: sjj
* @date: 2022-04-29 15:11 * @date: 2022-04-29 15:11
*/ */
public class BaseMongoDaoImpl<T extends AbstractBaseMongo> implements IBaseMongoDao<T> { public class BaseMongoDaoImpl<T extends AbstractBaseMongo> implements BaseMongoDao<T> {
protected static final String ID = "_id"; protected static final String ID = "_id";
private final String collectionName; private final String collectionName;
...@@ -33,6 +34,9 @@ public class BaseMongoDaoImpl<T extends AbstractBaseMongo> implements IBaseMongo ...@@ -33,6 +34,9 @@ public class BaseMongoDaoImpl<T extends AbstractBaseMongo> implements IBaseMongo
@Resource(name = "primaryMongoTemplate") @Resource(name = "primaryMongoTemplate")
protected MongoTemplate mongoTemplate; protected MongoTemplate mongoTemplate;
@Resource(name = "mongoQueryExecutor")
protected ThreadPoolTaskExecutor taskExecutor;
public BaseMongoDaoImpl(String collectionName) { public BaseMongoDaoImpl(String collectionName) {
this.collectionName = collectionName; this.collectionName = collectionName;
this.clazz = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; this.clazz = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
...@@ -77,6 +81,16 @@ public class BaseMongoDaoImpl<T extends AbstractBaseMongo> implements IBaseMongo ...@@ -77,6 +81,16 @@ public class BaseMongoDaoImpl<T extends AbstractBaseMongo> implements IBaseMongo
} }
@Override @Override
public void deleteOneByQuery(Query query, String... collectionNames) {
mongoTemplate.remove(query, getCollections(collectionNames)[0]);
}
@Override
public void deleteOneByIdWithQuery(String id, Query query, String... collectionNames) {
mongoTemplate.remove(query.addCriteria(Criteria.where(ID).is(id)), getCollections(collectionNames)[0]);
}
@Override
public T findOneById(String id, String... collectionNames) { public T findOneById(String id, String... collectionNames) {
return mongoTemplate.findOne(new Query(Criteria.where(ID).is(id)), clazz, getCollections(collectionNames)[0]); return mongoTemplate.findOne(new Query(Criteria.where(ID).is(id)), clazz, getCollections(collectionNames)[0]);
} }
...@@ -119,10 +133,18 @@ public class BaseMongoDaoImpl<T extends AbstractBaseMongo> implements IBaseMongo ...@@ -119,10 +133,18 @@ public class BaseMongoDaoImpl<T extends AbstractBaseMongo> implements IBaseMongo
@Override @Override
public long count(Query preQuery, String... collectionNames) { public long count(Query preQuery, String... collectionNames) {
return count(preQuery, null, null, collectionNames);
}
@Override
public long count(Query preQuery, String keyword, String[] matchFields, String... collectionNames) {
Query query = new Query(); Query query = new Query();
if (null != preQuery) { if (null != preQuery) {
query = preQuery; query = preQuery;
} }
if (StringUtils.isNotEmpty(keyword)) {
addKeywordFuzz(query, keyword, matchFields);
}
long count = 0; long count = 0;
for (String collection : getCollections(collectionNames)) { for (String collection : getCollections(collectionNames)) {
count += mongoTemplate.count(query, collection); count += mongoTemplate.count(query, collection);
......
package com.zhiwei.brandkbs2.dao.impl; package com.zhiwei.brandkbs2.dao.impl;
import com.zhiwei.brandkbs2.dao.IBehaviorDao; import com.zhiwei.brandkbs2.dao.BehaviorDao;
import com.zhiwei.brandkbs2.pojo.Behavior; import com.zhiwei.brandkbs2.pojo.Behavior;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -11,7 +11,7 @@ import org.springframework.stereotype.Component; ...@@ -11,7 +11,7 @@ import org.springframework.stereotype.Component;
* @date: 2022-05-27 13:48 * @date: 2022-05-27 13:48
*/ */
@Component("behaviorDao") @Component("behaviorDao")
public class BehaviorDaoImpl extends BaseMongoDaoImpl<Behavior> implements IBehaviorDao { public class BehaviorDaoImpl extends BaseMongoDaoImpl<Behavior> implements BehaviorDao {
private static final String COLLECTION_PREFIX = "brandkbs_behavior"; private static final String COLLECTION_PREFIX = "brandkbs_behavior";
private static final String TIME_PATTERN = "yyyyMM"; private static final String TIME_PATTERN = "yyyyMM";
......
package com.zhiwei.brandkbs2.dao.impl;
import com.zhiwei.brandkbs2.dao.BrandkbsTaskDao;
import com.zhiwei.brandkbs2.pojo.BrandkbsTask;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Component;
/**
* @ClassName: BrandkbsTaskDaoImpl
* @Description BrandkbsTaskDaoImpl
* @author: sjj
* @date: 2022-07-12 17:27
*/
@Component("brandkbsTaskDao")
public class BrandkbsTaskDaoImpl extends BaseMongoDaoImpl<BrandkbsTask> implements BrandkbsTaskDao {
private static final String COLLECTION_NAME = "brandkbs_task";
public BrandkbsTaskDaoImpl() {
super(COLLECTION_NAME);
}
@Override
public BrandkbsTask findTaskByTaskNameAndVersion(String taskName, int version) {
Query query = Query.query(Criteria.where("taskName").is(taskName).and("version").is(version));
return mongoTemplate.findOne(query, clazz, COLLECTION_NAME);
}
@Override
public long updateTaskVersion(BrandkbsTask task) {
int version = task.getVersion();
Query query =
Query.query(Criteria.where("_id").is(task.getId()).and("version").is(version).and("executableTime").is(task.getExecutableTime()));
return mongoTemplate.updateFirst(query, Update.update("version", ++version), COLLECTION_NAME).getModifiedCount();
}
}
package com.zhiwei.brandkbs2.dao.impl; package com.zhiwei.brandkbs2.dao.impl;
import com.zhiwei.brandkbs2.dao.IChannelDao; import com.zhiwei.brandkbs2.dao.ChannelDao;
import com.zhiwei.brandkbs2.pojo.Channel; import com.zhiwei.brandkbs2.pojo.Channel;
import com.zhiwei.brandkbs2.pojo.ChannelIndex; import com.zhiwei.brandkbs2.pojo.ChannelIndex;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Qualifier;
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.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.*;
import java.util.concurrent.CompletableFuture;
/** /**
* @ClassName: ChannelDaoImpl * @ClassName: ChannelDaoImpl
* @Description ChannelDaoImpl * @Description ChannelDaoImpl
...@@ -14,19 +22,54 @@ import org.springframework.stereotype.Component; ...@@ -14,19 +22,54 @@ import org.springframework.stereotype.Component;
* @date: 2022-06-16 15:31 * @date: 2022-06-16 15:31
*/ */
@Component("channelDao") @Component("channelDao")
public class ChannelDaoImpl extends BaseMongoDaoImpl<Channel> implements IChannelDao { public class ChannelDaoImpl extends BaseMongoDaoImpl<Channel> implements ChannelDao {
private static final Logger log = LogManager.getLogger(ChannelDaoImpl.class);
private static final String COLLECTION_NAME = "brandkbs_channel";
private final ThreadPoolTaskExecutor executor;
private static final String COLLECTION_PREFIX = "brandkbs_channel"; public ChannelDaoImpl(@Qualifier("mongoQueryExecutor") ThreadPoolTaskExecutor executor) {
super(COLLECTION_NAME);
this.executor = executor;
}
public ChannelDaoImpl() { @Override
super(COLLECTION_PREFIX); public Channel queryUnique(String channelFid) {
Query query = Query.query(Criteria.where("fid").is(channelFid));
return mongoTemplate.findOne(query, clazz, COLLECTION_NAME);
} }
@Override @Override
public Channel queryUnique(ChannelIndex channelIndex) { public Channel queryUnique(ChannelIndex channelIndex) {
Query query = Query.query(Criteria.where("linkedGroupId").is(channelIndex.getLinkedGroupId()).and("platform").is(channelIndex.getPlatform()).and( if (null == channelIndex) {
"realSource").is(channelIndex.getRealSource()).and("source").is(channelIndex.getSource())); return null;
return mongoTemplate.findOne(query, clazz); }
// Query query = Query.query(Criteria.where("linkedGroupId").is(channelIndex.getLinkedGroupId()).
// and("projectId").is(channelIndex.getProjectId()).
// and("platform").is(channelIndex.getPlatform()).
// and("realSource").is(channelIndex.getRealSource()).
// and("source").is(channelIndex.getSource()));
return queryUnique(channelIndex.getFid());
}
@Override
public Map<String, Channel> queryUniqueAsync(Collection<String> channelFids) {
Map<String, Channel> res = new HashMap<>();
List<CompletableFuture<Pair<String, Channel>>> futureList = new ArrayList<>();
for (String fid : channelFids) {
futureList.add(CompletableFuture.supplyAsync(() -> Pair.of(fid, queryUnique(fid)), executor));
}
CompletableFuture.allOf(futureList.toArray(new CompletableFuture[0])).whenComplete((r, e) -> {
for (CompletableFuture<Pair<String, Channel>> future : futureList) {
try {
Pair<String, Channel> channelPair = future.get();
res.put(channelPair.getLeft(), channelPair.getRight());
} catch (Exception e1) {
log.error("queryUniqueAsync", e1);
}
}
}).join();
return res;
} }
} }
package com.zhiwei.brandkbs2.dao.impl; package com.zhiwei.brandkbs2.dao.impl;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.zhiwei.brandkbs2.dao.IChannelLabelDao; import com.zhiwei.brandkbs2.dao.ChannelLabelDao;
import com.zhiwei.brandkbs2.pojo.ChannelLabel; import com.zhiwei.brandkbs2.pojo.ChannelLabel;
import org.springframework.data.mongodb.core.aggregation.Aggregation; import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.AggregationResults; import org.springframework.data.mongodb.core.aggregation.AggregationResults;
...@@ -17,7 +17,7 @@ import java.util.stream.Collectors; ...@@ -17,7 +17,7 @@ import java.util.stream.Collectors;
* @date: 2022-06-20 16:56 * @date: 2022-06-20 16:56
*/ */
@Component("channelLabelDao") @Component("channelLabelDao")
public class ChannelLabelDaoImpl extends BaseMongoDaoImpl<ChannelLabel> implements IChannelLabelDao { public class ChannelLabelDaoImpl extends BaseMongoDaoImpl<ChannelLabel> implements ChannelLabelDao {
private static final String COLLECTION_NAME = "brandkbs_channel_label"; private static final String COLLECTION_NAME = "brandkbs_channel_label";
......
package com.zhiwei.brandkbs2.dao.impl;
import com.zhiwei.brandkbs2.dao.ChannelTagDao;
import com.zhiwei.brandkbs2.pojo.ChannelTag;
import org.springframework.stereotype.Component;
/**
* @ClassName: ChannelTagDaoImpl
* @Description ChannelTagDaoImpl
* @author: sjj
* @date: 2022-07-13 14:29
*/
@Component("channelTagDao")
public class ChannelTagDaoImpl extends BaseMongoDaoImpl<ChannelTag> implements ChannelTagDao {
private static final String COLLECTION_NAME = "brandkbs_channel_tag";
public ChannelTagDaoImpl() {
super(COLLECTION_NAME);
}
@Override
public String getTagByChannelName(String name) {
ChannelTag channelTag = findOne("channel", name);
if (null == channelTag) {
return null;
}
return channelTag.getTag().replaceAll(",", "|");
}
}
package com.zhiwei.brandkbs2.dao.impl;
import com.zhiwei.brandkbs2.dao.CustomEventDao;
import com.zhiwei.brandkbs2.pojo.CustomEvent;
import org.springframework.stereotype.Component;
/**
* @ClassName: CustomEventDaoImpl
* @Description CustomEventDaoImpl
* @author: sjj
* @date: 2022-08-04 14:01
*/
@Component
public class CustomEventDaoImpl extends BaseMongoDaoImpl<CustomEvent> implements CustomEventDao {
private static final String COLLECTION_NAME = "brandkbs_custom_event";
public CustomEventDaoImpl() {
super(COLLECTION_NAME);
}
}
package com.zhiwei.brandkbs2.dao.impl;
import com.zhiwei.brandkbs2.dao.CustomEventDataDao;
import com.zhiwei.brandkbs2.pojo.CustomEventData;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Component;
import java.util.Objects;
/**
* @ClassName: CustomEventDataDaoImpl
* @Description CustomEventDataDaoImpl
* @author: sjj
* @date: 2022-08-04 16:08
*/
@Component
public class CustomEventDataDaoImpl extends BaseMongoDaoImpl<CustomEventData> implements CustomEventDataDao {
private static final String COLLECTION_NAME = "brandkbs_custom_event_data";
public CustomEventDataDaoImpl() {
super(COLLECTION_NAME);
}
@Override
public CustomEventData queryUnique(CustomEventData customEventData) {
Objects.requireNonNull(customEventData.getCustomEventId());
Objects.requireNonNull(customEventData.getMarkDataId());
Objects.requireNonNull(customEventData.getProjectId());
Criteria criteria = Criteria.where("customEventId").is(customEventData.getCustomEventId());
criteria.and("markDataId").is(customEventData.getMarkDataId());
criteria.and("projectId").is(customEventData.getProjectId());
return mongoTemplate.findOne(Query.query(criteria), clazz, COLLECTION_NAME);
}
}
package com.zhiwei.brandkbs2.dao.impl; package com.zhiwei.brandkbs2.dao.impl;
import com.zhiwei.brandkbs2.dao.ICustomTagDao; import com.zhiwei.brandkbs2.dao.CustomTagDao;
import com.zhiwei.brandkbs2.pojo.CustomTag; import com.zhiwei.brandkbs2.pojo.CustomTag;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -14,7 +14,7 @@ import java.util.List; ...@@ -14,7 +14,7 @@ import java.util.List;
* @date: 2022-07-04 13:46 * @date: 2022-07-04 13:46
*/ */
@Component("customTagDao") @Component("customTagDao")
public class CustomTagDaoImpl extends BaseMongoDaoImpl<CustomTag> implements ICustomTagDao { public class CustomTagDaoImpl extends BaseMongoDaoImpl<CustomTag> implements CustomTagDao {
private static final String COLLECTION_NAME = "brandkbs_custom_tag"; private static final String COLLECTION_NAME = "brandkbs_custom_tag";
public CustomTagDaoImpl() { public CustomTagDaoImpl() {
......
package com.zhiwei.brandkbs2.dao.impl; package com.zhiwei.brandkbs2.dao.impl;
import com.alibaba.fastjson.JSONObject; import com.zhiwei.brandkbs2.dao.EventDataDao;
import com.zhiwei.brandkbs2.dao.IEventDataDao;
import com.zhiwei.brandkbs2.pojo.ChannelIndex; import com.zhiwei.brandkbs2.pojo.ChannelIndex;
import com.zhiwei.brandkbs2.pojo.Event; import com.zhiwei.brandkbs2.pojo.Event;
import com.zhiwei.brandkbs2.pojo.EventData; import com.zhiwei.brandkbs2.pojo.EventData;
import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.AggregationResults;
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.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.concurrent.CompletableFuture;
/** /**
* @ClassName: EventDataDaoImpl * @ClassName: EventDataDaoImpl
...@@ -23,9 +20,9 @@ import java.util.stream.Collectors; ...@@ -23,9 +20,9 @@ import java.util.stream.Collectors;
* @date: 2022-05-19 17:42 * @date: 2022-05-19 17:42
*/ */
@Component("eventDataDao") @Component("eventDataDao")
public class EventDataDaoImpl extends BaseMongoDaoImpl<EventData> implements IEventDataDao { public class EventDataDaoImpl extends BaseMongoDaoImpl<EventData> implements EventDataDao {
private static final String COLLECTION_PREFIX = "brandkbs_event_data"; protected static final String COLLECTION_PREFIX = "brandkbs_event_data_";
private static final String TIME_PATTERN = "yyyy"; private static final String TIME_PATTERN = "yyyy";
public EventDataDaoImpl() { public EventDataDaoImpl() {
...@@ -52,14 +49,8 @@ public class EventDataDaoImpl extends BaseMongoDaoImpl<EventData> implements IEv ...@@ -52,14 +49,8 @@ public class EventDataDaoImpl extends BaseMongoDaoImpl<EventData> implements IEv
} }
@Override @Override
public List<String> getEventCount(ChannelIndex channelIndex) { public CompletableFuture<EventData> findFirstDataAsync(String eventId, String collectionName) {
// 添加渠道唯一标识 return CompletableFuture.supplyAsync(() -> findFirstData(eventId, collectionName), taskExecutor);
Criteria criteria = addChannelIndex(channelIndex);
// 分组
Aggregation agg = Aggregation.newAggregation(Aggregation.match(criteria), Aggregation.group("eventId").count().as("eventCount"));
AggregationResults<JSONObject> aggregate = mongoTemplate.aggregate(agg, "brandkbs_event_data_2022", JSONObject.class);
List<JSONObject> mappedResults = aggregate.getMappedResults();
return mappedResults.stream().map(json -> json.getString("_id")).collect(Collectors.toList());
} }
@Override @Override
......
package com.zhiwei.brandkbs2.dao.impl;
import com.zhiwei.brandkbs2.dao.EventDisseminationTrendDao;
import com.zhiwei.brandkbs2.pojo.EventDisseminationTrend;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Component;
/**
* @Description:
* @Author: shentao
* @Date: 2022/8/4 16:53
*/
@Component("eventDisseminationTrendDao")
public class EventDisseminationTrendDaoImpl extends BaseMongoDaoImpl<EventDisseminationTrend> implements EventDisseminationTrendDao {
private static final String COLLECTION_NAME = "brandkbs_event_dissemination_trend";
public EventDisseminationTrendDaoImpl() {
super(COLLECTION_NAME);
}
@Override
public EventDisseminationTrend findOne(Query query) {
return mongoTemplate.findOne(query, EventDisseminationTrend.class, COLLECTION_NAME);
}
}
package com.zhiwei.brandkbs2.dao.impl;
import com.zhiwei.brandkbs2.dao.EventTopArticlesAnalysisDao;
import com.zhiwei.brandkbs2.pojo.EventTopArticlesAnalysis;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Component;
/**
* @Description:
* @Author: shentao
* @Date: 2022/8/3 16:23
*/
@Component("eventTopArticlesAnalysisDao")
public class EventTopArticlesAnalysisDaoImpl extends BaseMongoDaoImpl<EventTopArticlesAnalysis> implements EventTopArticlesAnalysisDao {
private static final String COLLECTION_NAME = "brandkbs_event_top_articles_analysis";
public EventTopArticlesAnalysisDaoImpl() {
super(COLLECTION_NAME);
}
@Override
public void deleteByEventId(String eventId) {
mongoTemplate.remove(Query.query(Criteria.where("eventId").is(eventId)), COLLECTION_NAME);
}
}
package com.zhiwei.brandkbs2.dao.impl; package com.zhiwei.brandkbs2.dao.impl;
import com.zhiwei.brandkbs2.dao.IHighWordDao; import com.zhiwei.brandkbs2.dao.HighWordDao;
import com.zhiwei.brandkbs2.pojo.HighWord; import com.zhiwei.brandkbs2.pojo.HighWord;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -11,7 +11,7 @@ import org.springframework.stereotype.Component; ...@@ -11,7 +11,7 @@ import org.springframework.stereotype.Component;
* @date: 2022-06-06 09:48 * @date: 2022-06-06 09:48
*/ */
@Component("highWordDao") @Component("highWordDao")
public class HighWordDaoImpl extends BaseMongoDaoImpl<HighWord> implements IHighWordDao { public class HighWordDaoImpl extends BaseMongoDaoImpl<HighWord> implements HighWordDao {
private static final String COLLECTION_NAME = "brandkbs_high_word"; private static final String COLLECTION_NAME = "brandkbs_high_word";
public HighWordDaoImpl() { public HighWordDaoImpl() {
......
package com.zhiwei.brandkbs2.dao.impl;
import com.zhiwei.brandkbs2.dao.MediaTypeDao;
import com.zhiwei.brandkbs2.pojo.MediaType;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Component;
/**
* @ClassName: MediaTypeDaoImpl
* @Description MediaTypeDaoImpl
* @author: sjj
* @date: 2022-08-05 09:50
*/
@Component
public class MediaTypeDaoImpl extends BaseMongoDaoImpl<MediaType> implements MediaTypeDao {
private static final String COLLECTION_NAME = "brandkbs_media_type";
public MediaTypeDaoImpl() {
super(COLLECTION_NAME);
}
@Override
public MediaType queryUnique(String source, String platform, String projectId) {
Query query = new Query();
query.addCriteria(Criteria.where("channel").is(source).and("platform").is(platform).and("projectId").is(projectId));
return mongoTemplate.findOne(query, clazz, COLLECTION_NAME);
}
}
package com.zhiwei.brandkbs2.dao.impl; package com.zhiwei.brandkbs2.dao.impl;
import com.zhiwei.brandkbs2.dao.IProjectDao; import com.zhiwei.brandkbs2.dao.ProjectDao;
import com.zhiwei.brandkbs2.pojo.Project; import com.zhiwei.brandkbs2.pojo.Project;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -11,7 +11,7 @@ import org.springframework.stereotype.Component; ...@@ -11,7 +11,7 @@ import org.springframework.stereotype.Component;
* @date: 2022-04-21 13:51 * @date: 2022-04-21 13:51
*/ */
@Component("projectDao") @Component("projectDao")
public class ProjectDaoImlp extends BaseMongoDaoImpl<Project> implements IProjectDao { public class ProjectDaoImlp extends BaseMongoDaoImpl<Project> implements ProjectDao {
private static final String COLLECTION_NAME = "brandkbs_project"; private static final String COLLECTION_NAME = "brandkbs_project";
......
package com.zhiwei.brandkbs2.dao.impl; package com.zhiwei.brandkbs2.dao.impl;
import com.zhiwei.brandkbs2.dao.IQbjcPojoDao; import com.zhiwei.brandkbs2.dao.QbjcPojoDao;
import com.zhiwei.qbjc.bean.pojo.common.MessagePlatform; import com.zhiwei.qbjc.bean.pojo.common.MessagePlatform;
import com.zhiwei.qbjc.bean.pojo.common.Tag; import com.zhiwei.qbjc.bean.pojo.common.Tag;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -17,14 +18,14 @@ import java.util.List; ...@@ -17,14 +18,14 @@ import java.util.List;
* @date: 2022-06-16 14:24 * @date: 2022-06-16 14:24
*/ */
@Component("qbjcPojoDao") @Component("qbjcPojoDao")
public class QbjcPojoDao implements IQbjcPojoDao { public class QbjcPojoDaoImpl implements QbjcPojoDao {
@Resource(name = "secondaryMongoTemplate") @Resource(name = "secondaryMongoTemplate")
protected MongoTemplate mongoTemplate; protected MongoTemplate mongoTemplate;
@Override @Override
public List<MessagePlatform> findMessagePlatformAll() { public List<MessagePlatform> findMessagePlatformAll() {
return mongoTemplate.find(new Query(), MessagePlatform.class); return mongoTemplate.find(new Query().with(Sort.by(Sort.Order.asc("_id"))), MessagePlatform.class);
} }
@Override @Override
......
package com.zhiwei.brandkbs2.dao.impl; package com.zhiwei.brandkbs2.dao.impl;
import com.zhiwei.brandkbs2.dao.IReportDao; import com.alibaba.fastjson.JSONObject;
import com.zhiwei.brandkbs2.auth.UserThreadLocal;
import com.zhiwei.brandkbs2.dao.ReportDao;
import com.zhiwei.brandkbs2.pojo.Report; import com.zhiwei.brandkbs2.pojo.Report;
import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.AggregationResults;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List;
/** /**
* @ClassName: ReportDaoImpl * @ClassName: ReportDaoImpl
* @Description ReportDaoImpl * @Description ReportDaoImpl
...@@ -11,10 +18,25 @@ import org.springframework.stereotype.Component; ...@@ -11,10 +18,25 @@ import org.springframework.stereotype.Component;
* @date: 2022-05-31 18:14 * @date: 2022-05-31 18:14
*/ */
@Component("reportDao") @Component("reportDao")
public class ReportDaoImpl extends BaseMongoDaoImpl<Report> implements IReportDao { public class ReportDaoImpl extends BaseMongoDaoImpl<Report> implements ReportDao {
private static final String COLLECTION_NAME = "brandkbs_report"; private static final String COLLECTION_NAME = "brandkbs_report";
public ReportDaoImpl() { public ReportDaoImpl() {
super(COLLECTION_NAME); super(COLLECTION_NAME);
} }
@Override
public List<JSONObject> getReportAggCount(String projectId) {
// 添加渠道唯一标识
Criteria criteria = Criteria.where("projectId").is(projectId);
// personal简报
criteria.orOperator(Criteria.where("userId").exists(false), Criteria.where("userId").is(UserThreadLocal.getUserId()));
// 分组
Aggregation aggregation = Aggregation.newAggregation(Aggregation.match(criteria),
//
Aggregation.project("publishTime", "type").andExpression("add(new java.util.Date(0l),publishTime)").substring(0, 4).as("year"),
Aggregation.group("type", "year").count().as("count"));
AggregationResults<JSONObject> aggregate = mongoTemplate.aggregate(aggregation, COLLECTION_NAME, JSONObject.class);
return aggregate.getMappedResults();
}
} }
package com.zhiwei.brandkbs2.dao.impl; package com.zhiwei.brandkbs2.dao.impl;
import com.zhiwei.brandkbs2.dao.IReportSettingsDao; import com.zhiwei.brandkbs2.dao.ReportSettingsDao;
import com.zhiwei.brandkbs2.pojo.ReportSettings; import com.zhiwei.brandkbs2.pojo.ReportSettings;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List;
/** /**
* @ClassName: ReportSettingsDaoImpl * @ClassName: ReportSettingsDaoImpl
* @Description ReportSettingsDaoImpl * @Description ReportSettingsDaoImpl
...@@ -11,10 +15,17 @@ import org.springframework.stereotype.Component; ...@@ -11,10 +15,17 @@ import org.springframework.stereotype.Component;
* @date: 2022-05-31 18:14 * @date: 2022-05-31 18:14
*/ */
@Component("reportSettingsDao") @Component("reportSettingsDao")
public class ReportSettingsDaoImpl extends BaseMongoDaoImpl<ReportSettings> implements IReportSettingsDao { public class ReportSettingsDaoImpl extends BaseMongoDaoImpl<ReportSettings> implements ReportSettingsDao {
private static final String COLLECTION_NAME = "brandkbs_report_settings"; private static final String COLLECTION_NAME = "brandkbs_report_settings";
public ReportSettingsDaoImpl() { public ReportSettingsDaoImpl() {
super(COLLECTION_NAME); super(COLLECTION_NAME);
} }
@Override
public List<ReportSettings> getReportSettingByProjectWithUsed(String projectId) {
Query query = Query.query(Criteria.where("projectId").is(projectId).and("used").is(true));
return findList(query);
}
} }
package com.zhiwei.brandkbs2.dao.impl; package com.zhiwei.brandkbs2.dao.impl;
import com.zhiwei.brandkbs2.dao.ITagFilterDao; import com.zhiwei.brandkbs2.dao.TagFilterDao;
import com.zhiwei.brandkbs2.pojo.TagFilter; import com.zhiwei.brandkbs2.pojo.TagFilter;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -11,7 +11,7 @@ import org.springframework.stereotype.Component; ...@@ -11,7 +11,7 @@ import org.springframework.stereotype.Component;
* @date: 2022-06-01 14:26 * @date: 2022-06-01 14:26
*/ */
@Component("tagFilterDao") @Component("tagFilterDao")
public class TagFilterDaoImpl extends BaseMongoDaoImpl<TagFilter> implements ITagFilterDao { public class TagFilterDaoImpl extends BaseMongoDaoImpl<TagFilter> implements TagFilterDao {
private static final String COLLECTION_NAME = "brandkbs_tag_filter"; private static final String COLLECTION_NAME = "brandkbs_tag_filter";
public TagFilterDaoImpl() { public TagFilterDaoImpl() {
......
package com.zhiwei.brandkbs2.dao.impl; package com.zhiwei.brandkbs2.dao.impl;
import com.zhiwei.brandkbs2.dao.IUserDao; import com.zhiwei.brandkbs2.dao.UserDao;
import com.zhiwei.brandkbs2.pojo.User; import com.zhiwei.brandkbs2.pojo.User;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -11,7 +11,7 @@ import org.springframework.stereotype.Component; ...@@ -11,7 +11,7 @@ import org.springframework.stereotype.Component;
* @date: 2022-04-28 18:10 * @date: 2022-04-28 18:10
*/ */
@Component("userDao") @Component("userDao")
public class UserDaoImpl extends BaseMongoDaoImpl<User> implements IUserDao { public class UserDaoImpl extends BaseMongoDaoImpl<User> implements UserDao {
private static final String COLLECTION_NAME = "brandkbs_user"; private static final String COLLECTION_NAME = "brandkbs_user";
......
...@@ -6,8 +6,6 @@ import lombok.Setter; ...@@ -6,8 +6,6 @@ import lombok.Setter;
import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Date;
/** /**
* @ClassName: UserProjectOldImpl * @ClassName: UserProjectOldImpl
* @Description 用户项目关联旧表 * @Description 用户项目关联旧表
...@@ -28,7 +26,7 @@ public class UserProjectOldDaoImpl extends BaseMongoDaoImpl<UserProjectOldDaoImp ...@@ -28,7 +26,7 @@ public class UserProjectOldDaoImpl extends BaseMongoDaoImpl<UserProjectOldDaoImp
public static class UserProjectOld extends AbstractBaseMongo{ public static class UserProjectOld extends AbstractBaseMongo{
String userId; String userId;
Integer roleId; Integer roleId;
Date expiredTime; Long expiredTime;
Integer exportAmount; Integer exportAmount;
String projectName; String projectName;
} }
......
...@@ -8,8 +8,9 @@ import com.alibaba.excel.read.metadata.ReadSheet; ...@@ -8,8 +8,9 @@ import com.alibaba.excel.read.metadata.ReadSheet;
import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.excel.write.metadata.WriteSheet;
import com.zhiwei.brandkbs2.easyexcel.config.ReadExcelDTO; import com.zhiwei.brandkbs2.easyexcel.config.ReadExcelDTO;
import com.zhiwei.brandkbs2.easyexcel.config.WriteExcelDTO; import com.zhiwei.brandkbs2.easyexcel.config.WriteExcelDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
...@@ -23,8 +24,8 @@ import java.util.List; ...@@ -23,8 +24,8 @@ import java.util.List;
* @description easyExcel解析工具类 * @description easyExcel解析工具类
* @date 2022年4月20日09:34:12 * @date 2022年4月20日09:34:12
*/ */
@Slf4j
public class EasyExcelUtil { public class EasyExcelUtil {
private static final Logger log = LogManager.getLogger(EasyExcelUtil.class);
private EasyExcelUtil() { private EasyExcelUtil() {
} }
......
package com.zhiwei.brandkbs2.easyexcel.dto;
import com.alibaba.excel.annotation.ExcelProperty;
import com.zhiwei.brandkbs2.enmus.EmotionEnum;
import com.zhiwei.brandkbs2.pojo.ChannelIndex;
import lombok.Data;
import lombok.ToString;
import java.util.Date;
/**
* @author lxj
* @version 1.0
* @description 前台导出渠道稿件实体类
* @date 2020/3/30 16:31
*/
@Data
@ToString
public class ExportAppChannelArticleDTO {
@ExcelProperty("时间")
private Date time;
@ExcelProperty("链接")
private String url;
@ExcelProperty("标题")
private String title;
@ExcelProperty("正文")
private String content;
@ExcelProperty("情感倾向")
private String emotion;
public static ExportAppChannelArticleDTO createFromArticle(ChannelIndex.Article article, String url, String title) {
ExportAppChannelArticleDTO dto = new ExportAppChannelArticleDTO();
dto.setTime(new Date(article.getTime()));
dto.setUrl(url);
dto.setTitle(title);
dto.setEmotion(EmotionEnum.state2Name(article.getEmotion()));
return dto;
}
}
...@@ -25,10 +25,10 @@ public class ExportBehaviorDTO { ...@@ -25,10 +25,10 @@ public class ExportBehaviorDTO {
private Date time; private Date time;
@ExcelProperty("访问页面") @ExcelProperty("访问页面")
private String page; private String controller;
@ExcelProperty("操作模块") @ExcelProperty("操作模块")
private String module; private String method;
@ExcelProperty("用户身份") @ExcelProperty("用户身份")
private String role; private String role;
......
package com.zhiwei.brandkbs2.easyexcel.dto; package com.zhiwei.brandkbs2.easyexcel.dto;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.zhiwei.brandkbs2.common.GenericAttribute;
import com.zhiwei.brandkbs2.pojo.Event;
import com.zhiwei.brandkbs2.pojo.EventData;
import com.zhiwei.brandkbs2.util.Tools;
import lombok.Data; import lombok.Data;
import lombok.ToString; import lombok.ToString;
import org.apache.logging.log4j.util.Strings;
import java.util.Date; import java.util.Date;
import java.util.Optional;
/** /**
* @ClassName: UploadEventDataDTO * @ClassName: UploadEventDataDTO
...@@ -62,35 +54,4 @@ public class UploadEventDataDTO { ...@@ -62,35 +54,4 @@ public class UploadEventDataDTO {
@ExcelProperty("原创/转发(微博平台)") @ExcelProperty("原创/转发(微博平台)")
private boolean isForward; private boolean isForward;
/**
* 表格解析后的数据转换为事件数据传输格式
*
* @return 事件数据传输格式
*/
public EventData createEventData(Event event) {
EventData eventData = new EventData();
eventData.setPlatform(this.getPlatform());
eventData.setRealSource(this.getRealSource());
eventData.setSource(this.getSource());
eventData.setUrl(this.getUrl());
eventData.setTime(this.getTime().getTime());
//如果标题不为空,取前64个字符作为标题,如果为空,取内容的前32位作为标题
eventData.setTitle(Strings.isNotBlank(title) ? (title.length() > 64 ? title.substring(0, 64) : title) : content.length() > 32 ? content.substring(0, 32) : content);
eventData.setAggTitle(Tools.filterSpecialCharacter(title));
eventData.setContent(content);
eventData.setTime(this.getTime().getTime());
JSONObject tagInfo = new JSONObject();
Optional.ofNullable(this.getEmotion()).ifPresent(emotion -> tagInfo.put(GenericAttribute.EMOTION_LABEL_KEY, emotion));
Optional.ofNullable(this.getBrand()).ifPresent(brand -> tagInfo.put(GenericAttribute.BRAND_LABEL_KEY, brand));
eventData.setTagInfo(JSON.toJSONString(tagInfo));
eventData.setEmotion(this.getEmotion());
eventData.setForward(this.isForward);
eventData.setEventId(event.getId());
eventData.setProjectId(event.getProjectId());
eventData.setLinkedGroupId(event.getLinkedGroupId());
eventData.setCTime(System.currentTimeMillis());
// TODO Type字段类型是否需要???
return eventData;
}
} }
...@@ -2,12 +2,13 @@ package com.zhiwei.brandkbs2.easyexcel.listener; ...@@ -2,12 +2,13 @@ package com.zhiwei.brandkbs2.easyexcel.listener;
import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.excel.event.AnalysisEventListener;
import com.zhiwei.brandkbs2.dao.IEventDao; import com.zhiwei.brandkbs2.dao.EventDao;
import com.zhiwei.brandkbs2.dao.IEventDataDao; import com.zhiwei.brandkbs2.dao.EventDataDao;
import com.zhiwei.brandkbs2.easyexcel.dto.UploadEventDataDTO; import com.zhiwei.brandkbs2.easyexcel.dto.UploadEventDataDTO;
import com.zhiwei.brandkbs2.pojo.Event; import com.zhiwei.brandkbs2.pojo.Event;
import com.zhiwei.brandkbs2.pojo.EventData; import com.zhiwei.brandkbs2.pojo.EventData;
import lombok.extern.slf4j.Slf4j; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate;
/** /**
...@@ -16,24 +17,23 @@ import org.springframework.data.redis.core.StringRedisTemplate; ...@@ -16,24 +17,23 @@ import org.springframework.data.redis.core.StringRedisTemplate;
* @author: sjj * @author: sjj
* @date: 2022-05-23 13:54 * @date: 2022-05-23 13:54
*/ */
@Slf4j
public class EventDataListener extends AnalysisEventListener<UploadEventDataDTO> { public class EventDataListener extends AnalysisEventListener<UploadEventDataDTO> {
private static final Logger log = LogManager.getLogger(EventDataListener.class);
private final EventDao eventDao;
private final IEventDao eventDao; private final EventDataDao eventDataDao;
private final IEventDataDao eventDataDao;
private final StringRedisTemplate stringRedisTemplate; private final StringRedisTemplate stringRedisTemplate;
private final String linkedGroupId; private final String contendId;
private final String redisKey; private final String redisKey;
public EventDataListener(IEventDao eventDao, IEventDataDao eventDataDao, StringRedisTemplate stringRedisTemplate, String linkedGroupId, public EventDataListener(EventDao eventDao, EventDataDao eventDataDao, StringRedisTemplate stringRedisTemplate, String contendId,
String redisKey) { String redisKey) {
this.eventDao = eventDao; this.eventDao = eventDao;
this.eventDataDao = eventDataDao; this.eventDataDao = eventDataDao;
this.stringRedisTemplate = stringRedisTemplate; this.stringRedisTemplate = stringRedisTemplate;
this.linkedGroupId = linkedGroupId; this.contendId = contendId;
this.redisKey = redisKey; this.redisKey = redisKey;
} }
...@@ -41,8 +41,8 @@ public class EventDataListener extends AnalysisEventListener<UploadEventDataDTO> ...@@ -41,8 +41,8 @@ public class EventDataListener extends AnalysisEventListener<UploadEventDataDTO>
public void invoke(UploadEventDataDTO eventDataDTO, AnalysisContext analysisContext) { public void invoke(UploadEventDataDTO eventDataDTO, AnalysisContext analysisContext) {
Event event = eventDao.findOneById(eventDataDTO.getEventId()); Event event = eventDao.findOneById(eventDataDTO.getEventId());
// 不允许上传其他关联组数据 // 不允许上传其他关联组数据
if (event.getLinkedGroupId().equals(linkedGroupId)) { if (event.getContendId().equals(contendId)) {
EventData eventData = eventDataDTO.createEventData(event); EventData eventData = EventData.createFromUploadEventDataDTO(eventDataDTO, event);
eventDataDao.insertOneWithoutId(eventData); eventDataDao.insertOneWithoutId(eventData);
} }
int progress = analysisContext.readRowHolder().getRowIndex() * 100 / (analysisContext.readSheetHolder().getApproximateTotalRowNumber() - 1); int progress = analysisContext.readRowHolder().getRowIndex() * 100 / (analysisContext.readSheetHolder().getApproximateTotalRowNumber() - 1);
......
...@@ -3,8 +3,9 @@ package com.zhiwei.brandkbs2.easyexcel.listener; ...@@ -3,8 +3,9 @@ package com.zhiwei.brandkbs2.easyexcel.listener;
import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.excel.event.AnalysisEventListener;
import com.zhiwei.brandkbs2.easyexcel.dto.UploadEventDTO; import com.zhiwei.brandkbs2.easyexcel.dto.UploadEventDTO;
import com.zhiwei.brandkbs2.service.IEventService; import com.zhiwei.brandkbs2.service.EventService;
import lombok.extern.slf4j.Slf4j; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -15,8 +16,8 @@ import java.util.List; ...@@ -15,8 +16,8 @@ import java.util.List;
* @description 解析事件文件监听器 * @description 解析事件文件监听器
* @date 2019/11/12 9:00 * @date 2019/11/12 9:00
*/ */
@Slf4j
public class EventFileListener extends AnalysisEventListener<UploadEventDTO> { public class EventFileListener extends AnalysisEventListener<UploadEventDTO> {
private static final Logger log = LogManager.getLogger(EventFileListener.class);
/** /**
* 每隔5条执行保存更新事件信息,然后清理list,方便内存回收 * 每隔5条执行保存更新事件信息,然后清理list,方便内存回收
*/ */
...@@ -25,14 +26,14 @@ public class EventFileListener extends AnalysisEventListener<UploadEventDTO> { ...@@ -25,14 +26,14 @@ public class EventFileListener extends AnalysisEventListener<UploadEventDTO> {
* 储存解析数据集合 * 储存解析数据集合
*/ */
private final List<UploadEventDTO> datas = new ArrayList<>(BATCH_COUNT); private final List<UploadEventDTO> datas = new ArrayList<>(BATCH_COUNT);
private final IEventService iEventService; private final EventService eventService;
private final String projectId; private final String projectId;
private final String linkedGroupId; private final String contendId;
public EventFileListener(IEventService iEventService, String projectId, String linkedGroupId) { public EventFileListener(EventService eventService, String projectId, String contendId) {
this.iEventService = iEventService; this.eventService = eventService;
this.projectId = projectId; this.projectId = projectId;
this.linkedGroupId = linkedGroupId; this.contendId = contendId;
} }
/** /**
...@@ -65,6 +66,6 @@ public class EventFileListener extends AnalysisEventListener<UploadEventDTO> { ...@@ -65,6 +66,6 @@ public class EventFileListener extends AnalysisEventListener<UploadEventDTO> {
* 保存更新事件信息逻辑 * 保存更新事件信息逻辑
*/ */
private void addFileEvent() { private void addFileEvent() {
datas.forEach(eventDTO -> iEventService.addFileEvent(projectId, linkedGroupId, eventDTO)); datas.forEach(eventDTO -> eventService.addFileEvent(projectId, contendId, eventDTO));
} }
} }
package com.zhiwei.brandkbs2.enmus;
import lombok.Getter;
/**
* @ClassName: ChannelEmotion
* @Description 渠道倾向枚举类
* @author: sjj
* @date: 2022-07-14 17:56
*/
public enum ChannelEmotion {
/**
* 正面的
*/
POSITIVE(1, "友好渠道"),
/**
* 中性的
*/
NEUTRAL(2, "中性渠道"),
/**
* 敏感的
*/
NEGATIVE(3, "敏感渠道"),
/**
* 未定义的
*/
UNDEFINED(0,"未定义渠道");
@Getter
private final int state;
@Getter
private final String name;
ChannelEmotion(int state, String name) {
this.state = state;
this.name = name;
}
public static String getNameFromState(Object state) {
if (state instanceof Integer) {
return getFromState((int) state).getName();
}
return null;
}
public static ChannelEmotion getFromState(int state) {
for (ChannelEmotion value : ChannelEmotion.values()) {
if (value.state == state) {
return value;
}
}
throw new IllegalArgumentException("不识别的类型:" + state);
}
public static int getEmotionRank(Double emotionIndex) {
int rank;
if (emotionIndex >= 80) {
rank = 1;
} else if (emotionIndex >= 60) {
rank = 2;
} else {
rank = 3;
}
return rank;
}
}
package com.zhiwei.brandkbs2.enmus; package com.zhiwei.brandkbs2.enmus;
import java.util.Arrays;
import java.util.List;
import java.util.Objects; import java.util.Objects;
/** /**
...@@ -33,6 +35,8 @@ public enum EmotionEnum { ...@@ -33,6 +35,8 @@ public enum EmotionEnum {
private final int state; private final int state;
private final String name; private final String name;
public static final List<String> EMOTION_LIST = Arrays.asList(POSITIVE.getName(), NEUTRAL.getName(), NEGATIVE.getName());
public static final String EMOTION_LABEL_KEY = "情感倾向"; public static final String EMOTION_LABEL_KEY = "情感倾向";
public static final String POSITIVE_LABEL = "正面"; public static final String POSITIVE_LABEL = "正面";
public static final String NEUTRAL_LABEL = "中性"; public static final String NEUTRAL_LABEL = "中性";
...@@ -112,4 +116,31 @@ public enum EmotionEnum { ...@@ -112,4 +116,31 @@ public enum EmotionEnum {
return emotion; return emotion;
} }
public static EmotionEnum parseFromName(String name) {
for (EmotionEnum value : EmotionEnum.values()) {
if (value.getName().equals(name)) {
return value;
}
}
return UNDEFINED;
}
public static int parseFromName2State(String name) {
for (EmotionEnum value : EmotionEnum.values()) {
if (value.getName().equals(name)) {
return value.getState();
}
}
return 0;
}
public static String state2Name(int state) {
for (EmotionEnum value : EmotionEnum.values()) {
if (value.getState() == state) {
return value.getName();
}
}
return EmotionEnum.UNDEFINED.getName();
}
} }
package com.zhiwei.brandkbs2.enmus; package com.zhiwei.brandkbs2.enmus;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -40,8 +41,13 @@ public enum ImportantChannelEnum { ...@@ -40,8 +41,13 @@ public enum ImportantChannelEnum {
*/ */
QITA("其他"); QITA("其他");
private final String state;
private String state;
/**
* 重要渠道集合
*/
public static final List<String> IMPORTANT_CHANNEL_LIST = new ArrayList<>(Arrays.asList(YANGJI.getState(), KEJI.getState(), CAIJING.getState(), QITA.getState()));
ImportantChannelEnum(String state) { ImportantChannelEnum(String state) {
this.state = state; this.state = state;
......
package com.zhiwei.brandkbs2.enmus;
import lombok.Getter;
import java.util.Arrays;
import java.util.Calendar;
import java.util.List;
/**
* @author lxj
* @version 1.0
* @description 平台枚举类
* @date 2019/9/2 10:51
*/
public enum ReportTypeEnum {
/**
* 月报
*/
MONTH("月报", "每月一号", "月"),
/**
* 周报
*/
WEEK("周报", "每周一", "周"),
/**
* 自定义简报
*/
CUSTOM("自定义", "自定义", "周期");
@Getter
private final String state;
@Getter
private final String publishTime;
@Getter
private final String describe;
// 发布最小间隔1天
public static final Long PUSH_LIMIT = 24 * 60 * 60 * 1000L;
public static final List<String> SORT_LIST = Arrays.asList(ReportTypeEnum.MONTH.getState(), ReportTypeEnum.WEEK.getState(),
ReportTypeEnum.CUSTOM.getState());
ReportTypeEnum(String state, String publishTime, String describe) {
this.state = state;
this.publishTime = publishTime;
this.describe = describe;
}
public static boolean canPublishNowByState(String state) {
return canPublishNow(getInstanceByState(state));
}
public static ReportTypeEnum getInstanceByState(String state) {
for (ReportTypeEnum value : ReportTypeEnum.values()) {
if (value.getState().equals(state)) {
return value;
}
}
throw new IllegalArgumentException("不识别的类型:" + state);
}
public static boolean canPublishNow(ReportTypeEnum type) {
Calendar cal = Calendar.getInstance();
switch (type) {
case WEEK:
return cal.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY;
case MONTH:
return cal.get(Calendar.DAY_OF_MONTH) == 1;
}
// 自定义简报
return true;
}
}
package com.zhiwei.brandkbs2.enmus.response;
import com.zhiwei.brandkbs2.model.ResultCode;
/**
* @author lxj
* @version 1.0
* @description 事件错误信息及状态码
* @date 2019/8/31 1:33
*/
public enum EventCodeEnum implements ResultCode {
/**
* 该事件已结束
*/
EVENT_STATUS_ERROR(false, 1401, "该事件已结束", 200),
/**
* 该事件不存在
*/
EVENT_NOT_EXISTS_ERROR(false, 1402, "该事件不存在", 200),
/**
* 事件首发平台或渠道填写错误
*/
EVENT_NOT_EXISTS_FIRST_CHANNEL_ERROR(false, 1403, "事件首发平台、来源、渠道填写错误", 200),
/**
* 当前品牌已有进行任务
*/
HAS_TASK_ERROR(false, 1401, "当前项目品牌已有进行任务", 200);
/**
* 操作是否成功
*/
final boolean success;
/**
* 操作代码
*/
final int code;
/**
* 提示信息
*/
final String message;
/**
* 聚合状态码
*/
final int aggCode;
EventCodeEnum(boolean success, int code, String message, int aggCode) {
this.success = success;
this.code = code;
this.message = message;
this.aggCode = aggCode;
}
@Override
public boolean success() {
return success;
}
@Override
public int code() {
return code;
}
@Override
public String message() {
return message;
}
@Override
public int aggCode() {
return aggCode;
}
}
package com.zhiwei.brandkbs2.enmus.response;
import com.zhiwei.brandkbs2.model.ResultCode;
/**
* @author lxj
* @version 1.0
* @description 登录错误状态码及信息
* @date 2019/8/12 17:46
*/
public enum LoginCodeEnum implements ResultCode {
/**
* 项目名输入错误
*/
LOGIN_PROJECT_NAME_ERROR(false, 1001, "项目名输入错误!", 200),
/**
* 账号或密码输入错误
*/
LOGIN_USERNAME_OR_PASSWORD_ERROR(false, 1002, "账号或密码输入错误!", 200),
/**
* 客户账号无法登陆后台管理系统
*/
LOGIN_NOT_ADMIN_ERROR(false, 1003, "客户账号无法登陆后台管理系统!", 200),
/**
* 获取授权微信认证失败
*/
LOGIN_WX_AUTH_ERROR(false, 1004, "获取授权微信认证失败!", 200),
/**
* 该微信已被其他账号绑定
*/
LOGIN_WX_WITH_USER_ERROR(false, 1005, "该微信已被其他账号绑定,登陆失败!", 200),
/**
* 该账号已被其他微信绑定
*/
LOGIN_USER_WITH_WX_ERROR(false, 1006, "该账号已被其他微信绑定,登陆失败!", 200),
/**
* 该微信未绑定账号
*/
LOGIN_WX_WITH_OUT_USER_ERROR(false, 1007, "该微信未绑定账号", 200),
/**
* 该账号已过期
*/
LOGIN_USER_EXPIRED_ERROR(false, 1008, "该账号已过期", 200),
/**
* 项目已停用
*/
LOGIN_PROJECT_STOPPED_ERROR(false, 1009, "当前项目已停用,请联系管理员恢复", 200),
/**
* 登录信息过期
*/
LOGIN_EXPIRED_ERROR(false, 1010, "登录信息过期,请重新登陆", 200);
/**
* 操作是否成功
*/
final boolean success;
/**
* 操作代码
*/
final int code;
/**
* 提示信息
*/
final String message;
/**
* 聚合状态码
*/
final int aggCode;
LoginCodeEnum(boolean success, int code, String message, int aggCode) {
this.success = success;
this.code = code;
this.message = message;
this.aggCode = aggCode;
}
@Override
public boolean success() {
return success;
}
@Override
public int code() {
return code;
}
@Override
public String message() {
return message;
}
@Override
public int aggCode() {
return aggCode;
}
}
package com.zhiwei.brandkbs2.enmus.response;
import com.zhiwei.brandkbs2.model.ResultCode;
/**
* @ClassName: ReportCodeEnum
* @Description ReportCodeEnum
* @author: sjj
* @date: 2022-09-15 14:13
*/
public enum ReportCodeEnum implements ResultCode {
/**
* 该类型报告已存在
*/
REPORT_TYPE_EXIST_ERROR(false, 1101, "该类型报告已存在", 200);
/**
* 操作是否成功
*/
final boolean success;
/**
* 操作代码
*/
final int code;
/**
* 提示信息
*/
final String message;
/**
* 聚合状态码
*/
final int aggCode;
ReportCodeEnum(boolean success, int code, String message, int aggCode) {
this.success = success;
this.code = code;
this.message = message;
this.aggCode = aggCode;
}
@Override
public boolean success() {
return success;
}
@Override
public int code() {
return code;
}
@Override
public String message() {
return message;
}
@Override
public int aggCode() {
return aggCode;
}
}
package com.zhiwei.brandkbs2.es;
import com.zhiwei.brandkbs2.common.GenericAttribute;
import com.zhiwei.brandkbs2.pojo.ChannelIndex;
import com.zhiwei.brandkbs2.pojo.ChannelRecord;
import com.zhiwei.brandkbs2.service.CommonService;
import org.apache.commons.collections4.ListUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @ClassName: ChannelEsClientDao
* @Description ChannelEsClientDao
* @author: sjj
* @date: 2022-07-26 17:25
*/
@Component("channelEsDao")
public class ChannelEsDao extends EsClientDao {
private static final Logger log = LogManager.getLogger(ChannelEsDao.class);
@Resource(name = "esClient")
RestHighLevelClient channelEsClient;
@Resource(name = "commonServiceImpl")
CommonService commonService;
public List<String> getArticleIds(String fid) {
Long[] timeRangeMonth = commonService.getTimeRangeMonth();
return getArticleIds(timeRangeMonth[0], timeRangeMonth[1], fid);
}
public List<String> getArticleIds(long startTime, long endTime, String fid) {
List<ChannelIndex.Article> articles = new ArrayList<>();
try {
SearchHelper searchHelper = createSearchHelper();
BoolQueryBuilder postFilter = channelUniqueBool(fid);
postFilter.must(QueryBuilders.rangeQuery(ChannelRecord.RANGE_START_TIME).gte(startTime));
postFilter.must(QueryBuilders.rangeQuery(ChannelRecord.RANGE_END_TIME).lt(endTime));
searchHelper.setPostFilter(postFilter);
searchHelper.setSort(SortBuilders.fieldSort(ChannelRecord.RANGE_END_TIME).order(SortOrder.DESC));
SearchHits searchHits = retryTemplate.execute(context -> searchHits(searchHelper));
for (SearchHit hit : searchHits.getHits()) {
ChannelRecord channelRecord = new ChannelRecord(hit.getSourceAsMap());
List<ChannelIndex.Article> collect = channelRecord.getRecord().getArticles();
articles.addAll(collect);
}
} catch (IOException ignored) {
}
return articles.stream().map(ChannelIndex.Article::getId).collect(Collectors.toList());
}
public void upsertChannelRecord(List<ChannelRecord> channelRecords) {
String index = getChannelRecordIndex();
BulkRequest bulkRequest = new BulkRequest();
Long startTime = null;
Long endTime = null;
for (List<ChannelRecord> records : ListUtils.partition(channelRecords, 100)) {
for (ChannelRecord record : records) {
startTime = null == startTime ? record.getRangeStartTime() : Math.min(startTime, record.getRangeStartTime());
endTime = null == endTime ? record.getRangeEndTime() : Math.max(endTime, record.getRangeEndTime());
bulkRequest.add(new IndexRequest(index).id(record.getEsId()).source(record.toEsMap()));
}
BulkResponse bulkResponse = retryTemplate.execute(context -> {
try {
return channelEsClient.bulk(bulkRequest, RequestOptions.DEFAULT);
} catch (IOException ignored) {
return null;
}
});
if (null == bulkResponse) {
log.error("upsertRecord批量操作重试后失败,index:{},rangeTime:{}", index, startTime + "-" + endTime);
} else if (bulkResponse.hasFailures()) {
log.error("upsertRecord批量操作失败,index:{},rangeTime:{},startTime[es-batchUpsert]异常:{}", index, startTime + "-" + endTime,
bulkResponse.buildFailureMessage());
} else {
log.info("upsertRecord批量操作成功,rangeTime:{},入库:{}条", DF.format(startTime) + "-" + DF.format(endTime), records.size());
}
}
}
@Override
public String[] getIndexes() {
return new String[]{getChannelRecordIndex()};
}
@Override
protected RestHighLevelClient getEsClient() {
return channelEsClient;
}
public String getChannelRecordIndex() {
// if (test) {
return GenericAttribute.ES_CHANNEL_INDEX_TEST;
// }
// // 近1年数据库 TODO
// Calendar date = Calendar.getInstance();
// int year = date.get(Calendar.YEAR);
// res.add(GenericAttribute.ES_CHANNEL_INDEX_TEST);
// return res.toArray(new String[0]);
}
private BoolQueryBuilder channelUniqueBool(String fid) {
BoolQueryBuilder postFilter = QueryBuilders.boolQuery();
return postFilter.must(QueryBuilders.termQuery("channel_fid.keyword", fid));
}
}
package com.zhiwei.brandkbs2.es; package com.zhiwei.brandkbs2.es;
import com.zhiwei.brandkbs2.common.GenericAttribute; import com.zhiwei.brandkbs2.common.GenericAttribute;
import com.zhiwei.brandkbs2.common.GlobalPojo;
import com.zhiwei.brandkbs2.config.Constant;
import com.zhiwei.pushlog.tools.Tools; import com.zhiwei.pushlog.tools.Tools;
import com.zhiwei.qbjc.bean.pojo.common.MessagePlatform; import com.zhiwei.qbjc.bean.pojo.common.MessagePlatform;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.lucene.search.join.ScoreMode;
import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.NestedQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.QueryBuilders;
import java.util.*; import java.util.*;
import static com.zhiwei.brandkbs2.common.GenericAttribute.ES_BRANDKBS_CACHE_MAPS;
import static com.zhiwei.brandkbs2.util.Tools.concat;
/** /**
* @ClassName: EsQueryTool * @ClassName: EsQueryTool
* @Description es语句辅助类 * @Description es语句辅助类
...@@ -77,11 +86,93 @@ public class EsQueryTools { ...@@ -77,11 +86,93 @@ public class EsQueryTools {
public static BoolQueryBuilder assembleTagQuery(List<String> tagIds) { public static BoolQueryBuilder assembleTagQuery(List<String> tagIds) {
BoolQueryBuilder tagQuery = QueryBuilders.boolQuery(); BoolQueryBuilder tagQuery = QueryBuilders.boolQuery();
tagIds.forEach(e -> { tagIds.forEach(e -> {
tagQuery.should(QueryBuilders.termQuery("mark_cache_maps.unique_id.keyword", e)); tagQuery.should(QueryBuilders.termQuery("brandkbs_mark_cache_maps.unique_id.keyword", e));
}); });
return tagQuery; return tagQuery;
} }
public static BoolQueryBuilder assembleCacheMapsQuery(String projectId, String linkedGroupId, String contendId) {
return assembleCacheMapsQuery(projectId, linkedGroupId, contendId, null);
}
public static BoolQueryBuilder assembleCacheMapsQuery(String projectId, String linkedGroupId, String contendId, List<String> mediaTypes) {
BoolQueryBuilder nestedBoolQueryBuilder = QueryBuilders.boolQuery();
// must key
nestedBoolQueryBuilder.must(cacheMapsNestedQuery(QueryBuilders.termQuery("brandkbs_cache_maps.key.keyword", concat(projectId, linkedGroupId, contendId))));
// mediaType
if (CollectionUtils.isNotEmpty(mediaTypes)) {
BoolQueryBuilder mediaTypeQueryBuilder = QueryBuilders.boolQuery();
mediaTypes.forEach(e -> {
mediaTypeQueryBuilder.should(cacheMapsNestedQuery(QueryBuilders.termQuery("brandkbs_cache_maps.channel_type.keyword", e)));
});
nestedBoolQueryBuilder.must(mediaTypeQueryBuilder);
}
return nestedBoolQueryBuilder;
}
public static BoolQueryBuilder assembleCacheMapsQueryExcludePrimaryId(String projectId){
BoolQueryBuilder query = QueryBuilders.boolQuery();
query.must(cacheMapsNestedQuery(QueryBuilders.termQuery("brandkbs_cache_maps.project_id.keyword", projectId)));
query.mustNot(cacheMapsNestedQuery(QueryBuilders.termQuery("brandkbs_cache_maps.contend_id.keyword", Constant.PRIMARY_CONTEND_ID)));
return query;
}
public static NestedQueryBuilder cacheMapsNestedQuery(QueryBuilder query) {
return new NestedQueryBuilder(ES_BRANDKBS_CACHE_MAPS, query, ScoreMode.None);
}
// /**
// * 媒体类型请求匹配
// *
// * @param mediaTypes
// * @return
// */
// public static BoolQueryBuilder assembleMediaTypeQuery(List<String> mediaTypes) {
// BoolQueryBuilder tagQuery = QueryBuilders.boolQuery();
// mediaTypes.forEach(e -> {
// // TODO 1
// tagQuery.should(QueryBuilders.termQuery("brandkbs_cache_maps.channel_type.keyword", e));
// });
// return tagQuery;
// }
public static BoolQueryBuilder assembleSourceQuery(String sourceKeyword) {
BoolQueryBuilder channelBoolQueryBuilder = QueryBuilders.boolQuery();
String[] keys = sourceKeyword.trim().split("\\|");
for (String key : keys) {
String channelRegex = getAllRegex(key);
BoolQueryBuilder keyQueryBuilder = QueryBuilders.boolQuery();
keyQueryBuilder.must(QueryBuilders.regexpQuery("source", ".*" + channelRegex + ".*"));
channelBoolQueryBuilder.should(keyQueryBuilder);
}
return channelBoolQueryBuilder;
}
public static void platformMustNot(BoolQueryBuilder boolQueryBuilder, String... platformNames) {
if (null == platformNames) {
return;
}
for (String platformName : platformNames) {
String platformIdByName = GlobalPojo.getPlatformIdByName(platformName);
if (null != platformIdByName) {
boolQueryBuilder.mustNot(QueryBuilders.termQuery(GenericAttribute.ES_PLATFORM_ID, platformIdByName));
}
}
}
public static void assembleContendsQuery(BoolQueryBuilder query, Collection<String> contends) {
BoolQueryBuilder contendQuery = QueryBuilders.boolQuery();
// 主品牌一定参与
// contendQuery.should(QueryBuilders.termQuery("contend_id.keyword", "0"));
if (null == contends) {
return;
}
for (String contendId : contends) {
contendQuery.should((QueryBuilders.termQuery("contend_id.keyword", contendId)));
}
query.must(contendQuery);
}
/** /**
* platform 组合语句 * platform 组合语句
* *
...@@ -159,4 +250,25 @@ public class EsQueryTools { ...@@ -159,4 +250,25 @@ public class EsQueryTools {
return queryMap; return queryMap;
} }
private static String getAllRegex(String word) {
String LittleRegex = "[a-z]";
String BigRegex = "[A-Z]";
String[] bs = word.split("");
StringBuilder regex = new StringBuilder();
for (String b : bs) {
if (b.matches(LittleRegex))// 如果是 小写
{
regex.append("[").append(b).append(b.toUpperCase()).append("]");
} else if (b.matches(BigRegex))// 大写
{
regex.append("[").append(b).append(b.toLowerCase()).append("]");
} else {
regex.append(b);
}
//b = (b + "").matches(LittleRegex) ? b : b;
}
return regex.toString();
}
} }
This source diff could not be displayed because it is too large. You can view the blob instead.
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