81 lines
3.0 KiB
Go
81 lines
3.0 KiB
Go
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
|
||
}
|