Commit 18f92bf9 by shenjunjie

Merge branch 'release' into 'master'

Release

See merge request !548
parents 09feb611 7bed0bf0
...@@ -109,12 +109,18 @@ public class RedisKeyPrefix { ...@@ -109,12 +109,18 @@ public class RedisKeyPrefix {
*/ */
public static final String YUQING_ANALYZE_PROJECT_AVG_COUNT = "BRANDKBS:YUQING:ANALYZE:AMOUNT:AVG:"; public static final String YUQING_ANALYZE_PROJECT_AVG_COUNT = "BRANDKBS:YUQING:ANALYZE:AMOUNT:AVG:";
public static final String CUSTOM_YUQING_ANALYZE_AVG_COUNT = "BRANDKBS:CUSTOM:YUQING:ANALYZE:AMOUNT:AVG:";
public static final String YUQING_ANALYZE_EMOTION_DISTRIBUTION_AVG = "BRANDKBS:YUQING:ANALYZE:EMOTION:AVG:"; public static final String YUQING_ANALYZE_EMOTION_DISTRIBUTION_AVG = "BRANDKBS:YUQING:ANALYZE:EMOTION:AVG:";
public static final String CUSTOM_YUQING_ANALYZE_EMOTION_DISTRIBUTION_AVG = "BRANDKBS:CUSTOM:YUQING:ANALYZE:EMOTION:AVG:";
public static final String YUQING_ANALYZE_PLATFORM_AVG_COUNT = "BRANDKBS:YUQING:ANALYZE:PLATFORM:AVG:"; public static final String YUQING_ANALYZE_PLATFORM_AVG_COUNT = "BRANDKBS:YUQING:ANALYZE:PLATFORM:AVG:";
public static final String YUQING_ANALYZE_HIGH_WORD = "BRANDKBS:YUQING:ANALYZE:HIGH:WORD:"; public static final String YUQING_ANALYZE_HIGH_WORD = "BRANDKBS:YUQING:ANALYZE:HIGH:WORD:";
public static final String CUSTOM_YUQING_ANALYZE_HIGH_WORD = "BRANDKBS:CUSTOM:YUQING:ANALYZE:HIGH:WORD:";
public static final String SEARCH_KEYWORD = "BRANDKBS:SEARCH:KEYWORD:"; public static final String SEARCH_KEYWORD = "BRANDKBS:SEARCH:KEYWORD:";
public static String projectWarnHotTopKeyAll(String projectId, String type) { public static String projectWarnHotTopKeyAll(String projectId, String type) {
......
...@@ -10,15 +10,9 @@ import com.zhiwei.brandkbs2.enmus.RoleEnum; ...@@ -10,15 +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.HighWordService; import com.zhiwei.brandkbs2.service.*;
import com.zhiwei.brandkbs2.service.HighlightWordService;
import com.zhiwei.brandkbs2.service.ProjectService;
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.*;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
...@@ -46,6 +40,9 @@ public class BaseModuleController extends BaseController { ...@@ -46,6 +40,9 @@ public class BaseModuleController extends BaseController {
@Resource(name = "highlightWordServiceImpl") @Resource(name = "highlightWordServiceImpl")
HighlightWordService highlightWordService; HighlightWordService highlightWordService;
@Resource(name = "xiaohongshuWordServiceImpl")
XiaohongshuWordService xiaohongshuWordService;
@Resource(name = "projectServiceImpl") @Resource(name = "projectServiceImpl")
ProjectService projectService; ProjectService projectService;
...@@ -146,4 +143,38 @@ public class BaseModuleController extends BaseController { ...@@ -146,4 +143,38 @@ public class BaseModuleController extends BaseController {
return ResponseResult.success(); return ResponseResult.success();
} }
@ApiOperation("获取舆情分析小红书关键词(小红书定制模块)")
@ApiImplicitParams({@ApiImplicitParam(name = "page", value = "页码", defaultValue = "1", paramType = "query", dataType = "int"), @ApiImplicitParam(name = "size", value = "每页记录数", defaultValue = "10", paramType = "query", dataType = "int"), @ApiImplicitParam(name = "keyword", value = "搜索关键字", paramType = "query", dataType = "string")})
@GetMapping("/xiaohongshuWord/list")
public ResponseResult findXiaohongshuWordList(@RequestParam(value = "page", defaultValue = "1") int page,
@RequestParam(value = "pageSize", defaultValue = "10") int pageSize,
@RequestParam(value = "keyword", defaultValue = "") String keyword) {
return ResponseResult.success(xiaohongshuWordService.findWord(page, pageSize, keyword));
}
@ApiOperation("新增舆情分析小红书关键词(小红书定制模块)")
@PostMapping("/xiaohongshuWord/add")
public ResponseResult addXiaohongshuWordList(@ApiParam(name = "info", value = "{keyword:关键词, planName:方案名)") @RequestBody JSONObject info) {
String keyword = info.getString("keyword");
String planName = info.getString("planName");
return xiaohongshuWordService.addWord(keyword, planName, UserThreadLocal.getProjectId(), UserThreadLocal.getNickname());
}
@ApiOperation("删除舆情分析小红书关键词(小红书定制模块)")
@PostMapping("/xiaohongshuWord/delete/{id}")
public ResponseResult deleteXiaohongshuWord(@PathVariable String id) {
xiaohongshuWordService.deleteWord(id);
return ResponseResult.success();
}
@ApiOperation("更新舆情分析小红书关键词(小红书定制模块)")
@PostMapping("/xiaohongshuWord/update")
public ResponseResult updateXiaohongshuWordList(@ApiParam(name = "info", value = "{keyword:关键词, planName:方案名)") @RequestBody JSONObject info) {
String id = info.getString("id");
String keyword = info.getString("keyword");
String planName = info.getString("planName");
xiaohongshuWordService.updateWord(id, keyword, planName, UserThreadLocal.getProjectId(), UserThreadLocal.getNickname());
return ResponseResult.success();
}
} }
...@@ -119,4 +119,17 @@ public class ExtraController extends BaseController { ...@@ -119,4 +119,17 @@ public class ExtraController extends BaseController {
extraService.adjustInteractionRecord(json.getInteger("count")); extraService.adjustInteractionRecord(json.getInteger("count"));
return ResponseResult.success(); return ResponseResult.success();
} }
@ApiOperation("互动量更新-舆情分析-数据更新用量(小红书定制模块)")
@ApiImplicitParams({@ApiImplicitParam(name = "startTime", value = "起始时间", paramType = "query", dataType = "long"),
@ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "long"),
@ApiImplicitParam(name = "timeType", defaultValue = "week", value = "时间类型字段(week/month)", paramType = "query", dataType = "string")}
)
@GetMapping("/xiaohongshuRecord")
public ResponseResult findXiaohongshuRecordList(@RequestParam(value = "startTime") long startTime,
@RequestParam(value = "endTime") long endTime,
@RequestParam(value = "timeType", defaultValue = "week") String timeType) {
return ResponseResult.success(extraService.xiaohongshuRecordLog(startTime, endTime, timeType));
}
} }
...@@ -590,6 +590,67 @@ public class AppArticleController extends BaseController { ...@@ -590,6 +590,67 @@ public class AppArticleController extends BaseController {
return ResponseResult.success(markDataService.expandOriginRange(dto)); return ResponseResult.success(markDataService.expandOriginRange(dto));
} }
@ApiOperation("定制小红书平台舆情分析-舆情总量")
@PostMapping("/analyze/custom-xhs/amount")
// @LogRecord(description = "舆情库-舆情分析")
public ResponseResult getXhsCustomYuqingAmount(@RequestBody MarkSearchDTO markSearchDTO) {
return ResponseResult.success(markDataService.getXhsCustomYuqingAmount(markSearchDTO));
}
@ApiOperation("定制小红书平台舆情分析-情感分布")
@PostMapping("/analyze/custom-xhs/emotion")
public ResponseResult getXhsCustomYuqingEmotionDistribution(@RequestBody MarkSearchDTO markSearchDTO) {
return ResponseResult.success(markDataService.getXhsCustomYuqingEmotionDistribution(markSearchDTO));
}
@ApiOperation("定制小红书平台舆情分析-互动量指标")
@PostMapping("/analyze/custom-xhs/interaction-count")
public ResponseResult getXhsCustomYuqingInteractionCount(@RequestBody MarkSearchDTO markSearchDTO) {
return ResponseResult.success(markDataService.getXhsCustomYuqingInteractionCount(markSearchDTO));
}
@ApiOperation("定制小红书平台舆情分析-舆情走势图")
@PostMapping("/analyze/custom-xhs/tendency")
public ResponseResult getXhsCustomSpreadTendency(@RequestBody MarkSearchDTO markSearchDTO) {
return ResponseResult.success(markDataService.getXhsCustomSpreadTendency(markSearchDTO));
}
@ApiOperation("定制小红书平台舆情分析-高互动量发文")
@PostMapping("/analyze/custom-xhs/interaction-article")
public ResponseResult getXhsCustomInteractionArticle(@RequestBody MarkSearchDTO markSearchDTO) {
return ResponseResult.success(markDataService.getXhsCustomInteractionArticle(markSearchDTO));
}
@ApiOperation("定制小红书平台舆情分析-负面舆情")
@PostMapping("/analyze/custom-xhs/negative-article")
public ResponseResult getXhsCustomNegativeArticle(@RequestBody MarkSearchDTO markSearchDTO) {
return ResponseResult.success(markDataService.getXhsCustomNegativeArticle(markSearchDTO));
}
@ApiOperation("定制小红书平台舆情分析-ip分布、词云详情页舆情数据")
@PostMapping("/analyze/custom-xhs/mark-data")
public ResponseResult getXhsCustomArticleDetail(@RequestBody MarkSearchDTO markSearchDTO) {
return ResponseResult.success(markDataService.getXhsCustomArticleDetail(markSearchDTO));
}
@ApiOperation("定制小红书平台舆情分析-ip分布")
@PostMapping("/analyze/custom-xhs/ip-located")
public ResponseResult getXhsCustomArticleIpLocated(@RequestBody MarkSearchDTO markSearchDTO) {
return ResponseResult.success(markDataService.getXhsCustomArticleIpLocated(markSearchDTO));
}
@ApiOperation("定制小红书平台舆情分析-词云")
@PostMapping("/analyze/custom-xhs/high-word")
public ResponseResult getXhsCustomAnalyzeHighWord(@RequestBody MarkSearchDTO markSearchDTO) {
return ResponseResult.success(markDataService.getXhsCustomAnalyzeHighWord(markSearchDTO, true));
}
@ApiOperation("定制小红书平台舆情分析-小红书实时热门词云")
@PostMapping("/analyze/custom-xhs/timely-high-word")
public ResponseResult getXhsCustomTimelyHighWord(@RequestBody MarkSearchDTO markSearchDTO) {
return ResponseResult.success(markDataService.getXhsCustomTimelyHighWord(markSearchDTO));
}
private boolean checkMTagIllegal(StringBuilder mtag) { private boolean checkMTagIllegal(StringBuilder mtag) {
List<MarkerTag> hitTags = projectService.getProjectById(UserThreadLocal.getProjectId()).getHitTags(); List<MarkerTag> hitTags = projectService.getProjectById(UserThreadLocal.getProjectId()).getHitTags();
if (!Tools.isEmpty(hitTags)) { if (!Tools.isEmpty(hitTags)) {
......
package com.zhiwei.brandkbs2.dao;
import com.zhiwei.brandkbs2.pojo.XiaohongshuRecord;
import com.zhiwei.brandkbs2.pojo.vo.LineVO;
import java.util.List;
/**
* @ClassName: XiaohongshuRecordDao
* @Description XiaohongshuRecordDao
* @author: sjj
* @date: 2024-06-28 17:41
*/
public interface XiaohongshuRecordDao extends BaseMongoDao<XiaohongshuRecord> {
/**
* @param startTime 起始时间
* @param endTime 结束时间
* @param timeType 时间类型
* @return list
*/
List<LineVO> aggregateDayLastRecord(long startTime, long endTime, String timeType);
}
package com.zhiwei.brandkbs2.dao;
import com.zhiwei.brandkbs2.pojo.XiaohongshuWord;
/**
* @ClassName: XiaohongshuWordDao
* @Description XiaohongshuWordDao
* @author: sjj
* @date: 2024-06-28 14:08
*/
public interface XiaohongshuWordDao extends BaseMongoDao<XiaohongshuWord>{
}
package com.zhiwei.brandkbs2.dao.impl;
import com.alibaba.fastjson.JSONObject;
import com.zhiwei.brandkbs2.auth.UserThreadLocal;
import com.zhiwei.brandkbs2.dao.XiaohongshuRecordDao;
import com.zhiwei.brandkbs2.pojo.XiaohongshuRecord;
import com.zhiwei.brandkbs2.pojo.vo.LineVO;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.AggregationOperation;
import org.springframework.data.mongodb.core.aggregation.AggregationResults;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
/**
* @ClassName: XiaohongshuRecordDaoImpl
* @Description XiaohongshuRecordDaoImpl
* @author: sjj
* @date: 2024-06-28 17:43
*/
@Component("xiaohongshuRecordDao")
public class XiaohongshuRecordDaoImpl extends BaseMongoDaoImpl<XiaohongshuRecord> implements XiaohongshuRecordDao {
private static final String COLLECTION_NAME = "brandkbs_xiaohongshu_record";
public XiaohongshuRecordDaoImpl() {
super(COLLECTION_NAME);
}
@Override
public List<LineVO> aggregateDayLastRecord(long startTime, long endTime, String timeType) {
// 2024-06-19 前10位,代表天级;则前7位代表月级
int norOfChars = 10;
if (timeType.equals("month")) {
norOfChars = 7;
}
List<LineVO> res = new ArrayList<>();
Criteria criteria = Criteria.where("projectId").is(UserThreadLocal.getProjectId());
List<AggregationOperation> operations = new ArrayList<>();
// operations区分先后顺序
operations.add(Aggregation.match(criteria));
operations.add(Aggregation.project("usedCount").and("cTime").substring(0, norOfChars).as("cTime"));
operations.add(Aggregation.group("cTime").sum("usedCount").as("count"));
operations.add(Aggregation.sort(Sort.by(Sort.Order.asc("_id"))));
Aggregation aggregation = Aggregation.newAggregation(operations);
// 聚合结果
AggregationResults<JSONObject> aggregateResult = mongoTemplate.aggregate(aggregation, COLLECTION_NAME, JSONObject.class);
List<JSONObject> mappedResults = aggregateResult.getMappedResults();
for (JSONObject mappedResult : mappedResults) {
res.add(new LineVO(mappedResult.getLong("count"), mappedResult.getDate("_id").getTime()));
}
return res;
}
}
package com.zhiwei.brandkbs2.dao.impl;
import com.zhiwei.brandkbs2.dao.XiaohongshuWordDao;
import com.zhiwei.brandkbs2.pojo.XiaohongshuWord;
import org.springframework.stereotype.Component;
/**
* @ClassName: XiaohongshuWordDaoImpl
* @Description XiaohongshuWordDaoImpl
* @author: sjj
* @date: 2024年6月28日16:02:03
*/
@Component("xiaohongshuWordDao")
public class XiaohongshuWordDaoImpl extends BaseMongoDaoImpl<XiaohongshuWord> implements XiaohongshuWordDao {
private static final String COLLECTION_NAME = "brandkbs_xiaohongshu_word";
public XiaohongshuWordDaoImpl() {
super(COLLECTION_NAME);
}
}
...@@ -7,15 +7,18 @@ import com.zhiwei.brandkbs2.pojo.ChannelIndex; ...@@ -7,15 +7,18 @@ import com.zhiwei.brandkbs2.pojo.ChannelIndex;
import com.zhiwei.brandkbs2.util.Tools; import com.zhiwei.brandkbs2.util.Tools;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.time.DateUtils; import org.apache.commons.lang3.time.DateUtils;
import org.apache.commons.lang3.time.FastDateFormat; import org.apache.commons.lang3.time.FastDateFormat;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.search.ClearScrollRequest; import org.elasticsearch.action.search.ClearScrollRequest;
import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchScrollRequest; import org.elasticsearch.action.search.SearchScrollRequest;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.core.CountRequest; import org.elasticsearch.client.core.CountRequest;
...@@ -202,6 +205,27 @@ public class EsClientDao { ...@@ -202,6 +205,27 @@ public class EsClientDao {
return getAllIndexList(startTime, endTime).toArray(new String[0]); return getAllIndexList(startTime, endTime).toArray(new String[0]);
} }
public void batchUpdate(List<Pair<String, Map<String, Object>>> updateList) {
if (CollectionUtils.isEmpty(updateList)){
return;
}
retryTemplate.execute(context -> {
try {
BulkRequest bulkRequest = new BulkRequest();
for (Pair<String, Map<String, Object>> pair : updateList) {
Map<String, Object> map = pair.getRight();
String index = pair.getLeft();
bulkRequest.add(new UpdateRequest().index(index).id(map.get("id") + "").doc(map));
}
esClient.bulk(bulkRequest, RequestOptions.DEFAULT);
log.info("定制化舆情分析-互动量更新结果数据-批量更新es数据【{}】条", updateList.size());
} catch (Exception e) {
e.printStackTrace();
}
return null;
});
}
protected RestHighLevelClient getEsClient() { protected RestHighLevelClient getEsClient() {
return esClient; return esClient;
} }
......
...@@ -341,9 +341,11 @@ public class EsQueryTools { ...@@ -341,9 +341,11 @@ public class EsQueryTools {
* @param dataType 数据类型(1:长文本, 2:短文本, 3:问答, 5:视频) * @param dataType 数据类型(1:长文本, 2:短文本, 3:问答, 5:视频)
* @return * @return
*/ */
public static BoolQueryBuilder assembleC2Query(Integer dataType) { public static BoolQueryBuilder assembleC2Query(List<Integer> dataType) {
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery(); BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
queryBuilder.should(QueryBuilders.termQuery(GenericAttribute.ES_C2, dataType << 23)); for (Integer type : dataType) {
queryBuilder.should(QueryBuilders.termQuery(GenericAttribute.ES_C2, type << 23));
}
return queryBuilder; return queryBuilder;
} }
......
...@@ -36,16 +36,18 @@ public abstract class AbstractBaseWord extends AbstractBaseMongo { ...@@ -36,16 +36,18 @@ public abstract class AbstractBaseWord extends AbstractBaseMongo {
*/ */
private String projectId; private String projectId;
public static <T> List<T> createFromList(List<String> keywords, String projectId, String submitter) { abstract AbstractBaseWord newInstance();
public <T extends AbstractBaseWord> List<T> createFromList(List<String> keywords, String projectId, String submitter) {
List<T> res = new ArrayList<>(); List<T> res = new ArrayList<>();
Long now = System.currentTimeMillis(); Long now = System.currentTimeMillis();
for (String keyword : keywords) { for (String keyword : keywords) {
AbstractBaseWord word = new HighWord(); T word = (T) newInstance();
word.setKeyword(keyword); word.setKeyword(keyword);
word.setCTime(now); word.setCTime(now);
word.setProjectId(projectId); word.setProjectId(projectId);
word.setSubmitter(submitter); word.setSubmitter(submitter);
res.add((T) word); res.add(word);
} }
return res; return res;
} }
......
...@@ -14,4 +14,8 @@ import org.springframework.data.mongodb.core.mapping.Document; ...@@ -14,4 +14,8 @@ import org.springframework.data.mongodb.core.mapping.Document;
@Setter @Setter
@Document(collection = "brandkbs_high_word") @Document(collection = "brandkbs_high_word")
public class HighWord extends AbstractBaseWord { public class HighWord extends AbstractBaseWord {
@Override
AbstractBaseWord newInstance() {
return new HighWord();
}
} }
...@@ -14,4 +14,8 @@ import org.springframework.data.mongodb.core.mapping.Document; ...@@ -14,4 +14,8 @@ import org.springframework.data.mongodb.core.mapping.Document;
@Setter @Setter
@Document(collection = "brandkbs_highlight_word") @Document(collection = "brandkbs_highlight_word")
public class HighlightWord extends AbstractBaseWord { public class HighlightWord extends AbstractBaseWord {
@Override
AbstractBaseWord newInstance() {
return new HighlightWord();
}
} }
...@@ -34,10 +34,9 @@ public class Project extends AbstractProject { ...@@ -34,10 +34,9 @@ public class Project extends AbstractProject {
private List<Contend> contendList; private List<Contend> contendList;
/** /**
* 模块展示列表(1:标注库 2:大库) * 模块展示列表(xiaohongshu:达达项目定制化)
*/ */
@Deprecated private List<String> moduleShowList;
private List<Integer> moduleShowList;
/** /**
* 工具库功能入口展示列表(目前有:摘要提取,互动量更新,词云,字节影响力计算,其中前三者默认开启) * 工具库功能入口展示列表(目前有:摘要提取,互动量更新,词云,字节影响力计算,其中前三者默认开启)
......
package com.zhiwei.brandkbs2.pojo;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
/**
* @ClassName: XiaohongshuRecord
* @Description 小红书定制模块更新互动量记录
* @author: sjj
* @date: 2024年6月28日17:24:30
*/
@Getter
@Setter
public class XiaohongshuRecord extends AbstractBaseMongo{
/**
* 项目id
*/
private String projectId;
/**
* 本次使用数值
*/
private int usedCount;
/**
* 提交人
*/
private String submitter;
/**
* 创建时间(Date类型方便聚合查询)
*/
private Date cTime;
public static XiaohongshuRecord createUsedRecord(String projectId, int usedCount, String submitter) {
XiaohongshuRecord record = new XiaohongshuRecord();
record.projectId = projectId;
record.usedCount = usedCount;
record.submitter = submitter;
record.cTime = new Date();
return record;
}
}
package com.zhiwei.brandkbs2.pojo;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.mongodb.core.mapping.Document;
/**
* @ClassName: XiaohongshuWord
* @Description 小红书定制配置词
* @author: sjj
* @date: 2024-06-28 14:08
*/
@Getter
@Setter
@Document(collection = "brandkbs_xiaohongshu_word")
public class XiaohongshuWord extends AbstractBaseWord {
private String planName;
@Override
AbstractBaseWord newInstance() {
return new XiaohongshuWord();
}
}
...@@ -183,13 +183,17 @@ public class MarkSearchDTO { ...@@ -183,13 +183,17 @@ public class MarkSearchDTO {
*/ */
@ApiModelProperty(value = "屏蔽词检索字段:全文|标题") @ApiModelProperty(value = "屏蔽词检索字段:全文|标题")
private String filterType; private String filterType;
/** /**
* 方案id,仅非人工项目 * 非人工项目-方案id,仅非人工项目
*/ */
@ApiModelProperty(value = "方案id") @ApiModelProperty(value = "方案id")
private String planId; private String planId;
/** /**
* 定制化舆情分析页面-方案id
*/
@ApiModelProperty(value = "定制化舆情分析页面方案id")
private String customPlanId;
/**
* 内容类型(原创/转发),仅非人工项目 * 内容类型(原创/转发),仅非人工项目
*/ */
@ApiModelProperty(value = "内容类型(原创/转发)") @ApiModelProperty(value = "内容类型(原创/转发)")
...@@ -203,7 +207,7 @@ public class MarkSearchDTO { ...@@ -203,7 +207,7 @@ public class MarkSearchDTO {
* 数据类型(长文本/短文本/问答/视频),仅非人工项目 * 数据类型(长文本/短文本/问答/视频),仅非人工项目
*/ */
@ApiModelProperty(value = "数据类型(1:长文本, 2:短文本, 3:问答, 5:视频)") @ApiModelProperty(value = "数据类型(1:长文本, 2:短文本, 3:问答, 5:视频)")
private Integer dataType; private List<Integer> dataType;
/** /**
* ip地址 * ip地址
*/ */
......
...@@ -88,10 +88,10 @@ public class ProjectVO { ...@@ -88,10 +88,10 @@ public class ProjectVO {
private List<Contend> contendList; private List<Contend> contendList;
/** /**
* 模块展示列表(1:标注库 2:大库) * 模块展示列表(xiaohongshu:达达项目定制化)
*/ */
@ApiModelProperty("舆情数据源(模块展示列表(1:标注库 2:大库))") @ApiModelProperty("xiaohongshu:达达项目定制化")
private List<Integer> moduleShowList; private List<String> moduleShowList;
/** /**
* 工具库功能入口展示列表(目前有:摘要提取,互动量更新,词云,字节影响力计算,其中前三者默认开启) * 工具库功能入口展示列表(目前有:摘要提取,互动量更新,词云,字节影响力计算,其中前三者默认开启)
......
...@@ -115,4 +115,12 @@ public interface ExtraService { ...@@ -115,4 +115,12 @@ public interface ExtraService {
* @param usedCount 使用次数 * @param usedCount 使用次数
*/ */
void decreaseInteractionRecord(InteractionUpdateRecord.UsedType usedType, Integer usedCount); void decreaseInteractionRecord(InteractionUpdateRecord.UsedType usedType, Integer usedCount);
/**
* 数据总览
*
* @return json
*/
JSONObject xiaohongshuRecordLog(long startTime, long endTime, String timeType);
} }
...@@ -545,6 +545,8 @@ public interface MarkDataService { ...@@ -545,6 +545,8 @@ public interface MarkDataService {
*/ */
void countYuqingAmountAvg(Long startTime, Long endTime, String projectId, String planId) throws IOException; void countYuqingAmountAvg(Long startTime, Long endTime, String projectId, String planId) throws IOException;
void countCustomYuqingAmountAvg(Long startTime, Long endTime, String projectId, String customPlanId) throws IOException;
/** /**
* 计算近一年情感分布均值 * 计算近一年情感分布均值
* @param projectId * @param projectId
...@@ -553,6 +555,8 @@ public interface MarkDataService { ...@@ -553,6 +555,8 @@ public interface MarkDataService {
*/ */
void countEmotionDistributionAvg(Long startTime, Long endTime, String projectId, String planId) throws IOException; void countEmotionDistributionAvg(Long startTime, Long endTime, String projectId, String planId) throws IOException;
void countCustomEmotionDistributionAvg(Long startTime, Long endTime, String projectId, String customPlanId) throws IOException;
/** /**
* 计算项目近一年重点平台均值 * 计算项目近一年重点平台均值
* @param projectId * @param projectId
...@@ -636,6 +640,81 @@ public interface MarkDataService { ...@@ -636,6 +640,81 @@ public interface MarkDataService {
List<JSONObject> getSearchAnalyzeHighWord(MarkSearchDTO dto); List<JSONObject> getSearchAnalyzeHighWord(MarkSearchDTO dto);
/** /**
* 达达项目定制小红书平台舆情分析-舆情总量
* @param dto 标注数据搜索传输类
* @return
* @throws IOException
*/
JSONObject getXhsCustomYuqingAmount(MarkSearchDTO dto);
/**
* 达达项目定制小红书平台舆情分析-情感分布
* @param dto 标注数据搜索传输类
* @return
* @throws IOException
*/
JSONObject getXhsCustomYuqingEmotionDistribution(MarkSearchDTO dto);
/**
* 达达项目定制小红书平台舆情分析-互动量指标
* @param dto 标注数据搜索传输类
* @return
* @throws IOException
*/
JSONObject getXhsCustomYuqingInteractionCount(MarkSearchDTO dto);
/**
* 达达项目定制小红书平台舆情分析-舆情走势图
* @param dto 标注数据搜索传输类
* @return
*/
JSONObject getXhsCustomSpreadTendency(MarkSearchDTO dto);
/**
* 达达项目定制小红书平台舆情分析-高互动量发文
* @param dto 标注数据搜索传输类
* @return
*/
List<MarkFlowEntity> getXhsCustomInteractionArticle(MarkSearchDTO dto);
/**
* 达达项目定制小红书平台舆情分析-负面舆情
* @param dto 标注数据搜索传输类
* @return
*/
PageVO<MarkFlowEntity> getXhsCustomNegativeArticle(MarkSearchDTO dto);
/**
* 达达项目定制小红书平台舆情分析-ip分布、词云详情页舆情数据
* @param dto 标注数据搜索传输类
* @return
*/
PageVO<MarkFlowEntity> getXhsCustomArticleDetail(MarkSearchDTO dto);
/**
* 达达项目定制小红书平台舆情分析-ip分布
* @param dto 标注数据搜索传输类
* @return
*/
List<JSONObject> getXhsCustomArticleIpLocated(MarkSearchDTO dto);
/**
* 达达项目定制小红书平台舆情分析-词云
* @param dto 标注数据搜索传输类
* @return
*/
List<JSONObject> getXhsCustomAnalyzeHighWord(MarkSearchDTO dto, boolean cache);
void cacheXhsCustomHighWord(Long startTime, Long endTime, String customPlanId);
/**
* 达达项目定制小红书平台舆情分析-小红书实时热门词云
* @param dto 标注数据搜索传输类
* @return
*/
List<JSONObject> getXhsCustomTimelyHighWord(MarkSearchDTO dto);
/**
* 新-舆情分析-高频标题 * 新-舆情分析-高频标题
* @param startTime * @param startTime
* @param endTime * @param endTime
......
...@@ -62,4 +62,14 @@ public interface TaskService{ ...@@ -62,4 +62,14 @@ public interface TaskService{
* 生成每日一报 * 生成每日一报
*/ */
void generateDailyReport(); void generateDailyReport();
/**
* 每月互动量更新 时间范围近六个月
*/
void monthlyCustomXhsInteractionUpdate();
/**
* 每日互动量更新 时间范围近10天
*/
void dailyCustomXhsInteractionUpdate();
} }
...@@ -42,6 +42,8 @@ public interface ToolsetService { ...@@ -42,6 +42,8 @@ public interface ToolsetService {
*/ */
ResponseResult urlInteractionUpdate(MultipartFile file); ResponseResult urlInteractionUpdate(MultipartFile file);
List<JSONObject> urlInteractionUpdate(List<String> urls);
/** /**
* 获取互动量更新剩余可用次数 * 获取互动量更新剩余可用次数
* @return * @return
......
package com.zhiwei.brandkbs2.service;
import com.zhiwei.brandkbs2.model.ResponseResult;
/**
* @ClassName: XiaohongshuWordService
* @Description 小红书定制模块关键词接口
* @author: sjj
* @date: 2024-06-28 10:09
*/
public interface XiaohongshuWordService extends TableWordService{
/**
* 添加关键词
* @param keyword 关键词
* @param planName 方案名
* @param projectId 项目id
* @param submitter 提交人
* @return
*/
ResponseResult addWord(String keyword, String planName, String projectId, String submitter);
void updateWord(String id, String keyword, String planName, String projectId, String submitter);
}
...@@ -334,7 +334,7 @@ public class EsSearchServiceImpl implements EsSearchService { ...@@ -334,7 +334,7 @@ public class EsSearchServiceImpl implements EsSearchService {
} }
} }
// dataType // dataType
if (Objects.nonNull(dto.getDataType())){ if (CollectionUtils.isNotEmpty(dto.getDataType())){
postFilter.must(EsQueryTools.assembleC2Query(dto.getDataType())); postFilter.must(EsQueryTools.assembleC2Query(dto.getDataType()));
} }
// ip // ip
......
...@@ -6,9 +6,11 @@ import com.zhiwei.brandkbs2.config.Constant; ...@@ -6,9 +6,11 @@ import com.zhiwei.brandkbs2.config.Constant;
import com.zhiwei.brandkbs2.dao.InteractionUpdateRecordDao; import com.zhiwei.brandkbs2.dao.InteractionUpdateRecordDao;
import com.zhiwei.brandkbs2.dao.ProjectDao; import com.zhiwei.brandkbs2.dao.ProjectDao;
import com.zhiwei.brandkbs2.dao.WholeSearchRecordDao; import com.zhiwei.brandkbs2.dao.WholeSearchRecordDao;
import com.zhiwei.brandkbs2.pojo.Project; import com.zhiwei.brandkbs2.dao.XiaohongshuRecordDao;
import com.zhiwei.brandkbs2.pojo.InteractionUpdateRecord; import com.zhiwei.brandkbs2.pojo.InteractionUpdateRecord;
import com.zhiwei.brandkbs2.pojo.Project;
import com.zhiwei.brandkbs2.pojo.WholeSearchRecord; import com.zhiwei.brandkbs2.pojo.WholeSearchRecord;
import com.zhiwei.brandkbs2.pojo.vo.LineVO;
import com.zhiwei.brandkbs2.pojo.vo.PageVO; import com.zhiwei.brandkbs2.pojo.vo.PageVO;
import com.zhiwei.brandkbs2.service.ExtraService; import com.zhiwei.brandkbs2.service.ExtraService;
import com.zhiwei.brandkbs2.util.MongoUtil; import com.zhiwei.brandkbs2.util.MongoUtil;
...@@ -20,7 +22,6 @@ import org.springframework.stereotype.Service; ...@@ -20,7 +22,6 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -38,6 +39,9 @@ public class ExtraServiceImpl implements ExtraService { ...@@ -38,6 +39,9 @@ public class ExtraServiceImpl implements ExtraService {
@Resource(name = "interactionUpdateRecordDao") @Resource(name = "interactionUpdateRecordDao")
private InteractionUpdateRecordDao interactionUpdateRecordDao; private InteractionUpdateRecordDao interactionUpdateRecordDao;
@Resource(name = "xiaohongshuRecordDao")
private XiaohongshuRecordDao xiaohongshuRecordDao;
@Resource(name = "projectDao") @Resource(name = "projectDao")
private ProjectDao projectDao; private ProjectDao projectDao;
...@@ -204,6 +208,19 @@ public class ExtraServiceImpl implements ExtraService { ...@@ -204,6 +208,19 @@ public class ExtraServiceImpl implements ExtraService {
interactionUpdateRecordDao.insertOne(record, interactionUpdateRecordDao.generateCollectionName()); interactionUpdateRecordDao.insertOne(record, interactionUpdateRecordDao.generateCollectionName());
} }
@Override
public JSONObject xiaohongshuRecordLog(long startTime, long endTime, String timeType) {
JSONObject json = new JSONObject();
Query query = new Query();
query.addCriteria(Criteria.where("projectId").is(UserThreadLocal.getProjectId()));
query.addCriteria(Criteria.where("cTime").gte(new Date(startTime)).lt(new Date(endTime)));
List<LineVO> lineList = xiaohongshuRecordDao.aggregateDayLastRecord(startTime, endTime, timeType);
long sum = lineList.stream().mapToLong(LineVO::getCount).sum();
json.put("count", sum);
json.put("trendList", lineList);
return json;
}
private List<JSONObject> interactionUsedList(Query query, String... collectionNames) { private List<JSONObject> interactionUsedList(Query query, String... collectionNames) {
return interactionUpdateRecordDao.findList(query, collectionNames).stream().map(record -> { return interactionUpdateRecordDao.findList(query, collectionNames).stream().map(record -> {
JSONObject json = new JSONObject(); JSONObject json = new JSONObject();
......
...@@ -574,7 +574,11 @@ public class ProjectServiceImpl implements ProjectService { ...@@ -574,7 +574,11 @@ public class ProjectServiceImpl implements ProjectService {
query.addCriteria(Criteria.where("isManual").is(false)); query.addCriteria(Criteria.where("isManual").is(false));
projectDao.addKeywordFuzz(query, keyword, "projectName"); projectDao.addKeywordFuzz(query, keyword, "projectName");
long count = projectDao.count(query); long count = projectDao.count(query);
if (Objects.isNull(sorter) || Objects.isNull(JSONObject.parseObject(sorter)) || JSONObject.parseObject(sorter).isEmpty()){
projectDao.addSort(query, "{\"cTime\":\"descend\"}");
}else {
projectDao.addSort(query, sorter); projectDao.addSort(query, sorter);
}
mongoUtil.start(page, size, query); mongoUtil.start(page, size, query);
List<Project> projectList = projectDao.findList(query); List<Project> projectList = projectDao.findList(query);
List<JSONObject> resList = projectList.stream().map(project -> { List<JSONObject> resList = projectList.stream().map(project -> {
...@@ -801,9 +805,11 @@ public class ProjectServiceImpl implements ProjectService { ...@@ -801,9 +805,11 @@ public class ProjectServiceImpl implements ProjectService {
*/ */
private List<Map<String, Object>> getPermissionList(Project project) { private List<Map<String, Object>> getPermissionList(Project project) {
List<Map<String, Object>> permissionList = new ArrayList<>(); List<Map<String, Object>> permissionList = new ArrayList<>();
Map<String, Object> originPermission = new HashMap<>(); // 定制化模块权限
originPermission.put("origin", Objects.nonNull(project.getModuleShowList()) && project.getModuleShowList().contains(2)); List<String> moduleShowList = project.getModuleShowList();
permissionList.add(originPermission); Map<String, Object> customPermission = new HashMap<>();
customPermission.put("xiaohongshu", Objects.nonNull(moduleShowList) && moduleShowList.contains("xiaohongshu"));
permissionList.add(customPermission);
// 友好渠道榜、敏感渠道榜是否有数据 // 友好渠道榜、敏感渠道榜是否有数据
Map<String, Object> channelPermission = new HashMap<>(); Map<String, Object> channelPermission = new HashMap<>();
JSONObject jsonObject = GlobalPojo.PROJECT_EMOTION_CHANNEL_DATA.get(project.getId()); JSONObject jsonObject = GlobalPojo.PROJECT_EMOTION_CHANNEL_DATA.get(project.getId());
......
...@@ -22,7 +22,7 @@ import java.util.stream.Collectors; ...@@ -22,7 +22,7 @@ import java.util.stream.Collectors;
* @author: sjj * @author: sjj
* @date: 2023-05-25 14:35 * @date: 2023-05-25 14:35
*/ */
public class TableWordServiceImpl implements TableWordService{ public class TableWordServiceImpl implements TableWordService {
final BaseMongoDao<? extends AbstractBaseWord> baseMongoDao; final BaseMongoDao<? extends AbstractBaseWord> baseMongoDao;
final MongoUtil mongoUtil; final MongoUtil mongoUtil;
...@@ -60,7 +60,7 @@ public class TableWordServiceImpl implements TableWordService{ ...@@ -60,7 +60,7 @@ public class TableWordServiceImpl implements TableWordService{
if (newList.size() + existList.size() > 100) { if (newList.size() + existList.size() > 100) {
return ResponseResult.failure("关键词添加超过上限值100"); return ResponseResult.failure("关键词添加超过上限值100");
} }
baseMongoDao.insertMany(HighWord.createFromList(newList, projectId, submitter)); baseMongoDao.insertMany(new HighWord().createFromList(newList, projectId, submitter));
return ResponseResult.success(); return ResponseResult.success();
} }
......
...@@ -271,11 +271,7 @@ public class ToolsetServiceImpl implements ToolsetService { ...@@ -271,11 +271,7 @@ public class ToolsetServiceImpl implements ToolsetService {
* @param urls 链接 * @param urls 链接
* @return * @return
*/ */
private List<JSONObject> urlInteractionUpdate(List<String> urls){ public List<JSONObject> urlInteractionUpdate(List<String> urls){
return urlInteractionUpdate(urls, null);
}
private List<JSONObject> urlInteractionUpdate(List<String> urls, String taskId){
// 通过url获取域名进而获取任务类型 // 通过url获取域名进而获取任务类型
Map<String, String> map = new HashMap<>(); Map<String, String> map = new HashMap<>();
urls.forEach(url -> map.compute(url, (key, value) -> { urls.forEach(url -> map.compute(url, (key, value) -> {
...@@ -299,10 +295,6 @@ public class ToolsetServiceImpl implements ToolsetService { ...@@ -299,10 +295,6 @@ public class ToolsetServiceImpl implements ToolsetService {
for (List<String> ids : ListUtils.partition(taskIdList, 50)) { for (List<String> ids : ListUtils.partition(taskIdList, 50)) {
result.addAll(getInteractionResult(ids)); result.addAll(getInteractionResult(ids));
} }
if (Objects.nonNull(taskId)) {
// 更新处理进度
addProcessSchedule(taskId, taskIdList.size());
}
} }
return result; return result;
} }
......
package com.zhiwei.brandkbs2.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.zhiwei.brandkbs2.auth.UserThreadLocal;
import com.zhiwei.brandkbs2.dao.XiaohongshuWordDao;
import com.zhiwei.brandkbs2.model.ResponseResult;
import com.zhiwei.brandkbs2.pojo.XiaohongshuWord;
import com.zhiwei.brandkbs2.pojo.vo.PageVO;
import com.zhiwei.brandkbs2.service.XiaohongshuWordService;
import com.zhiwei.brandkbs2.util.MongoUtil;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
/**
* @ClassName: XiaohongshuWordServiceImpl
* @Description 小红书定制模块关键词接口实现类
* @author: sjj
* @date: 2024-06-28 10:11
*/
@Service("xiaohongshuWordServiceImpl")
public class XiaohongshuWordServiceImpl extends TableWordServiceImpl implements XiaohongshuWordService {
final XiaohongshuWordDao xiaohongshuWordDao;
public XiaohongshuWordServiceImpl(@Qualifier("xiaohongshuWordDao") XiaohongshuWordDao xiaohongshuWordDao, @Qualifier("mongoUtil") MongoUtil mongoUtil) {
super(xiaohongshuWordDao, mongoUtil);
this.xiaohongshuWordDao = xiaohongshuWordDao;
}
@Override
public PageVO<JSONObject> findWord(int page, int size, String keyword) {
String projectId = UserThreadLocal.getProjectId();
Query query = Query.query(Criteria.where("projectId").is(projectId));
long count = xiaohongshuWordDao.count(query);
mongoUtil.start(page, size, query);
List<XiaohongshuWord> xiaohongshuWords = xiaohongshuWordDao.findListByKeywordFuzz(query, keyword, new String[]{"keyword"});
List<JSONObject> resList = xiaohongshuWords.stream().map(xiaohongshuWord -> {
JSONObject result = new JSONObject();
result.put("id", xiaohongshuWord.getId());
result.put("keyword", xiaohongshuWord.getKeyword());
result.put("cTime", xiaohongshuWord.getCTime());
result.put("submitter", xiaohongshuWord.getSubmitter());
result.put("planName", xiaohongshuWord.getPlanName());
return result;
}).collect(Collectors.toList());
MongoUtil.PageHelper<JSONObject> pageHelper = mongoUtil.pageHelper(count, resList);
return PageVO.createPageVo(pageHelper, resList);
}
@Override
public ResponseResult addWord(String keyword, String planName, String projectId, String submitter) {
long count = xiaohongshuWordDao.count(Query.query(Criteria.where("projectId").is(projectId)));
// 关键词10上限
if (count >= 10) {
return ResponseResult.failure("新增方案添加超过上限值10");
}
XiaohongshuWord xiaohongshuWord = new XiaohongshuWord();
xiaohongshuWord.setKeyword(keyword);
xiaohongshuWord.setPlanName(planName);
xiaohongshuWord.setProjectId(projectId);
xiaohongshuWord.setSubmitter(submitter);
xiaohongshuWord.setCTime(System.currentTimeMillis());
xiaohongshuWordDao.insertOne(xiaohongshuWord);
return ResponseResult.success();
}
@Override
public void updateWord(String id, String keyword, String planName, String projectId, String submitter) {
XiaohongshuWord xiaohongshuWord = xiaohongshuWordDao.findOneById(id);
xiaohongshuWord.setKeyword(keyword);
xiaohongshuWord.setPlanName(planName);
xiaohongshuWord.setSubmitter(submitter);
xiaohongshuWordDao.updateOne(xiaohongshuWord);
}
}
...@@ -118,4 +118,30 @@ public class ControlCenter { ...@@ -118,4 +118,30 @@ public class ControlCenter {
log.info("定时生成每日一报-结束"); log.info("定时生成每日一报-结束");
} }
} }
@Async("scheduledExecutor")
@Scheduled(cron = "0 30 3 L * ?")
public void monthlyCustomXhsInteractionUpdate() {
log.info("每月互动量更新-启动");
try {
taskService.monthlyCustomXhsInteractionUpdate();
} catch (Exception e) {
log.error("每月互动量更新-出错", e);
} finally {
log.info("每月互动量更新-结束");
}
}
@Async("scheduledExecutor")
@Scheduled(cron = "0 0 5 * * ?")
public void dailyCustomXhsInteractionUpdate() {
log.info("每日互动量更新-启动");
try {
taskService.dailyCustomXhsInteractionUpdate();
} catch (Exception e) {
log.error("每日互动量更新-出错", e);
} finally {
log.info("每日互动量更新-结束");
}
}
} }
...@@ -91,18 +91,22 @@ public class RedisUtil { ...@@ -91,18 +91,22 @@ public class RedisUtil {
return RedisKeyPrefix.NON_MANUAL_PROJECT_MARK_MAX_GID + Tools.concat(projectId, planId, userId); return RedisKeyPrefix.NON_MANUAL_PROJECT_MARK_MAX_GID + Tools.concat(projectId, planId, userId);
} }
public static String getYuqingAnalyzeProjectAvgCountKey(String projectId, String contendId, String planId){ public static String getYuqingAnalyzeProjectAvgCountKey(String projectId, String contendId, String planId, String customPlanId, boolean isCustom){
if (Objects.isNull(planId)){ String keyPrefix = isCustom ? RedisKeyPrefix.CUSTOM_YUQING_ANALYZE_AVG_COUNT : RedisKeyPrefix.YUQING_ANALYZE_PROJECT_AVG_COUNT;
return RedisKeyPrefix.YUQING_ANALYZE_PROJECT_AVG_COUNT + Tools.concat(projectId, contendId); String finalPlanId = isCustom ? customPlanId : planId;
if (Objects.isNull(finalPlanId)){
return keyPrefix + Tools.concat(projectId, contendId);
} }
return RedisKeyPrefix.YUQING_ANALYZE_PROJECT_AVG_COUNT + Tools.concat(projectId, contendId, planId); return keyPrefix + Tools.concat(projectId, contendId, finalPlanId);
} }
public static String getYuqingAnalyzeEmotionDistributionAvgKey(String projectId, String contendId, String emotion, String planId){ public static String getYuqingAnalyzeEmotionDistributionAvgKey(String projectId, String contendId, String emotion, String planId, String customPlanId, boolean isCustom){
if (Objects.isNull(planId)){ String keyPrefix = isCustom ? RedisKeyPrefix.CUSTOM_YUQING_ANALYZE_EMOTION_DISTRIBUTION_AVG : RedisKeyPrefix.YUQING_ANALYZE_EMOTION_DISTRIBUTION_AVG;
return RedisKeyPrefix.YUQING_ANALYZE_EMOTION_DISTRIBUTION_AVG + Tools.concat(projectId, contendId, emotion); String finalPlanId = isCustom ? customPlanId : planId;
if (Objects.isNull(finalPlanId)){
return keyPrefix + Tools.concat(projectId, contendId, emotion);
} }
return RedisKeyPrefix.YUQING_ANALYZE_EMOTION_DISTRIBUTION_AVG + Tools.concat(projectId, contendId, emotion, planId); return keyPrefix + Tools.concat(projectId, contendId, emotion, finalPlanId);
} }
public static String getYuqingAnalyzePlatformAvgCountKey(String projectId, String contendId, String planId){ public static String getYuqingAnalyzePlatformAvgCountKey(String projectId, String contendId, String planId){
...@@ -112,11 +116,13 @@ public class RedisUtil { ...@@ -112,11 +116,13 @@ public class RedisUtil {
return RedisKeyPrefix.YUQING_ANALYZE_PLATFORM_AVG_COUNT + Tools.concat(projectId, contendId, planId); return RedisKeyPrefix.YUQING_ANALYZE_PLATFORM_AVG_COUNT + Tools.concat(projectId, contendId, planId);
} }
public static String getYuqingAnalyzeHighWordKey(String projectId, String contendId, String planId, Long startTime, Long endTime){ public static String getYuqingAnalyzeHighWordKey(String projectId, String contendId, String planId, Long startTime, Long endTime, String customPlanId, boolean isCustom){
if (Objects.isNull(planId)){ String keyPrefix = isCustom ? RedisKeyPrefix.CUSTOM_YUQING_ANALYZE_HIGH_WORD : RedisKeyPrefix.YUQING_ANALYZE_HIGH_WORD;
return RedisKeyPrefix.YUQING_ANALYZE_HIGH_WORD + Tools.concat(projectId, contendId, startTime, endTime); String finalPlanId = isCustom ? customPlanId : planId;
if (Objects.isNull(finalPlanId)){
return keyPrefix + Tools.concat(projectId, contendId, startTime, endTime);
} }
return RedisKeyPrefix.YUQING_ANALYZE_HIGH_WORD + Tools.concat(projectId, contendId, planId, startTime, endTime); return keyPrefix + Tools.concat(projectId, contendId, finalPlanId, startTime, endTime);
} }
public static String getSearchKeywordCacheKey(String projectId, String userId, String searchType){ public static String getSearchKeywordCacheKey(String projectId, String userId, String searchType){
......
...@@ -93,6 +93,8 @@ trends.longTimeInListSearch.url=https://trends.zhiweidata.com/hotSearchTrend/sea ...@@ -93,6 +93,8 @@ trends.longTimeInListSearch.url=https://trends.zhiweidata.com/hotSearchTrend/sea
trends.getHotSearchFromEsInTimeAndTypeOrWord.url=https://hotsearch-manage.zhiweidata.com/hotsearch/hotSearch/getHotSearchFromEsInTimeAndTypeOrWord?limit={1}&page={2}&type={3}&word={4}&sort={5}&accurateWord={6}&maskWord={7} trends.getHotSearchFromEsInTimeAndTypeOrWord.url=https://hotsearch-manage.zhiweidata.com/hotsearch/hotSearch/getHotSearchFromEsInTimeAndTypeOrWord?limit={1}&page={2}&type={3}&word={4}&sort={5}&accurateWord={6}&maskWord={7}
trends.queryHotSearchTrendInner.url=https://trends.zhiweidata.com/hotSearchTrend/inner/queryHotSearchTrendInner trends.queryHotSearchTrendInner.url=https://trends.zhiweidata.com/hotSearchTrend/inner/queryHotSearchTrendInner
trends.getHotSearchSnapshot.url=https://hotsearch-manage.zhiweidata.com/hotsearch/hotSearch/getHotSearchSnapshot?type={1}&time={2}&rank={3} trends.getHotSearchSnapshot.url=https://hotsearch-manage.zhiweidata.com/hotsearch/hotSearch/getHotSearchSnapshot?type={1}&time={2}&rank={3}
trend.nearYearWords.token=vo5ozWt861R125FMpEDCXxRkft3e5tVi3W4dG2hFLBViRFtGsmWtB5bx9MOlE6Vn
trends.nearYearWords.url=https://hotsearch-manage.zhiweidata.com/zhiwei-hot-words-web/brand/nearYearWords
#\u4E8B\u4EF6\u5E93\u5916\u90E8\u63A5\u53E3 #\u4E8B\u4EF6\u5E93\u5916\u90E8\u63A5\u53E3
ef.search.url=https://ef.zhiweidata.com/external/search.do?name={1}&page={2} ef.search.url=https://ef.zhiweidata.com/external/search.do?name={1}&page={2}
ef.searchCriteria.url=https://ef.zhiweidata.com/index/getSearchKey.do ef.searchCriteria.url=https://ef.zhiweidata.com/index/getSearchKey.do
......
...@@ -102,7 +102,8 @@ trends.longTimeInListSearch.url=https://trends.zhiweidata.com/hotSearchTrend/sea ...@@ -102,7 +102,8 @@ trends.longTimeInListSearch.url=https://trends.zhiweidata.com/hotSearchTrend/sea
trends.getHotSearchFromEsInTimeAndTypeOrWord.url=https://hotsearch-manage.zhiweidata.com/hotsearch/hotSearch/getHotSearchFromEsInTimeAndTypeOrWord?limit={1}&page={2}&type={3}&word={4}&sort={5}&accurateWord={6}&maskWord={7} trends.getHotSearchFromEsInTimeAndTypeOrWord.url=https://hotsearch-manage.zhiweidata.com/hotsearch/hotSearch/getHotSearchFromEsInTimeAndTypeOrWord?limit={1}&page={2}&type={3}&word={4}&sort={5}&accurateWord={6}&maskWord={7}
trends.queryHotSearchTrendInner.url=https://trends.zhiweidata.com/hotSearchTrend/inner/queryHotSearchTrendInner trends.queryHotSearchTrendInner.url=https://trends.zhiweidata.com/hotSearchTrend/inner/queryHotSearchTrendInner
trends.getHotSearchSnapshot.url=https://hotsearch-manage.zhiweidata.com/hotsearch/hotSearch/getHotSearchSnapshot?type={1}&time={2}&rank={3} trends.getHotSearchSnapshot.url=https://hotsearch-manage.zhiweidata.com/hotsearch/hotSearch/getHotSearchSnapshot?type={1}&time={2}&rank={3}
trend.nearYearWords.token=vo5ozWt861R125FMpEDCXxRkft3e5tVi3W4dG2hFLBViRFtGsmWtB5bx9MOlE6Vn
trends.nearYearWords.url=https://hotsearch-manage.zhiweidata.com/zhiwei-hot-words-web/brand/nearYearWords
#\u4E8B\u4EF6\u5E93\u5916\u90E8\u63A5\u53E3 #\u4E8B\u4EF6\u5E93\u5916\u90E8\u63A5\u53E3
ef.search.url=https://ef.zhiweidata.com/external/search.do?name={1}&page={2}&size={3} ef.search.url=https://ef.zhiweidata.com/external/search.do?name={1}&page={2}&size={3}
ef.searchCriteria.url=https://ef.zhiweidata.com/index/getSearchKey.do ef.searchCriteria.url=https://ef.zhiweidata.com/index/getSearchKey.do
......
...@@ -93,6 +93,8 @@ trends.longTimeInListSearch.url=https://trends.zhiweidata.com/hotSearchTrend/sea ...@@ -93,6 +93,8 @@ trends.longTimeInListSearch.url=https://trends.zhiweidata.com/hotSearchTrend/sea
trends.getHotSearchFromEsInTimeAndTypeOrWord.url=https://hotsearch-manage.zhiweidata.com/hotsearch/hotSearch/getHotSearchFromEsInTimeAndTypeOrWord?limit={1}&page={2}&type={3}&word={4}&sort={5}&accurateWord={6}&maskWord={7} trends.getHotSearchFromEsInTimeAndTypeOrWord.url=https://hotsearch-manage.zhiweidata.com/hotsearch/hotSearch/getHotSearchFromEsInTimeAndTypeOrWord?limit={1}&page={2}&type={3}&word={4}&sort={5}&accurateWord={6}&maskWord={7}
trends.queryHotSearchTrendInner.url=https://trends.zhiweidata.com/hotSearchTrend/inner/queryHotSearchTrendInner trends.queryHotSearchTrendInner.url=https://trends.zhiweidata.com/hotSearchTrend/inner/queryHotSearchTrendInner
trends.getHotSearchSnapshot.url=https://hotsearch-manage.zhiweidata.com/hotsearch/hotSearch/getHotSearchSnapshot?type={1}&time={2}&rank={3} trends.getHotSearchSnapshot.url=https://hotsearch-manage.zhiweidata.com/hotsearch/hotSearch/getHotSearchSnapshot?type={1}&time={2}&rank={3}
trend.nearYearWords.token=vo5ozWt861R125FMpEDCXxRkft3e5tVi3W4dG2hFLBViRFtGsmWtB5bx9MOlE6Vn
trends.nearYearWords.url=https://hotsearch-manage.zhiweidata.com/zhiwei-hot-words-web/brand/nearYearWords
#\u4E8B\u4EF6\u5E93\u5916\u90E8\u63A5\u53E3 #\u4E8B\u4EF6\u5E93\u5916\u90E8\u63A5\u53E3
ef.search.url=https://ef.zhiweidata.com/external/search.do?name={1}&page={2} ef.search.url=https://ef.zhiweidata.com/external/search.do?name={1}&page={2}
ef.searchCriteria.url=https://ef.zhiweidata.com/index/getSearchKey.do ef.searchCriteria.url=https://ef.zhiweidata.com/index/getSearchKey.do
......
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