fix(reporting-service): 修复授权事件区域名称显示 undefined

不同授权事件使用不同的字段名:
- province 事件:provinceCode/provinceName
- city 事件:cityCode/cityName
- community 事件:communityName
- 通用:regionCode/regionName

现在正确处理所有变体,避免显示 "undefined undefined 完成授权"

🤖 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 2026-01-08 09:51:11 -08:00
parent 1676e82cc6
commit 347e5ce3de
1 changed files with 46 additions and 13 deletions

View File

@ -54,12 +54,19 @@ interface AuthorizationRoleEvent {
payload: {
authorizationId?: string;
userId: string;
accountSequence: string;
roleType: string;
regionCode: string;
regionName: string;
accountSequence?: string;
roleType?: string;
// 不同事件类型使用不同的字段名
regionCode?: string;
regionName?: string;
provinceCode?: string;
provinceName?: string;
cityCode?: string;
cityName?: string;
communityName?: string;
status?: string;
authorizedAt?: string;
authorizedBy?: string | null;
};
_outbox?: OutboxMeta;
}
@ -223,23 +230,38 @@ export class ActivityEventConsumerController {
}
// 根据事件类型决定是否记录活动
if (eventType.includes('authorized') || eventType.includes('Authorized')) {
if (eventType.includes('authorized') || eventType.includes('Authorized') || eventType.includes('granted')) {
const roleTypeLabel = this.getRoleTypeLabel(payload.roleType);
const entityId = payload.authorizationId || message.aggregateId;
// 从不同事件类型中提取区域信息
// - province 事件使用 provinceCode/provinceName
// - city 事件使用 cityCode/cityName
// - community 事件使用 communityName
// - 其他使用 regionCode/regionName
const regionCode =
payload.regionCode || payload.provinceCode || payload.cityCode || '';
const regionName =
payload.regionName ||
payload.provinceName ||
payload.cityName ||
payload.communityName ||
regionCode ||
'未知区域';
// 幂等创建活动日志(如果已存在则跳过)
const created = await this.activityRepo.createIfNotExists({
activityType: 'company_authorization' as ActivityType,
title: '授权成功',
description: `${payload.regionName} ${roleTypeLabel} 完成授权`,
description: `${regionName} ${roleTypeLabel} 完成授权`,
icon: '🏢',
relatedUserId: BigInt(payload.userId),
relatedEntityType: 'authorization',
relatedEntityId: entityId,
metadata: {
roleType: payload.roleType,
regionCode: payload.regionCode,
regionName: payload.regionName,
regionCode: regionCode,
regionName: regionName,
accountSequence: payload.accountSequence,
authorizedAt: payload.authorizedAt || message.occurredAt,
},
@ -260,13 +282,13 @@ export class ActivityEventConsumerController {
this.realtimeStatsRepo.incrementProvinceAuth(today),
this.globalStatsRepo.incrementProvinceCompany(),
]);
this.logger.log(`Province company stats incremented: ${payload.regionCode}`);
this.logger.log(`Province company stats incremented: ${regionCode}`);
} else if (isCityCompany) {
await Promise.all([
this.realtimeStatsRepo.incrementCityAuth(today),
this.globalStatsRepo.incrementCityCompany(),
]);
this.logger.log(`City company stats incremented: ${payload.regionCode}`);
this.logger.log(`City company stats incremented: ${regionCode}`);
}
this.logger.log(`Activity and stats recorded for authorization: ${payload.accountSequence}`);
@ -287,10 +309,21 @@ export class ActivityEventConsumerController {
const { payload, aggregateId } = message;
const roleTypeLabel = this.getRoleTypeLabel(payload.roleType);
// 从不同事件类型中提取区域信息
const regionCode =
payload.regionCode || payload.provinceCode || payload.cityCode || '';
const regionName =
payload.regionName ||
payload.provinceName ||
payload.cityName ||
payload.communityName ||
regionCode ||
'未知区域';
const created = await this.activityRepo.createIfNotExists({
activityType: 'benefit_applied' as ActivityType,
title: '权益激活',
description: `${payload.regionName} ${roleTypeLabel} 激活权益`,
description: `${regionName} ${roleTypeLabel} 激活权益`,
icon: '🎁',
relatedUserId: BigInt(payload.userId),
relatedEntityType: 'benefit',
@ -299,8 +332,8 @@ export class ActivityEventConsumerController {
authorizationId: payload.authorizationId,
accountSequence: payload.accountSequence,
roleType: payload.roleType,
regionCode: payload.regionCode,
regionName: payload.regionName,
regionCode: regionCode,
regionName: regionName,
activatedAt: message.occurredAt,
},
});