统计代码:
public List<ReservationStatByDayVo> queryStatByDay(String shopId,Date date){
final Aggregation agg = newAggregation(
match(Criteria.where("shopId").is(shopId)
.and("status").is(Constants.RESERVATION_CANCEL_STATUS.USED)
.and("date").gt(DateUtils.addDays(date, -1))
.lt(DateUtils.addDays(date, 1))),
group("reserTime")
.last("reserTime").as("reserTime")
.last("date").as("date")
.count().as("count").push("$$ROOT").as("reservations")
.addToSet("member").as("members"),
project("reserTime").andInclude("reserTime","date","count","reservations","members")
.and("reserTime").previousOperation(),
sort(Sort.Direction.ASC, "reserTime")
);
final AggregationResults<ReservationStatByDayVo> aggregation =
template.aggregate(agg, Reservation.class, ReservationStatByDayVo.class);
if(aggregation != null){
return aggregation.getMappedResults();
}
return null;
}
结果实体:
public class ReservationStatByDayVo implements Serializable {
private static final long serialVersionUID = 1L;
private Date reserTime;
private List<Member> members;
private Date date;
private Integer count;//预约数量
private List<Reservation> reservations;
public Date getReserTime() {
return reserTime;
}
public void setReserTime(Date reserTime) {
this.reserTime = reserTime;
}
public List<Member> getMembers() {
return members;
}
public void setMembers(List<Member> members) {
this.members = members;
}
public Integer getCount() {
return count;
}
public void setCount(Integer count) {
this.count = count;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public List<Reservation> getReservations() {
return reservations;
}
public void setReservations(List<Reservation> reservations) {
this.reservations = reservations;
}
}