create_wx_logic.go 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package Wx
  2. import (
  3. "context"
  4. "github.com/zeromicro/go-zero/core/errorx"
  5. "math/rand"
  6. "strconv"
  7. "time"
  8. "wechat-api/ent"
  9. "wechat-api/ent/wx"
  10. "wechat-api/hook"
  11. "wechat-api/internal/utils/dberrorhandler"
  12. "github.com/suyuan32/simple-admin-common/msg/errormsg"
  13. "wechat-api/internal/svc"
  14. "wechat-api/internal/types"
  15. "github.com/zeromicro/go-zero/core/logx"
  16. )
  17. type CreateWxLogic struct {
  18. ctx context.Context
  19. svcCtx *svc.ServiceContext
  20. logx.Logger
  21. }
  22. func NewCreateWxLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreateWxLogic {
  23. return &CreateWxLogic{
  24. ctx: ctx,
  25. svcCtx: svcCtx,
  26. Logger: logx.WithContext(ctx),
  27. }
  28. }
  29. func (l *CreateWxLogic) CreateWx(req *types.WxInfo) (*types.BaseMsgResp, error) {
  30. isAdmin := l.ctx.Value("isAdmin").(bool)
  31. if !isAdmin {
  32. l.Error("没有权限,请联系管理员", nil)
  33. return nil, errorx.NewDefaultError("没有权限,请联系管理员")
  34. }
  35. // 获取服务器信息
  36. server, err := l.svcCtx.DB.Server.Get(l.ctx, *req.ServerId)
  37. if err != nil {
  38. l.Error("获取服务器信息失败", err)
  39. return nil, err
  40. }
  41. hook := hook.NewHook(server.PrivateIP, server.AdminPort, *req.Port)
  42. // 判断端口是否被占用
  43. portOccupied, err := hook.GetPortOccupiedInfo(*req.Port)
  44. if err != nil {
  45. l.Error("获取端口占用信息失败", err)
  46. return nil, err
  47. }
  48. if portOccupied.Occupied == "1" {
  49. l.Error("端口已占用,请改用其他端口", err)
  50. return nil, err
  51. }
  52. _, err = l.svcCtx.DB.Wx.Query().Where(wx.ServerIDEQ(server.ID)).Where(wx.PortEQ(*req.Port)).Limit(1).Only(l.ctx)
  53. if err != nil && !ent.IsNotFound(err) {
  54. l.Error("查询微信信息失败", err)
  55. return nil, err
  56. }
  57. var stringSlice []string
  58. if ent.IsNotFound(err) {
  59. wxid := strconv.Itoa(rand.New(rand.NewSource(time.Now().UnixNano())).Intn(1000000))
  60. _, err := l.svcCtx.DB.Wx.Create().
  61. SetServerID(*req.ServerId).
  62. SetPort(*req.Port).
  63. SetCallback(*req.Callback).
  64. SetOrganizationID(*req.OrganizationId).
  65. SetNotNilAPIBase(req.ApiBase).
  66. SetNotNilAPIKey(req.ApiKey).
  67. SetWxid(wxid).
  68. SetStatus(0).
  69. SetAllowList(stringSlice).
  70. SetGroupAllowList(stringSlice).
  71. SetBlockList(stringSlice).
  72. SetGroupBlockList(stringSlice).
  73. Save(l.ctx)
  74. if err != nil {
  75. return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
  76. }
  77. } else {
  78. l.Error("端口已使用,请使用其他端口", err)
  79. return nil, err
  80. }
  81. return &types.BaseMsgResp{Msg: errormsg.Success}, nil
  82. }