Commit 4a6ee037 by shenjunjie

Merge branch 'feature' into 'dev'

Feature

See merge request !594
parents 3a21a0ba 395e9e67
......@@ -26,10 +26,14 @@ public class Constant {
public static final String MONTH_PATTERN = "yyyy-MM";
public static final String YEAR_PATTERN = "yyyy";
public static final String SECOND_PATTERN = "yyyy-MM-dd HH:mm:ss";
public static final FastDateFormat SPEC_MINUTE_FORMAT = FastDateFormat.getInstance(SPEC_MINUTE_PATTERN);
public static final FastDateFormat SPEC_DAY_POINT_FORMAT = FastDateFormat.getInstance(SPEC_DAY_PATTERN);
public static final FastDateFormat HOUR_FORMAT = FastDateFormat.getInstance(HOUR_PATTERN);
public static final FastDateFormat DAY_FORMAT = FastDateFormat.getInstance(DAY_PATTERN);
public static final FastDateFormat EXCEL_TIME_FORMAT = FastDateFormat.getInstance(SECOND_PATTERN);
public static final FastDateFormat SPEC_DAY_FORMAT = FastDateFormat.getInstance("yyyy/MM/dd");
public static final FastDateFormat ONLY_MONTH_FORMAT = FastDateFormat.getInstance("M月");
public static final FastDateFormat DF_yyyyMMdd = FastDateFormat.getInstance("yyyyMMdd");
......
......@@ -70,7 +70,7 @@ public class BehaviorController extends BaseController {
@RequestParam(value = "behavior", defaultValue = "true") boolean behavior) {
List<ExportBehaviorDTO> downloadList = behaviorService.download(startTime, endTime, behavior);
String behaviorName = behavior ? "后台" : "前台";
String sheetName = ProjectService.getProjectVOById(UserThreadLocal.getProjectId()).getProjectName() + "_" + behaviorName;
String sheetName = ProjectService.getProjectVOById(UserThreadLocal.getProjectId()).getExtraProjectName() + "_" + behaviorName;
EasyExcelUtil.download(sheetName + "用户行为", sheetName, ExportBehaviorDTO.class, downloadList, response);
return ResponseResult.success();
}
......@@ -111,7 +111,7 @@ public class BehaviorController extends BaseController {
public ResponseResult downloadLogRecordList(@RequestParam("startTime") long startTime,
@RequestParam("endTime") long endTime) {
List<ExportUserLogRecordDTO> list = behaviorService.downloadUserLogRecord(startTime, endTime);
String sheetName = ProjectService.getProjectVOById(UserThreadLocal.getProjectId()).getProjectName() + "_操作记录";
String sheetName = ProjectService.getProjectVOById(UserThreadLocal.getProjectId()).getExtraProjectName() + "_操作记录";
EasyExcelUtil.download(sheetName, sheetName, ExportUserLogRecordDTO.class, list, response);
return ResponseResult.success();
}
......
......@@ -2,6 +2,7 @@ package com.zhiwei.brandkbs2.controller.admin;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.zhiwei.brandkbs2.aop.LogRecord;
import com.zhiwei.brandkbs2.auth.Auth;
import com.zhiwei.brandkbs2.auth.UserThreadLocal;
import com.zhiwei.brandkbs2.controller.BaseController;
......@@ -89,6 +90,7 @@ public class ProjectController extends BaseController {
@ApiOperation("修改项目")
@PutMapping("/update")
@LogRecord(values = "extraProjectName", description = "修改项目-修改别名", arguments = true, entity = true)
public ResponseResult updateProject(@RequestBody ProjectVO projectVO) {
return ProjectService.updateProject(projectVO);
}
......
......@@ -392,6 +392,7 @@ public class AppHotController extends BaseController {
CompletableFuture.allOf(resultList.stream().map(json -> CompletableFuture.supplyAsync(() -> {
try {
BaseMap firstArticle = markDataService.getFirstArticle(startDate.getTime(), endDate.getTime(), json.getString("title"), projectId, Constant.PRIMARY_CONTEND_ID, include);
json.put("title", firstArticle.getTitleNullOptionalContent());
json.put("content", firstArticle.getContent());
json.put("url", firstArticle.getUrl());
json.put("realSource", firstArticle.getRealSource());
......
......@@ -48,7 +48,7 @@ public class MobileReportController {
dto.setPage(page);
dto.setPageSize(size);
dto.setType("月报");
String projectName = projectService.getProjectById(UserThreadLocal.getProjectId()).getProjectName();
String projectName = projectService.getProjectById(UserThreadLocal.getProjectId()).getExtraProjectName();
PageVO<JSONObject> reportList = reportService.findReportList(dto);
reportList.getList().forEach(json -> {
Long startTime = json.getLong("endTime");
......
......@@ -4,4 +4,6 @@ package com.zhiwei.brandkbs2.dao;
import com.zhiwei.brandkbs2.pojo.MarkSearchAnalyzeTask;
public interface MarkSearchAnalyzeTaskDao extends BaseMongoDao<MarkSearchAnalyzeTask>{
long deleteExpire(long expireTime);
}
package com.zhiwei.brandkbs2.dao.impl;
import com.mongodb.client.result.DeleteResult;
import com.zhiwei.brandkbs2.dao.MarkSearchAnalyzeTaskDao;
import com.zhiwei.brandkbs2.pojo.MarkSearchAnalyzeTask;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Component;
@Component("markSearchAnalyzeTaskDao")
......@@ -11,4 +14,11 @@ public class MarkSearchAnalyzeTaskDaoImpl extends BaseMongoDaoImpl<MarkSearchAna
public MarkSearchAnalyzeTaskDaoImpl() {
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();
}
}
......@@ -9,6 +9,7 @@ import com.alibaba.excel.write.metadata.WriteSheet;
import com.zhiwei.brandkbs2.easyexcel.config.ReadExcelDTO;
import com.zhiwei.brandkbs2.easyexcel.config.WriteExcelDTO;
import com.zhiwei.brandkbs2.util.Tools;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
......@@ -26,6 +27,7 @@ import java.nio.channels.ReadableByteChannel;
import java.nio.channels.WritableByteChannel;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* @author sjj
......@@ -112,7 +114,7 @@ public class EasyExcelUtil {
*/
public static <T> void write(String filePath, String sheetName, Class<T> clazz, List<T> datas) {
try {
formatExcelExports(clazz, datas);
formatExcelExports(clazz, datas, null);
EasyExcel.write(filePath, clazz).sheet(sheetName).doWrite(datas);
} catch (Exception e) {
log.error("file:{},write error:", filePath, e);
......@@ -172,6 +174,7 @@ public class EasyExcelUtil {
*/
public static void dynamicHeadWrite(String filePath, String sheetName, List<List<String>> head, List<List<Object>> datas) {
try {
formatExcelExports(null, null, datas);
EasyExcel.write(filePath).head(head).sheet(sheetName).doWrite(datas);
} catch (Exception e) {
log.error("file:{},write error:", filePath, e);
......@@ -190,7 +193,7 @@ public class EasyExcelUtil {
*/
public static <T> void download(String fileName, String sheetName, Class<T> clazz, List<T> datas, HttpServletResponse response) {
try {
formatExcelExports(clazz, datas);
formatExcelExports(clazz, datas, null);
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码
......@@ -238,11 +241,12 @@ public class EasyExcelUtil {
return filePath + Tools.concat(projectName, nickName, System.currentTimeMillis(), fileName) + ".xlsx";
}
private static <T> void formatExcelExports(Class<T> clazz, List<T> datas){
private static <T> void formatExcelExports(Class<T> clazz, List<T> datas, List<List<Object>> dynamicDatas){
if (Objects.nonNull(clazz)) {
List<Field> stringFields = new ArrayList<>();
// 记录需要设置的部分
for (Field field : clazz.getDeclaredFields()) {
// String格式截取前32767
// String格式截取前5000
if (field.getGenericType().toString().equals(String.class.toString())) {
field.setAccessible(true);
stringFields.add(field);
......@@ -252,12 +256,22 @@ public class EasyExcelUtil {
for (Field field : stringFields) {
try {
// 截取为excel单元格允许的最大长度
field.set(data, StringUtils.substring((String) (field.get(data)), 0, 32767));
field.set(data, StringUtils.substring((String) (field.get(data)), 0, 5000));
} catch (IllegalAccessException e) {
log.error(e);
}
}
});
}
if (CollectionUtils.isNotEmpty(dynamicDatas)){
for (List<Object> dynamicData : dynamicDatas) {
dynamicData.replaceAll(obj -> {
if (Objects.nonNull(obj)) {
obj = StringUtils.substring(String.valueOf(obj), 0, 5000);
}
return obj;
});
}
}
}
}
......@@ -37,7 +37,6 @@ public class ExportWholeSearchRecordDTO {
dto.setKeyword(json.getString("keyword"));
dto.setUsedType(json.getString("usedType"));
dto.setUsedCount(json.getInteger("usedCount"));
;
dto.setCTime(new Date(json.getLong("cTime")));
dto.setSubmitter(json.getString("submitter"));
return dto;
......
package com.zhiwei.brandkbs2.enmus;
import com.zhiwei.brandkbs2.util.Tools;
import java.util.*;
/**
* @ClassName: SensitiveChannels
* @Description: 重要渠道
* @author: YaoGuoDong
* @create: 2022-06-10 14:50
**/
public enum SensitiveChannelsEnum {
YANG_MEI("央媒", "央媒", Arrays.asList("中国新闻网","中国网","人民日报", "新华社", "求是", "解放军报", "光明日报", "经济日报", "中国日报", "中央人民广播电台", "央视网", "国际在线", "科技日报", "中国纪检监察报", "工人日报", "中国青年报", "农民日报", "法制日报", "中新社")),
ZHU_LIU_CAI_CAI_JING("主流财经", "主流财经", Arrays.asList("证券时报", "国际金融报", "中国经济周刊", "经济参考报", "中国证券报", "上海证券报", "财经国家周刊", "中新经纬", "经济日报", "证券日报", "中国企业家", "中国经济信息社", "中国财经报", "中国商报", "中国企业报", "国际商报", "中国经济导报", "中国经济时报", "金融时报", "中国经营报", "财新周刊", "《财经》杂志", "证券市场红周刊", "界面新闻", "财联社", "蓝鲸财经", "摩尔金融", "第一财经日报", "第一财经周刊", "21世纪经济报道", "21世纪商业评论", "大众证券报", "深圳商报", "新财富", "香港商报", "成都商报", "每日经济新闻", "金融投资报", "长江商报", "支点财经", "经济观察报", "华商报", "东亚经贸新闻", "时代财经", "资本邦", "投资界", "投中网", "创业邦", "财经天下周刊", "FT中文网", "财富", "福布斯", "彭博商业周刊", "哈佛商业评论", "金融界", "金投网", "中研网", "FX168财经网", "中金在线 ", "中商情报网", "财界网", "东方财富网", "南方财富网", "同花顺财经", "云掌财经", "华尔街见闻", "智通财经", "深蓝财经", "乐居财经", "格隆汇", "棱镜", "凤凰WEEKLY财经 ", "野马财经", "燃财经", "晚点LatePost ", "LateNews by 小晚(微信公众号)", "秦朔朋友圈", "吴晓波频道", "兽楼处", "叶檀财经", "牛弹琴", "占豪", "新财迷", "智谷趋势", "智东西", "三言财经", "华商韬略", "正商参阅", "水木然专栏", "春暖花开", "饭统戴老板", "石述思", "刘军洛财经", "郎咸平", "花荣", "水皮", "光远看经济", "正和岛", "功夫财经", "李大霄", "肖锋", "宋清辉", "何加盐", "财经十一人", "但斌", "启阳路4号", "棱镜", "经鉴新闻", "蓝鲸浑水")),
ZHU_LIU_KE_JI("主流科技", "主流科技", Arrays.asList("科技日报", "计算机世界", "中国计算机报", "赛迪网", "中国电子报", "通信世界", "通信产业报", "虎嗅", "36氪", "36kr", "钛媒体", "动点科技", "雷锋网", "驱动之家", "快科技", "砍柴网", "驱动中国", "科技资讯网", "TechCrunch", "Business Insider", "新智元", "量子位", "机器之心", "TechWeb", "IT168", "IT之家", "天极网", "比特网", "中关村在线", "PCHOME", "电脑之家", "CSDN", "51CTO", "硅谷动力", "至顶网", "IT时代周刊", "C114通信网", "飞象网", "DoNews", "cnBeta", "亿欧网", "鞭牛士", "PingWest品玩", "镁客网", "极客公园", "猎云网", "泡泡网", "爱范儿", "速途网", "太平洋电脑网", "i黑马", "手机中国", "科技美学", "量子位", "少数派", "酷玩实验室", "笔吧评测室", "安兔兔", "差评", "科技每日推送", "全是黑科技", "机器之心", "小白测评", "AppSo ", "爱范儿", "大米评测", "最黑科技", "DeepTech深科技", "好机友", "果粉之家", "刘旷", "金错刀", "雷科技", "新智元", "爱否科技", "InfoQ", "小道消息", "人人都是产品经理", "花果科技", "智东西", "阑夕", "雷帝触网", "丁道师", "黑马公社", "周兴斌", "科技狐", "躺倒鸭", "春公子", "郝闻郝看", "全天候科技", "闫跃龙", "小声比比", "乌鸦校尉", "江湖老刘", "科技兽", "郭静的互联网圈", "电手", "超先声", "猿大侠", "IT三剑客", "果壳", "哎咆科技")),
BEI_JING("区域", "北京", Arrays.asList("北京时间", "北京广播电视台", "北京青年报", "北京青年网", "北青网", "北京青年周刊", "北京日报", "京报网", "北京商报", "北京现代商报", "北京商报网", "首都建设报", "北京社区报", "北京头条", "北京晚报", "北晚新视觉", "北晚在线", "北京晨报", "新京报", "千龙网")),
SHANG_HAI("区域", "上海", Arrays.asList("东方卫视", "解放日报", "上观新闻", "看看新闻", "SMG", "上海日报", "上海日报SHINE", "文汇报", "新民邻声", "新民晚报", "新民网", "新民周刊", "文汇网", "新闻晨报", "周到上海", "界面新闻", "财联社", "蓝鲸财经", "科创板日报", "澎湃新闻", "上海法治报", "上海证券报", "第一财经", "第一财经日报", "第一财经周刊", "一财网", "劳动报", "东方网", "观察者网")),
GUANG_ZHOU("区域", "广州", Arrays.asList("南方日报", "南方网", "南方+", "南方Plus", "南方都市报", "奥一网", "南方周末", "南都周刊", "南方人物周刊", "信息时报", "时代周报", "时代财经", "新周刊", "消费者报道", "大洋网", "21世纪经济报道", "21世纪商业评论", "广州日报", "新花城", "南风窗", "羊城晚报", "金羊网", "羊城派", "新快报", "广东卫视", "广东南方卫视", "触电新闻", "广东广播电视台", "触电新闻", "广东经视", "珠江频道")),
SHEN_ZHEN("区域", "深圳", Arrays.asList("深圳商报", "读创", "深圳特区报", "读特", "深圳卫视", "晶报", "壹深圳", "深圳热线", "深圳新闻网", "深圳晚报", "Shenzhen Daily")),
ZHE_JIANG("区域", "浙江", Arrays.asList("钱江晚报", "浙江日报", "浙江新闻", "天目新闻", "浙江法制报", "都市快报", "每日商报", "青年时报", "杭州日报", "浙江在线", "科技金融时报", "浙江之声", "浙江卫视", "中国蓝TV", "中国蓝新闻", "新蓝网", "杭州网", "1818黄金眼", "小强热线", "钱江视频", "浙样红TV", "FM93浙江交通之声", "FM93交通之声", "杭州日报", "杭州网", "网经社", "宁波日报", "甬派", "宁波晚报", "中国宁波网")),
CHUAN_YU("区域", "川渝", Arrays.asList("成都日报", "成都商报", "红星新闻", "每日经济新闻", "微成都", "成都晚报", "封面新闻", "华西都市报", "四川在线", "四川新闻网", "川报观察", "四川日报", "重庆日报", "上游新闻", "重庆晚报", "重庆晨报", "都市热报", "华龙网", "四川卫视", "四川观察", "就成都", "四川广播电视台", "重庆电视台"));
private final String group;
private final String name;
private final List<String> channels;
private static final List<String> GROUPS = Arrays.asList("全部", "央媒", "主流财经", "主流科技", "区域");
private static final List<String> FILTER_GROUPS = Arrays.asList("全部", "央媒", "主流财经", "主流科技");
public String getGroup() {
return group;
}
public String getName() {
return name;
}
public List<String> getChannels() {
return channels;
}
SensitiveChannelsEnum(String group, String name, List<String> channels) {
this.group = group;
this.name = name;
this.channels = channels;
}
public static List<String> getSensitiveChannelsByGroupAndName(String group, String name) {
for (SensitiveChannelsEnum channels : values()) {
// 条件一:group无子级、name传参为空、枚举存在group
boolean conditionOne = FILTER_GROUPS.contains(group) && Tools.isEmpty(name) && channels.getGroup().equals(group);
// 条件二:group有子级、枚举存在name、枚举存在group
boolean conditionTwo = channels.getGroup().equals(group) && channels.getName().equals(name);
if (conditionOne || conditionTwo) {
return channels.getChannels();
}
}
return new ArrayList<>();
}
public static List<String> getSensitiveChannelsNameByGroup(String group) {
List<String> list = new ArrayList<>();
for (SensitiveChannelsEnum channels : values()) {
if (channels.getGroup().equals(group)) {
list.add(channels.getName());
}
}
return list;
}
/**
* 获取重要渠道传参
* @return
*/
public static List<Map<String, Object>> getExtraParam() {
List<Map<String, Object>> list = new ArrayList<>();
for (int i = 0; i < SensitiveChannelsEnum.GROUPS.size(); i++) {
Map<String, Object> map = new HashMap<>();
map.put("name", SensitiveChannelsEnum.GROUPS.get(i));
if (FILTER_GROUPS.contains(GROUPS.get(i))) {
map.put("value", new ArrayList<>());
} else {
map.put("value", SensitiveChannelsEnum.getSensitiveChannelsNameByGroup(SensitiveChannelsEnum.GROUPS.get(i)));
}
list.add(map);
}
return list;
}
}
......@@ -80,6 +80,58 @@ public class EsQueryTools {
}
/**
* keyword类型字段匹配 | 作分割
*
* @Title: assembleSeniorTermQuery
* @Description: keyword类型字段匹配
* @param @param source
* @param @param fieldlist
* @param @return 设定文件
* @return BoolQueryBuilder 返回类型
*/
public static BoolQueryBuilder assembleSeniorTermOrQuery(String source, String[] fieldlist) {
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
if (!Tools.isEmpty(source)) {
String[] sourcewords = source.split("\\|");
for (int i = 0; i < sourcewords.length; i++) {
String sourceword = sourcewords[i];
boolQuery.should(termQueryField(QueryBuilders.boolQuery(), "should", sourceword, fieldlist));
}
}
return boolQuery;
}
/**
* termQuery 多字段,单一匹配值
*
* @Title: termQueryField
* @Description: termQuery 多字段,单一匹配值
* @param @param boolQueryBuilder
* @param @param esQuery
* @param @param word
* @param @param fields
* @param @return 设定文件
* @return BoolQueryBuilder 返回类型
*/
public static <T> BoolQueryBuilder termQueryField(BoolQueryBuilder boolQueryBuilder, String esQuery, T word,
String[] fields) {
if (ES_QUERY_AND.equals(esQuery)) {
for (String field : fields) {
boolQueryBuilder.must(QueryBuilders.matchPhraseQuery(field, word));
}
} else if (ES_QUERY_OR.equals(esQuery)) {
for (String field : fields) {
boolQueryBuilder.should(QueryBuilders.matchPhraseQuery(field, word));
}
} else if (ES_QUERY_NOT.equals(esQuery)) {
for (String field : fields) {
boolQueryBuilder.mustNot(QueryBuilders.matchPhraseQuery(field, word));
}
}
return boolQueryBuilder;
}
/**
* 标签请求匹配
*
* @param tagIds
......@@ -91,7 +143,7 @@ public class EsQueryTools {
BoolQueryBuilder tagBoolQuery = QueryBuilders.boolQuery();
groupTagIds.forEach((group, list) -> {
BoolQueryBuilder tagQuery = QueryBuilders.boolQuery();
list.forEach(e -> tagQuery.should(QueryBuilders.termQuery("brandkbs_mark_cache_maps.unique_id.keyword", e)));
list.forEach(e -> tagQuery.must(QueryBuilders.termQuery("brandkbs_mark_cache_maps.unique_id.keyword", e)));
tagBoolQuery.must(tagQuery);
});
return tagBoolQuery;
......
......@@ -2,6 +2,7 @@ package com.zhiwei.brandkbs2.pojo;
import com.alibaba.fastjson.JSONObject;
import com.zhiwei.brandkbs2.pojo.dto.MarkSearchDTO;
import com.zhiwei.brandkbs2.pojo.dto.SearchFilterDTO;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
......@@ -23,6 +24,10 @@ public class MarkSearchAnalyzeTask extends AbstractBaseMongo {
*/
private MarkSearchDTO markSearchDTO;
/**
* 全网搜搜索条件
*/
private SearchFilterDTO searchFilterDTO;
/**
* 数据分析结果-词云
*/
List<JSONObject> highWord;
......@@ -34,4 +39,6 @@ public class MarkSearchAnalyzeTask extends AbstractBaseMongo {
* 创建时间
*/
private Long cTime;
private Long uTime;
}
......@@ -17,6 +17,10 @@ import java.util.*;
@Setter
@Document(collection = "brandkbs_project")
public class Project extends AbstractProject {
/**
* 项目别名
*/
private String extraProjectName;
/**
* 数据起始时间(能够绑定关联关系的时间点)
......@@ -124,6 +128,7 @@ public class Project extends AbstractProject {
projectVO.setId(this.getId());
// 主品牌
projectVO.setProjectName(this.getProjectName());
projectVO.setExtraProjectName(this.getExtraProjectName());
projectVO.setImportTime(new Date(this.getImportTime()));
projectVO.setBrandName(this.getBrandName());
projectVO.setBrandLinkedGroup(this.getBrandLinkedGroup());
......
......@@ -7,6 +7,7 @@ import org.apache.lucene.search.join.ScoreMode;
import org.elasticsearch.index.query.*;
import java.util.*;
import java.util.stream.Collectors;
/**
* @ClassName: FieldMap
......@@ -94,65 +95,26 @@ public class FieldMapping {
}
}
public static FieldMapping createFromNameAndValue(String name, Object value, String question) {
public static FieldMapping createFromNameAndValue(String name, Object value, String brandStr) {
FieldMap fieldMap = null;
// String projectId = UserThreadLocal.getProjectId();
// TODO 字段转换待完善,引入数据库
for (FieldMap f : FieldMap.values()) {
if (name.equals(f.getName())) {
// // 项目名需要转成id
// if (FieldMap.PROJECT == f) {
// Map<String, Project> projectMap = GlobalPojo.PROJECT_MAP.values().stream().collect(Collectors.toMap(AbstractProject::getProjectName, o -> o));
// if (projectMap.containsKey(String.valueOf(value))) {
// value = projectMap.get(String.valueOf(value)).getId();
// }else {
// value = projectId;
// }
// }
// 品牌需要转换
// if (FieldMap.BRAND == f) {
// Project project = GlobalPojo.PROJECT_MAP.get(projectId);
// if (CollectionUtils.isNotEmpty(project.getContendList())){
// List<String> contends = new ArrayList<>();
// List<String> contendNames = project.getContendList().stream().map(AbstractProject::getBrandName).collect(Collectors.toList());
// for (String contendName : contendNames) {
// if (question.contains(contendName)) {
// contends.add(contendName);
// }
// }
// if (CollectionUtils.isNotEmpty(contends)){
// value = String.join("|", contends);
// }else {
// value = Constant.PRIMARY_CONTEND_ID;
// }
// }else {
// value = Constant.PRIMARY_CONTEND_ID;
// }
// if ("主品牌".equals(value)) {
// value = Constant.PRIMARY_CONTEND_ID;
// } else {
// // 寻找对应的竞品id
// Optional<FieldMapping> project = fieldMappings.stream().filter(field -> Objects.equals(FieldMap.PROJECT, field.getFieldMap())).findFirst();
// if (project.isPresent()){
// List<Contend> contendList = GlobalPojo.PROJECT_MAP.get(String.valueOf(project.get().getValue())).getContendList();
// Object finalValue = value;
// Optional<Contend> contendOptional = contendList.stream().filter(contend -> Objects.equals(contend.getBrandName(), finalValue)).findFirst();
// if (contendOptional.isPresent()){
// value = contendOptional.get().getId();
// }else {
// value = Constant.PRIMARY_CONTEND_ID;
// }
// }else {
// value = Constant.PRIMARY_CONTEND_ID;
// }
// }
// }
// 标签只包含正负中
if (FieldMap.MTAG == f) {
if (!Arrays.asList("正面", "中性", "负面").contains(String.valueOf(value))) {
return null;
}
}
// 去除关键词中的项目、品牌名干扰
if (FieldMap.IND_FULL_TEXT == f){
String keyword = String.valueOf(value);
List<String> brands = Arrays.stream(brandStr.split("、")).collect(Collectors.toList());
for (String brand : brands) {
if (String.valueOf(value).contains(brand)){
value = keyword.replace(brand, "").trim();
}
}
}
fieldMap = f;
break;
}
......
......@@ -136,6 +136,12 @@ public class SearchFilterDTO {
@ApiModelProperty(value = "导出数据量")
private int outputCount;
/**
* ip地址
*/
@ApiModelProperty(value = "ip地址")
private String ip;
// /**
// * 这部分字段无需前端传参
// */
......@@ -162,7 +168,7 @@ public class SearchFilterDTO {
public Map<String, Object> toMap() {
Map<String, Object> map = new HashMap<>();
map.put("timeType", "time");
map.put("pt", getPlatforms());
map.put("pt", getDefaultPlatforms());
map.put("dataType", searchType);
map.put("matchType", matchType);
map.put("search", keyword);
......@@ -171,13 +177,13 @@ public class SearchFilterDTO {
map.put("source", sourceKeyword);
map.put("url", hostKeyword);
if (null == sorter || sorter.isEmpty()) {
map.put("sort", "DESC");
map.put("sort", "desc");
} else {
for (Map.Entry<String, Object> entry : sorter.entrySet()) {
if (entry.getValue().toString().contains("desc")) {
map.put("sort", "DESC");
map.put("sort", "desc");
} else {
map.put("sort", "ASC");
map.put("sort", "asc");
}
}
}
......@@ -190,7 +196,7 @@ public class SearchFilterDTO {
return map;
}
public List<String> getPlatforms() {
public List<String> getDefaultPlatforms() {
if (Objects.equals("视频", this.searchType)){
return CollectionUtils.isNotEmpty(this.videoPlatforms) ? this.videoPlatforms : new ArrayList<>(GenericAttribute.VIDEO_PLATFORM);
}
......
......@@ -36,6 +36,12 @@ public class ProjectVO {
private String projectName;
/**
* 项目别名
*/
@ApiModelProperty("项目别名")
private String extraProjectName;
/**
* 数据起始时间
*/
@ApiModelProperty("数据起始时间")
......@@ -135,6 +141,7 @@ public class ProjectVO {
Project project = new Project();
project.setId(this.getId());
project.setProjectName(this.getProjectName());
project.setExtraProjectName(this.getExtraProjectName());
project.setBrandName(this.getBrandName());
project.setBrandLinkedGroup(this.getBrandLinkedGroup());
project.setBrandLinkedGroupId(this.getBrandLinkedGroupId());
......@@ -190,6 +197,7 @@ public class ProjectVO {
Project project = new Project();
project.setId(vo.getId());
project.setProjectName(vo.getProjectName());
project.setExtraProjectName(vo.getExtraProjectName());
project.setBrandName(vo.getBrandName());
project.setBrandLinkedGroup(vo.getBrandLinkedGroup());
project.setBrandLinkedGroupId(vo.getBrandLinkedGroupId());
......
......@@ -79,6 +79,12 @@ public interface MarkDataService {
Pair<String, List<ExportAppYuqingDTO>> downloadYuqingMarkList(MarkSearchDTO markSearchDTO);
/**
* @param markSearchDTO 标注数据搜索传输类
* @return 返回结果
*/
Pair<String, Pair<List<List<String>>, List<List<Object>>>> downloadMarkListDynamicHead(MarkSearchDTO markSearchDTO);
/**
* 生成聚合列表并返回id
*
* @return 聚合id
......
package com.zhiwei.brandkbs2.service;
import com.alibaba.fastjson.JSONObject;
import com.zhiwei.brandkbs2.pojo.dto.ExportSearchWholeDTO;
import com.zhiwei.brandkbs2.pojo.dto.SearchFilterDTO;
import com.zhiwei.brandkbs2.pojo.vo.PageVO;
import org.apache.commons.lang3.tuple.Pair;
import java.io.IOException;
import java.util.List;
/**
* @ClassName: SearchWholeService
* @Description 全网搜服务
* @author: cjz
* @date: 2024-08-29 9:43
*/
public interface SearchWholeService {
/**
* 搜索-全网搜
*
* @param dto 全网搜搜索传输类
* @return JSONObject
*/
Pair<JSONObject, Integer> searchWholeNetworkWithBalance(SearchFilterDTO dto);
/**
* 搜索-全网搜条件
* @return JSONObject
*/
JSONObject getWholeNetworkSearchCriteria(boolean externalDataSource);
/**
* 搜索-全网搜-舆情导出
* @param dto 全网搜搜索传输类
* @return List<ExportSearchWholeDTO>
*/
List<ExportSearchWholeDTO> exportSearchWhole(SearchFilterDTO dto);
/**
* 全网搜舆情分析-舆情总量
* @param dto 全网搜数据传输类
* @return
* @throws IOException
*/
JSONObject getSearchWholeYuqingAmount(SearchFilterDTO dto);
/**
* 全网搜舆情分析-重点平台
* @param dto 全网搜数据传输类
* @return
*/
JSONObject getSearchWholeImportantPlatformPercentage(SearchFilterDTO dto);
/**
* 全网搜舆情分析-平台分布
* @param dto 全网搜数据传输类
* @return
*/
List<JSONObject> getSearchWholeAnalyzePlatformPercentage(SearchFilterDTO dto);
/**
* 全网搜舆情分析-舆情走势图
* @param dto 全网搜数据传输类
* @return
*/
JSONObject getSearchWholeSpreadTendency(SearchFilterDTO dto);
/**
* 全网搜舆情分析-活跃渠道
* @param dto 全网搜数据传输类
* @return
*/
List<JSONObject> getSearchWholeActiveChannels(SearchFilterDTO dto);
/**
* 全网搜舆情分析-ip分布
* @param dto 全网搜数据传输类
* @return
*/
List<JSONObject> getSearchWholeArticleIpLocated(SearchFilterDTO dto);
/**
* 全网搜舆情分析-词云
* @param dto 全网搜数据传输类
* @return
*/
List<JSONObject> getSearchWholeAnalyzeHighWord(SearchFilterDTO dto);
/**
* 全网搜舆情分析-活跃渠道、ip分布、词云详情页面、社媒平台发文
* @param dto 标注数据搜索传输类
* @return
*/
PageVO<JSONObject> getSearchWholeAnalyzeDetail(SearchFilterDTO dto);
}
......@@ -44,6 +44,11 @@ public interface TaskService{
void cleanAggreeTask();
/**
* 清理过期数据分析任务
*/
void cleanSearchAnalyzeTask();
/**
* 事件相关更新
*/
void eventUpdate();
......
......@@ -109,7 +109,7 @@ public class ProjectServiceImpl implements ProjectService {
//抛出非法参数异常
ExceptionCast.cast(CommonCodeEnum.INVALID_PARAM);
}
if (!Tools.isEmpty(projectVO.getHitKeywords()) && projectVO.getModuleShowList().contains(2)) {
if (!Tools.isEmpty(projectVO.getHitKeywords()) && projectVO.getModuleShowList().contains("2")) {
return ResponseResult.failure("关键字和原始数据配置异常");
}
Project existsProject = projectDao.findOne("projectName", projectVO.getProjectName());
......@@ -145,7 +145,10 @@ public class ProjectServiceImpl implements ProjectService {
public PageVO<JSONObject> findProjectList(int page, int size, String keyword) {
Query query = new Query();
query.addCriteria(Criteria.where("isManual").is(true));
projectDao.addKeywordFuzz(query, keyword, "projectName");
// projectDao.addKeywordFuzz(query, keyword, "extraProjectName", "projectName");
Criteria extraProjectName = Criteria.where("extraProjectName").regex(keyword, "i");
Criteria projectName = Criteria.where("projectName").regex(keyword, "i");
query.addCriteria(new Criteria().orOperator(extraProjectName, projectName));
long count = projectDao.count(query);
projectDao.addSort(query, "{\"cTime\":\"descend\"}");
mongoUtil.start(page, size, query);
......@@ -156,6 +159,7 @@ public class ProjectServiceImpl implements ProjectService {
result.put("importTime", project.getImportTime());
result.put("cTime", project.getCTime());
result.put("projectName", project.getProjectName());
result.put("extraProjectName", project.getExtraProjectName());
result.put("brandName", project.getBrandName());
result.put("isStart", project.isStart());
result.put("isShow", project.isShow());
......@@ -335,13 +339,16 @@ public class ProjectServiceImpl implements ProjectService {
return projectDao.findList(null).stream().map(project -> {
JSONObject json = new JSONObject();
json.put("name", project.getProjectName());
json.put("extraProjectName", project.getExtraProjectName());
json.put("id", project.getId());
return json;
}).collect(Collectors.toList());
}
return user.getRoles().stream().map(userRole -> {
JSONObject json = new JSONObject();
json.put("name", projectDao.findOne("_id", userRole.getProjectId()).getProjectName());
Project project = projectDao.findOne("_id", userRole.getProjectId());
json.put("name", project.getProjectName());
json.put("extraProjectName", project.getExtraProjectName());
json.put("id", userRole.getProjectId());
return json;
}).collect(Collectors.toList());
......@@ -572,7 +579,10 @@ public class ProjectServiceImpl implements ProjectService {
public PageVO<JSONObject> findNonManualProjectList(int page, int size, String sorter, String keyword) {
Query query = new Query();
query.addCriteria(Criteria.where("isManual").is(false));
projectDao.addKeywordFuzz(query, keyword, "projectName");
// projectDao.addKeywordFuzz(query, keyword, "extraProjectName", "projectName");
Criteria extraProjectName = Criteria.where("extraProjectName").regex(keyword, "i");
Criteria projectName = Criteria.where("projectName").regex(keyword, "i");
query.addCriteria(new Criteria().orOperator(extraProjectName, projectName));
long count = projectDao.count(query);
if (Objects.isNull(sorter) || Objects.isNull(JSONObject.parseObject(sorter)) || JSONObject.parseObject(sorter).isEmpty()){
projectDao.addSort(query, "{\"cTime\":\"descend\"}");
......@@ -587,6 +597,7 @@ public class ProjectServiceImpl implements ProjectService {
result.put("importTime", project.getImportTime());
result.put("cTime", project.getCTime());
result.put("projectName", project.getProjectName());
result.put("extraProjectName", project.getExtraProjectName());
result.put("brandName", project.getBrandName());
result.put("isStart", project.isStart());
result.put("isShow", project.isShow());
......@@ -648,6 +659,7 @@ public class ProjectServiceImpl implements ProjectService {
JSONObject jsonObject = new JSONObject();
jsonObject.put("id", project.getId());
jsonObject.put("name", project.getProjectName());
jsonObject.put("extraProjectName", project.getExtraProjectName());
return jsonObject;
}).collect(Collectors.toList());
return ResponseResult.success(res);
......@@ -659,7 +671,10 @@ public class ProjectServiceImpl implements ProjectService {
projectDao.addSort(query, "{\"_id\":\"asc\"}");
// 项目名关键词模糊
if (StringUtils.isNotBlank(keyword)){
projectDao.addKeywordFuzz(query, keyword, "projectName");
// projectDao.addKeywordFuzz(query, keyword, "extraProjectName", "projectName");
Criteria extraProjectName = Criteria.where("extraProjectName").regex(keyword, "i");
Criteria projectName = Criteria.where("projectName").regex(keyword, "i");
query.addCriteria(new Criteria().orOperator(extraProjectName, projectName));
}
// 用户拥有权限的项目
if (StringUtils.isNotBlank(userId) && !userDao.findOneById(userId).isSuperAdmin()){
......@@ -675,6 +690,7 @@ public class ProjectServiceImpl implements ProjectService {
JSONObject result = new JSONObject();
result.put("id", project.getId());
result.put("projectName", project.getProjectName());
result.put("extraProjectName", project.getExtraProjectName());
return result;
}).collect(Collectors.toList());
return ResponseResult.success(PageVO.createPageVo(total, page, pageSize, resList));
......@@ -765,6 +781,7 @@ public class ProjectServiceImpl implements ProjectService {
json.put("id", project.getId());
json.put("brands", getBrands(project.getId(), true));
json.put("name", project.getProjectName());
json.put("extraProjectName", project.getExtraProjectName());
json.put("group", project.getBrandLinkedGroup());
json.put("avatarUrl", project.getAvatarUrl());
json.put("permission", getPermissionList(project));
......
......@@ -220,13 +220,13 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
return ResponseResult.success();
}
private BrandkbsWarnTemplate brandkbsWarnTemplate4Yuqing(BrandkbsYuQingConfigNew config, List<BaseMap> datas, long start, long end, AbstractProject project) {
private BrandkbsWarnTemplate brandkbsWarnTemplate4Yuqing(BrandkbsYuQingConfigNew config, List<BaseMap> datas, long start, long end, Project project) {
if (datas.isEmpty()) {
return null;
}
int firstCount = datas.size();
// key1
String key1 = "【品见】舆情动态-" + project.getProjectName();
String key1 = "【品见】舆情动态-" + project.getExtraProjectName();
// key2
// String key2Header = "全部";
String key2Header = "";
......@@ -292,13 +292,13 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
return new BrandkbsWarnTemplate(firstCount, key1, key2, key3, key4, new BrandkbsYuQingWarn(collect));
}
private BrandkbsWarnTemplate brandkbsWarnTemplate4Channel(BrandkbsChannelConfig config, List<BaseMap> datas, long start, long end, AbstractProject project) {
private BrandkbsWarnTemplate brandkbsWarnTemplate4Channel(BrandkbsChannelConfig config, List<BaseMap> datas, long start, long end, Project project) {
if (datas.isEmpty()) {
return null;
}
int firstCount = datas.size();
// key1
String key1 = "【品见】渠道参与-" + project.getProjectName();
String key1 = "【品见】渠道参与-" + project.getExtraProjectName();
// key2
String key2 = "自定义渠道";
if (Boolean.TRUE.equals(config.getFriendlyChannel())) {
......@@ -333,12 +333,12 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
return new BrandkbsWarnTemplate(firstCount, key1, key2, key3, key4, new BrandkbsYuQingWarn(collect));
}
private BrandkbsWarnTemplate brandkbsWarnTemplate4HotEvent(BrandkbsHotEventConfig config, Map<String, List<com.zhiwei.middleware.event.pojo.entity.Event>> eventMap, long start, long end, AbstractProject project) {
private BrandkbsWarnTemplate brandkbsWarnTemplate4HotEvent(BrandkbsHotEventConfig config, Map<String, List<com.zhiwei.middleware.event.pojo.entity.Event>> eventMap, long start, long end, Project project) {
int firstCount = eventMap.values().stream().mapToInt(List::size).sum();
if (firstCount == 0) {
return null;
}
String key1 = "【品见】热点事件-" + project.getProjectName();
String key1 = "【品见】热点事件-" + project.getExtraProjectName();
// key2
String key2 = null;
// key3
......@@ -377,11 +377,11 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
}
private BrandkbsWarnTemplate brandkbsWarnTemplate4HotTop(BrandkbsHotTopConfig config, List<BrandkbsHotTopWarn.HotTop> datas, long start, long end,
AbstractProject project) {
Project project) {
if (CollectionUtils.isEmpty(datas)) {
return null;
}
String key1 = "【品见】上榜热搜-" + project.getProjectName();
String key1 = "【品见】上榜热搜-" + project.getExtraProjectName();
// key2
String key2 = "";
List<String> key2Element = new ArrayList<>();
......@@ -437,7 +437,7 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
return null;
}
int firstCount = datas.size();
String key1 = "【品见】案例上新-" + project.getProjectName();
String key1 = "【品见】案例上新-" + project.getExtraProjectName();
String key2 = null;
String key3 = Constant.SPEC_MINUTE_FORMAT.format(time);
// key4
......@@ -464,7 +464,10 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
private List<JSONObject> getRankListByType(String type) {
String search = TYPE_SEARCH.get(type);
if (null == search) {
// 2024/8/19 微博话题榜采集下线,防止微博话题配置历史数据影响
if (!Objects.equals(type, "微博话题")) {
log.error("getRankListByType,search-null,type:{}", type);
}
return Collections.emptyList();
}
try {
......@@ -674,11 +677,10 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
@Override
public ResponseResult getChannelWaring(String projectId, BrandkbsChannelConfig config) {
Project project = null;
long end = System.currentTimeMillis();
long start = end - config.getPushInterval();
Project project = projectService.getProjectById(projectId);
try {
project = projectService.getProjectById(projectId);
log.info("获取渠道参与预警开始,project:{}", project.getProjectName());
EsClientDao.SearchHelper helper = EsClientDao.createSearchHelper();
BoolQueryBuilder postFilter = EsQueryTools.assembleCacheMapsQuery(project.getId(), "0");
......@@ -757,7 +759,7 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
long end = System.currentTimeMillis();
long start = end - Constant.ONE_DAY * 7;
try {
log.info("获取热点事件预警开始,project:{}", project.getProjectName());
log.info("获取热点事件预警开始,project:{}", project.getExtraProjectName());
Map<String, List<com.zhiwei.middleware.event.pojo.entity.Event>> eventMap = new LinkedHashMap<>();
if (CollectionUtils.isNotEmpty(config.getOwnEvent())) {
// 调用事件中间件时,使用项目id作为主品牌id
......@@ -798,10 +800,10 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
}
eventMap.put("行业动态", externalEvents);
}
log.info("获取热点事件预警结束,project:{}", project.getProjectName());
log.info("获取热点事件预警结束,project:{}", project.getExtraProjectName());
return ResponseResult.success(brandkbsWarnTemplate4HotEvent(config, eventMap, start, end, project));
} catch (Exception e) {
log.info("获取热点事件预警失败,project:{}", project.getProjectName(), e);
log.info("获取热点事件预警失败,project:{}", project.getExtraProjectName(), e);
}
return ResponseResult.failure("获取热点事件预警失败");
}
......
......@@ -435,7 +435,7 @@ public class ReportServiceImpl implements ReportService {
String startTimeStr = Constant.HOUR_FORMAT.format(report.getStartTime());
String lastStartTimeStr = Constant.HOUR_FORMAT.format(lastStartTime);
JSONObject result = new JSONObject();
result.put("brand", projectService.getProjectById(report.getProjectId()).getProjectName());
result.put("brand", projectService.getProjectById(report.getProjectId()).getExtraProjectName());
result.put("startTime", report.getStartTime());
result.put("endTime", report.getEndTime());
result.put("curMonth", Integer.parseInt(startTimeStr.substring(5, 7)));
......
......@@ -92,6 +92,9 @@ public class TaskServiceImpl implements TaskService {
@Resource(name = "aiSearchQuestionRecordDao")
private AISearchQuestionRecordDao aiSearchQuestionRecordDao;
@Resource(name = "markSearchAnalyzeTaskDao")
MarkSearchAnalyzeTaskDao markSearchAnalyzeTaskDao;
@Resource(name = "brandkbsTaskServiceImpl")
BrandkbsTaskService brandkbsTaskService;
......@@ -342,6 +345,12 @@ public class TaskServiceImpl implements TaskService {
}
@Override
public void cleanSearchAnalyzeTask() {
long deleteCount = markSearchAnalyzeTaskDao.deleteExpire(System.currentTimeMillis() - Constant.ONE_WEEK);
log.info("本次清理过期数据分析任务:{}条", deleteCount);
}
@Override
public void eventUpdate() {
for (Project project : projectService.getAllProjectsWithStart()) {
List<Event> events = eventService.findNotEndEventByProjectId(project.getId());
......
......@@ -215,7 +215,7 @@ public class ToolsetServiceImpl implements ToolsetService {
// 更新已用次数
redisUtil.setExpire(redisKey, String.valueOf(ARTICLE_SUMMARY_LIMIT - remainingCount), Tools.getMillSecondNextDay(), TimeUnit.MILLISECONDS);
// excel输出到指定路径
String filePath = EasyExcelUtil.generateExcelFilePath(brandkbsFilePath, project.getProjectName(), UserThreadLocal.getNickname(), "摘要提取结果");
String filePath = EasyExcelUtil.generateExcelFilePath(brandkbsFilePath, project.getExtraProjectName(), UserThreadLocal.getNickname(), "摘要提取结果");
EasyExcelUtil.write(filePath, "sheet1", ExportArticleSummaryDTO.class, datas);
res.put("filePath", filePath);
res.put("remainingCount", remainingCount);
......@@ -255,7 +255,7 @@ public class ToolsetServiceImpl implements ToolsetService {
List<ExportInteractionUpdateDTO> exportList =
urls.stream().map(url -> new ExportInteractionUpdateDTO(String.valueOf(id.incrementAndGet()), urlMap, url)).collect(Collectors.toList());
// excel输出到指定路径
String projectName = projectService.getProjectById(UserThreadLocal.getProjectId()).getProjectName();
String projectName = projectService.getProjectById(UserThreadLocal.getProjectId()).getExtraProjectName();
String filePath = EasyExcelUtil.generateExcelFilePath(brandkbsFilePath, projectName, UserThreadLocal.getNickname(), "链接互动量更新结果");
EasyExcelUtil.write(filePath, "sheet1", ExportInteractionUpdateDTO.class, exportList);
JSONObject res = new JSONObject();
......@@ -482,7 +482,7 @@ public class ToolsetServiceImpl implements ToolsetService {
return dto;
}).collect(Collectors.toList());
// excel写入至指定路径
String projectName = projectService.getProjectById(UserThreadLocal.getProjectId()).getProjectName();
String projectName = projectService.getProjectById(UserThreadLocal.getProjectId()).getExtraProjectName();
String filePath = EasyExcelUtil.generateExcelFilePath(brandkbsFilePath, projectName, UserThreadLocal.getNickname(), "事件计算结果");
EasyExcelUtil.write(filePath, "sheet1", ExportBytedanceEventComputeResultDTO.class, list);
return filePath;
......@@ -493,7 +493,7 @@ public class ToolsetServiceImpl implements ToolsetService {
public String downloadPrimaryErrorData(String taskId) {
BytedanceCustomEventUpdateTask task = bytedanceCustomEventUpdateTaskDao.findOneById(taskId);
// excel写入至指定路径
String projectName = projectService.getProjectById(UserThreadLocal.getProjectId()).getProjectName();
String projectName = projectService.getProjectById(UserThreadLocal.getProjectId()).getExtraProjectName();
String filePath = EasyExcelUtil.generateExcelFilePath(brandkbsFilePath, projectName, UserThreadLocal.getNickname(), "报错数据");
// List<UploadBytedanceEventDTO> collect = task.getErrorData().stream().map(errorData -> Tools.convertMap(errorData, UploadBytedanceEventDTO.class)).collect(Collectors.toList());
EasyExcelUtil.write(filePath, "sheet1", UploadBytedanceEventDTO.class, Collections.emptyList());
......@@ -561,7 +561,7 @@ public class ToolsetServiceImpl implements ToolsetService {
List<BytedanceCustomEventUpdateTaskData> data = entry.getValue();
BytedanceCustomEventUpdateTask.EventInfo eventInfo = new BytedanceCustomEventUpdateTask.EventInfo();
eventInfo.setName(eventName);
eventInfo.setDataCount(data.size());
eventInfo.setDataCount(Math.max(data.size(), 1));
// 计算影响力指数
eventInfo.setInfluence(computeInf(data, levelInfoMap));
eventInfoMap.put(eventName, eventInfo);
......@@ -717,7 +717,7 @@ public class ToolsetServiceImpl implements ToolsetService {
private Double computeInf(List<BytedanceCustomEventUpdateTaskData> datas, Map<String, BytedanceCustomChannelLevelInfo> levelInfoMap){
Map<String, Double> levelSumH = new HashMap<>(5);
if (CollectionUtils.isEmpty(datas)){
return 0d;
return 1d;
}
for (BytedanceCustomEventUpdateTaskData data : datas) {
// 匹配渠道影响力,微博、微信以外的平台一律按照”网媒“处理
......@@ -757,7 +757,8 @@ public class ToolsetServiceImpl implements ToolsetService {
// 3.各自乘以权重 结果相加
result = INF.multiply(BigDecimal.valueOf(levelInfo.getWeight())).add(BigDecimal.valueOf(result)).doubleValue();
}
return BigDecimal.valueOf(result).setScale(1, RoundingMode.HALF_UP).doubleValue();
double resVal = BigDecimal.valueOf(result).setScale(1, RoundingMode.HALF_UP).doubleValue();
return resVal > 1 ? resVal : 1d;
}
private double getMatchedDefaultChannelInf(String level){
......@@ -781,6 +782,9 @@ public class ToolsetServiceImpl implements ToolsetService {
* @return
*/
private Double computeRMI(List<BytedanceCustomEventUpdateTaskData> data){
if (CollectionUtils.isEmpty(data)){
return 1d;
}
// 1、初始值
// 微信文章数
int wechatArticle = (int) data.stream().filter(article -> Objects.equals("微信", article.getPlatformType())).count();
......@@ -875,7 +879,7 @@ public class ToolsetServiceImpl implements ToolsetService {
// 头条互动数:TI标= ln(TI+1)/ln(TI常+1)*100.0
BigDecimal TI = BigDecimal.valueOf(Math.log(toutiaoInteraction + 1)).divide(BigDecimal.valueOf(Math.log(toutiaoInteractionWeight.getConstant() + 1)), 20, RoundingMode.HALF_UP).multiply(bigDecimal100);
// 标准值与权重计算取和得RMI
return NM.multiply(BigDecimal.valueOf(normalMediaArticleWeight.getWeight()))
double resVal = NM.multiply(BigDecimal.valueOf(normalMediaArticleWeight.getWeight()))
.add(OM.multiply(BigDecimal.valueOf(otherPlatformArticleWeight.getWeight())))
.add(WC.multiply(BigDecimal.valueOf(wechatArticleWeight.getWeight())))
.add(WCR.multiply(BigDecimal.valueOf(wechatReadWeight.getWeight())))
......@@ -887,6 +891,7 @@ public class ToolsetServiceImpl implements ToolsetService {
.add(TI.multiply(BigDecimal.valueOf(toutiaoInteractionWeight.getWeight())))
.setScale(1, RoundingMode.HALF_UP)
.doubleValue();
return resVal > 1 ? resVal : 1d;
}
/**
......
......@@ -444,6 +444,7 @@ public class UserServiceImpl implements UserService {
JSONObject jsonObject = new JSONObject();
jsonObject.put("projectId", projectId);
jsonObject.put("projectName", project.getProjectName());
jsonObject.put("extraProjectName", project.getExtraProjectName());
jsonObject.put("id", user.getId());
jsonObject.put("nickname", user.getNickname());
jsonObject.put("username", user.getUsername());
......@@ -526,6 +527,7 @@ public class UserServiceImpl implements UserService {
return null;
}
json.put("projectName", project.getProjectName());
json.put("extraProjectName", project.getExtraProjectName());
json.put("key", role.getKey());
json.put("projectId", projectId);
json.put("roleId", role.getRoleId());
......
......@@ -71,9 +71,10 @@ public class ControlCenter {
@Async("scheduledExecutor")
@Scheduled(cron = "0 0 * * * ? ")
public void cleanAggreeTask(){
log.info("每小时清理过期聚合任务-启动");
log.info("每小时清理过期任务-启动");
try {
taskService.cleanAggreeTask();
taskService.cleanSearchAnalyzeTask();
} catch (Exception e) {
log.info("每小时清理过期聚合任务-出错", e);
} finally {
......
......@@ -80,7 +80,7 @@ public class Tools {
/**
* 须过滤的标题
*/
public static final List<String> FILTER_TITLE = Arrays.asList("Notitle", "分享一篇文章", "分享一篇文章。", "暂无标题");
public static final List<String> FILTER_TITLE = Arrays.asList("Notitle", "分享一篇文章", "分享一篇文章。", "暂无标题", "", "No title");
/**
* 须过滤的渠道
......
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