补充通知信息
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m11s

This commit is contained in:
2026-07-28 16:14:20 +08:00
parent 4b98612816
commit 1e4f998fe7
8 changed files with 87 additions and 21 deletions

View File

@@ -82,7 +82,7 @@ func (p *ReminderPublisher) appendShopNotification(ctx context.Context, tx *gorm
ResourceType: candidate.AssetType, ResourceID: assetID, BusinessKey: eventID,
Payload: notificationapp.AdminDynamicPayload{
TargetKind: constants.NotificationTargetKindShop, TargetID: shopID,
NotificationType: constants.NotificationTypePackageExpiring, TemplateData: map[string]string{},
NotificationType: constants.NotificationTypePackageExpiring, TemplateData: expiryTemplateData(candidate),
RefType: constants.NotificationRefTypeExpiringAsset, RefID: shopIDText,
ExpiresAt: candidate.EstimatedFinalExpiresAt,
},
@@ -160,7 +160,7 @@ func (p *ReminderPublisher) appendNotification(ctx context.Context, tx *gorm.DB,
ResourceType: candidate.AssetType, ResourceID: assetID, BusinessKey: eventID,
Payload: notificationapp.PersonalCustomerDirectPayload{
RecipientID: customerID, NotificationType: constants.NotificationTypePackageExpiring,
TemplateData: map[string]string{}, RefType: constants.NotificationRefTypeAsset,
TemplateData: expiryTemplateData(candidate), RefType: constants.NotificationRefTypeAsset,
RefID: assetID, RefKey: candidate.Identifier, ExpiresAt: candidate.EstimatedFinalExpiresAt,
},
})
@@ -170,6 +170,28 @@ func (p *ReminderPublisher) appendNotification(ctx context.Context, tx *gorm.DB,
return nil
}
// expiryTemplateData 为后台和个人客户生成同口径的资产到期文案数据。
func expiryTemplateData(candidate dto.ExpiringAssetItem) map[string]string {
status := "即将到期"
if candidate.DaysUntilFinalExpiry != nil {
switch {
case *candidate.DaysUntilFinalExpiry < 0:
status = "已到期"
case *candidate.DaysUntilFinalExpiry == 0:
status = "今天到期"
}
}
expiryDate := ""
if candidate.EstimatedFinalExpiresAt != nil {
expiryDate = candidate.EstimatedFinalExpiresAt.In(shanghaiLocation).Format("2006-01-02")
}
return map[string]string{
"asset_identifier": candidate.Identifier,
"expiry_status": status,
"expiry_date": expiryDate,
}
}
func recipientKey(assetType string, assetID uint) string {
return fmt.Sprintf("%s:%d", assetType, assetID)
}