Commit ab74b2c3 by liang

性别统计、地域统计、每小时数据趋势、用户发博数统计、参与用户粉丝数前10降序展示

parent 9d9e2c3b
......@@ -7,6 +7,7 @@ import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
......@@ -39,4 +40,10 @@ public class WeiboController {
return weiboService.topTenFensiNum();
}
@ApiOperation("每小时数据趋势")
@GetMapping("trendPerHour")
public RespBean trendPerHour(@RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "20") Integer size){
return weiboService.trendPerHour(page,size);
}
}
......@@ -3,28 +3,36 @@ package com.liang.mongoevent.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.mongodb.core.index.CompoundIndex;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
@CompoundIndex(def = "{'eventId':1,'time':1}")
@Document
public class Weibo {
private String id;
private String username;
private String text;
private Long vtype;
@Indexed
private String time;
private String sex;
private String location;
private String source;
private Long isForward;
@Indexed
private String user_id;
private String mid;
private Long retweet_count;
private Long reply_count;
private String img_url;
@Indexed
private String eventId;
private String url;
private Long rstime;
......
......@@ -11,4 +11,6 @@ public interface WeiboService {
RespBean countWeibo();
RespBean topTenFensiNum();
RespBean trendPerHour(Integer page,Integer size);
}
......@@ -3,7 +3,8 @@ package com.liang.mongoevent.service;
import com.liang.mongoevent.pojo.Weibo;
import com.liang.mongoevent.utils.RespBean;
import com.liang.mongoevent.vo.Location;
import com.liang.mongoevent.vo.UserCount;
import com.liang.mongoevent.vo.TimeCount;
import com.liang.mongoevent.vo.Trend;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
......@@ -13,10 +14,10 @@ import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
@Service
public class WeiboServiceImpl implements WeiboService {
......@@ -39,7 +40,8 @@ public class WeiboServiceImpl implements WeiboService {
public RespBean countLocation() {
Aggregation agg = Aggregation.newAggregation(
Aggregation.group("location").first("location").as("location").count().as("count"),
Aggregation.sort(Sort.Direction.DESC,"count"));
Aggregation.sort(Sort.Direction.DESC,"count")
);
AggregationResults<Location> aggregate = mongoTemplate.aggregate(agg, Weibo.class, Location.class);
Map<String,Long> locationMap=new LinkedHashMap<>();
for (Location location : aggregate) {
......@@ -52,7 +54,8 @@ public class WeiboServiceImpl implements WeiboService {
public RespBean countWeibo() {
Aggregation agg = Aggregation.newAggregation(
Aggregation.group("user_id").first("user_id").as("user_id").first("username").as("username").first("weibo").as("weibo"),
Aggregation.sort(Sort.Direction.DESC,"weibo"));
Aggregation.sort(Sort.Direction.DESC,"weibo")
);
AggregationResults<Weibo> aggregate = mongoTemplate.aggregate(agg, Weibo.class, Weibo.class);
Map<String,Long> weiboMap=new LinkedHashMap<>();
for (Weibo weibo : aggregate) {
......@@ -66,7 +69,8 @@ public class WeiboServiceImpl implements WeiboService {
Aggregation agg = Aggregation.newAggregation(
Aggregation.group("user_id").first("user_id").as("user_id").first("username").as("username").first("fensi").as("fensi"),
Aggregation.sort(Sort.Direction.DESC,"fensi"),
Aggregation.limit(10));
Aggregation.limit(10)
);
AggregationResults<Weibo> aggregate = mongoTemplate.aggregate(agg, Weibo.class, Weibo.class);
Map<String,Long> fensiMap=new LinkedHashMap<>();
for (Weibo weibo : aggregate) {
......@@ -75,5 +79,37 @@ public class WeiboServiceImpl implements WeiboService {
return RespBean.success("成功",fensiMap);
}
@Override
public RespBean trendPerHour(Integer page,Integer size) {
Aggregation agg = Aggregation.newAggregation(
Aggregation.group("eventId").first("eventId").as("eventId").first("time").as("etime").last("time").as("stime"),
Aggregation.sort(Sort.Direction.DESC,"stime"),
Aggregation.skip(size*(page-1)),
Aggregation.limit(size)
);
ArrayList<Object> list = new ArrayList<>();
Map<String, Object> map=new LinkedHashMap<>();
AggregationResults<Trend> aggregate = mongoTemplate.aggregate(agg, Weibo.class, Trend.class);
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH");
for (Trend trend : aggregate) {
LocalDateTime stime = LocalDateTime.parse(trend.getStime().substring(0,13), df);
LocalDateTime etime = LocalDateTime.parse(trend.getEtime().substring(0,13), df);
Duration duration = Duration.between(stime,etime);
long l = duration.toHours();
Map<String, Object> map1=new LinkedHashMap<>();
for (int i = 0; i <=l; i++) {
Query query = new Query(Criteria.where("eventId").is(trend.getEventId()).and("time").regex("^" + df.format(stime)));
long count = mongoTemplate.count(query, Weibo.class);
map1.put(df.format(stime),count);
stime=stime.plusHours(1);
}
map.put(trend.getEventId(),map1);
}
return RespBean.success("成功",map);
}
}
......@@ -7,7 +7,7 @@ import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserCount {
private String user_id;
private Long count;
public class TimeCount {
private String time;
private long count;
}
package com.liang.mongoevent.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Trend {
private String eventId;
private String stime;
private String etime;
}
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