package group_s import ( "git.hilo.cn/hilo-common/domain" "git.hilo.cn/hilo-common/mycontext" "git.hilo.cn/hilo-common/resource/config" "hilo-group/_const/enum/group_e" "hilo-group/_const/redis_key" "hilo-group/domain/model/group_m" "strconv" "time" ) type GroupService struct { svc *domain.Service } func NewGroupService(myContext *mycontext.MyContext) *GroupService { svc := domain.CreateService(myContext) return &GroupService{svc} } // 取本周最高的扶持等级 fixme:删除这个过渡函数 func (s *GroupService) GetWeekMaxSupportLevelMap() (map[string]uint8, error) { return s.GetSupportLevelMap(time.Now().AddDate(0, 0, -group_e.SUPPORT_LEVEL_PERIOD_DAY)) } func (s *GroupService) GetSupportLevelMap(now time.Time) (map[string]uint8, error) { model := domain.CreateModel(s.svc.CtxAndDb) _, _, period := group_m.GetSupportLevelTime(now) levels, err := GetAllSupportLevel(model, period) if err != nil { return nil, err } model.Log.Debugf("GetSupportLevelMap, GET %s: %v", period, levels) result := make(map[string]uint8, 0) if len(levels) > 0 { for g, l := range levels { le, err := strconv.ParseUint(l, 10, 8) if err == nil { result[g] = uint8(le) } } } else { result, err = group_m.GetAllGroupSupportResult(model.Db, period) if err == nil { ret, err := SaveAllSupportLevel(model, period, result) model.Log.Infof("GetSupportLevelMap SAVE ret = %d, err: %v", ret, err) } } return result, nil } func SaveAllSupportLevel(model *domain.Model, date string, levels map[string]uint8) (int64, error) { values := make(map[string]interface{}, 0) for g, l := range levels { if l > 0 { values[g] = l } } if len(values) <= 0 { return 0, nil } key := redis_key.GetPrefixSupportLevel(date) ret, err := model.Redis.HSet(model, key, values).Result() if err == nil { // 设置一个TTL保险一些 TODO: 可以优化,保证数据总是有的 ttl := time.Hour if !config.AppIsRelease() { ttl = time.Minute } model.Redis.Expire(model, key, ttl) } return ret, err } func GetAllSupportLevel(model *domain.Model, date string) (map[string]string, error) { key := redis_key.GetPrefixSupportLevel(date) return model.Redis.HGetAll(model, key).Result() }