find_contact_task_result_notice.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. package MessageHandlers
  2. import (
  3. "context"
  4. "encoding/json"
  5. "errors"
  6. "github.com/zeromicro/go-zero/core/logx"
  7. "time"
  8. "wechat-api/ent/addwechatfriendlog"
  9. "wechat-api/internal/pkg/wechat_ws"
  10. "wechat-api/internal/svc"
  11. )
  12. type FindContactTaskResultNoticeHandler struct {
  13. svcCtx *svc.ServiceContext
  14. }
  15. func NewFindContactTaskResultNoticeHandler(svcCtx *svc.ServiceContext) *FindContactTaskResultNoticeHandler {
  16. return &FindContactTaskResultNoticeHandler{
  17. svcCtx: svcCtx,
  18. }
  19. }
  20. type EnumGender int
  21. const (
  22. UnknownGender EnumGender = 0
  23. Male EnumGender = 1
  24. Female EnumGender = 2
  25. )
  26. // 自定义 JSON 解析,支持字符串 -> 枚举
  27. func (e *EnumGender) UnmarshalJSON(b []byte) error {
  28. var s string
  29. if err := json.Unmarshal(b, &s); err == nil {
  30. switch s {
  31. case "Male":
  32. *e = Male
  33. case "Female":
  34. *e = Female
  35. default:
  36. *e = UnknownGender
  37. }
  38. return nil
  39. }
  40. var i int
  41. if err := json.Unmarshal(b, &i); err == nil {
  42. *e = EnumGender(i)
  43. return nil
  44. }
  45. return errors.New("invalid gender value")
  46. }
  47. // 用于反序列化的消息结构体(扩展 Gender 类型)
  48. type FindContactTaskResultNoticeMessage struct {
  49. WeChatId string `json:"WeChatId"`
  50. SearchText string `json:"SearchText"`
  51. Success bool `json:"Success"`
  52. IsFriend bool `json:"IsFriend"`
  53. UserName *string `json:"UserName"`
  54. Alias *string `json:"Alias"`
  55. NickName *string `json:"NickName"`
  56. Gender *EnumGender `json:"Gender"` // 也是指针
  57. Country *string `json:"Country"`
  58. Province *string `json:"Province"`
  59. City *string `json:"City"`
  60. Avatar *string `json:"Avatar"`
  61. ErrMsg *string `json:"ErrMsg"`
  62. }
  63. func (f *FindContactTaskResultNoticeHandler) Handle(ctx context.Context, msg *wechat_ws.MsgJsonObject, svcCtx *svc.ServiceContext) error {
  64. var message FindContactTaskResultNoticeMessage
  65. logx.Infof("msg.Message 的内容是:%s", msg.Message)
  66. if err := json.Unmarshal([]byte(msg.Message), &message); err != nil {
  67. return err
  68. }
  69. //logx.Infof("msg.Message 的内容是:%s", message)
  70. //var isCanAdd int
  71. m, err := ParseJSONStringToMap(msg.Message)
  72. if err != nil {
  73. logx.Errorf("解析 JSON 失败: %v", err)
  74. return err
  75. }
  76. update := svcCtx.DB.AddWechatFriendLog.Update().
  77. Where(addwechatfriendlog.OwnerWxIDEQ(message.WeChatId)).
  78. Where(addwechatfriendlog.FindContentEQ(message.SearchText)).
  79. SetFindResult(m).
  80. SetUpdatedAt(time.Now().Unix())
  81. if message.Success {
  82. if message.IsFriend {
  83. update = update.SetIsCanAdd(0)
  84. } else {
  85. update = update.SetIsCanAdd(1)
  86. }
  87. }
  88. if _, err := update.Save(ctx); err != nil {
  89. logx.Errorf("更新 AddWechatFriendLog 失败: %v", err)
  90. return err
  91. }
  92. return nil
  93. }
  94. func ParseJSONStringToMap(jsonStr string) (map[string]interface{}, error) {
  95. if !json.Valid([]byte(jsonStr)) {
  96. return nil, errors.New("非法 JSON 字符串")
  97. }
  98. var result map[string]interface{}
  99. err := json.Unmarshal([]byte(jsonStr), &result)
  100. return result, err
  101. }