Commit a40bb649 by 陈健智

舆情简报-每日一报模块

parent 8dfdc75d
...@@ -20,12 +20,14 @@ public class Constant { ...@@ -20,12 +20,14 @@ public class Constant {
public static final Long ONE_YEAR = ONE_MONTH * 12; public static final Long ONE_YEAR = ONE_MONTH * 12;
public static final String SPEC_MINUTE_PATTERN = "yyyy.MM.dd HH:mm"; public static final String SPEC_MINUTE_PATTERN = "yyyy.MM.dd HH:mm";
public static final String SPEC_DAY_PATTERN = "yyyy.MM.dd";
public static final String HOUR_PATTERN = "yyyy-MM-dd HH"; public static final String HOUR_PATTERN = "yyyy-MM-dd HH";
public static final String DAY_PATTERN = "yyyy-MM-dd"; public static final String DAY_PATTERN = "yyyy-MM-dd";
public static final String MONTH_PATTERN = "yyyy-MM"; public static final String MONTH_PATTERN = "yyyy-MM";
public static final String YEAR_PATTERN = "yyyy"; public static final String YEAR_PATTERN = "yyyy";
public static final FastDateFormat SPEC_MINUTE_FORMAT = FastDateFormat.getInstance(SPEC_MINUTE_PATTERN); public static final FastDateFormat SPEC_MINUTE_FORMAT = FastDateFormat.getInstance(SPEC_MINUTE_PATTERN);
public static final FastDateFormat SPEC_DAY_POINT_FORMAT = FastDateFormat.getInstance(SPEC_DAY_PATTERN);
public static final FastDateFormat HOUR_FORMAT = FastDateFormat.getInstance(HOUR_PATTERN); public static final FastDateFormat HOUR_FORMAT = FastDateFormat.getInstance(HOUR_PATTERN);
public static final FastDateFormat DAY_FORMAT = FastDateFormat.getInstance(DAY_PATTERN); public static final FastDateFormat DAY_FORMAT = FastDateFormat.getInstance(DAY_PATTERN);
public static final FastDateFormat SPEC_DAY_FORMAT = FastDateFormat.getInstance("yyyy/MM/dd"); public static final FastDateFormat SPEC_DAY_FORMAT = FastDateFormat.getInstance("yyyy/MM/dd");
......
...@@ -481,7 +481,7 @@ public class AppArticleController extends BaseController { ...@@ -481,7 +481,7 @@ public class AppArticleController extends BaseController {
@ApiOperation("新-舆情分析-活跃渠道") @ApiOperation("新-舆情分析-活跃渠道")
@PostMapping("/analyze/active-channel") @PostMapping("/analyze/active-channel")
public ResponseResult getActiveChannels(@RequestBody MarkSearchDTO markSearchDTO) { public ResponseResult getActiveChannels(@RequestBody MarkSearchDTO markSearchDTO) {
return ResponseResult.success(markDataService.getActiveChannels(markSearchDTO)); return ResponseResult.success(markDataService.getActiveChannels(markSearchDTO, 20));
} }
@ApiOperation("新-舆情分析-ip分布") @ApiOperation("新-舆情分析-ip分布")
...@@ -538,6 +538,20 @@ public class AppArticleController extends BaseController { ...@@ -538,6 +538,20 @@ public class AppArticleController extends BaseController {
return ResponseResult.success(markDataService.getSearchAnalyzeHighWord(markSearchDTO)); return ResponseResult.success(markDataService.getSearchAnalyzeHighWord(markSearchDTO));
} }
@ApiOperation("舆情简报-每日一报列表")
@GetMapping("/daily-report/list")
public ResponseResult getDailyReportList(@RequestParam(value = "page", defaultValue = "1") Integer page,
@RequestParam(value = "pageSize", defaultValue = "10")Integer pageSize) {
return ResponseResult.success(markDataService.getDailyReportList(page, pageSize));
}
@ApiOperation("舆情简报-每日一报详情")
@GetMapping("/daily-report/detail/{id}")
@Auth(role = RoleEnum.NO_AUTHORISE)
public ResponseResult getDailyReportDetail(@PathVariable String id) {
return ResponseResult.success(markDataService.getDailyReportDetail(id));
}
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.DailyReport;
/**
* @ClassName: DailyReportDao
* @Description DailyReportDao
* @author: cjz
* @date: 2024-04-22 11:46
*/
public interface DailyReportDao extends BaseMongoDao<DailyReport>{
}
package com.zhiwei.brandkbs2.dao.impl;
import com.zhiwei.brandkbs2.dao.DailyReportDao;
import com.zhiwei.brandkbs2.pojo.DailyReport;
import org.springframework.stereotype.Component;
/**
* @ClassName: DailyReportDaoImpl
* @Description DailyReportDaoImpl
* @author: cjz
* @date: 2024-04-22 11:46
*/
@Component("dailyReportDao")
public class DailyReportDaoImpl extends BaseMongoDaoImpl<DailyReport> implements DailyReportDao {
private static final String COLLECTION_NAME = "brandkbs_daily_report";
public DailyReportDaoImpl() {
super(COLLECTION_NAME);
}
}
package com.zhiwei.brandkbs2.pojo;
import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
/**
* @author cjz
* @version 1.0
* @description 每日简报实体类
* @date 2024年4月22日10:06:46
*/
@Getter
@Setter
@AllArgsConstructor
public class DailyReport extends AbstractBaseMongo{
private String name;
/**
* 舆情概览
*/
private JSONObject summary;
/**
* 舆情总量
*/
private JSONObject yuqingAmount;
/**
* 情感分布
*/
private JSONObject yuqingEmotion;
/**
* 重点平台
*/
private JSONObject platformPercentage;
/**
* 高频标题
*/
private List<JSONObject> topTitle;
/**
* 发文渠道
*/
private List<JSONObject> topSource;
/**
* 项目id
*/
private String projectId;
/**
* 项目
*/
private String project;
/**
* 时间周期-开始时间
*/
private Long startTime;
/**
* 时间周期-结束时间
*/
private Long endTime;
/**
* 创建时间
*/
private Long cTime;
}
...@@ -3,6 +3,7 @@ package com.zhiwei.brandkbs2.service; ...@@ -3,6 +3,7 @@ package com.zhiwei.brandkbs2.service;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.zhiwei.brandkbs2.model.ResponseResult; import com.zhiwei.brandkbs2.model.ResponseResult;
import com.zhiwei.brandkbs2.pojo.BaseMap; import com.zhiwei.brandkbs2.pojo.BaseMap;
import com.zhiwei.brandkbs2.pojo.DailyReport;
import com.zhiwei.brandkbs2.pojo.Event; import com.zhiwei.brandkbs2.pojo.Event;
import com.zhiwei.brandkbs2.pojo.MarkFlowEntity; import com.zhiwei.brandkbs2.pojo.MarkFlowEntity;
import com.zhiwei.brandkbs2.pojo.dto.*; import com.zhiwei.brandkbs2.pojo.dto.*;
...@@ -581,7 +582,7 @@ public interface MarkDataService { ...@@ -581,7 +582,7 @@ public interface MarkDataService {
* @param dto 标注数据搜索传输类 * @param dto 标注数据搜索传输类
* @return * @return
*/ */
List<JSONObject> getActiveChannels(MarkSearchDTO dto); List<JSONObject> getActiveChannels(MarkSearchDTO dto, int size);
/** /**
* 新-舆情分析-ip分布 * 新-舆情分析-ip分布
...@@ -673,4 +674,24 @@ public interface MarkDataService { ...@@ -673,4 +674,24 @@ public interface MarkDataService {
PageVO<JSONObject> getArticleList(String aggTitle, Long startTime, Long endTime, String planId, String platform, int page, int pageSize); PageVO<JSONObject> getArticleList(String aggTitle, Long startTime, Long endTime, String planId, String platform, int page, int pageSize);
PageVO<JSONObject> getArticleList(MarkSearchDTO dto); PageVO<JSONObject> getArticleList(MarkSearchDTO dto);
/**
* 生成每日一报
*/
void generateDailyReport(Long startTime, Long endTime);
/**
* 每日一报列表
* @param page
* @param pageSize
* @return
*/
PageVO<JSONObject> getDailyReportList(int page, int pageSize);
/**
* 获取每日一报详情
* @param id id
* @return
*/
DailyReport getDailyReportDetail(String id);
} }
...@@ -57,4 +57,9 @@ public interface TaskService{ ...@@ -57,4 +57,9 @@ public interface TaskService{
* 生成舆情分析词云缓存 * 生成舆情分析词云缓存
*/ */
void yuqingAnalyzeHighWordCache(); void yuqingAnalyzeHighWordCache();
/**
* 生成每日一报
*/
void generateDailyReport();
} }
...@@ -399,6 +399,25 @@ public class TaskServiceImpl implements TaskService { ...@@ -399,6 +399,25 @@ public class TaskServiceImpl implements TaskService {
CompletableFuture.allOf(projectFutures.toArray(new CompletableFuture[0])).join(); CompletableFuture.allOf(projectFutures.toArray(new CompletableFuture[0])).join();
} }
@Override
public void generateDailyReport() {
// 时间范围:当天早上八点-前一天早上八点
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 8);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
long endTime = calendar.getTimeInMillis();
long startTime = endTime - Constant.ONE_DAY;
AtomicInteger total = new AtomicInteger();
CompletableFuture.allOf(GlobalPojo.PROJECT_MAP.values().stream().map(project -> CompletableFuture.supplyAsync(() -> {
UserThreadLocal.set(new UserInfo().setProjectId(project.getId()));
markDataService.generateDailyReport(startTime, endTime);
log.info("项目:{}-{}-每日一报生成已完成:{}个", project.getProjectName(), project.getId(), total.incrementAndGet());
return null;
}, cacheServiceExecutor)).toArray(CompletableFuture[]::new)).join();
}
private boolean reportSendByProject(Project project) { private boolean reportSendByProject(Project project) {
boolean flag = false; boolean flag = false;
// 扫描setting信息并生成对应报告 // 扫描setting信息并生成对应报告
......
...@@ -105,4 +105,17 @@ public class ControlCenter { ...@@ -105,4 +105,17 @@ public class ControlCenter {
log.info("定时按周计算项目均值-结束"); log.info("定时按周计算项目均值-结束");
} }
} }
@Async("scheduledExecutor")
@Scheduled(cron = "0 0 8 * * ?")
public void generateDailyReport() {
log.info("定时生成每日一报-启动");
try {
taskService.generateDailyReport();
} catch (Exception e) {
log.error("定时生成每日一报-出错", e);
} finally {
log.info("定时生成每日一报-结束");
}
}
} }
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