package service import ( "strconv" "xiawan/wx/api/req" "xiawan/wx/api/vo" "xiawan/wx/clientsdk/baseinfo" "xiawan/wx/srv/wxface" "github.com/lunny/log" ) // GetContactLabelListRequestService 获取标签列表 func GetContactLabelListRequestService(queryKey string) vo.DTO { return checkExIdPerformNoCreateConnect(queryKey, func(iwxConnect wxface.IWXConnect, newIWXConnect bool) vo.DTO { //取基本信息 wxAccount := iwxConnect.GetWXAccount() loginState := wxAccount.GetLoginState() //判断在线情况 if loginState == baseinfo.MMLoginStateNoLogin { return vo.NewFail("该账号需要重新登录!loginState == MMLoginStateNoLogin ") } else if !iwxConnect.CheckOnLineStatus() { return vo.NewFail("账号离线,自动上线失败!loginState == " + strconv.Itoa(int(wxAccount.GetLoginState()))) } //获取请求管理器 reqInvoker := iwxConnect.GetWXReqInvoker() resp, err := reqInvoker.SendGetContactLabelListRequest(true) if err != nil { return vo.NewFail("GetContactLabelListRequestService!" + err.Error()) } return vo.NewSuccessObj(resp, "") }) } // AddContactLabelRequestService 添加标签 func AddContactLabelRequestService(queryKey string, m req.LabelModel) vo.DTO { return checkExIdPerformNoCreateConnect(queryKey, func(iwxConnect wxface.IWXConnect, newIWXConnect bool) vo.DTO { //取基本信息 wxAccount := iwxConnect.GetWXAccount() loginState := wxAccount.GetLoginState() //判断在线情况 if loginState == baseinfo.MMLoginStateNoLogin { return vo.NewFail("该账号需要重新登录!loginState == MMLoginStateNoLogin ") } else if !iwxConnect.CheckOnLineStatus() { return vo.NewFail("账号离线,自动上线失败!loginState == " + strconv.Itoa(int(wxAccount.GetLoginState()))) } //获取请求管理器 reqInvoker := iwxConnect.GetWXReqInvoker() if len(m.LabelNameList) == 0 { return vo.NewFail("没有要添加的标签") } resp, err := reqInvoker.SendAddContactLabelRequest(m.LabelNameList, true) if err != nil { return vo.NewFail("AddContactLabelRequestService!" + err.Error()) } return vo.NewSuccessObj(resp, "") }) } // DelContactLabelRequestService 删除标签 func DelContactLabelRequestService(queryKey string, m req.LabelModel) vo.DTO { return checkExIdPerformNoCreateConnect(queryKey, func(iwxConnect wxface.IWXConnect, newIWXConnect bool) vo.DTO { //取基本信息 wxAccount := iwxConnect.GetWXAccount() loginState := wxAccount.GetLoginState() //判断在线情况 if loginState == baseinfo.MMLoginStateNoLogin { return vo.NewFail("该账号需要重新登录!loginState == MMLoginStateNoLogin ") } else if !iwxConnect.CheckOnLineStatus() { return vo.NewFail("账号离线,自动上线失败!loginState == " + strconv.Itoa(int(wxAccount.GetLoginState()))) } //获取请求管理器 reqInvoker := iwxConnect.GetWXReqInvoker() resp, err := reqInvoker.SendDelContactLabelRequest(m.LabelId) if err != nil { return vo.NewFail("SendDelContactLabelRequestService!" + err.Error()) } return vo.NewSuccessObj(resp, "") }) } // ModifyLabelRequestService 修改标签 func ModifyLabelRequestService(queryKey string, m req.LabelModel) vo.DTO { return checkExIdPerformNoCreateConnect(queryKey, func(iwxConnect wxface.IWXConnect, newIWXConnect bool) vo.DTO { //取基本信息 wxAccount := iwxConnect.GetWXAccount() loginState := wxAccount.GetLoginState() //判断在线情况 if loginState == baseinfo.MMLoginStateNoLogin { return vo.NewFail("该账号需要重新登录!loginState == MMLoginStateNoLogin ") } else if !iwxConnect.CheckOnLineStatus() { return vo.NewFail("账号离线,自动上线失败!loginState == " + strconv.Itoa(int(wxAccount.GetLoginState()))) } //获取请求管理器 reqInvoker := iwxConnect.GetWXReqInvoker() resp, err := reqInvoker.SendModifyLabelRequest(m.UserLabelList) if err != nil { return vo.NewFail("SendDelContactLabelRequestService!" + err.Error()) } return vo.NewSuccessObj(resp, "") }) } // 获取标签下好友 func GetWXFriendListByLabelIDService(queryKey string, req req.LabelModel) vo.DTO { return checkExIdPerformNoCreateConnect(queryKey, func(iwxConnect wxface.IWXConnect, newIWXConnect bool) vo.DTO { //取基本信息 wxAccount := iwxConnect.GetWXAccount() loginState := wxAccount.GetLoginState() //判断在线情况 if loginState == baseinfo.MMLoginStateNoLogin { return vo.NewFail("该账号需要重新登录!loginState == MMLoginStateNoLogin ") } else if !iwxConnect.CheckOnLineStatus() { return vo.NewFail("账号离线,自动上线失败!loginState == " + strconv.Itoa(int(wxAccount.GetLoginState()))) } //获取请求管理器 retList := make([]string, 0) // 遍历好友 获取对应标签的好友列表 i, _ := strconv.Atoi(req.LabelId) //重新拉取好友列表 if len(wxAccount.FriendMap) <= 0 { //获取请求管理器 reqInvoker := iwxConnect.GetWXReqInvoker() var CurrentWxcontactSeq = uint32(0) var CurrentChatRoomContactSeq = uint32(0) for true { resp, err := reqInvoker.SendGetContactListPageRequest(CurrentWxcontactSeq, CurrentChatRoomContactSeq) if err != nil { log.Error("分页请求获取联系人出现error") break } if resp.BaseResponse.GetRet() != 0 { log.Error("分页请求获取联系人出现error=0") break } CurrentWxcontactSeq = resp.GetCurrentWxcontactSeq() CurrentChatRoomContactSeq = resp.GetCurrentChatRoomContactSeq() if len(resp.GetContactUsernameList()) <= 0 { break } //批量获取联系人 response, error := reqInvoker.SendGetContactRequestForList(resp.GetContactUsernameList(), nil) if error != nil { log.Error("获取详情出现error") } if response.BaseResponse.GetRet() != 0 { log.Error("获取详情出现error=0") break } for _, v := range response.GetContactList() { wxAccount.AddWXFriendContact(v) } } } for userName, modContact := range wxAccount.FriendMap { if wxAccount.ContainsLabel(modContact.GetLabelIdlist(), uint32(i)) { retList = append(retList, userName) } } return vo.NewSuccessObj(retList, "") }) }