refactor(reporting-service): 移除仪表板最近活动的模拟数据

无真实数据时返回空数组,不再生成假数据

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
hailin 2025-12-20 01:07:39 -08:00
parent 7896be6062
commit 59b83acfa4
1 changed files with 12 additions and 97 deletions

View File

@ -202,7 +202,7 @@ export class DashboardApplicationService {
/**
*
*
*
*/
async getActivities(limit: number): Promise<DashboardActivitiesResponseDto> {
this.logger.debug(`Fetching dashboard activities, limit: ${limit}`);
@ -210,26 +210,17 @@ export class DashboardApplicationService {
// 从数据库获取活动记录
const dbActivities = await this.activityRepo.findRecent(limit);
let activities: DashboardActivityItemDto[];
if (dbActivities.length > 0) {
// 使用真实数据
activities = dbActivities.map((activity) => ({
id: String(activity.id),
type: activity.activityType as ActivityType,
icon: activity.icon || '📌',
title: activity.title,
description: activity.description,
timestamp: this.formatRelativeTime(
Math.floor((Date.now() - (activity.createdAt?.getTime() || Date.now())) / 60000),
),
createdAt: activity.createdAt?.toISOString() || new Date().toISOString(),
}));
} else {
// 如果没有数据,返回模拟数据
this.logger.debug('No activities found, generating mock data');
activities = this.generateMockActivities(limit);
}
const activities: DashboardActivityItemDto[] = dbActivities.map((activity) => ({
id: String(activity.id),
type: activity.activityType as ActivityType,
icon: activity.icon || '📌',
title: activity.title,
description: activity.description,
timestamp: this.formatRelativeTime(
Math.floor((Date.now() - (activity.createdAt?.getTime() || Date.now())) / 60000),
),
createdAt: activity.createdAt?.toISOString() || new Date().toISOString(),
}));
return { activities };
}
@ -300,82 +291,6 @@ export class DashboardApplicationService {
return data;
}
/**
*
*/
private generateMockActivities(limit: number): DashboardActivityItemDto[] {
const activityTemplates: Array<{
type: ActivityType;
icon: string;
title: string;
descriptionTemplate: string;
}> = [
{
type: 'user_register',
icon: '👤',
title: '新用户注册',
descriptionTemplate: '用户 {name} 完成注册',
},
{
type: 'company_authorization',
icon: '🏢',
title: '公司授权',
descriptionTemplate: '{province}省公司完成授权',
},
{
type: 'planting_order',
icon: '🌳',
title: '认种订单',
descriptionTemplate: '用户 {name} 认种了 {count} 棵榴莲树',
},
{
type: 'system_update',
icon: '⚙️',
title: '系统更新',
descriptionTemplate: '{feature} 已更新',
},
{
type: 'report_generated',
icon: '📊',
title: '报表生成',
descriptionTemplate: '{month}月份运营报表已生成',
},
];
const names = ['张三', '李四', '王五', '赵六', '钱七'];
const provinces = ['广东', '浙江', '江苏', '山东', '四川'];
const features = ['龙虎榜规则', '结算规则', '授权流程'];
const months = ['1', '2', '3', '11', '12'];
const activities: DashboardActivityItemDto[] = [];
const now = new Date();
for (let i = 0; i < limit; i++) {
const template = activityTemplates[i % activityTemplates.length];
const minutesAgo = (i + 1) * 15 + Math.floor(Math.random() * 30);
const createdAt = new Date(now.getTime() - minutesAgo * 60 * 1000);
let description = template.descriptionTemplate;
description = description.replace('{name}', names[Math.floor(Math.random() * names.length)]);
description = description.replace('{province}', provinces[Math.floor(Math.random() * provinces.length)]);
description = description.replace('{count}', String(Math.floor(Math.random() * 10) + 1));
description = description.replace('{feature}', features[Math.floor(Math.random() * features.length)]);
description = description.replace('{month}', months[Math.floor(Math.random() * months.length)]);
activities.push({
id: String(i + 1),
type: template.type,
icon: template.icon,
title: template.title,
description,
timestamp: this.formatRelativeTime(minutesAgo),
createdAt: createdAt.toISOString(),
});
}
return activities;
}
/**
* MM-DD
*/