|
|
@@ -137,8 +137,38 @@ export class PublishService {
|
|
|
.take(pageSize)
|
|
|
.getManyAndCount();
|
|
|
|
|
|
+ // 批量查询每个任务的发布结果统计
|
|
|
+ let resultStatsMap: Record<number, { successCount: number; failCount: number }> = {};
|
|
|
+ if (tasks.length > 0) {
|
|
|
+ const taskIds = tasks.map(t => t.id);
|
|
|
+ const stats = await this.resultRepository
|
|
|
+ .createQueryBuilder('r')
|
|
|
+ .select('r.taskId', 'taskId')
|
|
|
+ .addSelect('COUNT(CASE WHEN r.status = :success THEN 1 END)', 'successCount')
|
|
|
+ .addSelect('COUNT(CASE WHEN r.status = :failed THEN 1 END)', 'failCount')
|
|
|
+ .setParameter('success', 'success')
|
|
|
+ .setParameter('failed', 'failed')
|
|
|
+ .where('r.taskId IN (:...taskIds)', { taskIds })
|
|
|
+ .groupBy('r.taskId')
|
|
|
+ .getRawMany();
|
|
|
+ for (const s of stats) {
|
|
|
+ resultStatsMap[s.taskId] = {
|
|
|
+ successCount: Number(s.successCount) || 0,
|
|
|
+ failCount: Number(s.failCount) || 0,
|
|
|
+ };
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
return {
|
|
|
- items: tasks.map(this.formatTask),
|
|
|
+ items: tasks.map(t => {
|
|
|
+ const formatted = this.formatTask(t);
|
|
|
+ const stats = resultStatsMap[t.id];
|
|
|
+ if (stats) {
|
|
|
+ formatted.successCount = stats.successCount;
|
|
|
+ formatted.failCount = stats.failCount;
|
|
|
+ }
|
|
|
+ return formatted;
|
|
|
+ }),
|
|
|
total,
|
|
|
page,
|
|
|
pageSize,
|