From 358f979806c68e4d90e8a07fe2f5b5dc2028ff1b Mon Sep 17 00:00:00 2001 From: hujiebin Date: Fri, 28 Jul 2023 14:31:35 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E8=BF=98=E6=B2=A1=E8=83=BD=E7=BC=96?= =?UTF-8?q?=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../groupPower_k/group_power_grade.go | 10 ++++ cron/cron.go | 1 + cron/group_cron/group_power_grade.go | 22 ++++++++ .../cache/groupPower_c/group_power_grade.go | 50 +++++++++++++++++++ domain/model/groupPower_m/group_grade.go | 4 +- domain/service/event_s/event_init.go | 8 +-- 6 files changed, 91 insertions(+), 4 deletions(-) create mode 100644 _const/redis_key/groupPower_k/group_power_grade.go create mode 100644 cron/group_cron/group_power_grade.go create mode 100644 domain/cache/groupPower_c/group_power_grade.go 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 0000000..f33431b --- /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 181ba0b..be5fb39 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 0000000..30a1e29 --- /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 0000000..3fb3e32 --- /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 2a71932..eeabfed 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 80447d9..32e7f6f 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 }) -- 2.22.0