sync_wx.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package crontask
  2. import (
  3. "encoding/json"
  4. "github.com/imroc/req/v3"
  5. "strconv"
  6. "time"
  7. "wechat-api/ent"
  8. "wechat-api/ent/wx"
  9. "wechat-api/internal/types"
  10. )
  11. func (l *CronTask) syncWx() {
  12. // 获取微信列表
  13. var result types.WorkPhoneGetWeChatsResp
  14. client := req.C().DevMode()
  15. client.SetCommonRetryCount(2).
  16. SetCommonRetryBackoffInterval(1*time.Second, 5*time.Second).
  17. SetCommonRetryFixedInterval(2 * time.Second).SetTimeout(30 * time.Second)
  18. res, err := client.R().SetSuccessResult(&result).Post("http://chat.gkscrm.com:13086/pc/GetWeChatsReq?id=13")
  19. if err != nil {
  20. l.Error("syncWx: ", err)
  21. return
  22. }
  23. if !res.IsSuccessState() {
  24. l.Error("GetWeChats failed with status code: ", res.StatusCode)
  25. return
  26. }
  27. // 遍历微信列表
  28. for _, account := range result.Data {
  29. if account.Wechatid == "" {
  30. continue
  31. }
  32. wxinfo, err := l.svcCtx.DB.Wx.Query().
  33. Where(
  34. wx.And(
  35. wx.Or(
  36. wx.WxidEQ(account.Wechatid),
  37. wx.PortEQ(account.Deviceid),
  38. ),
  39. wx.CtypeEQ(1),
  40. ),
  41. ).
  42. Only(l.ctx)
  43. if err != nil && !ent.IsNotFound(err) {
  44. l.Error("syncWx: ", err)
  45. return
  46. }
  47. var status uint8
  48. if account.Isonline == 0 {
  49. status = 1
  50. } else {
  51. status = 0
  52. }
  53. if wxinfo != nil {
  54. err = l.svcCtx.DB.Wx.UpdateOneID(wxinfo.ID).
  55. SetServerID(0).
  56. SetPort(account.Deviceid).
  57. SetProcessID(strconv.FormatInt(account.Cid, 10)).
  58. SetAccount(account.Wechatno).
  59. SetNickname(account.Wechatnick).
  60. SetHeadBig(account.Avatar).
  61. SetStatus(status).
  62. Exec(l.ctx)
  63. if err != nil {
  64. l.Error("syncWx: ", err)
  65. return
  66. }
  67. } else {
  68. l.Debug("wxinfo is nil")
  69. _, err := l.svcCtx.DB.Wx.Create().
  70. SetServerID(0).
  71. SetPort(account.Deviceid).
  72. SetProcessID(strconv.FormatInt(account.Cid, 10)).
  73. SetWxid(account.Wechatid).
  74. SetAccount(account.Wechatno).
  75. SetHeadBig(account.Avatar).
  76. SetNickname(account.Wechatnick).
  77. SetStatus(status).
  78. SetAllowList([]string{}).SetBlockList([]string{}).SetGroupAllowList([]string{}).SetGroupBlockList([]string{}).
  79. Save(l.ctx)
  80. if err != nil {
  81. l.Error("syncWx: ", err)
  82. return
  83. }
  84. }
  85. data := map[string]interface{}{
  86. "MsgType": "TriggerFriendPushTask",
  87. "Content": map[string]interface{}{
  88. "WeChatId": account.Wechatid,
  89. },
  90. }
  91. jsonStr, err := json.Marshal(data)
  92. err = l.svcCtx.WechatWs["default"].SendMsg([]byte(jsonStr))
  93. if err != nil {
  94. l.Error("syncWx: ", err)
  95. return
  96. }
  97. }
  98. }