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