Files
wechat_ipad_pro/api/service/labelService.go
2026-02-17 13:06:23 +08:00

168 lines
6.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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, "")
})
}