Commit caee1d71 by shenjunjie

Merge branch 'feature' into 'dev'

Feature

See merge request !546
parents c7da5513 70a38d69
......@@ -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 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 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_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 String projectWarnHotTopKeyAll(String projectId, String type) {
......
......@@ -10,15 +10,9 @@ import com.zhiwei.brandkbs2.enmus.RoleEnum;
import com.zhiwei.brandkbs2.model.ResponseResult;
import com.zhiwei.brandkbs2.pojo.dto.TagFilterDTO;
import com.zhiwei.brandkbs2.pojo.vo.ProjectVO;
import com.zhiwei.brandkbs2.service.HighWordService;
import com.zhiwei.brandkbs2.service.HighlightWordService;
import com.zhiwei.brandkbs2.service.ProjectService;
import com.zhiwei.brandkbs2.service.TagFilterService;
import com.zhiwei.brandkbs2.service.*;
import com.zhiwei.brandkbs2.util.Tools;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
......@@ -46,6 +40,9 @@ public class BaseModuleController extends BaseController {
@Resource(name = "highlightWordServiceImpl")
HighlightWordService highlightWordService;
@Resource(name = "xiaohongshuWordServiceImpl")
XiaohongshuWordService xiaohongshuWordService;
@Resource(name = "projectServiceImpl")
ProjectService projectService;
......@@ -146,4 +143,38 @@ public class BaseModuleController extends BaseController {
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 {
extraService.adjustInteractionRecord(json.getInteger("count"));
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 {
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) {
List<MarkerTag> hitTags = projectService.getProjectById(UserThreadLocal.getProjectId()).getHitTags();
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;
import com.zhiwei.brandkbs2.util.Tools;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.commons.lang3.time.FastDateFormat;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.search.ClearScrollRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchScrollRequest;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.core.CountRequest;
......@@ -202,6 +205,27 @@ public class EsClientDao {
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() {
return esClient;
}
......
......@@ -341,9 +341,11 @@ public class EsQueryTools {
* @param dataType 数据类型(1:长文本, 2:短文本, 3:问答, 5:视频)
* @return
*/
public static BoolQueryBuilder assembleC2Query(Integer dataType) {
public static BoolQueryBuilder assembleC2Query(List<Integer> dataType) {
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;
}
......
......@@ -36,16 +36,18 @@ public abstract class AbstractBaseWord extends AbstractBaseMongo {
*/
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<>();
Long now = System.currentTimeMillis();
for (String keyword : keywords) {
AbstractBaseWord word = new HighWord();
T word = (T) newInstance();
word.setKeyword(keyword);
word.setCTime(now);
word.setProjectId(projectId);
word.setSubmitter(submitter);
res.add((T) word);
res.add(word);
}
return res;
}
......
......@@ -14,4 +14,8 @@ import org.springframework.data.mongodb.core.mapping.Document;
@Setter
@Document(collection = "brandkbs_high_word")
public class HighWord extends AbstractBaseWord {
@Override
AbstractBaseWord newInstance() {
return new HighWord();
}
}
......@@ -14,4 +14,8 @@ import org.springframework.data.mongodb.core.mapping.Document;
@Setter
@Document(collection = "brandkbs_highlight_word")
public class HighlightWord extends AbstractBaseWord {
@Override
AbstractBaseWord newInstance() {
return new HighlightWord();
}
}
......@@ -34,10 +34,9 @@ public class Project extends AbstractProject {
private List<Contend> contendList;
/**
* 模块展示列表(1:标注库 2:大库)
* 模块展示列表(xiaohongshu:达达项目定制化)
*/
@Deprecated
private List<Integer> moduleShowList;
private List<String> 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 {
*/
@ApiModelProperty(value = "屏蔽词检索字段:全文|标题")
private String filterType;
/**
* 方案id,仅非人工项目
* 非人工项目-方案id,仅非人工项目
*/
@ApiModelProperty(value = "方案id")
private String planId;
/**
* 定制化舆情分析页面-方案id
*/
@ApiModelProperty(value = "定制化舆情分析页面方案id")
private String customPlanId;
/**
* 内容类型(原创/转发),仅非人工项目
*/
@ApiModelProperty(value = "内容类型(原创/转发)")
......@@ -203,7 +207,7 @@ public class MarkSearchDTO {
* 数据类型(长文本/短文本/问答/视频),仅非人工项目
*/
@ApiModelProperty(value = "数据类型(1:长文本, 2:短文本, 3:问答, 5:视频)")
private Integer dataType;
private List<Integer> dataType;
/**
* ip地址
*/
......
......@@ -88,10 +88,10 @@ public class ProjectVO {
private List<Contend> contendList;
/**
* 模块展示列表(1:标注库 2:大库)
* 模块展示列表(xiaohongshu:达达项目定制化)
*/
@ApiModelProperty("舆情数据源(模块展示列表(1:标注库 2:大库))")
private List<Integer> moduleShowList;
@ApiModelProperty("xiaohongshu:达达项目定制化")
private List<String> moduleShowList;
/**
* 工具库功能入口展示列表(目前有:摘要提取,互动量更新,词云,字节影响力计算,其中前三者默认开启)
......
......@@ -115,4 +115,12 @@ public interface ExtraService {
* @param 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 {
*/
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
......@@ -553,6 +555,8 @@ public interface MarkDataService {
*/
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
......@@ -636,6 +640,81 @@ public interface MarkDataService {
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 endTime
......
......@@ -62,4 +62,14 @@ public interface TaskService{
* 生成每日一报
*/
void generateDailyReport();
/**
* 每月互动量更新 时间范围近六个月
*/
void monthlyCustomXhsInteractionUpdate();
/**
* 每日互动量更新 时间范围近10天
*/
void dailyCustomXhsInteractionUpdate();
}
......@@ -42,6 +42,8 @@ public interface ToolsetService {
*/
ResponseResult urlInteractionUpdate(MultipartFile file);
List<JSONObject> urlInteractionUpdate(List<String> urls);
/**
* 获取互动量更新剩余可用次数
* @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 {
}
}
// dataType
if (Objects.nonNull(dto.getDataType())){
if (CollectionUtils.isNotEmpty(dto.getDataType())){
postFilter.must(EsQueryTools.assembleC2Query(dto.getDataType()));
}
// ip
......
......@@ -6,9 +6,11 @@ import com.zhiwei.brandkbs2.config.Constant;
import com.zhiwei.brandkbs2.dao.InteractionUpdateRecordDao;
import com.zhiwei.brandkbs2.dao.ProjectDao;
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.Project;
import com.zhiwei.brandkbs2.pojo.WholeSearchRecord;
import com.zhiwei.brandkbs2.pojo.vo.LineVO;
import com.zhiwei.brandkbs2.pojo.vo.PageVO;
import com.zhiwei.brandkbs2.service.ExtraService;
import com.zhiwei.brandkbs2.util.MongoUtil;
......@@ -20,7 +22,6 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
......@@ -38,6 +39,9 @@ public class ExtraServiceImpl implements ExtraService {
@Resource(name = "interactionUpdateRecordDao")
private InteractionUpdateRecordDao interactionUpdateRecordDao;
@Resource(name = "xiaohongshuRecordDao")
private XiaohongshuRecordDao xiaohongshuRecordDao;
@Resource(name = "projectDao")
private ProjectDao projectDao;
......@@ -204,6 +208,19 @@ public class ExtraServiceImpl implements ExtraService {
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) {
return interactionUpdateRecordDao.findList(query, collectionNames).stream().map(record -> {
JSONObject json = new JSONObject();
......
......@@ -574,7 +574,11 @@ public class ProjectServiceImpl implements ProjectService {
query.addCriteria(Criteria.where("isManual").is(false));
projectDao.addKeywordFuzz(query, keyword, "projectName");
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);
}
mongoUtil.start(page, size, query);
List<Project> projectList = projectDao.findList(query);
List<JSONObject> resList = projectList.stream().map(project -> {
......@@ -801,9 +805,11 @@ public class ProjectServiceImpl implements ProjectService {
*/
private List<Map<String, Object>> getPermissionList(Project project) {
List<Map<String, Object>> permissionList = new ArrayList<>();
Map<String, Object> originPermission = new HashMap<>();
originPermission.put("origin", Objects.nonNull(project.getModuleShowList()) && project.getModuleShowList().contains(2));
permissionList.add(originPermission);
// 定制化模块权限
List<String> moduleShowList = project.getModuleShowList();
Map<String, Object> customPermission = new HashMap<>();
customPermission.put("xiaohongshu", Objects.nonNull(moduleShowList) && moduleShowList.contains("xiaohongshu"));
permissionList.add(customPermission);
// 友好渠道榜、敏感渠道榜是否有数据
Map<String, Object> channelPermission = new HashMap<>();
JSONObject jsonObject = GlobalPojo.PROJECT_EMOTION_CHANNEL_DATA.get(project.getId());
......
......@@ -233,27 +233,17 @@ public class ProjectWarnServiceImpl implements ProjectWarnService {
StringBuilder mediaChannel = new StringBuilder();
List<String> politicsLevels = config.getPoliticsLevels();
List<String> fields = config.getFields();
if(Tools.isEmpty(politicsLevels)){
if (Tools.isEmpty(politicsLevels) || politicsLevels.contains("全部")) {
key2Header += "【全部级别】";
}else if(politicsLevels.contains("全部")){
key2Header += "【重点级别】";
}else{
} else {
politicsLevels.forEach(politicsLevel -> mediaChannel.append(politicsLevel).append("、"));
}
if (Tools.isEmpty(fields)) {
if (Tools.isEmpty(fields) || fields.contains("全部")) {
if (0 != key2Header.length()) {
key2Header += "、";
key2Header += "【全部领域】,";
key2Header += "、【全部领域】,";
} else {
key2Header += "【全部领域】";
}
} else if (fields.contains("全部")) {
if (0 != key2Header.length()) {
key2Header += "、";
key2Header += "【重点领域】,";
} else {
key2Header += "【重点领域】";
}
} else {
fields.forEach(field -> mediaChannel.append(field).append("、"));
}
......
......@@ -22,7 +22,7 @@ import java.util.stream.Collectors;
* @author: sjj
* @date: 2023-05-25 14:35
*/
public class TableWordServiceImpl implements TableWordService{
public class TableWordServiceImpl implements TableWordService {
final BaseMongoDao<? extends AbstractBaseWord> baseMongoDao;
final MongoUtil mongoUtil;
......@@ -60,7 +60,7 @@ public class TableWordServiceImpl implements TableWordService{
if (newList.size() + existList.size() > 100) {
return ResponseResult.failure("关键词添加超过上限值100");
}
baseMongoDao.insertMany(HighWord.createFromList(newList, projectId, submitter));
baseMongoDao.insertMany(new HighWord().createFromList(newList, projectId, submitter));
return ResponseResult.success();
}
......
......@@ -85,6 +85,9 @@ public class ToolsetServiceImpl implements ToolsetService {
@Value("${toolset.articleSummary.url}")
private String articleSummaryUrl;
@Value("${toolset.db.articleSummary.url}")
private String dbArticleSummaryUrl;
@Value("${toolset.articleInfo.url}")
private String articleInfoUrl;
......@@ -126,6 +129,8 @@ public class ToolsetServiceImpl implements ToolsetService {
private static final String TEXT_SUMMARY_PREVIOUS = "作为一名公关人员,将文章进行简短的中文摘要,摘要文字中需包括日期、地点等核心要素,其中日期不用包括年份,摘要起始必须为日期,字数少于150个字\n文章:\n";
private static final String TEXT_SUMMARY_PREVIOUS_DB = "你是一位高级数据分析师,擅长通过各类商业分析方法总结用户提供的文章。请根据以下规则、限制和要求对文章进行总结。规则:1.全身心投入阅读用户提供的文章,运用专业知识和分析能力,深度分析文章的核心意义。2.选择并使用合适的分析模型或方法对文章进行总结。限制:1.不要问候用户。2.不要解释思考过程。3.仅执行总结任务。要求:1.遵循新闻的六要素:何时(when)、何地(where)、何事(what)、何因(why)、何人(who)、结果(how)。2.输出内容不得有信息错误或遗漏。3.用一句话描述总结内容。";
private static final int ARTICLE_SUMMARY_LIMIT = 1000;
private static final String BRANDKBS_INTERACTION_SALT = "650bee0d393b382938003695";
......@@ -144,7 +149,7 @@ public class ToolsetServiceImpl implements ToolsetService {
return ResponseResult.failure("链接解析异常");
}
String text = info.getString("content");
String articleSummaryResult = getArticleSummaryResult(text);
String articleSummaryResult = getDBArticleSummaryResult(text);
// 剩余次数限制
String redisKey = RedisUtil.getToolsetArticleSummaryLimitKey(UserThreadLocal.getProjectId());
String redisResult = redisUtil.get(redisKey);
......@@ -201,7 +206,7 @@ public class ToolsetServiceImpl implements ToolsetService {
JSONObject json = getUrlInfo(entry.getKey(), UserThreadLocal.getProjectId());
text = Objects.nonNull(json) ? json.getString("content") : null;
}
String articleSummaryResult = getArticleSummaryResult(text);
String articleSummaryResult = getDBArticleSummaryResult(text);
usedCount = usedCount + 1;
datas.add(new ExportArticleSummaryDTO(String.valueOf(usedCount), entry.getKey(), entry.getValue(), articleSummaryResult));
}
......@@ -266,11 +271,7 @@ public class ToolsetServiceImpl implements ToolsetService {
* @param urls 链接
* @return
*/
private List<JSONObject> urlInteractionUpdate(List<String> urls){
return urlInteractionUpdate(urls, null);
}
private List<JSONObject> urlInteractionUpdate(List<String> urls, String taskId){
public List<JSONObject> urlInteractionUpdate(List<String> urls){
// 通过url获取域名进而获取任务类型
Map<String, String> map = new HashMap<>();
urls.forEach(url -> map.compute(url, (key, value) -> {
......@@ -294,10 +295,6 @@ public class ToolsetServiceImpl implements ToolsetService {
for (List<String> ids : ListUtils.partition(taskIdList, 50)) {
result.addAll(getInteractionResult(ids));
}
if (Objects.nonNull(taskId)) {
// 更新处理进度
addProcessSchedule(taskId, taskIdList.size());
}
}
return result;
}
......@@ -729,10 +726,14 @@ public class ToolsetServiceImpl implements ToolsetService {
? data.getPlatformType() : "网媒", data.getChannel()));
// 1.分别将等级为S,A,B,C的渠道各自加和
if (Objects.nonNull(channelInfluence)){
// 2024/5/21修改:无论表中是否匹配,当类型为D,取值=1
// 2024/5/21修改:即使表中匹配,当类型为D,取值=1
if (Objects.equals("D", channelInfluence.getLevel())){
channelInfluence.setInfluence(1d);
}
// 对于表中匹配上的非D级渠道:当表中的渠道影响力为0或1时,给予对应等级的默认值
if (!Objects.equals("D", channelInfluence.getLevel()) && (0 == channelInfluence.getInfluence() || 1 == channelInfluence.getInfluence())){
channelInfluence.setInfluence(getMatchedDefaultChannelInf(channelInfluence.getLevel()));
}
levelSumH.compute(channelInfluence.getLevel(), (k, v) -> Objects.isNull(v)
? channelInfluence.getInfluence()
: BigDecimal.valueOf(v).add(BigDecimal.valueOf(channelInfluence.getInfluence())).doubleValue());
......@@ -759,6 +760,21 @@ public class ToolsetServiceImpl implements ToolsetService {
return BigDecimal.valueOf(result).setScale(1, RoundingMode.HALF_UP).doubleValue();
}
private double getMatchedDefaultChannelInf(String level){
switch (level){
case "A":
return 72.1;
case "B":
return 57.1;
case "C":
return 37.5;
case "S":
return 88.1;
default:
return 1d;
}
}
/**
* 计算实时传播力(RMI)
* @param data
......@@ -880,7 +896,8 @@ public class ToolsetServiceImpl implements ToolsetService {
* @return
*/
private double computeFinalInf(double inf, double RMI){
return BigDecimal.valueOf(inf).add(BigDecimal.valueOf(RMI)).divide(BigDecimal.valueOf(2), 1, RoundingMode.HALF_UP).doubleValue();
double finalInf = BigDecimal.valueOf(inf).add(BigDecimal.valueOf(RMI)).divide(BigDecimal.valueOf(2), 1, RoundingMode.HALF_UP).doubleValue();
return finalInf > 1 ? finalInf : 1d;
}
/**
......@@ -999,4 +1016,38 @@ public class ToolsetServiceImpl implements ToolsetService {
return errorString;
}
}
/**
* 获取豆包摘要提取结果
* @param text 文本
* @return
*/
private String getDBArticleSummaryResult(String text){
// 即使抛出异常(大概率会是timeout),也要保证批量时其他链接正常执行
String errorString = "访问超时,请稍后重试此条数据";
if (Objects.isNull(text)){
return errorString;
}
try {
// 请求接口
JSONObject info = new JSONObject();
info.put("model", "DOUBAO_PRO_32K");
info.put("prompt", TEXT_SUMMARY_PREVIOUS_DB);
info.put("content", StringUtils.substring(text, 0, 5000));
// 请求参数 请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> request = new HttpEntity<>(info.toJSONString(), headers);
ResponseEntity<String> response = restTemplate.postForEntity(dbArticleSummaryUrl, request, String.class);
JSONObject jsonObject = JSONObject.parseObject(response.getBody());
if (Objects.isNull(jsonObject) || 200 != jsonObject.getIntValue("code")) {
log.error("访问新摘要提取接口异常-返回信息:{}", JSONObject.toJSONString(jsonObject));
return errorString;
}
return jsonObject.getJSONObject("data").getString("content");
}catch (Exception e){
log.error("访问新摘要提取接口异常-", e);
return errorString;
}
}
}
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 {
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 {
return RedisKeyPrefix.NON_MANUAL_PROJECT_MARK_MAX_GID + Tools.concat(projectId, planId, userId);
}
public static String getYuqingAnalyzeProjectAvgCountKey(String projectId, String contendId, String planId){
if (Objects.isNull(planId)){
return RedisKeyPrefix.YUQING_ANALYZE_PROJECT_AVG_COUNT + Tools.concat(projectId, contendId);
public static String getYuqingAnalyzeProjectAvgCountKey(String projectId, String contendId, String planId, String customPlanId, boolean isCustom){
String keyPrefix = isCustom ? RedisKeyPrefix.CUSTOM_YUQING_ANALYZE_AVG_COUNT : RedisKeyPrefix.YUQING_ANALYZE_PROJECT_AVG_COUNT;
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){
if (Objects.isNull(planId)){
return RedisKeyPrefix.YUQING_ANALYZE_EMOTION_DISTRIBUTION_AVG + Tools.concat(projectId, contendId, emotion);
public static String getYuqingAnalyzeEmotionDistributionAvgKey(String projectId, String contendId, String emotion, String planId, String customPlanId, boolean isCustom){
String keyPrefix = isCustom ? RedisKeyPrefix.CUSTOM_YUQING_ANALYZE_EMOTION_DISTRIBUTION_AVG : RedisKeyPrefix.YUQING_ANALYZE_EMOTION_DISTRIBUTION_AVG;
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){
......@@ -112,11 +116,13 @@ public class RedisUtil {
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){
if (Objects.isNull(planId)){
return RedisKeyPrefix.YUQING_ANALYZE_HIGH_WORD + Tools.concat(projectId, contendId, startTime, endTime);
public static String getYuqingAnalyzeHighWordKey(String projectId, String contendId, String planId, Long startTime, Long endTime, String customPlanId, boolean isCustom){
String keyPrefix = isCustom ? RedisKeyPrefix.CUSTOM_YUQING_ANALYZE_HIGH_WORD : RedisKeyPrefix.YUQING_ANALYZE_HIGH_WORD;
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){
......
......@@ -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.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}
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
ef.search.url=https://ef.zhiweidata.com/external/search.do?name={1}&page={2}
ef.searchCriteria.url=https://ef.zhiweidata.com/index/getSearchKey.do
......@@ -126,6 +128,7 @@ wx.accesstoken.url=https://ef.zhiweidata.com/smallprogram/api/codeToken/getToken
wx.getuserphonenumber=https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=
#\u5DE5\u5177\u5E93\u76F8\u5173\u5916\u90E8\u63A5\u53E3
toolset.articleSummary.url=https://zhiweidata.xyz/api/front/chat-swagger
toolset.db.articleSummary.url=https://zhiwei-middleware.zhiweidata.com/ai-model-serve/model/common
toolset.articleInfo.url=https://yuqing.zhiweidata.com/qbjcbackPhoenix/interface/middleware/match?url={1}&projectId={2}&submitter={3}
toolset.interactionUpdate.url=https://zhiwei-middleware.zhiweidata.com/interact/insertData
toolset.interactionResult.url=https://zhiwei-middleware.zhiweidata.com/interact/findDataBatch
......
......@@ -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.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}
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
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
......@@ -136,6 +137,7 @@ wx.accesstoken.url=https://ef.zhiweidata.com/smallprogram/api/codeToken/getToken
wx.getuserphonenumber=https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=
#\u5DE5\u5177\u5E93\u76F8\u5173\u5916\u90E8\u63A5\u53E3
toolset.articleSummary.url=https://zhiweidata.xyz/api/front/chat-swagger
toolset.db.articleSummary.url=https://zhiwei-middleware.zhiweidata.com/ai-model-serve/model/common
toolset.articleInfo.url=https://yuqing.zhiweidata.com/qbjcbackPhoenix/interface/middleware/match?url={1}&projectId={2}&submitter={3}
toolset.interactionUpdate.url=https://zhiwei-middleware.zhiweidata.com/interact/insertData
toolset.interactionResult.url=https://zhiwei-middleware.zhiweidata.com/interact/findDataBatch
......
......@@ -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.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}
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
ef.search.url=https://ef.zhiweidata.com/external/search.do?name={1}&page={2}
ef.searchCriteria.url=https://ef.zhiweidata.com/index/getSearchKey.do
......@@ -126,6 +128,7 @@ wx.accesstoken.url=https://ef.zhiweidata.com/smallprogram/api/codeToken/getToken
wx.getuserphonenumber=https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=
#\u5DE5\u5177\u5E93\u76F8\u5173\u5916\u90E8\u63A5\u53E3
toolset.articleSummary.url=https://zhiweidata.xyz/api/front/chat-swagger
toolset.db.articleSummary.url=https://zhiwei-middleware.zhiweidata.com/ai-model-serve/model/common
toolset.articleInfo.url=https://yuqing.zhiweidata.com/qbjcbackPhoenix/interface/middleware/match?url={1}&projectId={2}&submitter={3}
toolset.interactionUpdate.url=https://zhiwei-middleware.zhiweidata.com/interact/insertData
toolset.interactionResult.url=https://zhiwei-middleware.zhiweidata.com/interact/findDataBatch
......
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