Files

168 lines
6.1 KiB
Go
Raw Permalink Normal View History

2026-02-17 13:06:23 +08:00
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, "")
})
}