81 lines
2.5 KiB
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
|
|
}
|