From 85969f508ee6f54c6992a816b3c4935c8eb889b8 Mon Sep 17 00:00:00 2001 From: hujiebin Date: Tue, 7 Mar 2023 16:36:08 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=8A=BF=E5=8A=9B=E7=BB=8F=E9=AA=8C?= =?UTF-8?q?=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _const/enum/groupPower_e/grade.go | 22 +++++++ domain/model/groupPower_m/group_grade.go | 79 ++++++++++++++++++++++++ domain/service/event_s/event_init.go | 13 +++- 3 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 _const/enum/groupPower_e/grade.go create mode 100644 domain/model/groupPower_m/group_grade.go diff --git a/_const/enum/groupPower_e/grade.go b/_const/enum/groupPower_e/grade.go new file mode 100644 index 0000000..8c0b6d9 --- /dev/null +++ b/_const/enum/groupPower_e/grade.go @@ -0,0 +1,22 @@ +package groupPower_e + +type GroupPowerGrade int + +const ( + GroupPowerGrade0 GroupPowerGrade = 0 + GroupPowerGrade1 GroupPowerGrade = 1 + GroupPowerGrade2 GroupPowerGrade = 2 + GroupPowerGrade3 GroupPowerGrade = 3 + GroupPowerGrade4 GroupPowerGrade = 4 + + GroupPowerGradeMax = GroupPowerGrade4 +) + +var ( + GroupPowerGradeExp = map[GroupPowerGrade]int64{ + GroupPowerGrade1: 2500000, + GroupPowerGrade2: 15000000, + GroupPowerGrade3: 45000000, // todo + GroupPowerGrade4: 60000000, + } +) diff --git a/domain/model/groupPower_m/group_grade.go b/domain/model/groupPower_m/group_grade.go new file mode 100644 index 0000000..05e624f --- /dev/null +++ b/domain/model/groupPower_m/group_grade.go @@ -0,0 +1,79 @@ +package groupPower_m + +import ( + "git.hilo.cn/hilo-common/domain" + "git.hilo.cn/hilo-common/resource/mysql" + "gorm.io/gorm" + "gorm.io/gorm/clause" + "hilo-group/_const/enum/groupPower_e" + "time" +) + +type GroupPowerExp struct { + Date string + GroupPowerId mysql.ID + Exp int64 + CreatedTime time.Time `gorm:"->"` + UpdatedTime time.Time `gorm:"->"` +} + +type GroupPowerGrade struct { + GroupPowerId mysql.ID + Exp int64 + Grade groupPower_e.GroupPowerGrade + ExpiredAt time.Time + CreatedTime time.Time `gorm:"->"` + UpdatedTime time.Time `gorm:"->"` +} + +// 增加家族经验 +// 达到经验值之后升级 +// 单进程同步执行,不考虑并发 +func IncrGroupPowerExp(txModel *domain.Model, groupPowerId mysql.ID, exp int64) error { + var err error + defer func() { + if err != nil { + txModel.Log.Errorf("IncrGroupPowerExp fail,id:%v,exp:%v,err:%v", groupPowerId, exp, err) + } + }() + // 增加家族经验-天 + date := time.Now().Format("2006-01-02") + gpe := &GroupPowerExp{ + Date: date, + GroupPowerId: groupPowerId, + Exp: exp, + } + if err = txModel.DB().Model(GroupPowerExp{}).Clauses(clause.OnConflict{Columns: []clause.Column{{Name: "date"}, {Name: "group_power_id"}}, + DoUpdates: clause.Assignments(map[string]interface{}{ + "exp": gorm.Expr("exp + ?", gpe.Exp)})}).Create(gpe).Error; err != nil { + return err + } + // 增加家族经验-总 + gpg := &GroupPowerGrade{ + GroupPowerId: groupPowerId, + Exp: exp, + Grade: 0, + ExpiredAt: time.Time{}, + } + if err = txModel.DB().Model(GroupPowerGrade{}).Clauses(clause.OnConflict{Columns: []clause.Column{{Name: "group_power_id"}}, + DoUpdates: clause.Assignments(map[string]interface{}{ + "exp": gorm.Expr("exp + ?", gpg.Exp)})}).Create(gpg).Error; err != nil { + return err + } + // 达到经验值之后升级 + latestGrade := new(GroupPowerGrade) + if err = txModel.DB().Model(GroupPowerGrade{}).Where("group_power_id = ?", groupPowerId).First(latestGrade).Error; err != nil { + return err + } + for grade := groupPower_e.GroupPowerGradeMax; grade >= groupPower_e.GroupPowerGrade0; grade-- { + if latestGrade.Exp > groupPower_e.GroupPowerGradeExp[grade] { + if latestGrade.Grade != grade { + if err = txModel.DB().Model(GroupPowerGrade{}).Where("group_power_id = ?", latestGrade.GroupPowerId).UpdateColumn("grade", grade).Error; err != nil { + return err + } + } + break + } + } + return nil +} diff --git a/domain/service/event_s/event_init.go b/domain/service/event_s/event_init.go index bf2a7f2..091ac6a 100644 --- a/domain/service/event_s/event_init.go +++ b/domain/service/event_s/event_init.go @@ -397,14 +397,23 @@ func FlushHiloInfo(extId string, isVip bool, isPrettyCode bool, medals []uint32, } func SendGift() { - // 送礼事件-火箭 - gift_ev.AddSendGiftEventAsync(func(model *domain.Model, event interface{}) error { + // 送礼事件-势力经验 + gift_ev.AddSendGiftEventSync(func(model *domain.Model, event interface{}) error { sendGiftEvent, ok := event.(*gift_ev.SendGiftEvent) if !ok { model.Log.Errorf("AddSendGiftEventAsync event type err") return nil } model.Log.Infof("AddSendGiftEventAsync %+v", sendGiftEvent) + exist, groupPowerId, err := groupPower_m.CheckGroupPowerUser(model, sendGiftEvent.SendUserId) + if err != nil { + model.Log.Infof("CheckGroupPowerUser fail %+v", err) + return err + } + if exist { + exp := int64(sendGiftEvent.GiftN) * int64(len(sendGiftEvent.ReceiveUserIds)) * int64(sendGiftEvent.ResGift.DiamondNum) + return groupPower_m.IncrGroupPowerExp(model, groupPowerId, exp) + } return nil }) } -- 2.22.0