diff --git a/cron/group_cron/group_power_exp.go b/cron/group_cron/group_power_exp.go index 6a81fb2d549d34d2bfc0c769e1a98f84fd4a1dec..b0b707036bab37c35ec219ef00e6e406f54ac75a 100644 --- a/cron/group_cron/group_power_exp.go +++ b/cron/group_cron/group_power_exp.go @@ -3,6 +3,7 @@ package group_cron import ( "git.hilo.cn/hilo-common/domain" "github.com/robfig/cron" + "hilo-group/domain/event/group_power_ev" "hilo-group/domain/model/groupPower_m" ) @@ -26,5 +27,11 @@ func GroupPowerExpClear() { model.Log.Errorf("ClearGroupPowerGrade fail:%v", err) } }) + // 每月20号发家族即将过期通知 + spec = "0 0 0 20 * ?" + _ = c.AddFunc(spec, func() { + var model = domain.CreateModelNil() + _ = group_power_ev.PublishGroupPowerExpireNotice(model, &group_power_ev.GroupPowerExpireNoticeEvent{}) + }) c.Start() } diff --git a/domain/event/group_power_ev/groupPowerExpireNotice.go b/domain/event/group_power_ev/groupPowerExpireNotice.go new file mode 100644 index 0000000000000000000000000000000000000000..91b81d875d7285c86968282a5706554bc1503a8f --- /dev/null +++ b/domain/event/group_power_ev/groupPowerExpireNotice.go @@ -0,0 +1,26 @@ +package group_power_ev + +import ( + "git.hilo.cn/hilo-common/domain" +) + +//注册监听 +var groupPowerExpireNoticeListen = new(domain.EventBase) + +type GroupPowerExpireNoticeEvent struct { +} + +//添加领域事件,在每个领域模型中init中添加,因为这是静态业务,非动态的。 +func AddGroupPowerExpireNoticeSync(callback func(model *domain.Model, event interface{}) error) { + domain.AddEventSync(groupPowerExpireNoticeListen, callback) +} + +//加入到异步操作中 +func AddGroupPowerExpireNoticeAsync(callback func(model *domain.Model, event interface{}) error) { + domain.AddEventAsync(groupPowerExpireNoticeListen, callback) +} + +//领域事件发布 +func PublishGroupPowerExpireNotice(model *domain.Model, event interface{}) error { + return domain.PublishEvent(groupPowerExpireNoticeListen, model, event) +} diff --git a/domain/model/groupPower_m/group_info.go b/domain/model/groupPower_m/group_info.go index e0feaba0edec61b0b3d202304b721f57822e600b..aae2b026fba197cdd151fc36f76ea09aa12966ff 100644 --- a/domain/model/groupPower_m/group_info.go +++ b/domain/model/groupPower_m/group_info.go @@ -3,6 +3,7 @@ package groupPower_m import ( "git.hilo.cn/hilo-common/domain" "git.hilo.cn/hilo-common/resource/mysql" + "hilo-group/_const/enum/groupPower_e" ) type GroupPowerInfo struct { @@ -55,3 +56,14 @@ func GetGroupPowerUser(model *domain.Model, groupPowerId mysql.ID) ([]*GroupPowe } return m[groupPowerId], nil } + +// 获取所有家族的主 +func GetAllGroupPowerOwners(model *domain.Model) ([]mysql.ID, error) { + var userIds []mysql.ID + if err := model.DB().Model(GroupPowerUser{}).Select("user_id"). + Where("role = ?", groupPower_e.GroupPowerUserRoleMgr).Find(&userIds).Error; err != nil { + model.Log.Errorf("GetAllGroupPowerOwners fail:%v", err) + return userIds, err + } + return userIds, nil +} diff --git a/domain/service/event_s/event_init.go b/domain/service/event_s/event_init.go index 4936fc1cab5b532dfd98451325646a982b6bf5cc..a1009d71d01582114620c896e1acce7ab421336e 100644 --- a/domain/service/event_s/event_init.go +++ b/domain/service/event_s/event_init.go @@ -191,6 +191,28 @@ func GroupPowerEvents() { } return nil }) + + // 势力等级即将过期 + group_power_ev.AddGroupPowerExpireNoticeAsync(func(model *domain.Model, e interface{}) error { + model.Log.Infof("msg AddGroupPowerExpireNoticeAsync") + powerOwners, err := groupPower_m.GetAllGroupPowerOwners(model) + if err != nil { + model.Log.Errorf("AddGroupPowerExpireNoticeAsync fail:%v", err) + return err + } + userMaps, err := user_m.GetUserMapByIds(model, powerOwners) + if err != nil { + return err + } + for uid, u := range userMaps { + if err := msg_m.NewUserRecord(model, uid, msg_e.GroupPowerExpireNotice, "", 0, "", "", "", "", "").Persistent(); err != nil { + model.Log.Errorf("msg AddGroupPowerExpireNoticeAsync NewUserRecord err:%v", err) + return nil + } + msg_m.SendEmasMsgAssistant(model, u.ExternalId, u.DeviceType) + } + return nil + }) } func GroupEvents() {