package group_power_s import ( "git.hilo.cn/hilo-common/domain" "git.hilo.cn/hilo-common/mycontext" "git.hilo.cn/hilo-common/resource/mysql" "hilo-group/_const/enum/groupPower_e" "hilo-group/cv/group_power_cv" "hilo-group/cv/user_cv" "hilo-group/domain/event/group_power_ev" "hilo-group/domain/model/groupPower_m" "hilo-group/domain/model/user_m" ) type GroupPowerService struct { svc *domain.Service } func NewGroupPowerService(myContext *mycontext.MyContext) *GroupPowerService { svc := domain.CreateService(myContext) return &GroupPowerService{svc} } //用户加入国家势力 func (s *GroupPowerService) GroupPowerUserJoin(groupPowerId mysql.ID, userId mysql.ID) error { return s.svc.Transactional(func() error { model := domain.CreateModel(s.svc.CtxAndDb) groupPower, err := groupPower_m.GetGroupPower(model, groupPowerId) if err != nil { return err } groupPowerUser, err := groupPower.UserJoin(userId) if err != nil { return err } if err := groupPowerUser.Persistent(); err != nil { return err } return group_power_ev.PublishGroupPowerJoin(model, &group_power_ev.GroupPowerJoinEvent{ UserId: userId, GroupPowerId: groupPowerId, }) }) } //用户退出国家势力 func (s *GroupPowerService) GroupPowerUserLeave(groupPowerId mysql.ID, userId mysql.ID) (int, error) { remainSeconds := 0 err := s.svc.Transactional(func() error { model := domain.CreateModel(s.svc.CtxAndDb) groupPower, err := groupPower_m.GetGroupPower(model, groupPowerId) if err != nil { return err } groupPowerUser, timeDiff, err := groupPower.UserLeave(userId) if err != nil { if timeDiff > 0 { remainSeconds = int(timeDiff.Seconds()) return err } return err } if err := groupPowerUser.Persistent(); err != nil { return err } return group_power_ev.PublishGroupPowerLeave(model, &group_power_ev.GroupPowerLeaveEvent{ UserId: userId, GroupPowerId: groupPowerId, }) }) return remainSeconds, err } func GetGroupPowerRankResp(model *domain.Model, beginDate, endDate string, userId uint64) (response group_power_cv.CvGroupPowerRank, err error) { rank, err := groupPower_m.GetGroupPowerExpRank(model, beginDate, endDate, 30) if err != nil { return } var ids []mysql.ID for _, g := range rank { ids = append(ids, g.GroupPowerId) } myGroupPower, err := groupPower_m.GetGroupPowerUserOrNil(model, userId) if err != nil { return } if myGroupPower != nil { ids = append(ids, myGroupPower.GroupPowerId) } grades, err := groupPower_m.MGetGroupPowerGrade(model, ids) if err != nil { return } groupPowers, err := groupPower_m.MGetGroupPowerInfoMap(model, ids) if err != nil { return } if myGroupPower != nil { myGroupPowerRank, err := groupPower_m.GetMyGroupPowerExpRank(model, beginDate, endDate, myGroupPower.GroupPowerId) if err != nil { return response, err } response.MyGroupPower = &group_power_cv.CvGroupPowerRankData{ CvGroupPowerBase: group_power_cv.CvGroupPowerBase{ Id: myGroupPower.GroupPowerId, Icon: groupPowers[myGroupPower.GroupPowerId].Icon, Name: groupPowers[myGroupPower.GroupPowerId].Name, Nameplate: groupPowers[myGroupPower.GroupPowerId].Nameplate, }, CvGroupPowerGrade: group_power_cv.CvGroupPowerGrade{ Grade: grades[myGroupPower.GroupPowerId].Grade, Exp: myGroupPowerRank.Exp, }, Rank: 0, } } for _, v := range rank { if response.MyGroupPower != nil && v.GroupPowerId == response.MyGroupPower.Id { response.MyGroupPower.Rank = v.Rank } response.Items = append(response.Items, group_power_cv.CvGroupPowerRankData{ CvGroupPowerBase: group_power_cv.CvGroupPowerBase{ Id: v.GroupPowerId, Icon: groupPowers[v.GroupPowerId].Icon, Name: groupPowers[v.GroupPowerId].Name, Nameplate: groupPowers[v.GroupPowerId].Nameplate, }, CvGroupPowerGrade: group_power_cv.CvGroupPowerGrade{ Grade: grades[v.GroupPowerId].Grade, Exp: v.Exp, }, Rank: v.Rank, }) } if response.MyGroupPower != nil && response.MyGroupPower.Rank == 0 { response.MyGroupPower.Rank = 31 // 客户端统一显示30+ } return response, nil } func GetGroupPowerStar(model *domain.Model, groupPowerId mysql.ID, _type groupPower_e.GroupPowerStarType, offset, limit int) ([]*group_power_cv.CvGroupPowerStarData, error) { rank, err := groupPower_m.GetGroupPowerMonthStarRank(model, groupPowerId, _type, offset, limit) if err != nil { return nil, err } //var response []group_power_cv.CvGroupPowerStarData response := make([]*group_power_cv.CvGroupPowerStarData, 0) var userIds []mysql.ID for _, row := range rank { userIds = append(userIds, row.UserId) } users, err := user_m.GetUserMapByIds(model, userIds) for _, row := range rank { user := users[row.UserId] score := row.Score if _type == groupPower_e.GroupPowerStarTypeActive { score = score / 60 } if score <= 0 { continue } response = append(response, &group_power_cv.CvGroupPowerStarData{ User: user_cv.CvUserTiny{ Id: user.ID, ExternalId: user.ExternalId, Code: user.Code, Nick: user.Nick, Avatar: user.Avatar, }, Score: score, }) } return response, nil }