liuxiaolong
2020-08-12 c68413f680d64ad9343ec7a2c0a7fec8fc4531a6
add unbind alias
4个文件已修改
147 ■■■■■ 已修改文件
controllers/user.go 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/userClient.go 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/msgPush.go 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/userService.go 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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
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
service/msgPush.go
@@ -46,45 +46,65 @@
    }()
}
//解绑所有与该别名绑定的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 { //解绑成功
//        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)
//}
//批量解绑别名
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 { //解绑成功
        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个cid
func BindAlias(cid, alias string) (bool, error) {
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{