logout_logic.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package Wxhook
  2. import (
  3. "context"
  4. "github.com/suyuan32/simple-admin-common/enum/errorcode"
  5. "math/rand"
  6. "strconv"
  7. "time"
  8. "wechat-api/hook"
  9. "wechat-api/internal/svc"
  10. "wechat-api/internal/types"
  11. "github.com/zeromicro/go-zero/core/logx"
  12. )
  13. type LogoutLogic struct {
  14. logx.Logger
  15. ctx context.Context
  16. svcCtx *svc.ServiceContext
  17. }
  18. func NewLogoutLogic(ctx context.Context, svcCtx *svc.ServiceContext) *LogoutLogic {
  19. return &LogoutLogic{
  20. Logger: logx.WithContext(ctx),
  21. ctx: ctx,
  22. svcCtx: svcCtx}
  23. }
  24. func (l *LogoutLogic) Logout(req *types.IDReq) (resp *types.BaseMsgResp, err error) {
  25. wxInfo, err := l.svcCtx.DB.Wx.Get(l.ctx, req.Id)
  26. if err != nil {
  27. l.Error("查询微信信息失败", err)
  28. return
  29. }
  30. serverInfo, err := l.svcCtx.DB.Server.Get(l.ctx, wxInfo.ServerID)
  31. if err != nil {
  32. l.Error("查询服务器信息失败", err)
  33. return
  34. }
  35. hookClient := hook.NewHook(serverInfo.PrivateIP, serverInfo.AdminPort, wxInfo.Port)
  36. logout, err := hookClient.Logout()
  37. if err != nil {
  38. l.Error("退出登录失败", err)
  39. return
  40. }
  41. // 在下面生成一个随机数
  42. tmpWxid := rand.New(rand.NewSource(time.Now().UnixNano())).Intn(1000000)
  43. l.svcCtx.DB.Wx.UpdateOne(wxInfo).
  44. SetStatus(0).
  45. SetWxid("temp-" + strconv.Itoa(tmpWxid)).
  46. Save(l.ctx)
  47. resp = &types.BaseMsgResp{
  48. Msg: logout.Msg,
  49. }
  50. if logout.Code == "1" {
  51. resp.Code = errorcode.OK
  52. } else {
  53. resp.Code = errorcode.Unknown
  54. }
  55. _, _ = hookClient.TerminateThisWeChat(wxInfo.ProcessID)
  56. return
  57. }