update_wx_logic.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package Wx
  2. import (
  3. "context"
  4. "wechat-api/ent/wx"
  5. "wechat-api/hook"
  6. "wechat-api/internal/svc"
  7. "wechat-api/internal/types"
  8. "wechat-api/internal/utils/dberrorhandler"
  9. "github.com/suyuan32/simple-admin-common/msg/errormsg"
  10. "github.com/zeromicro/go-zero/core/logx"
  11. )
  12. type UpdateWxLogic struct {
  13. ctx context.Context
  14. svcCtx *svc.ServiceContext
  15. logx.Logger
  16. }
  17. func NewUpdateWxLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UpdateWxLogic {
  18. return &UpdateWxLogic{
  19. ctx: ctx,
  20. svcCtx: svcCtx,
  21. Logger: logx.WithContext(ctx),
  22. }
  23. }
  24. func (l *UpdateWxLogic) UpdateWx(req *types.WxInfo) (resp *types.BaseMsgResp, err error) {
  25. isAdmin := l.ctx.Value("isAdmin").(bool)
  26. wxinfo, err := l.svcCtx.DB.Wx.Query().
  27. Where(
  28. wx.IDEQ(*req.Id),
  29. ).
  30. WithAgent().
  31. Only(l.ctx)
  32. if err != nil {
  33. return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
  34. }
  35. if isAdmin {
  36. tx, err := l.svcCtx.DB.Tx(context.Background())
  37. if err != nil {
  38. return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
  39. }
  40. err = tx.Wx.UpdateOneID(*req.Id).
  41. SetNotNilCallback(req.Callback).
  42. SetNotNilAgentID(req.AgentId).
  43. SetNotNilOrganizationID(req.OrganizationId).
  44. SetNotNilAPIBase(req.ApiBase).
  45. SetNotNilAPIKey(req.ApiKey).
  46. Exec(l.ctx)
  47. if req.Callback != nil && *req.Callback != "" {
  48. serverinfo, serverErr := tx.Server.Get(l.ctx, wxinfo.ServerID)
  49. if serverErr != nil {
  50. _ = tx.Rollback()
  51. return nil, dberrorhandler.DefaultEntError(l.Logger, serverErr, req)
  52. }
  53. hook := hook.NewHook(serverinfo.PrivateIP, serverinfo.AdminPort, wxinfo.Port)
  54. loginStatus, _ := hook.IsLoginStatus()
  55. if err != nil {
  56. _ = tx.Rollback()
  57. return nil, err
  58. }
  59. if loginStatus.Onlinestatus == "3" {
  60. err = hook.ConfigureMsgRecive("1", *req.Callback)
  61. if err != nil {
  62. _ = tx.Rollback()
  63. return nil, err
  64. }
  65. }
  66. }
  67. if err != nil {
  68. _ = tx.Rollback()
  69. l.Error("更新失败", err)
  70. return nil, err
  71. }
  72. // 所有操作成功,提交事务
  73. err = tx.Commit()
  74. if err != nil {
  75. return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
  76. }
  77. } else {
  78. organizationId := l.ctx.Value("organizationId").(uint64)
  79. err = l.svcCtx.DB.Wx.UpdateOneID(*req.Id).
  80. Where(wx.OrganizationID(organizationId)).
  81. SetNotNilAgentID(req.AgentId).
  82. Exec(l.ctx)
  83. if err != nil {
  84. return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
  85. }
  86. }
  87. l.svcCtx.Rds.HDel(l.ctx, "wx_info", wxinfo.Wxid)
  88. return &types.BaseMsgResp{Msg: errormsg.UpdateSuccess}, nil
  89. }