package registerreward import ( "context" "time" "chatapp3-golang/internal/integration" "chatapp3-golang/internal/model" ) const ( // registerRewardNoticeType 是注册奖励实时通知的消息类型,供 app 侧按 socket 事件识别后弹奖励页。 registerRewardNoticeType = "REGISTER_REWARD_GRANTED" // registerRewardNoticeTitle 是兜底展示标题;正常情况下端上会直接消费 expand 并展示奖励页。 registerRewardNoticeTitle = "Register reward" // registerRewardNoticeContent 是兜底展示文案。 registerRewardNoticeContent = "Reward granted" ) // registerRewardNoticeExpand 是通过 IM/socket 下发给 app 的扩展载荷。 type registerRewardNoticeExpand struct { Scene string `json:"scene"` // 固定业务场景,便于端上统一分发 ShowRewardPopup bool `json:"showRewardPopup"` // 端上接到后是否直接展示奖励弹层 UserID int64 `json:"userId"` // 用户 ID SysOrigin string `json:"sysOrigin"` // 系统标识 EventID string `json:"eventId"` // 注册奖励事件 ID ClaimDate string `json:"claimDate,omitempty"` // 占用奖励日期 ClaimResult string `json:"claimResult"` // 当前领取结果,注册奖励实际发放时固定为 REWARDED GoldAmount int64 `json:"goldAmount"` // 实际金币奖励 RewardGroupID *int64 `json:"rewardGroupId,omitempty"` // 实际道具奖励组 ID } // pushRewardArrivalNotice 在自动发奖成功后给用户推送一条实时官方通知,app 通过 noticeType + expand 弹奖励页。 func (s *RegisterRewardService) pushRewardArrivalNotice( ctx context.Context, event registerRewardEvent, logRecord *model.ResidentRegisterRewardLog, resolved registerRewardResolvedConfig, ) error { if event.UserID <= 0 { return nil } if resolved.GoldAmount <= 0 && resolved.RewardGroupID == nil { return nil } if err := s.java.SendOfficialNoticeCustomize(ctx, integration.OfficialNoticeCustomizeRequest{ ToAccounts: []int64{event.UserID}, NoticeType: registerRewardNoticeType, Title: registerRewardNoticeTitle, Content: registerRewardNoticeContent, Expand: registerRewardNoticeExpand{ Scene: "REGISTER_REWARD", ShowRewardPopup: true, UserID: event.UserID, SysOrigin: event.SysOrigin, EventID: event.EventID, ClaimDate: logRecord.ClaimDate, ClaimResult: registerRewardClaimResultRewarded, GoldAmount: resolved.GoldAmount, RewardGroupID: resolved.RewardGroupID, }, }); err != nil { return err } s.publishDebugNotice(RegisterRewardNoticeEvent{ NoticeType: registerRewardNoticeType, Scene: "REGISTER_REWARD", UserID: event.UserID, SysOrigin: event.SysOrigin, EventID: event.EventID, ClaimDate: logRecord.ClaimDate, ClaimResult: registerRewardClaimResultRewarded, GoldAmount: resolved.GoldAmount, RewardGroupID: resolved.RewardGroupID, SentAt: time.Now(), }) return nil }