You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
386 lines
8.4 KiB
Go
386 lines
8.4 KiB
Go
package campaignnotice
|
|
|
|
import (
|
|
"joybuywork/internal/app"
|
|
"joybuywork/internal/consts/ckey"
|
|
"joybuywork/internal/service/queue/consumer"
|
|
"joybuywork/internal/service/queue/consumer/campaignnotice/export"
|
|
"joybuywork/internal/service/queue/consumer/campaignnotice/validevents"
|
|
"joybuywork/internal/service/queue/producer"
|
|
"joybuywork/internal/service/queue/types"
|
|
"joybuywork/internal/utils"
|
|
"joybuywork/internal/utils/logic"
|
|
"errors"
|
|
|
|
"github.com/Shopify/sarama"
|
|
"gits.branchcn.com/backend/microcode/plugins/derivative/task"
|
|
"gits.branchcn.com/backend/microcode/plugins/kafka"
|
|
)
|
|
|
|
func Run() (err error) {
|
|
c, err := consumer.NewConsumer(&CampaignNotice{})
|
|
if err != nil {
|
|
return
|
|
}
|
|
c.Run()
|
|
return
|
|
}
|
|
|
|
type CampaignNotice struct{}
|
|
|
|
func (s CampaignNotice) Params() consumer.CParams {
|
|
return consumer.CParams{
|
|
Topic: types.CampaignNoticeTopic,
|
|
Num: 5,
|
|
Name: "campaign_notice",
|
|
GroupName: types.CampaignUserGroup,
|
|
Config: kafka.DefaultConsumerConfig(),
|
|
}
|
|
}
|
|
|
|
func (s CampaignNotice) Receive(session sarama.ConsumerGroupSession, message *sarama.ConsumerMessage) {
|
|
// 结束标记消息已消费
|
|
defer session.MarkMessage(message, "")
|
|
var handler *consumer.Ctx
|
|
switch utils.Bs(message.Key) {
|
|
case types.CampaignNoticeKey:
|
|
handler = consumer.NewCtx("活动通知", message, campaignNotice)
|
|
case types.CampaignOtherStatKey:
|
|
handler = consumer.NewCtx("活动其他统计", message, campaignOtherStat)
|
|
case types.CampaignRewardNotifyKey:
|
|
handler = consumer.NewCtx("奖品回调", message, campaignRewardNotify)
|
|
case types.CampaignTargetStatKey:
|
|
handler = consumer.NewCtx("用户达标统计", message, campaignTargetStatKey)
|
|
case types.CampaignCondStatKey:
|
|
handler = consumer.NewCtx("活动条件统计", message, campaignCondStatKey)
|
|
case types.CampaignBehaviorKey:
|
|
handler = consumer.NewCtx("活动行为处理", message, campaignBehavior)
|
|
case types.CampaignDiceMapKey:
|
|
handler = consumer.NewCtx("大富翁地图生成", message, campaignDiceMap)
|
|
case types.DownloadKey:
|
|
handler = consumer.NewCtx("导出任务", message, download)
|
|
case types.ValidEventsKey:
|
|
handler = consumer.NewCtx("有效事件", message, validEvents)
|
|
case types.ProjectUserKey:
|
|
handler = consumer.NewCtx("项目用户存储", message, projectUser)
|
|
case types.RewardLimitUpKey:
|
|
handler = consumer.NewCtx("活动修改预算总上线", message, rewardLimitUp)
|
|
case types.CampaignChildInviteKey:
|
|
handler = consumer.NewCtx("子活动排行榜结算", message, campaignChildInvite)
|
|
case types.ProjectUserCoinDeductKey:
|
|
handler = consumer.NewCtx("项目用户积分扣除", message, projectUserCoinDeduct)
|
|
case types.CampaignVsSettlementKey:
|
|
handler = consumer.NewCtx("赛事竞猜结算", message, campaignVsSettlement)
|
|
case types.CampaignSettlementRewardKey:
|
|
handler = consumer.NewCtx("赛事竞猜结算奖励", message, campaignSettlementReward)
|
|
case types.GameActionKey:
|
|
handler = consumer.NewCtx("游戏行为类型", message, gameAction)
|
|
default:
|
|
return
|
|
}
|
|
|
|
handler.Done()
|
|
}
|
|
|
|
func gameAction(ctx *consumer.Ctx) (err error) {
|
|
var val types.GameAction
|
|
err = ctx.Parse(&val)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
var container = new(GameAction)
|
|
{
|
|
container.Init(ctx.Context())
|
|
container.Req = &val
|
|
}
|
|
|
|
return logic.Run(container)
|
|
}
|
|
|
|
func campaignSettlementReward(ctx *consumer.Ctx) (err error) {
|
|
var val types.CampaignSettlementReward
|
|
err = ctx.Parse(&val)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
var container = new(SettlementReward)
|
|
{
|
|
container.Init(ctx.Context())
|
|
container.Req = &val
|
|
}
|
|
|
|
return logic.Run(container)
|
|
}
|
|
|
|
func campaignVsSettlement(ctx *consumer.Ctx) (err error) {
|
|
var val types.CampaignVsSettlement
|
|
err = ctx.Parse(&val)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
var container = new(VsSettlement)
|
|
{
|
|
container.Init(ctx.Context())
|
|
container.Req = &val
|
|
}
|
|
|
|
return logic.Run(container)
|
|
}
|
|
|
|
func projectUserCoinDeduct(ctx *consumer.Ctx) (err error) {
|
|
var val types.ProjectUserCoinDeduct
|
|
err = ctx.Parse(&val)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
taskIdKey := ckey.ProjectUserCoinDeduct(val.UserId)
|
|
t := app.NewRedisTask(ctx.Context(), taskIdKey)
|
|
c, err := t.TaskPublicAndConsume(func(td *task.Data) error {
|
|
var data types.ProjectUserCoinDeduct
|
|
err = td.ParsingMsg(&data)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
var container = new(ProjectUserCoinDeduct)
|
|
{
|
|
container.Init(td.Ctx)
|
|
container.Req = &data
|
|
}
|
|
|
|
return container.Run()
|
|
}, val)
|
|
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
if c.Error() != nil && (errors.Is(c.Error(), task.AbnormalErr) || errors.Is(c.Error(), task.ReenterLimit)) {
|
|
producer.NewCampaignNotice(ctx.Context()).ProjectUserCoinDeduct(val)
|
|
err = c.Error()
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func campaignChildInvite(ctx *consumer.Ctx) (err error) {
|
|
var val types.CampaignChildInvite
|
|
err = ctx.Parse(&val)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
var container = new(ChildInvite)
|
|
{
|
|
container.Init(ctx.Context())
|
|
container.Req = &val
|
|
}
|
|
|
|
return logic.Run(container)
|
|
}
|
|
|
|
func projectUser(ctx *consumer.Ctx) (err error) {
|
|
var val types.ProjectUser
|
|
err = ctx.Parse(&val)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
var container = new(ProjectUser)
|
|
{
|
|
container.Init(ctx.Context())
|
|
container.Req = &val
|
|
}
|
|
|
|
return logic.Run(container)
|
|
}
|
|
|
|
func validEvents(ctx *consumer.Ctx) (err error) {
|
|
var val types.ValidEvents
|
|
err = ctx.Parse(&val)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
taskIdKey := ckey.ValidEventsKey(val.UserId)
|
|
if val.NoticeType == types.NoticeTypeClick {
|
|
taskIdKey = ckey.ValidEventsUserMarkKey(val.ClickInfo.UserMark)
|
|
}
|
|
|
|
t := app.NewRedisTask(ctx.Context(), taskIdKey)
|
|
c, err := t.TaskPublicAndConsume(func(td *task.Data) error {
|
|
var data types.ValidEvents
|
|
err = td.ParsingMsg(&data)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
var container = new(validevents.ValidEvents)
|
|
{
|
|
container.Init(td.Ctx, logic.WithBp(), logic.WithErrData(data))
|
|
container.Req = &data
|
|
}
|
|
|
|
return logic.Run(container)
|
|
}, val)
|
|
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
if c.Error() != nil && (errors.Is(c.Error(), task.AbnormalErr) || errors.Is(c.Error(), task.ReenterLimit)) {
|
|
producer.NewCampaignNotice(ctx.Context()).ValidEvents(val)
|
|
err = c.Error()
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func download(ctx *consumer.Ctx) (err error) {
|
|
var val types.Download
|
|
err = ctx.Parse(&val)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
var container = new(export.Download)
|
|
{
|
|
container.Init(ctx.Context(), logic.WithErrData(val))
|
|
container.Req = &val
|
|
}
|
|
|
|
return logic.Run(container)
|
|
}
|
|
|
|
func campaignCondStatKey(ctx *consumer.Ctx) (err error) {
|
|
var val types.CampaignCondStat
|
|
err = ctx.Parse(&val)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
var container = new(CondStat)
|
|
{
|
|
container.Init(ctx.Context())
|
|
container.Req = &val
|
|
}
|
|
|
|
return logic.Run(container)
|
|
}
|
|
|
|
func campaignTargetStatKey(ctx *consumer.Ctx) (err error) {
|
|
var val types.CampaignTargetStat
|
|
err = ctx.Parse(&val)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
var container = new(TargetStat)
|
|
{
|
|
container.Init(ctx.Context())
|
|
container.Req = &val
|
|
}
|
|
|
|
return logic.Run(container)
|
|
}
|
|
|
|
func campaignRewardNotify(ctx *consumer.Ctx) (err error) {
|
|
var val types.CampaignRewardNotify
|
|
err = ctx.Parse(&val)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
var container = new(RewardNotify)
|
|
{
|
|
container.Init(ctx.Context())
|
|
container.Req = &val
|
|
}
|
|
|
|
return logic.Run(container)
|
|
}
|
|
|
|
func campaignNotice(ctx *consumer.Ctx) (err error) {
|
|
var val types.CampaignNotice
|
|
err = ctx.Parse(&val)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
var container = new(Notice)
|
|
{
|
|
container.Init(ctx.Context(), logic.WithBp())
|
|
container.Req = &val
|
|
}
|
|
|
|
return logic.Run(container)
|
|
}
|
|
|
|
func campaignOtherStat(ctx *consumer.Ctx) (err error) {
|
|
var val types.CampaignOtherStat
|
|
err = ctx.Parse(&val)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
var container = new(OtherStat)
|
|
{
|
|
container.Init(ctx.Context())
|
|
container.Req = &val
|
|
}
|
|
|
|
return logic.Run(container)
|
|
}
|
|
|
|
func campaignBehavior(ctx *consumer.Ctx) (err error) {
|
|
var val types.CampaignBehavior
|
|
err = ctx.Parse(&val)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
var container = new(Behavior)
|
|
{
|
|
container.Init(ctx.Context())
|
|
container.Req = &val
|
|
}
|
|
|
|
return logic.Run(container)
|
|
}
|
|
|
|
func campaignDiceMap(ctx *consumer.Ctx) (err error) {
|
|
var val types.CampaignDiceMap
|
|
err = ctx.Parse(&val)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
var container = new(DiceMap)
|
|
{
|
|
container.Init(ctx.Context())
|
|
container.Req = &val
|
|
}
|
|
|
|
return logic.Run(container)
|
|
}
|
|
|
|
func rewardLimitUp(ctx *consumer.Ctx) (err error) {
|
|
var val types.RewardLimitUp
|
|
err = ctx.Parse(&val)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
var container = new(RewardLimitUp)
|
|
{
|
|
container.Init(ctx.Context())
|
|
container.Req = &val
|
|
}
|
|
|
|
return logic.Run(container)
|
|
}
|