diff --git a/_const/redis_key/groupPower_k/group_power_grade.go b/_const/redis_key/groupPower_k/group_power_grade.go new file mode 100644 index 0000000000000000000000000000000000000000..f33431bad711f6db78bd2e3e7f5c8dcc969fdce0 --- /dev/null +++ b/_const/redis_key/groupPower_k/group_power_grade.go @@ -0,0 +1,10 @@ +package groupPower_k + +// groupPower等级 +const ( + GroupPowerGradeExpQueue = "group_power_grade_exp_queue" +) + +func GetGroupPowerGradeExpQueue() string { + return GroupPowerGradeExpQueue +} diff --git a/cron/cron.go b/cron/cron.go index 181ba0bbbcb84c2cf60f8a124a23578fdf57d7cf..be5fb39d43c70d1eb5596fa56169c4dbdc554f3f 100644 --- a/cron/cron.go +++ b/cron/cron.go @@ -16,4 +16,5 @@ func Init() { mic_cron.OnMicCheck() // 检查上麦 group_cron.GroupPowerExpClear() // 清理家族经验/等级 group_cron.GroupPowerMonthRankAct() + group_cron.GroupPowerGradeExp() // 家族升级 } diff --git a/cron/group_cron/group_power_grade.go b/cron/group_cron/group_power_grade.go new file mode 100644 index 0000000000000000000000000000000000000000..30a1e29cfc5a26d7a9266fcbea805bff36e18983 --- /dev/null +++ b/cron/group_cron/group_power_grade.go @@ -0,0 +1,22 @@ +package group_cron + +import ( + "git.hilo.cn/hilo-common/domain" + "hilo-group/domain/cache/groupPower_c" + "hilo-group/domain/model/groupPower_m" +) + +func GroupPowerGradeExp() { + go func() { + for true { + model := domain.CreateModelNil() + if data := groupPower_c.BLPopGroupPowerGradeExp(model); data != nil { + if err := model.Transaction(func(model *domain.Model) error { + return groupPower_m.IncrGroupPowerExp(model, data.GroupPowerId, data.Exp, data.UserId, data.Remark) + }); err != nil { + model.Log.Errorf("IncrGroupPowerExp fail,data:%v-err:%v", data, err) + } + } + } + }() +} diff --git a/domain/cache/groupPower_c/group_power_grade.go b/domain/cache/groupPower_c/group_power_grade.go new file mode 100644 index 0000000000000000000000000000000000000000..3fb3e327787cacf730a089b5d6d43150526a9b7b --- /dev/null +++ b/domain/cache/groupPower_c/group_power_grade.go @@ -0,0 +1,50 @@ +package groupPower_c + +import ( + "encoding/json" + "git.hilo.cn/hilo-common/domain" + "git.hilo.cn/hilo-common/resource/mysql" + "hilo-group/_const/redis_key/groupPower_k" + "time" +) + +type GroupPowerGradeExp struct { + GroupPowerId mysql.ID + Exp mysql.Num + UserId mysql.ID + Remark string +} + +// redis队列缓冲GroupPowerGradeExp升级内容 +func QueueGroupPowerGradeExp(model *domain.Model, groupPowerId mysql.ID, exp mysql.Num, userId mysql.ID, remark string) error { + queue := groupPower_k.GetGroupPowerGradeExpQueue() + data := GroupPowerGradeExp{ + GroupPowerId: groupPowerId, + Exp: exp, + UserId: userId, + Remark: remark, + } + body, _ := json.Marshal(data) + return model.Redis.RPush(model, queue, string(body)).Err() +} + +// redis弹出GroupPowerGradeExp升级内容 +func BLPopGroupPowerGradeExp(model *domain.Model) *GroupPowerGradeExp { + var res *GroupPowerGradeExp + queue := groupPower_k.GetGroupPowerGradeExpQueue() + strs, err := model.Redis.BLPop(model, time.Second, queue).Result() + if err != nil { + model.Log.Errorf("BLPopGroupPowerGradeExp fail:%v", err) + return nil + } + if len(strs) >= 2 { + content := strs[1] + res = new(GroupPowerGradeExp) + if err := json.Unmarshal([]byte(content), res); err != nil { + model.Log.Errorf("BLPopGroupPowerGradeExp json fail:%v", err) + return nil + } + return res + } + return nil +} diff --git a/domain/model/groupPower_m/group_grade.go b/domain/model/groupPower_m/group_grade.go index 2a719327e7739e378d192973bdc70091a85948ff..eeabfeda0ee2dec5d956c8c083045a6706e6b1f7 100644 --- a/domain/model/groupPower_m/group_grade.go +++ b/domain/model/groupPower_m/group_grade.go @@ -8,6 +8,7 @@ import ( "gorm.io/gorm" "gorm.io/gorm/clause" "hilo-group/_const/enum/groupPower_e" + "hilo-group/domain/cache/groupPower_c" "hilo-group/domain/event/group_power_ev" "time" ) @@ -230,7 +231,8 @@ func IncrGroupPowerExpOnMic(model *domain.Model, groupPowerId, userId mysql.ID, return err } // 每10分钟增加100点经验 - if err := IncrGroupPowerExp(model, groupPowerId, 100, userId, "上麦10分钟"); err != nil { + //if err := IncrGroupPowerExp(model, groupPowerId, 100, userId, "上麦10分钟"); err != nil { + if err := groupPower_c.QueueGroupPowerGradeExp(model, groupPowerId, 100, userId, "上麦10分钟"); err != nil { return err } } diff --git a/domain/service/event_s/event_init.go b/domain/service/event_s/event_init.go index 80447d9334dea82c7141d048b4dab4380ac2e8de..32e7f6fbcd52ee78f0e8e430af6181431ba6caac 100644 --- a/domain/service/event_s/event_init.go +++ b/domain/service/event_s/event_init.go @@ -10,6 +10,7 @@ import ( "hilo-group/_const/enum/group_e" "hilo-group/_const/enum/msg_e" "hilo-group/_const/enum/task_e" + "hilo-group/domain/cache/groupPower_c" "hilo-group/domain/cache/group_c" "hilo-group/domain/event/gift_ev" "hilo-group/domain/event/group_ev" @@ -487,9 +488,10 @@ func SendGift() { } if exist { exp := sendGiftEvent.GiftN * mysql.Num(len(sendGiftEvent.ReceiveUserIds)) * sendGiftEvent.ResGift.DiamondNum - return model.Transaction(func(model *domain.Model) error { - return groupPower_m.IncrGroupPowerExp(model, groupPowerId, exp, sendGiftEvent.SendUserId, "送礼") - }) + //return model.Transaction(func(model *domain.Model) error { + // return groupPower_m.IncrGroupPowerExp(model, groupPowerId, exp, sendGiftEvent.SendUserId, "送礼") + //}) + return groupPower_c.QueueGroupPowerGradeExp(model, groupPowerId, exp, sendGiftEvent.SendUserId, "送礼") } return nil })