get_chatroom_member_list_logic.go 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package ChatRoomMember
  2. import (
  3. "context"
  4. "wechat-api/ent/wpchatroom"
  5. "wechat-api/ent/wpchatroommember"
  6. "wechat-api/hook"
  7. "wechat-api/ent/wx"
  8. "wechat-api/internal/svc"
  9. "wechat-api/internal/types"
  10. "github.com/suyuan32/simple-admin-common/msg/errormsg"
  11. "github.com/zeromicro/go-zero/core/logx"
  12. )
  13. type GetChatroomMemberListLogic struct {
  14. logx.Logger
  15. ctx context.Context
  16. svcCtx *svc.ServiceContext
  17. }
  18. func NewGetChatroomMemberListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetChatroomMemberListLogic {
  19. return &GetChatroomMemberListLogic{
  20. Logger: logx.WithContext(ctx),
  21. ctx: ctx,
  22. svcCtx: svcCtx}
  23. }
  24. func (l *GetChatroomMemberListLogic) GetChatroomMemberList(req *types.ChatroomMemberListReq) (resp *types.ChatroomMemberListResp, err error) {
  25. // todo: add your logic here and delete this line
  26. wxInfo, err := l.svcCtx.DB.Wx.Query().Where(wx.Wxid(*req.OwnerWxid)).First(l.ctx)
  27. if err != nil {
  28. l.Error("查询微信信息失败", err)
  29. return
  30. }
  31. resp = &types.ChatroomMemberListResp{
  32. BaseDataInfo: types.BaseDataInfo{
  33. Code: 0,
  34. Msg: errormsg.Success,
  35. },
  36. }
  37. if wxInfo.ServerID == 0 {
  38. hookClient := hook.NewHook("", "", "")
  39. _ = hookClient.RequestChatRoomInfo(*req.ChatRoom, wxInfo.Wxid)
  40. // 获取群成员
  41. wpChatroom, _ := l.svcCtx.DB.WpChatroom.Query().
  42. Where(wpchatroom.WxWxid(*req.OwnerWxid), wpchatroom.ChatroomID(*req.ChatRoom)).
  43. Only(l.ctx)
  44. if wpChatroom != nil && wpChatroom.MemberList != nil {
  45. for _, m := range wpChatroom.MemberList {
  46. member, _ := l.svcCtx.DB.WpChatroomMember.Query().
  47. Where(wpchatroommember.WxWxidEQ(*req.OwnerWxid), wpchatroommember.WxidEQ(m)).
  48. Only(l.ctx)
  49. if member != nil {
  50. resp.Data.Data = append(resp.Data.Data, types.ChatroomMemberInfo{
  51. Wxid: &m,
  52. ChatRoom: req.ChatRoom,
  53. OwnerWxid: req.OwnerWxid,
  54. Account: &member.Nickname,
  55. })
  56. }
  57. }
  58. }
  59. } else {
  60. serverInfo, err := l.svcCtx.DB.Server.Get(l.ctx, wxInfo.ServerID)
  61. if err != nil {
  62. l.Error("查询服务器信息失败", err)
  63. return nil, err
  64. }
  65. hookClient := hook.NewHook(serverInfo.PrivateIP, serverInfo.AdminPort, wxInfo.Port)
  66. chatrooMmemberDetail, err := hookClient.GetChatrooMmemberDetail(*req.ChatRoom)
  67. if err != nil {
  68. l.Error("获取群成员详细信息失败", err)
  69. return nil, err
  70. }
  71. for _, v := range chatrooMmemberDetail.Member {
  72. resp.Data.Data = append(resp.Data.Data, types.ChatroomMemberInfo{
  73. Wxid: &v.Wxid,
  74. ChatRoom: req.ChatRoom,
  75. OwnerWxid: req.OwnerWxid,
  76. Account: &v.Nickname,
  77. })
  78. }
  79. }
  80. return resp, nil
  81. }