diff --git a/src/HttpServer/logic/datadef.go b/src/HttpServer/logic/datadef.go index 4e32762..2eea6db 100644 --- a/src/HttpServer/logic/datadef.go +++ b/src/HttpServer/logic/datadef.go @@ -14,6 +14,11 @@ const ( ) +type RedisTeamInfo struct { + Team_id int `json:"team_id"` + User_id int `json:"user_id"` +} + type WechatLoginReq struct { Channel_id int `json:"channel_id"` Invite_type int `json:"invite_type"` @@ -113,6 +118,24 @@ type QueryInviteResp struct { Result QueryInviteResult `json:"result"` } +type QueryNewMessageReq struct{ + Uuid int `json:"uuid"` +} + +type QueryNewMessageDesc struct { + Isnew int `json:"isnew"` +} + +type QueryNewMessageResult struct { + Code int `json:"code"` + Data QueryNewMessageDesc `json:"data"` +} + +type QueryNewMessageResp struct { + Status string `json:"status"` + Result QueryNewMessageResult `json:"result"` +} + type InviteWorkReq struct{ Uuid int `json:"uuid"` diff --git a/src/HttpServer/logic/function.go b/src/HttpServer/logic/function.go index 29730f9..98ffc49 100644 --- a/src/HttpServer/logic/function.go +++ b/src/HttpServer/logic/function.go @@ -22,36 +22,35 @@ func SetHeader(w http.ResponseWriter) { w.Header().Set("Access-Control-Allow-Headers", "Content-Type,Uuid") } - -func (tinfo *TeamInfo) DoAddBuffTimee(btype int,muti int,resp *AddTeamBuffResp) { - addtime := 1800*muti +func (tinfo *TeamInfo) DoAddBuffTimee(btype int, muti int, resp *AddTeamBuffResp) { + addtime := 1800 * muti index := 0 - for k,val := range tinfo.BInfo.Buff { + 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) + tinfo.BInfo.Buff[index].BuffInfo = append(tinfo.BInfo.Buff[index].BuffInfo, tmp) } - }else { + } else { tinfo.BInfo.Buff[index].BuffInfo[len(tinfo.BInfo.Buff[index].BuffInfo)-1].EndTime += 86399 } //删除掉无用的 - yestime := nowtime-86400 - for i:=0;i sumlen{ + if begin > sumlen { begin = sumlen - 10 } if end > sumlen { end = sumlen - 1 } - return rtslice[begin:end],nil,sumlen + return rtslice[begin:end], nil, sumlen } -func GetTeamListByNameCond(shopnum int,page int, name string) (TeamSlice,error,int) { +func GetTeamListByNameCond(shopnum int, page int, name string) (TeamSlice, error, int) { if page < 0 { - logger.Error("GetTeamListByCond invalid page=%v",page) + logger.Error("GetTeamListByCond invalid page=%v", page) page = 1 } var rtslice TeamSlice - vv,err := redishandler.GetRedisClient().HGetAllValues(redis.TEAM_INFO) + vv, err := redishandler.GetRedisClient().HGetAllValues(redis.TEAM_INFO) if err != nil { logger.Error("GetTeamListByCond err") - return nil,err,0 + return nil, err, 0 } - for _,val := range vv { + 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) + if one.BaseInfo.Num <= shopnum && strings.Index(one.BaseInfo.Name, name) != -1 { + rtslice = append(rtslice, one) } } } //排序 sort.Sort(rtslice) - begin := (page-1) * 10 + begin := (page - 1) * 10 end := begin + 9 sumlen := len(rtslice) - if begin > sumlen{ + if begin > sumlen { begin = sumlen - 10 } if end > sumlen { end = sumlen - 1 } - return rtslice[begin:end],nil,sumlen + return rtslice[begin:end], nil, sumlen } func (alist *ApproveList) InApproveList(uuid int) bool { - for _,val := range alist.Approve_info { + for _, val := range alist.Approve_info { if val.Uuid == uuid { return true } @@ -398,56 +396,56 @@ func (alist *ApproveList) InApproveList(uuid int) bool { } // -func DelFromApproveList(uuid,deluuid int) error { +func DelFromApproveList(uuid, deluuid int) error { return nil } //待批准列表 -func GetUserApproveList(uuid int) (*ApproveList,error) { +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) + vv, err := redishandler.GetRedisClient().HGetAllValues(userkey) if err != nil { logger.Error("GetUserApproveList err") - return nil,err + return nil, err } - nowtime:= int(time.Now().Unix()) - for _,val := range vv { + nowtime := int(time.Now().Unix()) + for _, val := range vv { one := new(ApplyInfo) bytestr := val.([]byte) err = json.Unmarshal(bytestr, one) - if err!= nil { + if err != nil { //需要剔除超过时间的 - if nowtime <= one.Apply_time + 3*86400 { - rt.Approve_info = append(rt.Approve_info,*one) - }else { + if nowtime <= one.Apply_time+3*86400 { + rt.Approve_info = append(rt.Approve_info, *one) + } else { //已经超时,需要删除 - redishandler.GetRedisClient().HDel(userkey,strconv.Itoa(one.Uuid)) + redishandler.GetRedisClient().HDel(userkey, strconv.Itoa(one.Uuid)) } } } - return rt,nil + return rt, nil } -func SaveUserApproveList(uuid int,adduuid int) error { +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) + str, err := json.Marshal(&finfo) if err != nil { - logger.Error("SaveUserApproveList failed,err=%v",err) + logger.Error("SaveUserApproveList failed,err=%v", err) } - err = redishandler.GetRedisClient().HSet(userkey,strconv.Itoa(adduuid),string(str)) + 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 { + for _, val := range alist.Apply_info { if val.Uuid == uuid { return true } @@ -455,88 +453,88 @@ func (alist *ApplyList) InApplyList(uuid int) bool { return false } -func GetUserApplyList(uuid int) (*ApplyList,error) { +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) + vv, err := redishandler.GetRedisClient().HGetAllValues(userkey) if err != nil { logger.Error("GetUserApplyList err") - return nil,err + return nil, err } - nowtime:= int(time.Now().Unix()) - for _,val := range vv { + nowtime := int(time.Now().Unix()) + for _, val := range vv { one := new(ApplyInfo) bytestr := val.([]byte) err = json.Unmarshal(bytestr, one) - if err!= nil { + if err != nil { //需要剔除超过时间的 - if nowtime <= one.Apply_time + 86400 { - rt.Apply_info = append(rt.Apply_info,*one) - }else { + if nowtime <= one.Apply_time+86400 { + rt.Apply_info = append(rt.Apply_info, *one) + } else { //已经超时,需要删除 - redishandler.GetRedisClient().HDel(userkey,strconv.Itoa(one.Uuid)) + redishandler.GetRedisClient().HDel(userkey, strconv.Itoa(one.Uuid)) } } } - return rt,nil + return rt, nil } -func SaveUserApplyList(uuid int,adduuid int) error { +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) + str, err := json.Marshal(&finfo) if err != nil { - logger.Error("SaveUserApplyList failed,err=%v",err) + logger.Error("SaveUserApplyList failed,err=%v", err) } - err = redishandler.GetRedisClient().HSet(userkey,strconv.Itoa(adduuid),string(str)) + err = redishandler.GetRedisClient().HSet(userkey, strconv.Itoa(adduuid), string(str)) return err } -func GetUserFriendList(uuid int) (*FriendList,error) { +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) + vv, err := redishandler.GetRedisClient().HGetAllValues(userkey) if err != nil { logger.Error("GetUserFriendList err") - return nil,err + return nil, err } - for _,val := range vv { + for _, val := range vv { one := new(FriendInfo) bytestr := val.([]byte) err = json.Unmarshal(bytestr, one) - if err!= nil { - rt.Friends = append(rt.Friends,*one) + if err != nil { + rt.Friends = append(rt.Friends, *one) } } - return rt,nil + return rt, nil } -func SaveUserFriendList(uuid int,adduuid int,status int) error { +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) + str, err := json.Marshal(&finfo) if err != nil { - logger.Error("SaveUserFriendList failed,err=%v",err) + logger.Error("SaveUserFriendList failed,err=%v", err) } - err = redishandler.GetRedisClient().HSet(userkey,strconv.Itoa(adduuid),string(str)) + err = redishandler.GetRedisClient().HSet(userkey, strconv.Itoa(adduuid), string(str)) return err } //判断是否已经是好友 func (flist *FriendList) IsInFreiendList(uuid int) bool { - for _,val := range flist.Friends { + for _, val := range flist.Friends { if val.Uuid == uuid && val.Status == 0 { return true } @@ -544,53 +542,52 @@ func (flist *FriendList) IsInFreiendList(uuid int) bool { return false } -func SaveCacheRecommandFriendList(uuid int,data *GetRecommendListDesc) { - savestr,err := json.Marshal(data) +func SaveCacheRecommandFriendList(uuid int, data *GetRecommendListDesc) { + savestr, err := json.Marshal(data) if err != nil { - logger.Error("SaveCacheRecommandFriendList err=%v",err) + logger.Error("SaveCacheRecommandFriendList err=%v", err) return } - err = redishandler.GetRedisClient().HSet(redis.FRIEND_RECOMMANDLIST_KEY,strconv.Itoa(uuid),string(savestr)) + err = redishandler.GetRedisClient().HSet(redis.FRIEND_RECOMMANDLIST_KEY, strconv.Itoa(uuid), string(savestr)) if err != nil { - logger.Error("SaveCacheRecommandFriendList err=%v",err) + logger.Error("SaveCacheRecommandFriendList err=%v", err) return } } -func GetCacheRecommandFriendList(uuid int) (*GetRecommendListDesc,error) { +func GetCacheRecommandFriendList(uuid int) (*GetRecommendListDesc, error) { rt := new(GetRecommendListDesc) - val,err:= redishandler.GetRedisClient().HGet(redis.FRIEND_RECOMMANDLIST_KEY,strconv.Itoa(uuid)) + val, err := redishandler.GetRedisClient().HGet(redis.FRIEND_RECOMMANDLIST_KEY, strconv.Itoa(uuid)) if err != nil { - logger.Error("GetCacheRecommandFriendList err=%v",err) - return rt,err + logger.Error("GetCacheRecommandFriendList err=%v", err) + return rt, err } - err = json.Unmarshal([]byte(val),rt) + err = json.Unmarshal([]byte(val), rt) if err != nil { - logger.Error("GetCacheRecommandFriendList err=%v",err) - return nil,err + logger.Error("GetCacheRecommandFriendList err=%v", err) + return nil, err } - return rt,nil + return rt, nil } func DelCacheRecommandFriendList(uuid int) error { - err := redishandler.GetRedisClient().HDel(redis.FRIEND_RECOMMANDLIST_KEY,strconv.Itoa(uuid)) + err := redishandler.GetRedisClient().HDel(redis.FRIEND_RECOMMANDLIST_KEY, strconv.Itoa(uuid)) return err } - func GetFfiendData(frienduuid int) *GetRecommendListInfo { - tmpext,err := GetUserExt(frienduuid) + tmpext, err := GetUserExt(frienduuid) if err != nil { return nil } - tmpbasic,err := GetUserBasic(frienduuid) + tmpbasic, err := GetUserBasic(frienduuid) if err != nil { return nil } - tmpinfo := new(GetRecommendListInfo) + tmpinfo := new(GetRecommendListInfo) tmpinfo.Hot = tmpext.Hot tmpinfo.Bean = tmpext.Bean tmpinfo.Userid = tmpext.Userid @@ -609,158 +606,154 @@ func GetFfiendData(frienduuid int) *GetRecommendListInfo { } //获取推荐好友列表 -func (flist *FriendList)GetRecommandFriendList(uuid,friendnum int) (*GetRecommendListDesc,error) { +func (flist *FriendList) GetRecommandFriendList(uuid, friendnum int) (*GetRecommendListDesc, error) { - rlist,err := GetCacheRecommandFriendList(uuid) + rlist, err := GetCacheRecommandFriendList(uuid) if err == nil { //有缓存 ,直接返回 - return rlist,err + return rlist, err } - selfext,err := GetUserExt(uuid) + selfext, err := GetUserExt(uuid) if err != nil { - return nil,err + return nil, err } - selfbasic,err := GetUserBasic(uuid) + selfbasic, err := GetUserBasic(uuid) if err != nil { - return nil,err + 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 + } - - 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) + 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) } } - - 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) - } - } + if len(randlist) < friendnum { + randlist = append(randlist, one.User_id) } + } - //第三步判断性别 - 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) + 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) } } + } - //最后判断一下数量是否足够 - if len(third) < friendnum { - //将随机的id补充进去 - for i:=0;i= friendnum { + //数量已经满了,直接退出 + break } - //最后赋值 - realrt := new(GetRecommendListDesc) - for _,val := range third { - tmpext,err := GetUserExt(val) - if err != nil { - logger.Error("GetRecommendListDesc third err=%v",err) - continue - } - tmpbasic,err := GetUserBasic(val) - if err != nil { - logger.Error("GetRecommendListDesc third err=%v",err) - continue - } - var tmpinfo 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 - realrt.Recommend_list = append(realrt.Recommend_list,tmpinfo) + 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 < friendnum-len(third); i++ { + third = append(third, randlist[i]) } + } + //最后赋值 + realrt := new(GetRecommendListDesc) + for _, val := range third { + tmpext, err := GetUserExt(val) + if err != nil { + logger.Error("GetRecommendListDesc third err=%v", err) + continue + } + tmpbasic, err := GetUserBasic(val) + if err != nil { + logger.Error("GetRecommendListDesc third err=%v", err) + continue + } + var tmpinfo 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 + realrt.Recommend_list = append(realrt.Recommend_list, tmpinfo) + } //保存到缓存 - SaveCacheRecommandFriendList(uuid,realrt) - return realrt,nil + SaveCacheRecommandFriendList(uuid, realrt) + return realrt, nil } -func SaveAccount(account ,pwd string) error { +func SaveAccount(account, pwd string) error { //首先对pwd加密 h := md5.New() h.Write([]byte(pwd)) // 需要加密的字符串为 - newpwd :=hex.EncodeToString(h.Sum(nil)) - err := redishandler.GetRedisClient().HSet(redis.USER_ACCOUNT_PASSWORD_KEY,account,newpwd) + newpwd := hex.EncodeToString(h.Sum(nil)) + err := redishandler.GetRedisClient().HSet(redis.USER_ACCOUNT_PASSWORD_KEY, account, newpwd) return err } -func CheckAccout(account ,pwd string) error { +func CheckAccout(account, pwd string) error { h := md5.New() h.Write([]byte(pwd)) // 需要加密的字符串为 - newpwd :=hex.EncodeToString(h.Sum(nil)) - pwdstr,err := redishandler.GetRedisClient().HGet(redis.USER_ACCOUNT_PASSWORD_KEY,account) + newpwd := hex.EncodeToString(h.Sum(nil)) + pwdstr, err := redishandler.GetRedisClient().HGet(redis.USER_ACCOUNT_PASSWORD_KEY, account) if err != nil { return err } - if pwdstr!= newpwd { + if pwdstr != newpwd { return errors.New("pwdword not right!") } return nil } -func SaveAccountToken(acc ,token string) { - err := redishandler.GetRedisClient().HSet(redis.USER_ACCOUNT_PASSWORD_KEY,acc,token) +func SaveAccountToken(acc, token string) { + err := redishandler.GetRedisClient().HSet(redis.USER_ACCOUNT_PASSWORD_KEY, acc, token) if err != nil { - logger.Error("SaveAccountToken err=%v",err) + logger.Error("SaveAccountToken err=%v", err) } } func GetAccountToken(acc string) string { - token,err := redishandler.GetRedisClient().HGet(redis.USER_ACCOUNT_PASSWORD_KEY,acc) + token, err := redishandler.GetRedisClient().HGet(redis.USER_ACCOUNT_PASSWORD_KEY, acc) if err != nil { - logger.Error("GetAccountToken failed err=%v",err) + logger.Error("GetAccountToken failed err=%v", err) return "" } @@ -771,7 +764,7 @@ type WorkList []InviteWorkDesc func (wl *WorkList) IsInWork(uuid int) bool { isIn := false - for _,val := range *wl { + for _, val := range *wl { if val.Uuid == uuid { isIn = true } @@ -780,79 +773,77 @@ func (wl *WorkList) IsInWork(uuid int) bool { } //此接口为处理返回所有的打工列表 -func GetRealDagonglist(uuid int) (*WorkList,*WorkList,error) { - vv,err := redishandler.GetRedisClient().HGet(redis.USER_INVITEWORK_RELATION,strconv.Itoa(uuid)) +func GetRealDagonglist(uuid int) (*WorkList, *WorkList, 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 + return nil, nil, nil } var reallist WorkList var list WorkList - err = json.Unmarshal([]byte(vv),&list) + err = json.Unmarshal([]byte(vv), &list) if err != nil { - logger.Error("GetRealDagonglist err=%v",err) - return nil,nil,err + logger.Error("GetRealDagonglist err=%v", err) + return nil, nil, err } //此处时间改为600s nowtime := int(time.Now().Unix()) - for i:=0;i 600 + list[i].InviteTime { + for i := 0; i < len(list); i++ { + if nowtime > 600+list[i].InviteTime { //list = append(list[:i],list[i+1:]...) //i-- - }else { - reallist = append(reallist,list[i]) + } else { + reallist = append(reallist, list[i]) } } - return &list,&reallist,nil + return &list, &reallist, nil } -func GetdagongList(uuid int) (*WorkList,[]InviteWorkOffDesc,error) { +func GetdagongList(uuid int) (*WorkList, []InviteWorkOffDesc, error) { //需要判断 超过时间 四小时的删除 - vv,err := redishandler.GetRedisClient().HGet(redis.USER_INVITEWORK_RELATION,strconv.Itoa(uuid)) + 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 + return nil, nil, nil } var list WorkList - err = json.Unmarshal([]byte(vv),&list) + err = json.Unmarshal([]byte(vv), &list) if err != nil { - logger.Error("GetdagongList err=%v",err) - return nil,nil,err + 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 { + for i := 0; i < len(list); i++ { + if nowtime > 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:]...) + offlist = append(offlist, tmp) + list = append(list[:i], list[i+1:]...) i-- } } - - - return &list,offlist,nil + return &list, offlist, nil } //加入打工列表 -func AddDagongList(uuid int,masteruuid int,list WorkList) error { +func AddDagongList(uuid int, masteruuid int, list WorkList) error { - nickname,headurl,err := mysql.QueryNameAndHead(uuid) + nickname, headurl, err := mysql.QueryNameAndHead(uuid) if err != nil { - logger.Error("AddDagongList err=%v",err) + logger.Error("AddDagongList err=%v", err) return err } @@ -862,19 +853,112 @@ func AddDagongList(uuid int,masteruuid int,list WorkList) error { tmp.Nickname = nickname tmp.InviteTime = int(time.Now().Unix()) - list = append(list,tmp) + list = append(list, tmp) - savestr,err := json.Marshal(&list) + savestr, err := json.Marshal(&list) if err != nil { - logger.Error("AddDagongList err=%v",err) + logger.Error("AddDagongList err=%v", err) return err } - err = redishandler.GetRedisClient().HSet(redis.USER_INVITEWORK_RELATION,strconv.Itoa(masteruuid),string(savestr)) + err = redishandler.GetRedisClient().HSet(redis.USER_INVITEWORK_RELATION, strconv.Itoa(masteruuid), string(savestr)) if err != nil { - logger.Error("AddDagongList err=%v",err) + logger.Error("AddDagongList err=%v", err) return err } return nil -} \ No newline at end of file +} + +//查询玩家现在所在的队伍id +func QueryUserTeamId(uuid int) (int, error) { + rkey := "cat:cafe:teamuser:where:user_id:" + strconv.Itoa(uuid) + ":status:0" + teamstr, err := redishandler.GetRedisClient().GetString(rkey) + if err != nil { + return 0, err + } + var tmp RedisTeamInfo + err = json.Unmarshal([]byte(teamstr), &tmp) + if err != nil { + return 0, nil + } + + return tmp.Team_id, nil +} + +func CheckHasNewMessage(uuid int) (bool, error) { + //首先检查工会记录 + lastteamsec := 0 + lastchatteamsec := 0 + laststr, err := redishandler.GetRedisClient().HGet(redis.USER_CHAT_TEAM_LASTGET_KEY, strconv.Itoa(uuid)) + if err == nil { + lastteamsec, _ = strconv.Atoi(laststr) + } + + //先取得玩家队伍id + teamid, err := QueryUserTeamId(uuid) + if err != nil { + return false, nil + } + //取出最后一条工会聊天记录 + rteamkey := redis.USER_CHAT_TEAM_INFO_KEY + ":" + strconv.Itoa(teamid) + chatinfostr, err := redishandler.GetRedisClient().LIndex(rteamkey, 0) + if err != nil { + logger.Error("CheckHasNewMessage failed err=%v", err) + } else { + var chats ChatInfoDesc + err = json.Unmarshal([]byte(chatinfostr), &chats) + if err != nil { + logger.Error("CheckHasNewMessage failed err=%v", err) + } else { + lastchatteamsec = chats.ChatTime + } + } + + if lastchatteamsec > lastteamsec { + //新的聊天信息 + redishandler.GetRedisClient().HSet(redis.USER_CHAT_ISNEW, strconv.Itoa(uuid), "1") + return true, nil + } + + //判断自己的私人聊天记录 + var talklistuid []int + rselfkey := redis.USER_CHAT_PRIVATE_LASTGET_KEY + ":" + strconv.Itoa(uuid) + vv, err := redishandler.GetRedisClient().HGetAllKeys(rselfkey) + if err != nil { + return false, err + } + + for _, val := range vv { + bytestr := string(val.([]byte)) + bytenum, _ := strconv.Atoi(bytestr) + talklistuid = append(talklistuid, bytenum) + } + + for _, val := range talklistuid { + selfgetsec := 0 + selftalksec := 0 + rkeysselfs := redis.USER_CHAT_PRIVATE_INFO_KEY + ":" + strconv.Itoa(uuid) + ":" + strconv.Itoa(val) + tmpstr, err := redishandler.GetRedisClient().HGet(rselfkey, strconv.Itoa(uuid)) + if err == nil { + selfgetsec, _ = strconv.Atoi(tmpstr) + } + + //查询最后一条记录 + cselfstr, err := redishandler.GetRedisClient().LIndex(rkeysselfs, 0) + if err == nil { + var chats ChatInfoDesc + err = json.Unmarshal([]byte(cselfstr), &chats) + if err == nil { + selftalksec = chats.ChatTime + } + } + + if selfgetsec < selftalksec { + redishandler.GetRedisClient().HSet(redis.USER_CHAT_ISNEW, strconv.Itoa(uuid), "1") + return true, nil + } + } + + return false, nil +} diff --git a/src/HttpServer/logic/httpserver.go b/src/HttpServer/logic/httpserver.go index c4cbbd4..14aacbd 100644 --- a/src/HttpServer/logic/httpserver.go +++ b/src/HttpServer/logic/httpserver.go @@ -92,12 +92,25 @@ func startServerHttpServe() { http.HandleFunc("/catcafe/user/newGetData",NewGetData) //新的获取玩家数据接口 http.HandleFunc("/catcafe/user/newSaveData",NewSaveData) //新的保存玩家数据接口 + http.HandleFunc("/catcafe/chat/queryNewMessage",queryNewMessage) //查询红点请求 + err := http.ListenAndServe(conf.GetServerHttpAddrConf(), nil) CheckErr(err) } +func queryNewMessage(w http.ResponseWriter, r *http.Request) { + + result, _ := ioutil.ReadAll(r.Body) + r.Body.Close() + + s := string(result) + //logger.Info("queryNewMessage , body:%v", s) + + HandlequeryNewMessage(w,s) +} + func NewSaveData(w http.ResponseWriter, r *http.Request) { result, _ := ioutil.ReadAll(r.Body) diff --git a/src/HttpServer/logic/logic.go b/src/HttpServer/logic/logic.go index 1737a88..6783e64 100644 --- a/src/HttpServer/logic/logic.go +++ b/src/HttpServer/logic/logic.go @@ -274,6 +274,55 @@ func HandleQueryInvite(w http.ResponseWriter, data string) { } +func HandlequeryNewMessage(w http.ResponseWriter, data string) { + + SetHeader(w) + var resp QueryNewMessageResp + resp.Status = "true" + resp.Result.Data.Isnew = 0 + var rdata QueryNewMessageReq + err := json.Unmarshal([]byte(data), &rdata) + for { + if err != nil { + logger.Error("HandlequeryNewMessage json unmarshal failed=%v", err) + resp.Result.Code = ERROR_JSONUNMASHFAILED + break + } + //先从缓存取,如果已经有新消息则直接返回 + exist,err := redishandler.GetRedisClient().HExists(redis.USER_CHAT_ISNEW,strconv.Itoa(rdata.Uuid)) + if err != nil { + logger.Error("HandlequeryNewMessage save failed=%v", err) + resp.Result.Code = ERROR_SRVDB_FAILED + resp.Result.Data.Isnew = 0 + break + } + + if exist { + resp.Result.Data.Isnew = 1 + break + } + + //如果没有 则进行判断 + isnew,err := CheckHasNewMessage(rdata.Uuid) + if err != nil { + logger.Error("HandlequeryNewMessage CheckHasNewMessage failed=%v", err) + resp.Result.Code = ERROR_SRVDB_FAILED + resp.Result.Data.Isnew = 0 + break + } + + if isnew { + resp.Result.Data.Isnew = 1 + } + + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} + func HandleNewSaveData(w http.ResponseWriter, data string) { SetHeader(w) var resp SaveDataBackupResp diff --git a/src/common/redis/def.go b/src/common/redis/def.go index 8892b08..0530b3a 100644 --- a/src/common/redis/def.go +++ b/src/common/redis/def.go @@ -1,31 +1,31 @@ package redis const ( - USER_TOURIST_UID = "CATCAFE_USER_TOURIST_UID" //存储对应设备编码与uid的对应关系 - USER_MAX_UUID = "CATCAFE_USER_MAX_UUID" //记录当前最大的uid,新增自增即可 - USER_BASIC_DATA = "CATCAFE_USER_BASIC_DATA" //玩家基础信息 - USER_EXT_DATA = "CATCAFE_USER_EXT_DATA" //玩家游戏数据 - USER_BASE_DATA = "CATCAFE_USER_BASE_DATA" //小游戏自定义数据 - MSG_CKECK_ACCESSTOKEN = "CATCAFE_MSG_CKECK_ACCESSTOKEN" //敏感词检测的key - TEAM_USERTEAM_NAME = "CATCAFE_TEAM_USERTEAM_NAME" //存储了玩家队伍名称 - TEAM_INFO = "CATCAFE_TEAM_INFO" //存储了玩家队伍信息 - TEAM_MAX_UUID = "CATCAFE_TEAM_MAX_UUID" //记录当前最大的teamid,新增自增即可 - TEAM_TEAMID_TOUUID = "CATCAFE_TEAM_TEAMID_TOUUID" //记录teamid与uuid的关系 - FRIEND_LIST_KEY = "CATCAFE_FRIEND_LIST_KEY" //玩家的好友列表的key,需要在末尾加死":uuid" - FRIEND_APPLYLIST_KEY = "CATCAFE_FRIEND_APPLYLIST_KEY" //玩家申请好友列表,需要在末尾加死":uuid" - FRIEND_APPROVELIST_KEY = "CATCAFE_FRIEND_APPROVELIST_KEY" //待批准好友列表,需要在末尾加死":uuid" - FRIEND_RECOMMANDLIST_KEY = "CATCAFE_FRIEND_RECOMMANDLIST_KEY" //推荐好友缓存key - USER_ACCOUNT_PASSWORD_KEY = "CATCAFE_USER_ACCOUNT_PASSWORD_KEY" //玩家账号密码的key - USER_INVITEREWARD_FETCH_REWARD = "CATCAFE_USER_INVITEREWARD_FETCH_REWARD" //玩家邀请记录 hset key + uuid field为被邀请者的uuid value为领取状态 - USER_BEINVITE_UUIDRELATION = "CATCAFE_USER_BEINVITE_UUIDRELATION" //玩家被邀请关系记录表 - USER_INVITEWORK_RELATION = "CATCAFE_USER_INVITEWORK_RELATION" //玩家被邀请打工记录表 - USER_BACKUP_DATA = "CATCAFE_USER_BACKUP_DATA" //玩家数据保存的备份 - USER_NEW_DATA_KEY = "cat:cafe:data_new:where:data_uid:" //玩家数据保存的新的key + USER_TOURIST_UID = "CATCAFE_USER_TOURIST_UID" //存储对应设备编码与uid的对应关系 + USER_MAX_UUID = "CATCAFE_USER_MAX_UUID" //记录当前最大的uid,新增自增即可 + USER_BASIC_DATA = "CATCAFE_USER_BASIC_DATA" //玩家基础信息 + USER_EXT_DATA = "CATCAFE_USER_EXT_DATA" //玩家游戏数据 + USER_BASE_DATA = "CATCAFE_USER_BASE_DATA" //小游戏自定义数据 + MSG_CKECK_ACCESSTOKEN = "CATCAFE_MSG_CKECK_ACCESSTOKEN" //敏感词检测的key + TEAM_USERTEAM_NAME = "CATCAFE_TEAM_USERTEAM_NAME" //存储了玩家队伍名称 + TEAM_INFO = "CATCAFE_TEAM_INFO" //存储了玩家队伍信息 + TEAM_MAX_UUID = "CATCAFE_TEAM_MAX_UUID" //记录当前最大的teamid,新增自增即可 + TEAM_TEAMID_TOUUID = "CATCAFE_TEAM_TEAMID_TOUUID" //记录teamid与uuid的关系 + FRIEND_LIST_KEY = "CATCAFE_FRIEND_LIST_KEY" //玩家的好友列表的key,需要在末尾加死":uuid" + FRIEND_APPLYLIST_KEY = "CATCAFE_FRIEND_APPLYLIST_KEY" //玩家申请好友列表,需要在末尾加死":uuid" + FRIEND_APPROVELIST_KEY = "CATCAFE_FRIEND_APPROVELIST_KEY" //待批准好友列表,需要在末尾加死":uuid" + FRIEND_RECOMMANDLIST_KEY = "CATCAFE_FRIEND_RECOMMANDLIST_KEY" //推荐好友缓存key + USER_ACCOUNT_PASSWORD_KEY = "CATCAFE_USER_ACCOUNT_PASSWORD_KEY" //玩家账号密码的key + USER_INVITEREWARD_FETCH_REWARD = "CATCAFE_USER_INVITEREWARD_FETCH_REWARD" //玩家邀请记录 hset key + uuid field为被邀请者的uuid value为领取状态 + USER_BEINVITE_UUIDRELATION = "CATCAFE_USER_BEINVITE_UUIDRELATION" //玩家被邀请关系记录表 + USER_INVITEWORK_RELATION = "CATCAFE_USER_INVITEWORK_RELATION" //玩家被邀请打工记录表 + USER_BACKUP_DATA = "CATCAFE_USER_BACKUP_DATA" //玩家数据保存的备份 + USER_NEW_DATA_KEY = "cat:cafe:data_new:where:data_uid:" //玩家数据保存的新的key - USER_CHAT_ISNEW = "CATCAFE_USER_CHAT_ISNEW" //hset field为uuid 存在表示有新消息了不用再去计算 否则需要挨个去判断 - WORLD_CHAT_INFO_KEY = "CATCAFE_WORLD_CHAT_INFO_KEY" //存储的是世界聊天 list结构 最新的消息在最头部 - USER_CHAT_TEAM_LASTGET_KEY ="CATCAFE_USER_CHAT_TEAM_LASTGET_KEY" // 结构是hset field是uuid value是存储的是最后一次获取工会聊天的时间戳,用于和工会聊天最新一条消息做对比,如果时间比最新一条小则有新的消息 - USER_CHAT_TEAM_INFO_KEY = "CATCAFE_USER_CHAT_TEAM_INFO_KEY" // 加teamid 存储的是队伍聊天的信息 list结构 最新的消息在最头部 + USER_CHAT_ISNEW = "CATCAFE_USER_CHAT_ISNEW" //hset field为uuid 存在表示有新消息了不用再去计算 否则需要挨个去判断 + WORLD_CHAT_INFO_KEY = "CATCAFE_WORLD_CHAT_INFO_KEY" //存储的是世界聊天 list结构 最新的消息在最头部 + USER_CHAT_TEAM_LASTGET_KEY = "CATCAFE_USER_CHAT_TEAM_LASTGET_KEY" // 结构是hset field是uuid value是存储的是最后一次获取工会聊天的时间戳,用于和工会聊天最新一条消息做对比,如果时间比最新一条小则有新的消息 + USER_CHAT_TEAM_INFO_KEY = "CATCAFE_USER_CHAT_TEAM_INFO_KEY" // 加teamid 存储的是队伍聊天的信息 list结构 最新的消息在最头部 USER_CHAT_PRIVATE_LASTGET_KEY = "CATCAFE_USER_CHAT_PRIVATE_LASTGET_KEY" // hset key加自己的uuid field为目标的uuid value为时间戳 - USER_CHAT_PRIVATE_INFO_KEY = "CATCAFE_USER_CHAT_PRIVATE_INFO_KEY" //list key需要加上自己的uuid 存储的是和自己相关的所有聊天信息 + USER_CHAT_PRIVATE_INFO_KEY = "CATCAFE_USER_CHAT_PRIVATE_INFO_KEY" //list key需要加上自己的:uuid再加上目标:uuid 存储的是和自己相关的所有聊天信息 ) diff --git a/src/mysql/dbmysql.go b/src/mysql/dbmysql.go index 3f871ea..b60b908 100644 --- a/src/mysql/dbmysql.go +++ b/src/mysql/dbmysql.go @@ -169,6 +169,8 @@ func QueryAllData(f *os.File) error{ } + + func QueryInvite(uuid int) ([]QuerInviteDesc,error){ var rtslice []QuerInviteDesc -- libgit2 0.21.0