提交 af97db20 作者: 925993793@qq.com

研究中心bug修改以及增加第三方调用新增事件接口

上级 9502a411
......@@ -16,6 +16,6 @@ public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(userInfoInterceptor()).addPathPatterns("/**");
registry.addInterceptor(userInfoInterceptor()).addPathPatterns("/**").excludePathPatterns("/third/api/saveEvent");
}
}
......@@ -84,8 +84,8 @@ public class EventDataController {
* @param category 栏目类型(1-全部;2-自动追踪;3-我的)
* @param eventName 事件名称
* @param eventType 事件分类id
* @param labelField 搜索字段
* @param labelName 搜索词
* @param labelField 搜索字段(标签)
* @param labelName 搜索词(标签)
* @param order 排序字段
* @param orderType 排序方式
* @param pageNo 偏移量
......@@ -242,7 +242,7 @@ public class EventDataController {
if (StringUtils.isNotEmpty(subjectId)) {
subjectIdList.add(subjectId);
} else {
List<EventExcelVO> frontList = eventService.frontAllList(projectId,username, null,null);
List<EventExcelVO> frontList = eventService.frontAllList(projectId,username, null,null,null,null,null,null);
frontList.forEach(e -> subjectIdList.add(e.getId()));
}
//获取数据
......
......@@ -56,7 +56,7 @@ public class EventExportController {
UserVo currentUser = UserUtil.getLoginUser();
String username = currentUser.getUsername();
String[] headers = new String[]{"id", "事件名称", "事件描述", "发布时间", "热度"};
List<EventExcelVO> eventList = getEventList(exportParam.getClassify(),exportParam.getProjectId(),username,exportParam.getEventIdList(),exportParam.getSize());
List<EventExcelVO> eventList = getEventList(exportParam,username);
if (CollectionUtils.isNotEmpty(eventList)) {
String name = "event.xlsx";
List<List<String>> dataList = new ArrayList<>();
......@@ -90,7 +90,7 @@ public class EventExportController {
try {
List<String> eventIdList = exportParam.getEventIdList();
if (CollectionUtils.isEmpty(eventIdList)) {
List<EventExcelVO> frontList = getEventList(exportParam.getClassify(),exportParam.getProjectId(),username,exportParam.getEventIdList(),null);
List<EventExcelVO> frontList = getEventList(exportParam,username);
frontList.forEach(e -> eventIdList.add(e.getId()));
}
List<SubjectDataVo> exportDataList = esService.exportDataList(eventIdList, exportParam.getSearchWord(), exportParam.getPosition(), exportParam.getCategory(),
......@@ -133,12 +133,15 @@ public class EventExportController {
}
private List<EventExcelVO> getEventList(Integer category,String projectId,String createBy,List<String> eventIdList,Integer size){
private List<EventExcelVO> getEventList(ExportParam exportParam,String createBy){
List<EventExcelVO> eventList = new ArrayList<>();
Integer category = exportParam.getClassify();
if (category == 1) {
eventList = eventService.frontAllList(projectId,createBy,eventIdList,size);
eventList = eventService.frontAllList(exportParam.getProjectId(),createBy,exportParam.getEventIdList(),exportParam.getEventName()
,exportParam.getEventType(),exportParam.getLabelField(),exportParam.getLabelName(),exportParam.getSize());
} else if (category == 3) {
eventList = eventService.frontOwnerList(projectId, createBy, eventIdList, size);
eventList = eventService.frontOwnerList(exportParam.getProjectId(),createBy,exportParam.getEventIdList(),exportParam.getEventName()
,exportParam.getEventType(),exportParam.getLabelField(),exportParam.getLabelName(),exportParam.getSize());
}
return eventList;
}
......
......@@ -51,7 +51,7 @@ public class EventHomeController {
UserVo loginUser = UserUtil.getLoginUser();
String username = loginUser.getUsername();
Map<String, Integer> map = new HashMap<>();
List<EventExcelVO> eventList = eventService.frontAllList(projectId, username, null, null);
List<EventExcelVO> eventList = eventService.frontAllList(projectId, username, null, null,null,null,null,null);
map.put("eventCount", eventList.size());
List<String> eventIdList = eventList.stream().map(EventExcelVO::getId).collect(Collectors.toList());
long total = esStatisticsService.totalCount(eventIdList, null, null);
......
package com.zzsn.event.controller.thirdApi;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.zzsn.clb.common.model.task.dto.titr.KeyWordsDTO;
import com.zzsn.event.constant.Constants;
import com.zzsn.event.constant.Result;
import com.zzsn.event.entity.*;
import com.zzsn.event.enums.CodePrefixEnum;
import com.zzsn.event.service.*;
import com.zzsn.event.util.CodeGenerateUtil;
import com.zzsn.event.util.CronUtil;
import com.zzsn.event.util.DateUtil;
import com.zzsn.event.util.RedisUtil;
import com.zzsn.event.vo.KeywordsVO;
import com.zzsn.event.vo.RegionVO;
import com.zzsn.event.xxljob.service.IXxlJobInfoService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.CompletableFuture;
/**
*
*
* @author lkg
* @date 2024/10/12
*/
@Slf4j
@RestController
@RequestMapping("/third/api")
public class EventApi {
@Autowired
private IXxlJobInfoService iXxlJobInfoService;
@Autowired
private IKeyWordsService keyWordsService;
@Autowired
private RedisUtil redisUtil;
@Resource
private KafkaTemplate<String, String> kafkaTemplate;
@Autowired
private CodeGenerateUtil codeGenerateUtil;
@Autowired
private IEventService eventService;
@Autowired
private ISubjectTypeMapService subjectTypeMapService;
@Autowired
private IProjectSubjectMapService projectSubjectMapService;
@Autowired
private IEventTagService eventTagService;
@Autowired
private EventRegionMapService eventRegionMapService;
@Autowired
private EventExtractService eventExtractService;
/**
* 新增事件(页面简化版)
*
* @param addEventVO 事件信息
* @author lkg
* @date 2024/7/22
*/
@PostMapping("/saveEvent")
public Result<?> addEvent(@RequestBody ThirdAddEventVO addEventVO) {
KeywordsVO keywordsVO = addEventVO.getKeywordsVO();
if (keywordsVO != null) {
Event event = simpleSave(addEventVO);
KeyWords keyWords = keyWordsService.saveKeyword(event, keywordsVO.getKeyword(), keywordsVO.getExclusionWord());
CompletableFuture.runAsync(()->{
iXxlJobInfoService.subjectInsert(event);
//关键词
KeyWordsDTO redisKeywordDTO = new KeyWordsDTO();
BeanUtils.copyProperties(keyWords, redisKeywordDTO);
redisKeywordDTO.setStartTime(event.getStartTime());
redisKeywordDTO.setEndTime(event.getEndTime());
redisKeywordDTO.setSearchEngines(new ArrayList<>(Constants.DEFAULT_SEARCH_ENGINE.values()));
redisUtil.set(Constants.KEY_WORDS_TO_REDIS_PREFIX + keyWords.getWordsCode(), redisKeywordDTO);
//插入xxljob
iXxlJobInfoService.keyWordsInsert(redisKeywordDTO);
//为了立即响应,关键词新增时放入一个首次录入消息队列
kafkaTemplate.send(Constants.KEY_WORDS_COLLECT_TOPIC, JSON.toJSONString(redisKeywordDTO));
kafkaTemplate.send(Constants.EVENT_SUBJECT_MODEL, event.getEventCode());
});
return Result.OK(event);
} else {
return Result.FAIL(500, "关键词不能为空");
}
}
@Transactional
public Event simpleSave(ThirdAddEventVO addEventVO) {
Event event = new Event();
BeanUtils.copyProperties(addEventVO, event);
event.setStatus(1);
Date endTime = event.getEndTime();
if (endTime == null) {
endTime = DateUtil.addDate(new Date(), 15);
}
event.setEndTime(endTime);
event.setIncreAnaRule(20);
event.setTotalAnaRule(50);
event.setTimeAnaRule(5);
String subjectCode = codeGenerateUtil.geneCodeNo(CodePrefixEnum.SUBJECT_DEFAULT.getValue());
event.setEventCode(subjectCode);
//默认发布
event.setPublishStatus(1);
event.setPublishDate(DateUtil.dateToString(new Date()));
//调度周期,默认2小时
event.setUnit("2");
event.setSpace(1);
event.setCron(CronUtil.generateCron("2",1));
event.setCreateTime(new Date());
event.setCreateBy(addEventVO.getUsername());
eventService.save(event);
String eventId = event.getId();
CompletableFuture.runAsync(()->{
//删除伪事件
Integer category = addEventVO.getCategory();
if (category != null && category == 2) {
eventExtractService.update(Wrappers.<EventExtract>lambdaUpdate().set(EventExtract::getDeleteStatus, 1)
.eq(EventExtract::getId, addEventVO.getFakeEventId()));
}
saveMapMain(eventId);
//事件标签
eventTagService.save(EventTag.builder().eventId(eventId).build());
//地域关系绑定
List<RegionVO> regionList = addEventVO.getRegionList();
addRegionMap(eventId, regionList);
//默认绑定搜索引擎、模型
eventService.saveDefaultMap(eventId);
});
return event;
}
private void saveMapMain(String eventId) {
//专题和分类关系
SubjectTypeMap subjectTypeMap = new SubjectTypeMap();
subjectTypeMap.setSubjectId(eventId);
subjectTypeMap.setCreateTime(new Date());
//分类默认 研究中心
subjectTypeMap.setTypeId("1802619433932296193");
subjectTypeMapService.save(subjectTypeMap);
//专题和项目关系
ProjectSubjectMap projectSubjectMap = new ProjectSubjectMap();
//项目默认 研究中心
projectSubjectMap.setProjectId("1476527644425682945");
projectSubjectMap.setSubjectId(eventId);
projectSubjectMapService.save(projectSubjectMap);
}
private void addRegionMap(String eventId, List<RegionVO> regionList) {
if (CollectionUtils.isNotEmpty(regionList)) {
List<EventRegionMap> dataList = new ArrayList<>();
for (RegionVO regionVO : regionList) {
EventRegionMap eventRegionMap = new EventRegionMap();
eventRegionMap.setEventId(eventId);
eventRegionMap.setRegionId(regionVO.getId());
eventRegionMap.setTopRegionId(regionVO.getTopId());
eventRegionMap.setType(regionVO.getType());
eventRegionMap.setCreateTime(new Date());
dataList.add(eventRegionMap);
}
eventRegionMapService.saveBatch(dataList);
}
}
}
package com.zzsn.event.controller.thirdApi;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.zzsn.event.vo.KeywordsVO;
import com.zzsn.event.vo.RegionVO;
import lombok.Getter;
import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.util.List;
/**
*
*
* @author lkg
* @date 2024/7/19
*/
@Getter
@Setter
public class ThirdAddEventVO {
private String id;
/**图标*/
private String eventIcon;
/**名称*/
private String eventName;
/**事件类型*/
private String eventType;
/**事件描述*/
private String eventDescribe;
/**开始时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date startTime;
/**结束时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date endTime;
/**标签*/
private String eventLabel;
/**是否公开*/
private Integer facePublic;
/**事件创建方式(1-用户直接创建;2-基于挖掘的事件创建)*/
private Integer category;
/**事件地域信息*/
List<RegionVO> regionList;
/**关键词*/
private KeywordsVO keywordsVO;
/**伪事件id*/
private String fakeEventId;
/**用户账号*/
private String username;
}
......@@ -101,7 +101,8 @@ public class EsService {
//设置需要获取的字段
searchSourceBuilder.fetchSource(fetchFields, null);
//设置返回条数
searchSourceBuilder.from((pageNo.get() - 1) * size);
int currentPage = pageNo.get();
searchSourceBuilder.from((currentPage - 1) * size);
searchSourceBuilder.size(size);
//创建查询对象
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
......@@ -125,7 +126,7 @@ public class EsService {
} else {
pageNo.getAndIncrement();
}
log.info("本次循环-{},数据量为-{}", pageNo, subjectDataVos.size());
log.info("本次循环-{},数据量为-{}", currentPage, subjectDataVos.size());
return subjectDataVos;
});
try {
......@@ -263,7 +264,7 @@ public class EsService {
if (StringUtils.isNotBlank(labelId)) {
boolQuery.must(QueryBuilders.nestedQuery("labels", QueryBuilders.termQuery("labels.relationId", labelId), ScoreMode.None));
}
boolQuery.mustNot(QueryBuilders.matchQuery("deleteFlag", "1"));
boolQuery.mustNot(QueryBuilders.termQuery("deleteFlag", "1"));
searchSourceBuilder.query(boolQuery);
searchRequest.source(searchSourceBuilder);
IPage<SubjectDataVo> pageData = new Page<>();
......@@ -555,10 +556,10 @@ public class EsService {
searchSourceBuilder.trackTotalHits(true);
//创建查询对象
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must(QueryBuilders.termsQuery("subjectId.keyword", subjectIdList));
if (CollectionUtils.isNotEmpty(articleIdList)) {
boolQuery.must(QueryBuilders.termsQuery("id", articleIdList));
}
} else {
boolQuery.must(QueryBuilders.termsQuery("subjectId.keyword", subjectIdList));
if (StringUtils.isNotEmpty(searchWord)) {
if (category == 1) {
boolQuery.must(QueryBuilders.matchQuery(position, searchWord));
......@@ -566,7 +567,8 @@ public class EsService {
boolQuery.must(QueryBuilders.matchPhraseQuery(position, searchWord));
}
}
boolQuery.mustNot(QueryBuilders.matchQuery("deleteFlag", "1"));
boolQuery.mustNot(QueryBuilders.termQuery("deleteFlag", "1"));
}
searchSourceBuilder.query(boolQuery);
searchRequest.source(searchSourceBuilder);
List<SubjectDataVo> list = new ArrayList<>();
......
......@@ -229,7 +229,9 @@ public interface EventMapper extends BaseMapper<Event> {
* @author lkg
* @date 2024/4/10
*/
List<EventExcelVO> frontAllList(@Param("projectId") String projectId, @Param("createBy") String createBy, @Param("eventIdList") List<String> eventIdList, @Param("size") Integer size);
List<EventExcelVO> frontAllList(@Param("projectId") String projectId, @Param("createBy") String createBy, @Param("eventIdList") List<String> eventIdList,
@Param("eventName") String eventName,@Param("eventTypes") List<String> eventTypes, @Param("labelField") String labelField,
@Param("labelName") String labelName, @Param("type") Integer type,@Param("size") Integer size);
/**
* 默认创建的,公开且发布的事件信息集合
......@@ -241,7 +243,9 @@ public interface EventMapper extends BaseMapper<Event> {
* @author lkg
* @date 2024/4/10
*/
List<EventExcelVO> frontOwnerList(@Param("projectId") String projectId, @Param("createBy") String createBy, @Param("eventIdList") List<String> eventIdList, @Param("size") Integer size);
List<EventExcelVO> frontOwnerList(@Param("projectId") String projectId, @Param("createBy") String createBy, @Param("eventIdList") List<String> eventIdList,
@Param("eventName") String eventName,@Param("eventTypes") List<String> eventTypes, @Param("labelField") String labelField,
@Param("labelName") String labelName, @Param("type") Integer type,@Param("size") Integer size);
/**
* 模型信息列表
......
......@@ -3,6 +3,6 @@
<mapper namespace="com.zzsn.event.mapper.EventCategoryMapper">
<select id="categoryList" resultType="com.zzsn.event.util.tree.Node">
select id,type_name as name,pid,has_child from event_category
select id,type_name as name,pid,has_child from event_category order by order_number
</select>
</mapper>
\ No newline at end of file
......@@ -561,12 +561,13 @@
<select id="frontAllList" resultType="com.zzsn.event.vo.EventExcelVO">
select distinct a.* from (
select e.id,e.event_name,e.event_describe,e.publish_date,e.total_hot from event e
select e.id,e.event_name,e.event_type,e.event_describe,e.publish_date,e.total_hot from event e
where e.publish_status = 1 and e.face_public = 1
union
select e.id,e.event_name,e.event_describe,e.publish_date,e.total_hot from event e
select e.id,e.event_name,e.event_type,e.event_describe,e.publish_date,e.total_hot from event e
where e.publish_status = 1 and e.create_by = #{createBy}
) a inner join project_subject_map m on a.id = m.subject_id
left join event_tag t3 on a.id=t3.event_id
where m.project_id = #{projectId}
<if test="eventIdList != null and eventIdList.size() > 0">
and a.id in
......@@ -574,14 +575,36 @@
#{item}
</foreach>
</if>
<if test="size != null">
<if test="eventName!=null and eventName != ''">
and a.event_name like CONCAT('%',#{eventName},'%')
</if>
<if test="eventTypes != null and eventTypes.size() > 0">
and a.event_type in
<foreach collection="eventTypes" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="labelName != null and labelName !=''">
<if test="labelField != null and labelField != ''">
<choose>
<when test="type == 1">
and a.event_label like concat('%',#{labelName},'%')
</when>
<otherwise>
and t3.${labelField} like concat('%',#{labelName},'%')
</otherwise>
</choose>
</if>
</if>
order by a.publish_date desc
<if test="size != null">
limit #{size}
</if>
</select>
<select id="frontOwnerList" resultType="com.zzsn.event.vo.EventExcelVO">
select id,event_name,event_describe,publish_date,total_hot from event e
select e.id,e.event_name,e.event_describe,e.publish_date,e.total_hot from event e
inner join project_subject_map m on e.id = m.subject_id
left join event_tag t3 on e.id=t3.event_id
where e.publish_status = 1 and e.face_public = 1
and e.create_by = #{createBy} and m.project_id = #{projectId}
<if test="eventIdList != null and eventIdList.size() > 0">
......@@ -590,8 +613,29 @@
#{item}
</foreach>
</if>
<if test="size != null">
<if test="eventName!=null and eventName != ''">
and e.event_name like CONCAT('%',#{eventName},'%')
</if>
<if test="eventTypes != null and eventTypes.size() > 0">
and e.event_type in
<foreach collection="eventTypes" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="labelName != null and labelName !=''">
<if test="labelField != null and labelField != ''">
<choose>
<when test="type == 1">
and e.event_label like concat('%',#{labelName},'%')
</when>
<otherwise>
and t3.${labelField} like concat('%',#{labelName},'%')
</otherwise>
</choose>
</if>
</if>
order by e.publish_date desc
<if test="size != null">
limit #{size}
</if>
</select>
......
......@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.zzsn.event.entity.Event;
import com.zzsn.event.util.tree.Node;
import com.zzsn.event.vo.*;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
......@@ -146,7 +147,8 @@ public interface IEventService extends IService<Event> {
* @author lkg
* @date 2024/4/10
*/
List<EventExcelVO> frontAllList(String projectId, String createBy, List<String> eventIdList, Integer size);
List<EventExcelVO> frontAllList(String projectId, String createBy, List<String> eventIdList,String searchWord,
String eventType, String labelField,String labelName, Integer size);
/**
* 默认创建的,公开且发布的事件信息集合
......@@ -158,7 +160,8 @@ public interface IEventService extends IService<Event> {
* @author lkg
* @date 2024/4/10
*/
List<EventExcelVO> frontOwnerList(String projectId, String createBy, List<String> eventIdList, Integer size);
List<EventExcelVO> frontOwnerList(String projectId, String createBy, List<String> eventIdList,String searchWord,
String eventType, String labelField,String labelName, Integer size);
/**
* 模型信息列表
......
......@@ -429,13 +429,33 @@ public class EventServiceImpl extends ServiceImpl<EventMapper, Event> implements
}
@Override
public List<EventExcelVO> frontAllList(String projectId,String createBy, List<String> eventIdList, Integer size) {
return baseMapper.frontAllList(projectId,createBy,eventIdList, size);
public List<EventExcelVO> frontAllList(String projectId, String createBy, List<String> eventIdList,String eventName,
String eventType, String labelField,String labelName, Integer size) {
Integer type = null;
if (StringUtils.isNotEmpty(labelField) && labelField.equals("event_label")) {
type = 1;
}
List<String> eventTypes = new ArrayList<>();
if (StringUtils.isNotEmpty(eventType)) {
List<Node> nodes = eventCategoryService.categoryList();
eventTypes = TreeUtil.belowList(nodes, eventType, true);
}
return baseMapper.frontAllList(projectId,createBy,eventIdList,eventName,eventTypes,labelField,labelName,type, size);
}
@Override
public List<EventExcelVO> frontOwnerList(String projectId, String createBy, List<String> eventIdList, Integer size) {
return baseMapper.frontOwnerList(projectId,createBy,eventIdList,size);
public List<EventExcelVO> frontOwnerList(String projectId, String createBy, List<String> eventIdList,String eventName,
String eventType, String labelField,String labelName, Integer size) {
Integer type = null;
if (StringUtils.isNotEmpty(labelField) && labelField.equals("event_label")) {
type = 1;
}
List<String> eventTypes = new ArrayList<>();
if (StringUtils.isNotEmpty(eventType)) {
List<Node> nodes = eventCategoryService.categoryList();
eventTypes = TreeUtil.belowList(nodes, eventType, true);
}
return baseMapper.frontOwnerList(projectId,createBy,eventIdList,eventName,eventTypes,labelField,labelName,type, size);
}
@Override
......
......@@ -35,4 +35,12 @@ public class ExportParam {
private Integer size;
//导出方式(1-摘要;2-正文)
private Integer type;
//事件类型
String eventType;
//搜索字段(标签)
String labelField;
//搜索词(标签)
String labelName;
//事件名称
String eventName;
}
......@@ -95,7 +95,7 @@ spring:
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
properties:
max.request.size: 5242880 #5M
max.request.size: 335544324 #32M
consumer:
#用于标识此使用者所属的使用者组的唯一字符串
group-id: event-analysis-group-dev
......
......@@ -92,7 +92,7 @@ spring:
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
properties:
max.request.size: 10485760 #10M
max.request.size: 335544324 #32M
consumer:
#用于标识此使用者所属的使用者组的唯一字符串
group-id: event-analysis-group
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论