package MessageHandlers import ( "context" "encoding/json" "fmt" "github.com/zeromicro/go-zero/core/logx" "wechat-api/ent/contact" "wechat-api/internal/pkg/wechat_ws" "wechat-api/internal/svc" ) type TalkToFriendTaskResultNoticeHandler struct { svcCtx *svc.ServiceContext } func NewTalkToFriendTaskResultNoticeHandler(svcCtx *svc.ServiceContext) *TalkToFriendTaskResultNoticeHandler { return &TalkToFriendTaskResultNoticeHandler{ svcCtx: svcCtx, } } type TalkToFriendTaskResultNoticeMessage struct { Success bool `json:"success"` // 是否成功 Code string `json:"code"` // 错误码 Success = true 忽略 ErrMsg string `json:"errMsg"` // 错误内容描述 Success = true 忽略 WeChatId string `json:"weChatId"` // 执行的微信 FriendId string `json:"friendId"` // 执行的用户对象 MsgId string `json:"msgId"` // 聊天Id MsgSvrId int64 `json:"msgSvrId"` // CreateTime int64 `json:"createTime"` // 消息发送时间 } func (f *TalkToFriendTaskResultNoticeHandler) Handler(msg *wechat_ws.MsgJsonObject) error { if msg.MsgType == "TalkToFriendTaskResultNotice" { logx.Info("msg 的内容是:%s", msg) message := TalkToFriendTaskResultNoticeMessage{} err := json.Unmarshal([]byte(msg.Message), &message) if err != nil { return err } logx.Info("msg.Message 的内容是:%s", message) friendId, _ := f.svcCtx.Rds.Get(context.TODO(), fmt.Sprintf("MsgId_FriendId:%s", message.MsgId)).Result() if friendId == "" { return nil } if message.Code == "InternalError" { err = f.svcCtx.DB.Contact. Update(). Where(contact.WxWxidEQ(message.WeChatId), contact.WxidEQ(friendId)). SetStatus(2). Exec(context.TODO()) if err != nil { return err } } } return nil }