|
@@ -1393,13 +1393,10 @@ export class WorkDayStatisticsService {
|
|
|
const startDateStr = startDate;
|
|
const startDateStr = startDate;
|
|
|
const endDateStr = endDate;
|
|
const endDateStr = endDate;
|
|
|
|
|
|
|
|
- // 基础查询:当前用户的作品(先不分页,后面在内存中做分页,避免部分数据库在 GROUP BY + JOIN 场景下忽略 skip/take)
|
|
|
|
|
|
|
+ // 作品列表:指标直接取 works 表 yesterday_* 快照;时间范围仅用于筛选「发布时间」落在范围内的作品
|
|
|
|
|
+ // 说明:不再按日期范围聚合 work_day_statistics(避免口径随筛选范围变化)
|
|
|
const qb = this.workRepository
|
|
const qb = this.workRepository
|
|
|
.createQueryBuilder('w')
|
|
.createQueryBuilder('w')
|
|
|
- .leftJoin(WorkDayStatistics, 'wds', 'wds.work_id = w.id AND wds.record_date >= :wStart AND wds.record_date <= :wEnd', {
|
|
|
|
|
- wStart: startDateStr,
|
|
|
|
|
- wEnd: endDateStr,
|
|
|
|
|
- })
|
|
|
|
|
.innerJoin(PlatformAccount, 'pa', 'pa.id = w.accountId')
|
|
.innerJoin(PlatformAccount, 'pa', 'pa.id = w.accountId')
|
|
|
.select('w.id', 'id')
|
|
.select('w.id', 'id')
|
|
|
.addSelect('w.title', 'title')
|
|
.addSelect('w.title', 'title')
|
|
@@ -1410,12 +1407,17 @@ export class WorkDayStatisticsService {
|
|
|
.addSelect('pa.avatarUrl', 'accountAvatar')
|
|
.addSelect('pa.avatarUrl', 'accountAvatar')
|
|
|
.addSelect('w.status', 'workType')
|
|
.addSelect('w.status', 'workType')
|
|
|
.addSelect('w.publish_time', 'publishTime')
|
|
.addSelect('w.publish_time', 'publishTime')
|
|
|
- .addSelect('COALESCE(SUM(wds.play_count), 0)', 'viewsCount')
|
|
|
|
|
- .addSelect('COALESCE(SUM(wds.comment_count), 0)', 'commentsCount')
|
|
|
|
|
- .addSelect('COALESCE(SUM(wds.share_count), 0)', 'sharesCount')
|
|
|
|
|
- .addSelect('COALESCE(SUM(wds.collect_count), 0)', 'collectsCount')
|
|
|
|
|
- .addSelect('COALESCE(SUM(wds.like_count), 0)', 'likesCount')
|
|
|
|
|
- .where('w.userId = :userId', { userId });
|
|
|
|
|
|
|
+ .addSelect('COALESCE(w.yesterday_play_count, 0)', 'viewsCount')
|
|
|
|
|
+ .addSelect('COALESCE(w.yesterday_comment_count, 0)', 'commentsCount')
|
|
|
|
|
+ .addSelect('COALESCE(w.yesterday_share_count, 0)', 'sharesCount')
|
|
|
|
|
+ .addSelect('COALESCE(w.yesterday_collect_count, 0)', 'collectsCount')
|
|
|
|
|
+ .addSelect('COALESCE(w.yesterday_like_count, 0)', 'likesCount')
|
|
|
|
|
+ .where('w.userId = :userId', { userId })
|
|
|
|
|
+ .andWhere('w.publish_time IS NOT NULL')
|
|
|
|
|
+ .andWhere('DATE(w.publish_time) >= :startDate AND DATE(w.publish_time) <= :endDate', {
|
|
|
|
|
+ startDate: startDateStr,
|
|
|
|
|
+ endDate: endDateStr,
|
|
|
|
|
+ });
|
|
|
|
|
|
|
|
if (platform) {
|
|
if (platform) {
|
|
|
qb.andWhere('w.platform = :platform', { platform });
|
|
qb.andWhere('w.platform = :platform', { platform });
|
|
@@ -1428,11 +1430,9 @@ export class WorkDayStatisticsService {
|
|
|
}
|
|
}
|
|
|
if (keyword && keyword.trim()) {
|
|
if (keyword && keyword.trim()) {
|
|
|
const kw = `%${keyword.trim()}%`;
|
|
const kw = `%${keyword.trim()}%`;
|
|
|
- qb.andWhere('(w.title LIKE :kw OR pa.accountName LIKE :kw)', { kw });
|
|
|
|
|
|
|
+ qb.andWhere('w.title LIKE :kw', { kw });
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- qb.groupBy('w.id');
|
|
|
|
|
-
|
|
|
|
|
// 排序:统一按发布时间倒序(最新的在前)
|
|
// 排序:统一按发布时间倒序(最新的在前)
|
|
|
qb.orderBy('w.publish_time', 'DESC');
|
|
qb.orderBy('w.publish_time', 'DESC');
|
|
|
|
|
|