123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- package MessageHandlers
- import (
- "context"
- "encoding/json"
- "github.com/spf13/cast"
- "wechat-api/ent/wx"
- "wechat-api/hook"
- "wechat-api/internal/pkg/wechat_ws"
- "wechat-api/internal/svc"
- "wechat-api/workphone"
- )
- type FriendPushNoticeHandler struct {
- svcCtx *svc.ServiceContext
- }
- func NewFriendPushNoticeHandler(svcCtx *svc.ServiceContext) *FriendPushNoticeHandler {
- return &FriendPushNoticeHandler{
- svcCtx: svcCtx,
- }
- }
- func (f *FriendPushNoticeHandler) Handler(msg *wechat_ws.MsgJsonObject) error {
- if msg.MsgType == "FriendPushNotice" {
- message := workphone.FriendPushNoticeMessage{}
- err := json.Unmarshal([]byte(msg.Message), &message)
- if err != nil {
- return err
- }
- // 拿到租户 id
- wx_info, err := f.svcCtx.DB.Wx.Query().
- Where(
- wx.WxidEQ(message.WeChatId), // Additional filter by organizationId
- ).
- Only(context.TODO())
- hookClient := hook.NewHook("", "", "")
- for _, friend := range message.Friends {
- friendType := 1
- if friend.Type == 1 {
- friendType = 2
- _ = hookClient.RequestChatRoomInfo(friend.FriendId, message.WeChatId)
- } else {
- friendType = 1
- }
- _, err = f.svcCtx.DB.Contact.Create().
- SetWxWxid(message.WeChatId).
- SetType(friendType).
- SetWxid(friend.FriendId).
- SetAccount(friend.FriendNo).
- SetNickname(friend.FriendNick).
- SetMarkname(friend.Memo).
- SetHeadimg(friend.Avatar).
- SetSex(cast.ToInt(friend.Gender)).
- SetOrganizationID(wx_info.OrganizationID).
- OnConflict().
- UpdateNewValues().
- SetOrganizationID(wx_info.OrganizationID).
- ID(context.TODO())
- if err != nil {
- return err
- }
- }
- }
- return nil
- }
|