server/queue/logic/sms/sendSmsLogic.go

81 lines
2.5 KiB
Go

package smslogic
import (
"context"
"encoding/json"
"fmt"
"time"
"github.com/perfect-panel/server/pkg/logger"
"github.com/hibiken/asynq"
"github.com/perfect-panel/server/internal/model/log"
"github.com/perfect-panel/server/internal/svc"
"github.com/perfect-panel/server/pkg/constant"
"github.com/perfect-panel/server/pkg/sms"
"github.com/perfect-panel/server/queue/types"
)
type SmsSendCount struct {
Count int `json:"count"`
CreateAt int64 `json:"create_at"`
}
type SendSmsLogic struct {
svcCtx *svc.ServiceContext
}
func NewSendSmsLogic(svcCtx *svc.ServiceContext) *SendSmsLogic {
return &SendSmsLogic{
svcCtx: svcCtx,
}
}
func (l *SendSmsLogic) ProcessTask(ctx context.Context, task *asynq.Task) error {
var payload types.SendSmsPayload
if err := json.Unmarshal(task.Payload(), &payload); err != nil {
logger.WithContext(ctx).Error("[SendSmsLogic] Unmarshal payload failed",
logger.Field("error", err.Error()),
logger.Field("payload", task.Payload()),
)
return nil
}
client, err := sms.NewSender(l.svcCtx.Config.Mobile.Platform, l.svcCtx.Config.Mobile.PlatformConfig)
if err != nil {
logger.WithContext(ctx).Error("[SendSmsLogic] New send sms client failed", logger.Field("error", err.Error()), logger.Field("payload", payload))
return err
}
createSms := &log.Message{
Platform: l.svcCtx.Config.Mobile.Platform,
To: fmt.Sprintf("+%s%s", payload.TelephoneArea, payload.Telephone),
Subject: constant.ParseVerifyType(payload.Type).String(),
Content: map[string]interface{}{
"content": client.GetSendCodeContent(payload.Content),
},
}
err = client.SendCode(payload.TelephoneArea, payload.Telephone, payload.Content)
if err != nil {
logger.WithContext(ctx).Error("[SendSmsLogic] Send sms failed", logger.Field("error", err.Error()), logger.Field("payload", payload))
if l.svcCtx.Config.Model != constant.DevMode {
createSms.Status = 2
} else {
return nil
}
}
createSms.Status = 1
logger.WithContext(ctx).Info("[SendSmsLogic] Send sms", logger.Field("telephone", payload.Telephone), logger.Field("content", createSms.Content))
content, _ := createSms.Marshal()
err = l.svcCtx.LogModel.Insert(ctx, &log.SystemLog{
Type: log.TypeMobileMessage.Uint8(),
Date: time.Now().Format("2006-01-02"),
ObjectID: 0,
Content: string(content),
})
if err != nil {
logger.WithContext(ctx).Error("[SendSmsLogic] Send sms failed", logger.Field("error", err.Error()), logger.Field("payload", payload))
return nil
}
return nil
}