From c68413f680d64ad9343ec7a2c0a7fec8fc4531a6 Mon Sep 17 00:00:00 2001 From: liuxiaolong <liuxiaolong@aiotlink.com> Date: 星期三, 12 八月 2020 14:48:47 +0800 Subject: [PATCH] add unbind alias --- service/msgPush.go | 98 +++++++++++++++++++------------- controllers/user.go | 11 +++ models/userClient.go | 16 ++++- service/userService.go | 22 ++++++- 4 files changed, 101 insertions(+), 46 deletions(-) diff --git a/controllers/user.go b/controllers/user.go index 927a38f..a906ae3 100644 --- a/controllers/user.go +++ b/controllers/user.go @@ -94,6 +94,17 @@ // @Success 200 {string} logout success // @router /logout [get] func (u *UserController) Logout() { + cid := u.GetString("cid") //unipush clientid + fmt.Println("clientId:", cid) + + if cid != "" { + go func() { + unbindB, unE := service.UnbindAlias(cid) + fmt.Println("unbind result:", unbindB, "err:", unE) + var uc models.UserClient + uc.DeleteByCid(cid) + }() + } resp := code.Code{} resp.Success = true resp.Status = http.StatusOK diff --git a/models/userClient.go b/models/userClient.go index 208a77c..a1e5646 100644 --- a/models/userClient.go +++ b/models/userClient.go @@ -42,10 +42,20 @@ return false } - -func (uc *UserClient) Delete(phoneNum string, clientId string) (int64, error) { +func (uc *UserClient) GetByCid(cid string) []UserClient { + var list []UserClient o := orm.NewOrm() - sql := fmt.Sprintf("delete from "+uc.TableName()+" where phoneNum='%s' and clientId='%s'", phoneNum, clientId) + _, err := o.QueryTable(uc.TableName()).Filter("clientId", cid).All(&list) + if err != nil { + return nil + } + return list +} + + +func (uc *UserClient) DeleteByCid(clientId string) (int64, error) { + o := orm.NewOrm() + sql := fmt.Sprintf("delete from "+uc.TableName()+" where clientId='%s'", clientId) result, err := o.Raw(sql).Exec() if err != nil { return 0, err diff --git a/service/msgPush.go b/service/msgPush.go index 03e036e..6718dbb 100644 --- a/service/msgPush.go +++ b/service/msgPush.go @@ -46,45 +46,65 @@ }() } -//瑙g粦鎵�鏈変笌璇ュ埆鍚嶇粦瀹氱殑cid -//func UnbindAlias(alias string) (bool, error) { -// appId := beego.AppConfig.String("pushAppId") -// baseUrl := beego.AppConfig.String("pushBaseUrl") + appId -// retryTimes := 0 -//ReTry: -// token := getCacheToken() -// if token == "" { -// return false, errors.New("token is nil") -// } -// url := baseUrl + "/user/alias/"+alias -// header := map[string]string { -// "token": token, -// } -// b,err := util.DoDeleteRequest(url, util.CONTENT_TYPE_UTF8_JSON, nil, header) -// if err !=nil { -// fmt.Println("DoDelete err:", err) -// return false, err -// } -// var result PushResult -// err = json.Unmarshal(b, &result) -// if err != nil { -// fmt.Println("unmarshal err:", err) -// return false, err -// } -// if result.Code == 0 { //瑙g粦鎴愬姛 -// return true, nil -// } else if result.Code == 10001 { //token杩囨湡 -// if retryTimes <=3 { -// newToken, err := RefreshToken() -// if err == nil { -// updateToken(newToken) -// retryTimes++ -// goto ReTry -// } -// } -// } -// return false, errors.New(result.Msg) -//} +//鎵归噺瑙g粦鍒悕 +func UnbindAlias(cid string) (bool, error) { + var uc models.UserClient + ucList := uc.GetByCid(cid) + if ucList ==nil { + return true,errors.New("ucList is nil") + } + var aliasArr []string + for _,als := range ucList { + aliasArr = append(aliasArr, als.PhoneNum) + } + appId := beego.AppConfig.String("pushAppId") + baseUrl := beego.AppConfig.String("pushBaseUrl") + appId + retryTimes := 0 +ReTry: + token := getCacheToken() + if token == "" { + return false, errors.New("token is nil") + } + url := baseUrl + "/user/alias" + header := map[string]string { + "token": token, + } + caArr := make([]map[string]string, 0) + for _,as := range aliasArr { + caArr = append(caArr, map[string]string{ + "cid": cid, + "alias": as, + }) + } + + reqBody := map[string]interface{}{ + "data_list": caArr, + } + b,err := util.DoDeleteRequest(url, util.CONTENT_TYPE_UTF8_JSON, reqBody, header) + if err !=nil { + fmt.Println("DoDelete err:", err) + return false, err + } + var result PushResult + err = json.Unmarshal(b, &result) + if err != nil { + fmt.Println("unmarshal err:", err) + return false, err + } + if result.Code == 0 { //瑙g粦鎴愬姛 + return true, nil + } else if result.Code == 10001 { //token杩囨湡 + if retryTimes <=3 { + newToken, err := RefreshToken() + if err == nil { + updateToken(newToken) + retryTimes++ + goto ReTry + } + } + } + return false, errors.New(result.Msg) +} //涓�涓埆鍚嶆渶澶氬厑璁哥粦瀹�10涓猚id func BindAlias(cid, alias string) (bool, error) { diff --git a/service/userService.go b/service/userService.go index 8f66c41..71bf37f 100644 --- a/service/userService.go +++ b/service/userService.go @@ -58,6 +58,13 @@ if cid != "" { go func() { var uc models.UserClient + ucList := uc.GetByCid(cid) + if ucList != nil && len(ucList) >0 { + if len(ucList) >1 || ucList[0].PhoneNum != phoneNum { + unbindB, unE := UnbindAlias(cid) + fmt.Println("unbindB:", unbindB, "err:", unE) + } + } if !uc.ExistByCid(phoneNum, cid) { new := models.UserClient{ Id:uuid.NewV4().String(), @@ -66,9 +73,9 @@ BindTime: time.Now().Format("2006-01-02 15:04:05"), } new.Insert() + bindR, bindE := BindAlias(cid, phoneNum) + fmt.Println("bind cid:",cid, "phoneNum:",phoneNum,"result:", bindR, "err:", bindE) } - bindR, bindE := BindAlias(cid, phoneNum) - fmt.Println("bind cid:",cid, "phoneNum:",phoneNum,"result:", bindR, "err:", bindE) }() } return true, &vo.UserInfo{ @@ -97,6 +104,13 @@ if cid != "" { go func() { var uc models.UserClient + ucList := uc.GetByCid(cid) + if ucList != nil && len(ucList) >0 { + if len(ucList) >1 || ucList[0].PhoneNum != phoneNum { + unbindB, unE := UnbindAlias(cid) + fmt.Println("unbindB:", unbindB, "err:", unE) + } + } if !uc.ExistByCid(phoneNum, cid) { new := models.UserClient{ Id:uuid.NewV4().String(), @@ -105,9 +119,9 @@ BindTime: time.Now().Format("2006-01-02 15:04:05"), } new.Insert() + bindR, bindE := BindAlias(cid, phoneNum) + fmt.Println("bind cid:",cid, "phoneNum:",phoneNum,"result:", bindR, "err:", bindE) } - bindR, bindE := BindAlias(cid, phoneNum) - fmt.Println("bind cid:",cid, "phoneNum:",phoneNum,"result:", bindR, "err:", bindE) }() } return true, &vo.UserInfo{ -- Gitblit v1.8.0