package logic import ( "HttpServer/redishandler" "common/logger" "common/redis" "crypto/md5" "encoding/hex" "encoding/json" "errors" "mysql" "net/http" "sort" "strconv" "strings" "time" ) func SetHeader(w http.ResponseWriter) { w.Header().Set("Access-Control-Allow-Origin", "*") //允许访问所有域 w.Header().Set("Content-Type", "application/json") w.Header().Set("Access-Control-Allow-Headers", "Content-Type,Uuid") } func (tinfo *TeamInfo) DoAddBuffTimee(btype int,muti int,resp *AddTeamBuffResp) { addtime := 1800*muti index := 0 for k,val := range tinfo.BInfo.Buff { if val.Type == btype { index = k } } for i:=0;i= nowtime { tinfo.BInfo.Buff[index].BuffInfo[len(tinfo.BInfo.Buff[index].BuffInfo)-1].EndTime += addTime } else { var tmp TeamBuffInfo tmp.BeginTime = nowtime tmp.EndTime = nowtime + addTime tinfo.BInfo.Buff[index].BuffInfo = append(tinfo.BInfo.Buff[index].BuffInfo,tmp) } }else { tinfo.BInfo.Buff[index].BuffInfo[len(tinfo.BInfo.Buff[index].BuffInfo)-1].EndTime += 86399 } //删除掉无用的 yestime := nowtime-86400 for i:=0;i sumlen{ begin = sumlen - 10 } if end > sumlen { end = sumlen - 1 } return rtslice[begin:end],nil,sumlen } func GetTeamListByNameCond(shopnum int,page int, name string) (TeamSlice,error,int) { if page < 0 { logger.Error("GetTeamListByCond invalid page=%v",page) page = 1 } var rtslice TeamSlice vv,err := redishandler.GetRedisClient().HGetAllValues(redis.TEAM_INFO) if err != nil { logger.Error("GetTeamListByCond err") return nil,err,0 } for _,val := range vv { one := new(TeamInfo) bytestr := val.([]byte) err = json.Unmarshal(bytestr, one) if err == nil { if one.BaseInfo.Num <= shopnum && strings.Index(one.BaseInfo.Name,name) != -1{ rtslice = append(rtslice,one) } } } //排序 sort.Sort(rtslice) begin := (page-1) * 10 end := begin + 9 sumlen := len(rtslice) if begin > sumlen{ begin = sumlen - 10 } if end > sumlen { end = sumlen - 1 } return rtslice[begin:end],nil,sumlen } func (alist *ApproveList) InApproveList(uuid int) bool { for _,val := range alist.Approve_info { if val.Uuid == uuid { return true } } return false } // func DelFromApproveList(uuid,deluuid int) error { return nil } //待批准列表 func GetUserApproveList(uuid int) (*ApproveList,error) { rt := new(ApproveList) //存储为hset key为 固定key+uuid ,field为被添加者的uuid,fieldW为FriendInfo userkey := redis.FRIEND_APPROVELIST_KEY + ":" + strconv.Itoa(uuid) vv,err := redishandler.GetRedisClient().HGetAllValues(userkey) if err != nil { logger.Error("GetUserApproveList err") return nil,err } nowtime:= int(time.Now().Unix()) for _,val := range vv { one := new(ApplyInfo) bytestr := val.([]byte) err = json.Unmarshal(bytestr, one) if err!= nil { //需要剔除超过时间的 if nowtime <= one.Apply_time + 3*86400 { rt.Approve_info = append(rt.Approve_info,*one) }else { //已经超时,需要删除 redishandler.GetRedisClient().HDel(userkey,strconv.Itoa(one.Uuid)) } } } return rt,nil } func SaveUserApproveList(uuid int,adduuid int) error { userkey := redis.FRIEND_APPROVELIST_KEY + ":" + strconv.Itoa(uuid) var finfo ApplyInfo finfo.Uuid = adduuid finfo.Apply_time = int(time.Now().Unix()) str,err := json.Marshal(&finfo) if err != nil { logger.Error("SaveUserApproveList failed,err=%v",err) } err = redishandler.GetRedisClient().HSet(userkey,strconv.Itoa(adduuid),string(str)) return err } func (alist *ApplyList) InApplyList(uuid int) bool { for _,val := range alist.Apply_info { if val.Uuid == uuid { return true } } return false } func GetUserApplyList(uuid int) (*ApplyList,error) { rt := new(ApplyList) //存储为hset key为 固定key+uuid ,field为被添加者的uuid,fieldW为FriendInfo userkey := redis.FRIEND_APPLYLIST_KEY + ":" + strconv.Itoa(uuid) vv,err := redishandler.GetRedisClient().HGetAllValues(userkey) if err != nil { logger.Error("GetUserApplyList err") return nil,err } nowtime:= int(time.Now().Unix()) for _,val := range vv { one := new(ApplyInfo) bytestr := val.([]byte) err = json.Unmarshal(bytestr, one) if err!= nil { //需要剔除超过时间的 if nowtime <= one.Apply_time + 86400 { rt.Apply_info = append(rt.Apply_info,*one) }else { //已经超时,需要删除 redishandler.GetRedisClient().HDel(userkey,strconv.Itoa(one.Uuid)) } } } return rt,nil } func SaveUserApplyList(uuid int,adduuid int) error { userkey := redis.FRIEND_APPLYLIST_KEY + ":" + strconv.Itoa(uuid) var finfo ApplyInfo finfo.Uuid = adduuid finfo.Apply_time = int(time.Now().Unix()) str,err := json.Marshal(&finfo) if err != nil { logger.Error("SaveUserApplyList failed,err=%v",err) } err = redishandler.GetRedisClient().HSet(userkey,strconv.Itoa(adduuid),string(str)) return err } func GetUserFriendList(uuid int) (*FriendList,error) { //todo rt := new(FriendList) //存储为hset key为 固定key+uuid ,field为被添加者的uuid,fieldW为FriendInfo userkey := redis.FRIEND_LIST_KEY + ":" + strconv.Itoa(uuid) vv,err := redishandler.GetRedisClient().HGetAllValues(userkey) if err != nil { logger.Error("GetUserFriendList err") return nil,err } for _,val := range vv { one := new(FriendInfo) bytestr := val.([]byte) err = json.Unmarshal(bytestr, one) if err!= nil { rt.Friends = append(rt.Friends,*one) } } return rt,nil } func SaveUserFriendList(uuid int,adduuid int,status int) error { userkey := redis.FRIEND_LIST_KEY + ":" + strconv.Itoa(uuid) var finfo FriendInfo finfo.Uuid = adduuid finfo.Status = status str,err := json.Marshal(&finfo) if err != nil { logger.Error("SaveUserFriendList failed,err=%v",err) } err = redishandler.GetRedisClient().HSet(userkey,strconv.Itoa(adduuid),string(str)) return err } //判断是否已经是好友 func (flist *FriendList) IsInFreiendList(uuid int) bool { for _,val := range flist.Friends { if val.Uuid == uuid && val.Status == 0 { return true } } return false } func SaveCacheRecommandFriendList(uuid int,data *GetRecommendListDesc) { savestr,err := json.Marshal(data) if err != nil { logger.Error("SaveCacheRecommandFriendList err=%v",err) return } err = redishandler.GetRedisClient().HSet(redis.FRIEND_RECOMMANDLIST_KEY,strconv.Itoa(uuid),string(savestr)) if err != nil { logger.Error("SaveCacheRecommandFriendList err=%v",err) return } } func GetCacheRecommandFriendList(uuid int) (*GetRecommendListDesc,error) { rt := new(GetRecommendListDesc) val,err:= redishandler.GetRedisClient().HGet(redis.FRIEND_RECOMMANDLIST_KEY,strconv.Itoa(uuid)) if err != nil { logger.Error("GetCacheRecommandFriendList err=%v",err) return rt,err } err = json.Unmarshal([]byte(val),rt) if err != nil { logger.Error("GetCacheRecommandFriendList err=%v",err) return nil,err } return rt,nil } func DelCacheRecommandFriendList(uuid int) error { err := redishandler.GetRedisClient().HDel(redis.FRIEND_RECOMMANDLIST_KEY,strconv.Itoa(uuid)) return err } func GetFfiendData(frienduuid int) *GetRecommendListInfo { tmpext,err := GetUserExt(frienduuid) if err != nil { return nil } tmpbasic,err := GetUserBasic(frienduuid) if err != nil { return nil } tmpinfo := new(GetRecommendListInfo) tmpinfo.Hot = tmpext.Hot tmpinfo.Bean = tmpext.Bean tmpinfo.Userid = tmpext.Userid tmpinfo.Coin = tmpext.Coin tmpinfo.Reg_time = tmpext.Regtime tmpinfo.Lv = tmpext.Lv tmpinfo.Exp = tmpext.Exp tmpinfo.Nickname = tmpbasic.User_nickname tmpinfo.Avatar_url = tmpbasic.User_avatar_url tmpinfo.Cat_num = 0 tmpinfo.City = tmpbasic.User_city tmpinfo.Gender = tmpbasic.User_gender tmpinfo.Love_exp = tmpext.Loevexp tmpinfo.Shop_num = tmpext.Shopnum return tmpinfo } //获取推荐好友列表 func (flist *FriendList)GetRecommandFriendList(uuid,friendnum int) (*GetRecommendListDesc,error) { rlist,err := GetCacheRecommandFriendList(uuid) if err == nil { //有缓存 ,直接返回 return rlist,err } selfext,err := GetUserExt(uuid) if err != nil { return nil,err } selfbasic,err := GetUserBasic(uuid) if err != nil { return nil,err } var randlist []int //记录随机的几个好友 var first []int //初步筛选的id列表 var second []int //第二步 var third []int vv,err := redishandler.GetRedisClient().HGetAllValues(redis.USER_EXT_DATA) if err != nil { return nil ,err } for _,val := range vv { one := new(UserExtData) bytestr := val.([]byte) err = json.Unmarshal(bytestr, one) if err == nil { if selfext.Hot <= one.Hot+500 && selfext.Hot >= one.Hot-500 { first = append(first,one.User_id) } } if len(randlist) < friendnum { randlist = append(randlist,one.User_id) } } applylist,err := GetUserApplyList(uuid) if err != nil { logger.Error("GetRecommandFriendList failed err=%v",err) second = append(second,first...) }else { //第二步判断是否已经在申请列表,不再才加入 for _,val := range first { if !applylist.InApplyList(val) { second = append(second,val) } } } //第三步判断性别 for _,val := range second { if len(third) >= friendnum { //数量已经满了,直接退出 break } tmpbasic,err:= GetUserBasic(val) if err != nil { continue } if tmpbasic.User_gender != selfbasic.User_gender { third = append(third,val) } } //最后判断一下数量是否足够 if len(third) < friendnum { //将随机的id补充进去 for i:=0;i 600 + list[i].InviteTime { //list = append(list[:i],list[i+1:]...) //i-- }else { reallist = append(reallist,list[i]) } } return &list,&reallist,nil } func GetdagongList(uuid int) (*WorkList,[]InviteWorkOffDesc,error) { //需要判断 超过时间 四小时的删除 vv,err := redishandler.GetRedisClient().HGet(redis.USER_INVITEWORK_RELATION,strconv.Itoa(uuid)) if err != nil { //logger.Error("GetdagongList err=%v",err) return nil,nil,nil } var list WorkList err = json.Unmarshal([]byte(vv),&list) if err != nil { logger.Error("GetdagongList err=%v",err) return nil,nil,err } var offlist []InviteWorkOffDesc //此处时间改为600s nowtime := int(time.Now().Unix()) for i:=0;i 4*3600 + list[i].InviteTime { var tmp InviteWorkOffDesc tmp.Uuid = list[i].Uuid tmp.InviteTime = list[i].InviteTime offlist = append(offlist,tmp) list = append(list[:i],list[i+1:]...) i-- } } return &list,offlist,nil } //加入打工列表 func AddDagongList(uuid int,masteruuid int,list WorkList) error { nickname,headurl,err := mysql.QueryNameAndHead(uuid) if err != nil { logger.Error("AddDagongList err=%v",err) return err } var tmp InviteWorkDesc tmp.HeadUrl = headurl tmp.Uuid = uuid tmp.Nickname = nickname tmp.InviteTime = int(time.Now().Unix()) list = append(list,tmp) savestr,err := json.Marshal(&list) if err != nil { logger.Error("AddDagongList err=%v",err) return err } err = redishandler.GetRedisClient().HSet(redis.USER_INVITEWORK_RELATION,strconv.Itoa(masteruuid),string(savestr)) if err != nil { logger.Error("AddDagongList err=%v",err) return err } return nil }