diff --git a/src/HttpServer/logic/datadef.go b/src/HttpServer/logic/datadef.go index e8d56a0..1528ba1 100644 --- a/src/HttpServer/logic/datadef.go +++ b/src/HttpServer/logic/datadef.go @@ -157,6 +157,16 @@ type CreateTeamReq struct{ Limit int `json:"limit"` } +//队伍列表人员id +type TeamMemInfo struct { + MemList []int +} + +//队伍建筑信息 +type TeamBuildingInfo struct { + +} + type CreateTeamInfo struct { Id int `json:"id"` Name string `json:"name"` @@ -169,8 +179,15 @@ type CreateTeamInfo struct { Status int `json:"status"` Create_time int `json:"create_time"` Update_time int `json:"update_time"` +} +//队伍信息 +type TeamInfo struct { + BaseInfo CreateTeamInfo + MemInfo TeamMemInfo + BInfo TeamBuildingInfo } + type CreateTeamDesc struct { Team_data CreateTeamInfo `json:"team_data"` } @@ -186,6 +203,39 @@ type CreateTeamResp struct { } +type JoinTeamReq struct{ + Token string `json:"token"` + Team_id int `json:"team_id"` +} + +type JoinTeamResp struct { + Status string `json:"status"` + Result CommonResult `json:"result"` +} + + +type JoinTeamByInviteReq struct{ + Token string `json:"token"` + Inviter_id int `json:"inviter_id"` +} + +type JoinTeamByInviteResp struct { + Status string `json:"status"` + Result CommonResult `json:"result"` +} + +type QuitTeamReq struct{ + Token string `json:"token"` + User_id int `json:"user_id"` + Type int `json:"type"` +} + +type QuitTeamResp struct { + Status string `json:"status"` + Result CommonResult `json:"result"` +} + + //********************************************************************************************************** diff --git a/src/HttpServer/logic/errordef.go b/src/HttpServer/logic/errordef.go index 17e6219..421e490 100644 --- a/src/HttpServer/logic/errordef.go +++ b/src/HttpServer/logic/errordef.go @@ -16,4 +16,6 @@ const ( ERROR_GETTEAMINFO_FAILED = 11 //查询队伍信息失败 ERROR_NOTCAPTION = 12 //不是队长无法修改队伍信息 ERROR_TEAMNAMETHSDAME = 13 //修改队伍时名称重复 + ERROR_TEAMALREADYINTEAM = 14 //已经在队伍中无法再加入 + ERROR_TEAMNOTINTEAM = 15 //不在在队伍中无法再推出 ) \ No newline at end of file diff --git a/src/HttpServer/logic/function.go b/src/HttpServer/logic/function.go index 9695d3e..d87bf38 100644 --- a/src/HttpServer/logic/function.go +++ b/src/HttpServer/logic/function.go @@ -15,6 +15,28 @@ func SetHeader(w http.ResponseWriter) { w.Header().Set("Access-Control-Allow-Headers", "Content-Type,Uuid") } +func (tinfo *TeamInfo) IsInTeam(uuid int) bool { + inteam := false + for _,val := range tinfo.MemInfo.MemList { + if val == uuid { + inteam = true + break + } + } + return inteam +} + +func (tinfo *TeamInfo) DelTeamMember(uuid int) { + + for k,val := range tinfo.MemInfo.MemList { + if val == uuid { + tinfo.MemInfo.MemList = append(tinfo.MemInfo.MemList[:k],tinfo.MemInfo.MemList[k+1:]...) + break + } + } + +} + //设置 func SetTouristUid(utoken string,uid int) error{ err := redishandler.GetRedisClient().HSet(redis.USER_TOURIST_UID, utoken,strconv.Itoa(uid)) @@ -142,7 +164,7 @@ func SetUserTeamName(name string,teamid int) { } //保存队伍信息 -func SaveTeamInfo(teamid int,tinfo *CreateTeamInfo) error { +func SaveTeamInfo(teamid int,tinfo *TeamInfo) error { team,_ := json.Marshal(tinfo) err := redishandler.GetRedisClient().HSet(redis.TEAM_INFO, strconv.Itoa(teamid), string(team)) if err != nil { @@ -153,8 +175,8 @@ func SaveTeamInfo(teamid int,tinfo *CreateTeamInfo) error { } //获取队伍信息 -func GetTeamInfo(teamid int) (*CreateTeamInfo,error) { - info := new(CreateTeamInfo) +func GetTeamInfo(teamid int) (*TeamInfo,error) { + info := new(TeamInfo) vv,err := redishandler.GetRedisClient().HGet(redis.TEAM_INFO,strconv.Itoa(teamid)) if err != nil { logger.Error("GetTeamInfo failed,err=%v",err) diff --git a/src/HttpServer/logic/httpserver.go b/src/HttpServer/logic/httpserver.go index d4fc121..1e4552b 100644 --- a/src/HttpServer/logic/httpserver.go +++ b/src/HttpServer/logic/httpserver.go @@ -36,12 +36,48 @@ func startServerHttpServe() { http.HandleFunc("/catcafe/team/textCheck", TextCheck) //敏感词检测 http.HandleFunc("/catcafe/team/createTeam", CreateTeam) //创建队伍 http.HandleFunc("/catcafe/team/updateTeamData", UpdateTeamData) //修改队伍信息 + http.HandleFunc("/catcafe/team/joinTeam", JoinTeam) //主动加入队伍 + http.HandleFunc("/catcafe/team/joinTeamByInvite", JoinTeamByInvite) //被邀请加入队伍 + http.HandleFunc("/catcafe/team/quitTeam", QuitTeam) //被邀请加入队伍 err := http.ListenAndServe(conf.GetServerHttpAddrConf(), nil) CheckErr(err) } +func QuitTeam(w http.ResponseWriter, r *http.Request) { + + result, _ := ioutil.ReadAll(r.Body) + r.Body.Close() + + s := string(result) + logger.Info("QuitTeam , body:%v,uuid=%v", s) + + HandleQuitTeam(w,s) +} + +func JoinTeamByInvite(w http.ResponseWriter, r *http.Request) { + + result, _ := ioutil.ReadAll(r.Body) + r.Body.Close() + + s := string(result) + logger.Info("JoinTeamByInvite , body:%v,uuid=%v", s) + + HandleJoinTeamByInvite(w,s) +} + +func JoinTeam(w http.ResponseWriter, r *http.Request) { + + result, _ := ioutil.ReadAll(r.Body) + r.Body.Close() + + s := string(result) + logger.Info("JoinTeam , body:%v,uuid=%v", s) + + HandleJoinTeam(w,s) +} + func UpdateTeamData(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 4112a9f..428514c 100644 --- a/src/HttpServer/logic/logic.go +++ b/src/HttpServer/logic/logic.go @@ -446,6 +446,8 @@ func HandleCreateTeam(w http.ResponseWriter, data string) { }*/ //初始化队伍数据 + var bteaminfo TeamInfo + bteaminfo.MemInfo.MemList = append(bteaminfo.MemInfo.MemList,uuid) var teaminfo CreateTeamInfo teaminfo.Name = rdata.Name teaminfo.Status = 0 @@ -459,9 +461,9 @@ func HandleCreateTeam(w http.ResponseWriter, data string) { teaminfo.Num = 1 teaminfo.Update_time = int(time.Now().Unix()) resp.Result.Data.Team_data = teaminfo - + bteaminfo.BaseInfo = teaminfo //保存队伍数据 - SaveTeamInfo(teaminfo.Id,&teaminfo) + SaveTeamInfo(teaminfo.Id,&bteaminfo) //保存队伍id SaveTeamToUuid(teaminfo.Id,uuid) @@ -523,29 +525,29 @@ func HandleUpdateTeamData(w http.ResponseWriter, data string) { break } - if teaminfo.Captain_id != uuid { + if teaminfo.BaseInfo.Creator_id != uuid { logger.Error("HandleUpdateTeamData notcaption failed=%v", err) resp.Result.Code = ERROR_NOTCAPTION break } - if teaminfo.Name == rdata.Name { + if teaminfo.BaseInfo.Name == rdata.Name { logger.Error("HandleUpdateTeamData namesame failed=%v", err) resp.Result.Code = ERROR_TEAMNAMETHSDAME break } - orinname := teaminfo.Name - teaminfo.Name = rdata.Name - teaminfo.Is_open = rdata.Is_open - teaminfo.Least = rdata.Limit - teaminfo.Update_time = int(time.Now().Unix()) + orinname := teaminfo.BaseInfo.Name + teaminfo.BaseInfo.Name = rdata.Name + teaminfo.BaseInfo.Is_open = rdata.Is_open + teaminfo.BaseInfo.Least = rdata.Limit + teaminfo.BaseInfo.Update_time = int(time.Now().Unix()) //保存队伍数据 - SaveTeamInfo(teaminfo.Id,teaminfo) + SaveTeamInfo(teaminfo.BaseInfo.Id,teaminfo) DelUserTeamName(orinname) //保存队伍名称 - SetUserTeamName(rdata.Name,teaminfo.Id) + SetUserTeamName(rdata.Name,teaminfo.BaseInfo.Id) resp.Result.Code = ERROR_OK break @@ -555,3 +557,210 @@ func HandleUpdateTeamData(w http.ResponseWriter, data string) { respstr, _ := json.Marshal(&resp) fmt.Fprint(w, string(respstr)) } + + +func HandleJoinTeam(w http.ResponseWriter, data string) { + SetHeader(w) + var resp JoinTeamResp + resp.Status = "true" + resp.Result.Code = ERROR_OK + var rdata JoinTeamReq + err := json.Unmarshal([]byte(data), &rdata) + for { + if err != nil { + logger.Error("HandleJoinTeam json unmarshal failed=%v", err) + resp.Result.Code = ERROR_JSONUNMASHFAILED + break + } + + uuid,err := GetTouristUid(rdata.Token) + if err != nil || uuid==0{ + logger.Error("HandleJoinTeam GetTouristUid failed=%v", err) + resp.Result.Code = ERROR_GETUSERIDFAILED + break + } + + //获取店铺数据 + tinfo,err := GetTeamInfo(rdata.Team_id) + if err != nil { + logger.Error("HandleJoinTeam GetTeamInfoFailed failed=%v", err) + resp.Result.Code = ERROR_GETTEAMINFO_FAILED + break + } + + //判断店铺数量 + vv := m_userInfo.Get(uint32(uuid)) + if vv == nil { + logger.Error("HandleJoinTeam failed=%v", err) + resp.Result.Code = ERROR_GETUSERMAPBYUIDFAILED + break + } + + uinfo := vv.(*UserData) + if uinfo.Shopnum < tinfo.BaseInfo.Least { + logger.Error("HandleJoinTeam failed=%v", err) + resp.Result.Code = ERROR_CREATE_SHOPNOTENOUGH + break + } + + //判断一下是否已经在队伍中 + inteam := tinfo.IsInTeam(uuid) + + if inteam { + logger.Error("HandleJoinTeam already inteam failed=%v", err) + resp.Result.Code = ERROR_TEAMALREADYINTEAM + break + } + + tinfo.MemInfo.MemList = append(tinfo.MemInfo.MemList,uuid) + + //保存队伍数据 + SaveTeamInfo(tinfo.BaseInfo.Id,tinfo) + + + resp.Result.Code = ERROR_OK + resp.Result.Data = "" + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} + + +func HandleJoinTeamByInvite(w http.ResponseWriter, data string) { + SetHeader(w) + var resp JoinTeamByInviteResp + resp.Status = "true" + resp.Result.Code = ERROR_OK + var rdata JoinTeamByInviteReq + err := json.Unmarshal([]byte(data), &rdata) + for { + if err != nil { + logger.Error("HandleJoinTeamByInvite json unmarshal failed=%v", err) + resp.Result.Code = ERROR_JSONUNMASHFAILED + break + } + + uuid,err := GetTouristUid(rdata.Token) + if err != nil || uuid==0{ + logger.Error("HandleJoinTeamByInvite GetTouristUid failed=%v", err) + resp.Result.Code = ERROR_GETUSERIDFAILED + break + } + + + //获取店铺数据 + teamid,err := GetTeamByUuid(rdata.Inviter_id) + if err != nil { + logger.Error("HandleJoinTeamByInvite GetTeamInfoFailed failed=%v", err) + resp.Result.Code = ERROR_GETTEAMINFO_FAILED + break + } + tinfo ,err := GetTeamInfo(teamid) + if err != nil { + logger.Error("HandleJoinTeamByInvite GetTeamInfoFailed failed=%v", err) + resp.Result.Code = ERROR_GETTEAMINFO_FAILED + break + } + + + //判断一下是否已经在队伍中 + inteam := tinfo.IsInTeam(uuid) + + if inteam { + logger.Error("HandleJoinTeamByInvite already inteam failed=%v", err) + resp.Result.Code = ERROR_TEAMALREADYINTEAM + break + } + + tinfo.MemInfo.MemList = append(tinfo.MemInfo.MemList,uuid) + + //保存队伍数据 + SaveTeamInfo(tinfo.BaseInfo.Id,tinfo) + + + resp.Result.Code = ERROR_OK + resp.Result.Data = "" + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} + + +func HandleQuitTeam(w http.ResponseWriter, data string) { + SetHeader(w) + var resp QuitTeamResp + resp.Status = "true" + resp.Result.Code = ERROR_OK + var rdata QuitTeamReq + err := json.Unmarshal([]byte(data), &rdata) + for { + if err != nil { + logger.Error("HandleQuitTeam json unmarshal failed=%v", err) + resp.Result.Code = ERROR_JSONUNMASHFAILED + break + } + + uuid,err := GetTouristUid(rdata.Token) + if err != nil || uuid==0{ + logger.Error("HandleQuitTeam GetTouristUid failed=%v", err) + resp.Result.Code = ERROR_GETUSERIDFAILED + break + } + + teamid,err := GetTeamByUuid(uuid) + if err != nil { + logger.Error("HandleQuitTeam GetTeamInfoFailed failed=%v", err) + resp.Result.Code = ERROR_GETTEAMINFO_FAILED + break + } + tinfo ,err := GetTeamInfo(teamid) + if err != nil { + logger.Error("HandleQuitTeam GetTeamInfoFailed failed=%v", err) + resp.Result.Code = ERROR_GETTEAMINFO_FAILED + break + } + //判断一下是否已经在队伍中 + inteam := tinfo.IsInTeam(uuid) + + if !inteam { + logger.Error("HandleQuitTeam not inteam failed=%v", err) + resp.Result.Code = ERROR_TEAMNOTINTEAM + break + } + + if rdata.Type == 0 { + //踢人 需要判断是否是队长 + if uuid!=tinfo.BaseInfo.Captain_id { + logger.Error("HandleQuitTeam not caption failed=%v", err) + resp.Result.Code = ERROR_NOTCAPTION + break + } + }else { + //主动离开 需要扣除投资额 + //todo 扣除投资额 + } + + + //删除成员信息 + //tinfo.MemInfo.MemList = append(tinfo.MemInfo.MemList,uuid) + tinfo.DelTeamMember(rdata.User_id) + + //保存队伍数据 + SaveTeamInfo(tinfo.BaseInfo.Id,tinfo) + + + resp.Result.Code = ERROR_OK + resp.Result.Data = "" + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} \ No newline at end of file -- libgit2 0.21.0