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