Compare commits
2 Commits
cbefd85f25
...
996cd27fcb
| Author | SHA1 | Date | |
|---|---|---|---|
| 996cd27fcb | |||
| 9c826f4966 |
@ -12,6 +12,8 @@ import (
|
|||||||
"go-admin/app/admin/service"
|
"go-admin/app/admin/service"
|
||||||
"go-admin/app/admin/service/dto"
|
"go-admin/app/admin/service/dto"
|
||||||
"go-admin/common/actions"
|
"go-admin/common/actions"
|
||||||
|
"go-admin/common/middleware"
|
||||||
|
"go-admin/common/statuscode"
|
||||||
)
|
)
|
||||||
|
|
||||||
type SmsAbnormalNumber struct {
|
type SmsAbnormalNumber struct {
|
||||||
@ -212,3 +214,101 @@ func (e SmsAbnormalNumber) SyncState(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
e.OK(nil, "同步成功")
|
e.OK(nil, "同步成功")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 重用号码
|
||||||
|
func (e SmsAbnormalNumber) ReUseAbnormalNumber(c *gin.Context) {
|
||||||
|
req := dto.ReUseAbnormalNumberReq{}
|
||||||
|
s := service.SmsAbnormalNumber{}
|
||||||
|
err := e.MakeContext(c).
|
||||||
|
MakeOrm().
|
||||||
|
Bind(&req).
|
||||||
|
MakeService(&s.Service).
|
||||||
|
Errors
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
lang := "en"
|
||||||
|
userId, err := middleware.GetUserIdByApiKey(c)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(statuscode.Unauthorized, nil, statuscode.GetMsg(statuscode.Unauthorized, lang))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, code := s.ReUseAbnormalNumber(userId, &req)
|
||||||
|
|
||||||
|
if code != statuscode.Success {
|
||||||
|
e.Error(code, nil, statuscode.GetMsg(code, lang))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
e.OK(resp, "success")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 清空数据
|
||||||
|
func (e SmsAbnormalNumber) Clean(c *gin.Context) {
|
||||||
|
s := service.SmsAbnormalNumber{}
|
||||||
|
err := e.MakeContext(c).
|
||||||
|
MakeOrm().
|
||||||
|
MakeService(&s.Service).
|
||||||
|
Errors
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
lang := "en"
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(statuscode.Unauthorized, nil, statuscode.GetMsg(statuscode.Unauthorized, lang))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
err = s.Clean()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
e.Error(500, err, fmt.Sprintf("清除数据失败\r\n失败信息 %s", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
e.OK(nil, "success")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 批量取消
|
||||||
|
func (e SmsAbnormalNumber) BatchCancel(c *gin.Context) {
|
||||||
|
req := dto.BatchCancelAbnormalNumberReq{}
|
||||||
|
s := service.SmsAbnormalNumber{}
|
||||||
|
err := e.MakeContext(c).
|
||||||
|
MakeOrm().
|
||||||
|
Bind(&req).
|
||||||
|
MakeService(&s.Service).
|
||||||
|
Errors
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
lang := "en"
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(statuscode.Unauthorized, nil, statuscode.GetMsg(statuscode.Unauthorized, lang))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
err = s.BatchCancel(&req)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
e.Error(500, err, fmt.Sprintf("批量取消异常号码统计失败,\r\n失败信息 %s", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
e.OK(nil, "success")
|
||||||
|
}
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package apis
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/go-admin-team/go-admin-core/sdk/api"
|
"github.com/go-admin-team/go-admin-core/sdk/api"
|
||||||
@ -747,3 +748,35 @@ func (e SmsPhone) OpenWeakUp(c *gin.Context) {
|
|||||||
|
|
||||||
e.OK(resp, "success")
|
e.OK(resp, "success")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 手动续费
|
||||||
|
func (e SmsPhone) ManualRenewal(c *gin.Context) {
|
||||||
|
req := dto.ManualRenewalReq{}
|
||||||
|
s := service.SmsPhone{}
|
||||||
|
|
||||||
|
err := e.MakeContext(c).
|
||||||
|
MakeOrm().
|
||||||
|
Bind(&req).
|
||||||
|
MakeService(&s.Service).
|
||||||
|
Errors
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
errorIds, err := s.ManualRenewal(req.ActivationIds)
|
||||||
|
if err != nil {
|
||||||
|
e.Logger.Error(err)
|
||||||
|
e.Error(500, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var data string
|
||||||
|
|
||||||
|
if len(errorIds) > 0 {
|
||||||
|
data = strings.Join(errorIds, ",")
|
||||||
|
}
|
||||||
|
|
||||||
|
e.OK(data, "success")
|
||||||
|
}
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
package apis
|
package apis
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/go-admin-team/go-admin-core/sdk/api"
|
"github.com/go-admin-team/go-admin-core/sdk/api"
|
||||||
@ -29,27 +29,27 @@ type SmsRenewalLog struct {
|
|||||||
// @Router /api/v1/sms-renewal-log [get]
|
// @Router /api/v1/sms-renewal-log [get]
|
||||||
// @Security Bearer
|
// @Security Bearer
|
||||||
func (e SmsRenewalLog) GetPage(c *gin.Context) {
|
func (e SmsRenewalLog) GetPage(c *gin.Context) {
|
||||||
req := dto.SmsRenewalLogGetPageReq{}
|
req := dto.SmsRenewalLogGetPageReq{}
|
||||||
s := service.SmsRenewalLog{}
|
s := service.SmsRenewalLog{}
|
||||||
err := e.MakeContext(c).
|
err := e.MakeContext(c).
|
||||||
MakeOrm().
|
MakeOrm().
|
||||||
Bind(&req).
|
Bind(&req).
|
||||||
MakeService(&s.Service).
|
MakeService(&s.Service).
|
||||||
Errors
|
Errors
|
||||||
if err != nil {
|
if err != nil {
|
||||||
e.Logger.Error(err)
|
e.Logger.Error(err)
|
||||||
e.Error(500, err, err.Error())
|
e.Error(500, err, err.Error())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
p := actions.GetPermissionFromContext(c)
|
p := actions.GetPermissionFromContext(c)
|
||||||
list := make([]models.SmsRenewalLog, 0)
|
list := make([]dto.SmsRenewalLogResp, 0)
|
||||||
var count int64
|
var count int64
|
||||||
|
|
||||||
err = s.GetPage(&req, p, &list, &count)
|
err = s.GetPage(&req, p, &list, &count)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
e.Error(500, err, fmt.Sprintf("获取短信续期记录失败,\r\n失败信息 %s", err.Error()))
|
e.Error(500, err, fmt.Sprintf("获取短信续期记录失败,\r\n失败信息 %s", err.Error()))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
|
e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
|
||||||
@ -66,7 +66,7 @@ func (e SmsRenewalLog) GetPage(c *gin.Context) {
|
|||||||
func (e SmsRenewalLog) Get(c *gin.Context) {
|
func (e SmsRenewalLog) Get(c *gin.Context) {
|
||||||
req := dto.SmsRenewalLogGetReq{}
|
req := dto.SmsRenewalLogGetReq{}
|
||||||
s := service.SmsRenewalLog{}
|
s := service.SmsRenewalLog{}
|
||||||
err := e.MakeContext(c).
|
err := e.MakeContext(c).
|
||||||
MakeOrm().
|
MakeOrm().
|
||||||
Bind(&req).
|
Bind(&req).
|
||||||
MakeService(&s.Service).
|
MakeService(&s.Service).
|
||||||
@ -82,10 +82,10 @@ func (e SmsRenewalLog) Get(c *gin.Context) {
|
|||||||
err = s.Get(&req, p, &object)
|
err = s.Get(&req, p, &object)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
e.Error(500, err, fmt.Sprintf("获取短信续期记录失败,\r\n失败信息 %s", err.Error()))
|
e.Error(500, err, fmt.Sprintf("获取短信续期记录失败,\r\n失败信息 %s", err.Error()))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
e.OK( object, "查询成功")
|
e.OK(object, "查询成功")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Insert 创建短信续期记录
|
// Insert 创建短信续期记录
|
||||||
@ -99,25 +99,25 @@ func (e SmsRenewalLog) Get(c *gin.Context) {
|
|||||||
// @Router /api/v1/sms-renewal-log [post]
|
// @Router /api/v1/sms-renewal-log [post]
|
||||||
// @Security Bearer
|
// @Security Bearer
|
||||||
func (e SmsRenewalLog) Insert(c *gin.Context) {
|
func (e SmsRenewalLog) Insert(c *gin.Context) {
|
||||||
req := dto.SmsRenewalLogInsertReq{}
|
req := dto.SmsRenewalLogInsertReq{}
|
||||||
s := service.SmsRenewalLog{}
|
s := service.SmsRenewalLog{}
|
||||||
err := e.MakeContext(c).
|
err := e.MakeContext(c).
|
||||||
MakeOrm().
|
MakeOrm().
|
||||||
Bind(&req).
|
Bind(&req).
|
||||||
MakeService(&s.Service).
|
MakeService(&s.Service).
|
||||||
Errors
|
Errors
|
||||||
if err != nil {
|
if err != nil {
|
||||||
e.Logger.Error(err)
|
e.Logger.Error(err)
|
||||||
e.Error(500, err, err.Error())
|
e.Error(500, err, err.Error())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// 设置创建人
|
// 设置创建人
|
||||||
req.SetCreateBy(user.GetUserId(c))
|
req.SetCreateBy(user.GetUserId(c))
|
||||||
|
|
||||||
err = s.Insert(&req)
|
err = s.Insert(&req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
e.Error(500, err, fmt.Sprintf("创建短信续期记录失败,\r\n失败信息 %s", err.Error()))
|
e.Error(500, err, fmt.Sprintf("创建短信续期记录失败,\r\n失败信息 %s", err.Error()))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
e.OK(req.GetId(), "创建成功")
|
e.OK(req.GetId(), "创建成功")
|
||||||
@ -135,27 +135,27 @@ func (e SmsRenewalLog) Insert(c *gin.Context) {
|
|||||||
// @Router /api/v1/sms-renewal-log/{id} [put]
|
// @Router /api/v1/sms-renewal-log/{id} [put]
|
||||||
// @Security Bearer
|
// @Security Bearer
|
||||||
func (e SmsRenewalLog) Update(c *gin.Context) {
|
func (e SmsRenewalLog) Update(c *gin.Context) {
|
||||||
req := dto.SmsRenewalLogUpdateReq{}
|
req := dto.SmsRenewalLogUpdateReq{}
|
||||||
s := service.SmsRenewalLog{}
|
s := service.SmsRenewalLog{}
|
||||||
err := e.MakeContext(c).
|
err := e.MakeContext(c).
|
||||||
MakeOrm().
|
MakeOrm().
|
||||||
Bind(&req).
|
Bind(&req).
|
||||||
MakeService(&s.Service).
|
MakeService(&s.Service).
|
||||||
Errors
|
Errors
|
||||||
if err != nil {
|
if err != nil {
|
||||||
e.Logger.Error(err)
|
e.Logger.Error(err)
|
||||||
e.Error(500, err, err.Error())
|
e.Error(500, err, err.Error())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
req.SetUpdateBy(user.GetUserId(c))
|
req.SetUpdateBy(user.GetUserId(c))
|
||||||
p := actions.GetPermissionFromContext(c)
|
p := actions.GetPermissionFromContext(c)
|
||||||
|
|
||||||
err = s.Update(&req, p)
|
err = s.Update(&req, p)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
e.Error(500, err, fmt.Sprintf("修改短信续期记录失败,\r\n失败信息 %s", err.Error()))
|
e.Error(500, err, fmt.Sprintf("修改短信续期记录失败,\r\n失败信息 %s", err.Error()))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
e.OK( req.GetId(), "修改成功")
|
e.OK(req.GetId(), "修改成功")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete 删除短信续期记录
|
// Delete 删除短信续期记录
|
||||||
@ -167,18 +167,18 @@ func (e SmsRenewalLog) Update(c *gin.Context) {
|
|||||||
// @Router /api/v1/sms-renewal-log [delete]
|
// @Router /api/v1/sms-renewal-log [delete]
|
||||||
// @Security Bearer
|
// @Security Bearer
|
||||||
func (e SmsRenewalLog) Delete(c *gin.Context) {
|
func (e SmsRenewalLog) Delete(c *gin.Context) {
|
||||||
s := service.SmsRenewalLog{}
|
s := service.SmsRenewalLog{}
|
||||||
req := dto.SmsRenewalLogDeleteReq{}
|
req := dto.SmsRenewalLogDeleteReq{}
|
||||||
err := e.MakeContext(c).
|
err := e.MakeContext(c).
|
||||||
MakeOrm().
|
MakeOrm().
|
||||||
Bind(&req).
|
Bind(&req).
|
||||||
MakeService(&s.Service).
|
MakeService(&s.Service).
|
||||||
Errors
|
Errors
|
||||||
if err != nil {
|
if err != nil {
|
||||||
e.Logger.Error(err)
|
e.Logger.Error(err)
|
||||||
e.Error(500, err, err.Error())
|
e.Error(500, err, err.Error())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// req.SetUpdateBy(user.GetUserId(c))
|
// req.SetUpdateBy(user.GetUserId(c))
|
||||||
p := actions.GetPermissionFromContext(c)
|
p := actions.GetPermissionFromContext(c)
|
||||||
@ -186,7 +186,7 @@ func (e SmsRenewalLog) Delete(c *gin.Context) {
|
|||||||
err = s.Remove(&req, p)
|
err = s.Remove(&req, p)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
e.Error(500, err, fmt.Sprintf("删除短信续期记录失败,\r\n失败信息 %s", err.Error()))
|
e.Error(500, err, fmt.Sprintf("删除短信续期记录失败,\r\n失败信息 %s", err.Error()))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
e.OK( req.GetId(), "删除成功")
|
e.OK(req.GetId(), "删除成功")
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,23 +1,26 @@
|
|||||||
package models
|
package models
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
||||||
"go-admin/common/models"
|
"go-admin/common/models"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
type SmsAbnormalNumber struct {
|
type SmsAbnormalNumber struct {
|
||||||
models.Model
|
models.Model
|
||||||
|
|
||||||
Account string `json:"account" gorm:"type:varchar(255);comment:账号"`
|
Account string `json:"account" gorm:"type:varchar(255);comment:账号"`
|
||||||
PlatformCode string `json:"platformCode" gorm:"type:varchar(20);comment:平台code"`
|
PlatformCode string `json:"platformCode" gorm:"type:varchar(20);comment:平台code"`
|
||||||
Phone string `json:"phone" gorm:"type:varchar(30);comment:电话号码"`
|
ApiKey string `json:"apiKey" gorm:"type:varchar(255);comment:api key"`
|
||||||
models.ModelTime
|
Phone string `json:"phone" gorm:"type:varchar(30);comment:电话号码"`
|
||||||
models.ControlBy
|
ActivationId string `json:"activationId" gorm:"type:varchar(255);comment:激活id"`
|
||||||
|
ReceivedTime time.Time `json:"receivedTime" gorm:"type:datetime;comment:接收号码时间"`
|
||||||
|
Reused int `json:"reused" gorm:"type:tinyint(1);default:2;comment:是否重用 1-是 2-否"`
|
||||||
|
models.ModelTime
|
||||||
|
models.ControlBy
|
||||||
}
|
}
|
||||||
|
|
||||||
func (SmsAbnormalNumber) TableName() string {
|
func (SmsAbnormalNumber) TableName() string {
|
||||||
return "sms_abnormal_number"
|
return "sms_abnormal_number"
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *SmsAbnormalNumber) Generate() models.ActiveRecord {
|
func (e *SmsAbnormalNumber) Generate() models.ActiveRecord {
|
||||||
@ -27,4 +30,4 @@ func (e *SmsAbnormalNumber) Generate() models.ActiveRecord {
|
|||||||
|
|
||||||
func (e *SmsAbnormalNumber) GetId() interface{} {
|
func (e *SmsAbnormalNumber) GetId() interface{} {
|
||||||
return e.Id
|
return e.Id
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,11 +12,14 @@ type SmsRenewalLog struct {
|
|||||||
models.Model
|
models.Model
|
||||||
|
|
||||||
PhoneId int `json:"phoneId" gorm:"type:bigint;comment:号码id"`
|
PhoneId int `json:"phoneId" gorm:"type:bigint;comment:号码id"`
|
||||||
|
Phone string `json:"phone" gorm:"type:varchar(50);comment:号码"`
|
||||||
Type int `json:"type" gorm:"type:tinyint;comment:类型 0-长效 1-短效"`
|
Type int `json:"type" gorm:"type:tinyint;comment:类型 0-长效 1-短效"`
|
||||||
|
Category int `json:"category" gorm:"type:tinyint;comment:类别 1-购买号码 2-续费号码"`
|
||||||
UserId int `json:"userId" gorm:"type:bigint;comment:用户id"`
|
UserId int `json:"userId" gorm:"type:bigint;comment:用户id"`
|
||||||
Amount decimal.Decimal `json:"amount" gorm:"type:decimal(10,2);comment:扣费金额"`
|
Amount decimal.Decimal `json:"amount" gorm:"type:decimal(10,2);comment:扣费金额"`
|
||||||
BeforeTime time.Time `json:"beforeTime" gorm:"type:datetime;comment:续费前过期时间"`
|
BeforeTime time.Time `json:"beforeTime" gorm:"type:datetime;comment:续费前过期时间"`
|
||||||
Period int `json:"period" gorm:"type:int;comment:时间段"`
|
Period int `json:"period" gorm:"type:int;comment:时间段"`
|
||||||
|
Username string `json:"username" gorm:"->"`
|
||||||
models.ModelTime
|
models.ModelTime
|
||||||
models.ControlBy
|
models.ControlBy
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,14 +16,22 @@ func init() {
|
|||||||
// registerSmsAbnormalNumberRouter
|
// registerSmsAbnormalNumberRouter
|
||||||
func registerSmsAbnormalNumberRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
func registerSmsAbnormalNumberRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
||||||
api := apis.SmsAbnormalNumber{}
|
api := apis.SmsAbnormalNumber{}
|
||||||
r := v1.Group("/sms-abnormal-number").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
r := v1.Group("/sms-abnormal-number").
|
||||||
|
Use(authMiddleware.MiddlewareFunc()).
|
||||||
|
Use(middleware.AuthCheckRole())
|
||||||
{
|
{
|
||||||
r.GET("", actions.PermissionAction(), api.GetPage)
|
r.GET("", actions.PermissionAction(), api.GetPage)
|
||||||
r.GET("/:id", actions.PermissionAction(), api.Get)
|
r.GET("/:id", actions.PermissionAction(), api.Get)
|
||||||
r.POST("", api.Insert)
|
r.POST("", api.Insert)
|
||||||
r.PUT("/:id", actions.PermissionAction(), api.Update)
|
r.PUT("/:id", actions.PermissionAction(), api.Update)
|
||||||
r.DELETE("", api.Delete)
|
r.DELETE("", api.Delete)
|
||||||
|
r.DELETE("clear", actions.PermissionAction(), api.Clean)
|
||||||
|
r.PUT("/batch-cancel", actions.PermissionAction(), api.BatchCancel)
|
||||||
|
}
|
||||||
|
|
||||||
r.POST("/sync-state", api.SyncState) //同步差异
|
r1 := v1.Group("/sms-abnormal-number")
|
||||||
|
{
|
||||||
|
r1.POST("/sync-state", api.SyncState) //同步差异
|
||||||
|
r1.PUT("/reuse", api.ReUseAbnormalNumber) //重用号码
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -45,6 +45,7 @@ func registerSmsPhoneRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddl
|
|||||||
r.GET("/:id", actions.PermissionAction(), api.Get)
|
r.GET("/:id", actions.PermissionAction(), api.Get)
|
||||||
r.POST("", api.Insert)
|
r.POST("", api.Insert)
|
||||||
r.PUT("/:id", actions.PermissionAction(), api.Update)
|
r.PUT("/:id", actions.PermissionAction(), api.Update)
|
||||||
|
r.PUT("/manual-renewal", api.ManualRenewal)
|
||||||
r.DELETE("", api.Delete)
|
r.DELETE("", api.Delete)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -221,3 +221,18 @@ type OpenWakeUpReq struct {
|
|||||||
PlatformCode string `json:"platformCode" comment:"短信平台"`
|
PlatformCode string `json:"platformCode" comment:"短信平台"`
|
||||||
ActivationId string `json:"activationId" comment:"平台id"`
|
ActivationId string `json:"activationId" comment:"平台id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ReUseAbnormalNumberReq struct {
|
||||||
|
BeginTime int64 `json:"beginTime" comment:"开始时间"`
|
||||||
|
PlatformCode string `json:"platformCode" comment:"短信平台"`
|
||||||
|
ServiceCode string `json:"serviceCode" comment:"服务code"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// 批量取消
|
||||||
|
type BatchCancelAbnormalNumberReq struct {
|
||||||
|
Ids []int `json:"ids" comment:"短信号码id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ManualRenewalReq struct {
|
||||||
|
ActivationIds []string `json:"activationIds" comment:"激活码id"`
|
||||||
|
}
|
||||||
|
|||||||
@ -12,7 +12,9 @@ import (
|
|||||||
|
|
||||||
type SmsRenewalLogGetPageReq struct {
|
type SmsRenewalLogGetPageReq struct {
|
||||||
dto.Pagination `search:"-"`
|
dto.Pagination `search:"-"`
|
||||||
Type int64 `form:"type" search:"type:exact;column:type;table:sms_renewal_log" comment:"类型 0-长效 1-短效"`
|
Type int64 `form:"type" search:"type:exact;column:type;table:sms_renewal_log" comment:"类型 0-长效 1-短效"`
|
||||||
|
Category int `form:"category" search:"type:exact;column:category;table:sms_renewal_log" comment:"类别 0-普通续费 1-号码补偿"`
|
||||||
|
UserName string `form:"userName" search:"-"`
|
||||||
SmsRenewalLogOrder
|
SmsRenewalLogOrder
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,3 +110,19 @@ type SmsRenewalLogDeleteReq struct {
|
|||||||
func (s *SmsRenewalLogDeleteReq) GetId() interface{} {
|
func (s *SmsRenewalLogDeleteReq) GetId() interface{} {
|
||||||
return s.Ids
|
return s.Ids
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type SmsRenewalLogResp struct {
|
||||||
|
Id int `json:"id" comment:"主键id"` // 主键id
|
||||||
|
PhoneId int `json:"phoneId" comment:"号码id"`
|
||||||
|
Phone string `json:"phone" comment:"电话号码"`
|
||||||
|
Type int `json:"type" comment:"类型 0-长效 1-短效"`
|
||||||
|
Category int `json:"category" comment:"类别 1-购买 2-续期"`
|
||||||
|
UserId int `json:"userId" comment:"用户id"`
|
||||||
|
Amount decimal.Decimal `json:"amount" comment:"扣费金额"`
|
||||||
|
BeforeTime time.Time `json:"beforeTime" comment:"续费前过期时间"`
|
||||||
|
Period int `json:"period" comment:"时间(天)"`
|
||||||
|
CreatedAt time.Time `json:"createdAt" comment:"创建时间"`
|
||||||
|
// UpdatedAt time.Time `json:"updatedAt" comment:"更新时间"`
|
||||||
|
// DeletedAt time.Time `json:"deletedAt" comment:"删除时间"`
|
||||||
|
UserName string `json:"username" comment:"用户名"`
|
||||||
|
}
|
||||||
|
|||||||
@ -131,6 +131,7 @@ type VerificationDTO struct {
|
|||||||
Reuse ReuseInfo `json:"reuse"`
|
Reuse ReuseInfo `json:"reuse"`
|
||||||
Sale TextVerifiedResp `json:"sale"`
|
Sale TextVerifiedResp `json:"sale"`
|
||||||
ServiceName string `json:"serviceName"`
|
ServiceName string `json:"serviceName"`
|
||||||
|
ApiKey string `json:"apiKey"`
|
||||||
// State 表示验证或服务的当前状态。
|
// State 表示验证或服务的当前状态。
|
||||||
// 状态是以下枚举值之一,代表了从创建到完成或取消的生命周期:
|
// 状态是以下枚举值之一,代表了从创建到完成或取消的生命周期:
|
||||||
// * verificationPending: 正在等待验证码。
|
// * verificationPending: 正在等待验证码。
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/go-admin-team/go-admin-core/sdk/service"
|
"github.com/go-admin-team/go-admin-core/sdk/service"
|
||||||
|
"github.com/shopspring/decimal"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
|
|
||||||
"go-admin/app/admin/models"
|
"go-admin/app/admin/models"
|
||||||
@ -12,12 +13,193 @@ import (
|
|||||||
"go-admin/common/actions"
|
"go-admin/common/actions"
|
||||||
cDto "go-admin/common/dto"
|
cDto "go-admin/common/dto"
|
||||||
"go-admin/common/global"
|
"go-admin/common/global"
|
||||||
|
"go-admin/common/statuscode"
|
||||||
|
"go-admin/utils/utility"
|
||||||
)
|
)
|
||||||
|
|
||||||
type SmsAbnormalNumber struct {
|
type SmsAbnormalNumber struct {
|
||||||
service.Service
|
service.Service
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (e *SmsAbnormalNumber) Clean() error {
|
||||||
|
if err := e.Orm.Exec("truncate table sms_abnormal_number").Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// 批量取消
|
||||||
|
func (e *SmsAbnormalNumber) BatchCancel(req *dto.BatchCancelAbnormalNumberReq) error {
|
||||||
|
var datas []models.SmsAbnormalNumber
|
||||||
|
|
||||||
|
if err := e.Orm.Model(&models.SmsAbnormalNumber{}).Where("id in ?", req.Ids).Find(&datas).Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
utility.SafeGo(func() {
|
||||||
|
CancelFunc(e, datas)
|
||||||
|
})
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func CancelFunc(e *SmsAbnormalNumber, datas []models.SmsAbnormalNumber) {
|
||||||
|
phoneService := SmsPhone{Service: e.Service}
|
||||||
|
for _, item := range datas {
|
||||||
|
phoneService.ChangeAutoRenewManage(item.PlatformCode, item.ApiKey, item.ActivationId, false)
|
||||||
|
|
||||||
|
time.Sleep(200 * time.Millisecond)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 重用号码
|
||||||
|
func (e *SmsAbnormalNumber) ReUseAbnormalNumber(userId int, req *dto.ReUseAbnormalNumberReq) (dto.OpenGetNumberResp, int) {
|
||||||
|
resp := dto.OpenGetNumberResp{}
|
||||||
|
balanceService := MemberBalance{Service: e.Service}
|
||||||
|
config := dto.GetSysConfigByKEYForServiceResp{}
|
||||||
|
configReq := dto.SysConfigByKeyReq{}
|
||||||
|
configService := SysConfig{Service: e.Service}
|
||||||
|
smsServices := SmsServices{Service: e.Service}
|
||||||
|
var price decimal.Decimal
|
||||||
|
serviceItem, err := smsServices.GetByCode(req.PlatformCode, req.ServiceCode)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
e.Log.Errorf("短信服务报错:%v", err)
|
||||||
|
return resp, statuscode.ServerError
|
||||||
|
}
|
||||||
|
|
||||||
|
if serviceItem.Code == "" {
|
||||||
|
e.Log.Error("短信服务不存在")
|
||||||
|
return resp, statuscode.ServerError
|
||||||
|
}
|
||||||
|
|
||||||
|
switch {
|
||||||
|
case req.PlatformCode == global.SmsPlatformDaisysms:
|
||||||
|
price = serviceItem.LongPrice
|
||||||
|
configReq.ConfigKey = "long_number_premium_daisysms"
|
||||||
|
case req.PlatformCode == global.SmsPlatformTextVerified:
|
||||||
|
price = serviceItem.LongPrice
|
||||||
|
configReq.ConfigKey = "long_number_premium_textverified"
|
||||||
|
}
|
||||||
|
err = configService.GetWithKey(&configReq, &config)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return resp, statuscode.ServerError
|
||||||
|
}
|
||||||
|
|
||||||
|
if config.ConfigValue == "" {
|
||||||
|
e.Log.Errorf("短期长期租赁浮动百分比不能为空")
|
||||||
|
return resp, statuscode.ServerError
|
||||||
|
}
|
||||||
|
|
||||||
|
percent, err := decimal.NewFromString(config.ConfigValue)
|
||||||
|
if err != nil {
|
||||||
|
e.Log.Errorf("短期或长期租赁费用格式错误")
|
||||||
|
return resp, statuscode.ServerError
|
||||||
|
}
|
||||||
|
|
||||||
|
price = price.Mul(decimal.NewFromInt(100).Add(percent)).Div(decimal.NewFromInt(100))
|
||||||
|
|
||||||
|
if price.Cmp(decimal.Zero) <= 0 {
|
||||||
|
e.Log.Errorf("短期或长期租赁费用不能小于等于0")
|
||||||
|
return resp, statuscode.ServerError
|
||||||
|
}
|
||||||
|
|
||||||
|
balance := balanceService.GetBalance(userId)
|
||||||
|
|
||||||
|
if balance.LessThan(price) {
|
||||||
|
e.Log.Error("余额不足")
|
||||||
|
return resp, statuscode.BalanceNotEnough
|
||||||
|
}
|
||||||
|
|
||||||
|
abnomarlNumber, err := e.GetReused(req.PlatformCode, req.BeginTime)
|
||||||
|
if err != nil {
|
||||||
|
return resp, statuscode.ServerError
|
||||||
|
}
|
||||||
|
|
||||||
|
expireTime := abnomarlNumber.ReceivedTime.AddDate(0, 0, 30)
|
||||||
|
startTime := time.Now()
|
||||||
|
endTime := startTime
|
||||||
|
smsPhone := models.SmsPhone{}
|
||||||
|
smsPhone.PlatformCode = req.PlatformCode
|
||||||
|
smsPhone.Phone = abnomarlNumber.Phone
|
||||||
|
smsPhone.UserId = userId
|
||||||
|
smsPhone.Service = serviceItem.Name
|
||||||
|
smsPhone.ServiceCode = req.ServiceCode
|
||||||
|
smsPhone.Type = 1
|
||||||
|
smsPhone.Period = 1
|
||||||
|
smsPhone.ActivationId = abnomarlNumber.ActivationId
|
||||||
|
smsPhone.MessageId = abnomarlNumber.ActivationId
|
||||||
|
smsPhone.NewActivationId = abnomarlNumber.ActivationId
|
||||||
|
smsPhone.Actived = 1
|
||||||
|
smsPhone.StartTime = &startTime
|
||||||
|
smsPhone.EndTime = &endTime
|
||||||
|
// smsPhone.ApiKey = apiInfo.ApiKey
|
||||||
|
|
||||||
|
smsPhone.Price = price
|
||||||
|
smsPhone.ExpireTime = &expireTime
|
||||||
|
|
||||||
|
//平台不允许取消
|
||||||
|
if req.PlatformCode == global.SmsPlatformTextVerified {
|
||||||
|
smsPhone.Actived = 2
|
||||||
|
}
|
||||||
|
|
||||||
|
smsPhone.Status = 1
|
||||||
|
|
||||||
|
err = e.Orm.Transaction(func(tx *gorm.DB) error {
|
||||||
|
if err1 := tx.Save(&smsPhone).Error; err1 != nil {
|
||||||
|
e.Log.Errorf("获取手机号失败", err1)
|
||||||
|
return err1
|
||||||
|
}
|
||||||
|
|
||||||
|
if err1 := tx.Exec("UPDATE member_balance SET balance = balance -? WHERE user_id =?", price, userId).Error; err1 != nil {
|
||||||
|
e.Log.Errorf("更新余额失败", err1)
|
||||||
|
return err1
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return resp, statuscode.ServerError
|
||||||
|
}
|
||||||
|
|
||||||
|
resp.ActivationId = smsPhone.NewActivationId
|
||||||
|
resp.ExpireTime = smsPhone.ExpireTime
|
||||||
|
resp.Number = smsPhone.Phone
|
||||||
|
resp.StartTime = smsPhone.StartTime
|
||||||
|
resp.EndTime = smsPhone.EndTime
|
||||||
|
|
||||||
|
return resp, statuscode.Success
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取重用
|
||||||
|
func (e *SmsAbnormalNumber) GetReused(platformCode string, beginTime int64) (models.SmsAbnormalNumber, error) {
|
||||||
|
var smsAbnormalNumber models.SmsAbnormalNumber
|
||||||
|
query := e.Orm.Model(&smsAbnormalNumber).
|
||||||
|
Where("platform_code = ? AND reused = ?", platformCode, 2)
|
||||||
|
|
||||||
|
if beginTime > 0 {
|
||||||
|
query.Where("received_time >= ?", time.Unix(beginTime, 0))
|
||||||
|
}
|
||||||
|
|
||||||
|
err := query.Order("received_time asc").First(&smsAbnormalNumber).Error
|
||||||
|
if err != nil {
|
||||||
|
e.Log.Errorf("SmsAbnormalNumberService GetReused error:%s \r\n", err)
|
||||||
|
return smsAbnormalNumber, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := e.Orm.Model(&models.SmsAbnormalNumber{}).
|
||||||
|
Where("id = ?", smsAbnormalNumber.Id).
|
||||||
|
Update("reused", 1).Error; err != nil {
|
||||||
|
e.Log.Errorf("SmsAbnormalNumberService GetReused error:%s \r\n", err)
|
||||||
|
return smsAbnormalNumber, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return smsAbnormalNumber, nil
|
||||||
|
}
|
||||||
|
|
||||||
// GetPage 获取SmsAbnormalNumber列表
|
// GetPage 获取SmsAbnormalNumber列表
|
||||||
func (e *SmsAbnormalNumber) GetPage(c *dto.SmsAbnormalNumberGetPageReq, p *actions.DataPermission, list *[]models.SmsAbnormalNumber, count *int64) error {
|
func (e *SmsAbnormalNumber) GetPage(c *dto.SmsAbnormalNumberGetPageReq, p *actions.DataPermission, list *[]models.SmsAbnormalNumber, count *int64) error {
|
||||||
var err error
|
var err error
|
||||||
@ -151,7 +333,6 @@ func (e *SmsAbnormalNumber) SyncState() error {
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
e.Log.Errorf("同步后保存差异数据失败 %v", err)
|
e.Log.Errorf("同步后保存差异数据失败 %v", err)
|
||||||
}
|
}
|
||||||
@ -187,6 +368,9 @@ func (e *SmsAbnormalNumber) findMissingNumbers(platformNumbers map[string][]dto.
|
|||||||
PlatformCode: global.SmsPlatformTextVerified,
|
PlatformCode: global.SmsPlatformTextVerified,
|
||||||
Account: account,
|
Account: account,
|
||||||
Phone: v.Number,
|
Phone: v.Number,
|
||||||
|
ActivationId: v.ID,
|
||||||
|
ReceivedTime: v.CreatedAt,
|
||||||
|
ApiKey: v.ApiKey,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -83,6 +83,11 @@ func (e *SmsPhone) CancelNumber(req *dto.SmsPhoneCancelNumberReq, userId int) in
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
e.Log.Errorf("取消租赁后修改失败, %s", err)
|
e.Log.Errorf("取消租赁后修改失败, %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err1 := e.Orm.
|
||||||
|
Where("phone_id = ?", data.Id).Delete(&models.SmsRenewalLog{}).Error; err1 != nil {
|
||||||
|
e.Log.Errorf("更新短信号码续费日志失败, %s", err1)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
e.Log.Errorf("取消租赁失败, %s", code)
|
e.Log.Errorf("取消租赁失败, %s", code)
|
||||||
return code
|
return code
|
||||||
@ -203,7 +208,7 @@ func (e *SmsPhone) WeakUpManage(req *models.SmsPhone, apiInfo *dto.SmsPlatformKe
|
|||||||
return strconv.Itoa(id), "", nil, nil, code
|
return strconv.Itoa(id), "", nil, nil, code
|
||||||
case global.SmsPlatformTextVerified:
|
case global.SmsPlatformTextVerified:
|
||||||
service := SmsTextVerified{Service: e.Service}
|
service := SmsTextVerified{Service: e.Service}
|
||||||
resp, code := service.getExtraActivation(req.NewActivationId, apiInfo)
|
resp, code := service.getExtraActivation(req.NewActivationId, apiInfo, 0)
|
||||||
return resp.ReservationId, resp.Id, resp.UsageWindowStart, resp.UsageWindowEnd, code
|
return resp.ReservationId, resp.Id, resp.UsageWindowStart, resp.UsageWindowEnd, code
|
||||||
default:
|
default:
|
||||||
return "", "", nil, nil, statuscode.SmsPlatformUnavailable
|
return "", "", nil, nil, statuscode.SmsPlatformUnavailable
|
||||||
@ -393,6 +398,20 @@ func (e *SmsPhone) DoGetNumber(balanceService *MemberBalance, req *dto.GetNumber
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log := models.SmsRenewalLog{}
|
||||||
|
log.PhoneId = smsPhone.Id
|
||||||
|
log.Phone = smsPhone.Phone
|
||||||
|
log.Type = smsPhone.Type
|
||||||
|
log.Category = 1
|
||||||
|
log.UserId = userId
|
||||||
|
log.Amount = price
|
||||||
|
log.BeforeTime = time.Now()
|
||||||
|
log.Period = req.Period * 30
|
||||||
|
|
||||||
|
if err := e.Orm.Save(&log).Error; err != nil {
|
||||||
|
e.Log.Errorf("保存短信续费日志失败,phone_id:%d, %s", smsPhone.Id, err)
|
||||||
|
}
|
||||||
|
|
||||||
return balance, smsPhone, statuscode.Success
|
return balance, smsPhone, statuscode.Success
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -594,6 +613,39 @@ func (e *SmsPhone) AutoRenewal() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 手动续费
|
||||||
|
func (e *SmsPhone) ManualRenewal(activationIds []string) ([]string, error) {
|
||||||
|
if len(activationIds) == 0 {
|
||||||
|
return nil, errors.New("activationIds 不能为空")
|
||||||
|
}
|
||||||
|
|
||||||
|
var errorIds []string
|
||||||
|
var expiredPhones []models.SmsPhone
|
||||||
|
|
||||||
|
// 查询所有到期号码
|
||||||
|
if err := e.Orm.Model(&models.SmsPhone{}).
|
||||||
|
Where("activation_id IN ? and expire_time < ?", activationIds, time.Now()).
|
||||||
|
Find(&expiredPhones).Error; err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取服务配置映射
|
||||||
|
serviceMap, premiumMap, err := e.getRenewalConfigs()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理每个到期号码
|
||||||
|
for _, phone := range expiredPhones {
|
||||||
|
if err := e.processPhoneRenewal(phone, serviceMap, premiumMap); err != nil {
|
||||||
|
e.Log.Errorf("处理号码续费失败 [PhoneID: %d]: %v", phone.Id, err)
|
||||||
|
errorIds = append(errorIds, fmt.Sprintf("处理号码续费失败 [PhoneID: %d]: %v", phone.Id, err))
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return errorIds, nil
|
||||||
|
}
|
||||||
|
|
||||||
// getExpiredPhones 获取即将到期的自动续费号码
|
// getExpiredPhones 获取即将到期的自动续费号码
|
||||||
func (e *SmsPhone) getExpiredPhones() ([]models.SmsPhone, error) {
|
func (e *SmsPhone) getExpiredPhones() ([]models.SmsPhone, error) {
|
||||||
var phones []models.SmsPhone
|
var phones []models.SmsPhone
|
||||||
@ -667,6 +719,8 @@ func (e *SmsPhone) calculateRenewalPrice(basePrice decimal.Decimal, platformCode
|
|||||||
func (e *SmsPhone) createRenewalLog(phone models.SmsPhone, amount decimal.Decimal) models.SmsRenewalLog {
|
func (e *SmsPhone) createRenewalLog(phone models.SmsPhone, amount decimal.Decimal) models.SmsRenewalLog {
|
||||||
return models.SmsRenewalLog{
|
return models.SmsRenewalLog{
|
||||||
UserId: phone.UserId,
|
UserId: phone.UserId,
|
||||||
|
Phone: phone.Phone,
|
||||||
|
Category: 2,
|
||||||
PhoneId: phone.Id,
|
PhoneId: phone.Id,
|
||||||
Type: phone.Type,
|
Type: phone.Type,
|
||||||
Amount: amount,
|
Amount: amount,
|
||||||
@ -707,8 +761,7 @@ func (e *SmsPhone) executeRenewalTransaction(phone models.SmsPhone, price decima
|
|||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
if err.Error() == "余额不足" {
|
if err != nil && err.Error() == "余额不足" {
|
||||||
|
|
||||||
return e.handleInsufficientBalance(phone)
|
return e.handleInsufficientBalance(phone)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -3,7 +3,7 @@ package service
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
|
||||||
"github.com/go-admin-team/go-admin-core/sdk/service"
|
"github.com/go-admin-team/go-admin-core/sdk/service"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
|
|
||||||
"go-admin/app/admin/models"
|
"go-admin/app/admin/models"
|
||||||
@ -17,22 +17,42 @@ type SmsRenewalLog struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetPage 获取SmsRenewalLog列表
|
// GetPage 获取SmsRenewalLog列表
|
||||||
func (e *SmsRenewalLog) GetPage(c *dto.SmsRenewalLogGetPageReq, p *actions.DataPermission, list *[]models.SmsRenewalLog, count *int64) error {
|
func (e *SmsRenewalLog) GetPage(c *dto.SmsRenewalLogGetPageReq, p *actions.DataPermission, list *[]dto.SmsRenewalLogResp, count *int64) error {
|
||||||
var err error
|
var err error
|
||||||
var data models.SmsRenewalLog
|
var data models.SmsRenewalLog
|
||||||
|
var datas []models.SmsRenewalLog
|
||||||
err = e.Orm.Model(&data).
|
query := e.Orm.Model(&data).
|
||||||
|
Joins("left join sys_user on sys_user.user_id = sms_renewal_log.user_id").
|
||||||
Scopes(
|
Scopes(
|
||||||
cDto.MakeCondition(c.GetNeedSearch()),
|
cDto.MakeCondition(c.GetNeedSearch()),
|
||||||
cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
|
cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
|
||||||
actions.Permission(data.TableName(), p),
|
actions.Permission(data.TableName(), p),
|
||||||
).
|
)
|
||||||
Find(list).Limit(-1).Offset(-1).
|
|
||||||
|
if c.UserName != "" {
|
||||||
|
query = query.Where("sys_user.username LIKE ?", "%"+c.UserName+"%")
|
||||||
|
}
|
||||||
|
err = query.Select("sms_renewal_log.*, sys_user.username").Find(&datas).Limit(-1).Offset(-1).
|
||||||
Count(count).Error
|
Count(count).Error
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
e.Log.Errorf("SmsRenewalLogService GetPage error:%s \r\n", err)
|
e.Log.Errorf("SmsRenewalLogService GetPage error:%s \r\n", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, v := range datas {
|
||||||
|
*list = append(*list, dto.SmsRenewalLogResp{
|
||||||
|
Id: v.Id,
|
||||||
|
UserId: v.UserId,
|
||||||
|
Category: v.Category,
|
||||||
|
Phone: v.Phone,
|
||||||
|
Amount: v.Amount,
|
||||||
|
BeforeTime: v.BeforeTime,
|
||||||
|
Period: v.Period,
|
||||||
|
CreatedAt: v.CreatedAt,
|
||||||
|
UserName: v.Username,
|
||||||
|
})
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -59,9 +79,9 @@ func (e *SmsRenewalLog) Get(d *dto.SmsRenewalLogGetReq, p *actions.DataPermissio
|
|||||||
|
|
||||||
// Insert 创建SmsRenewalLog对象
|
// Insert 创建SmsRenewalLog对象
|
||||||
func (e *SmsRenewalLog) Insert(c *dto.SmsRenewalLogInsertReq) error {
|
func (e *SmsRenewalLog) Insert(c *dto.SmsRenewalLogInsertReq) error {
|
||||||
var err error
|
var err error
|
||||||
var data models.SmsRenewalLog
|
var data models.SmsRenewalLog
|
||||||
c.Generate(&data)
|
c.Generate(&data)
|
||||||
err = e.Orm.Create(&data).Error
|
err = e.Orm.Create(&data).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
e.Log.Errorf("SmsRenewalLogService Insert error:%s \r\n", err)
|
e.Log.Errorf("SmsRenewalLogService Insert error:%s \r\n", err)
|
||||||
@ -72,22 +92,22 @@ func (e *SmsRenewalLog) Insert(c *dto.SmsRenewalLogInsertReq) error {
|
|||||||
|
|
||||||
// Update 修改SmsRenewalLog对象
|
// Update 修改SmsRenewalLog对象
|
||||||
func (e *SmsRenewalLog) Update(c *dto.SmsRenewalLogUpdateReq, p *actions.DataPermission) error {
|
func (e *SmsRenewalLog) Update(c *dto.SmsRenewalLogUpdateReq, p *actions.DataPermission) error {
|
||||||
var err error
|
var err error
|
||||||
var data = models.SmsRenewalLog{}
|
var data = models.SmsRenewalLog{}
|
||||||
e.Orm.Scopes(
|
e.Orm.Scopes(
|
||||||
actions.Permission(data.TableName(), p),
|
actions.Permission(data.TableName(), p),
|
||||||
).First(&data, c.GetId())
|
).First(&data, c.GetId())
|
||||||
c.Generate(&data)
|
c.Generate(&data)
|
||||||
|
|
||||||
db := e.Orm.Save(&data)
|
db := e.Orm.Save(&data)
|
||||||
if err = db.Error; err != nil {
|
if err = db.Error; err != nil {
|
||||||
e.Log.Errorf("SmsRenewalLogService Save error:%s \r\n", err)
|
e.Log.Errorf("SmsRenewalLogService Save error:%s \r\n", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if db.RowsAffected == 0 {
|
if db.RowsAffected == 0 {
|
||||||
return errors.New("无权更新该数据")
|
return errors.New("无权更新该数据")
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove 删除SmsRenewalLog
|
// Remove 删除SmsRenewalLog
|
||||||
@ -99,11 +119,11 @@ func (e *SmsRenewalLog) Remove(d *dto.SmsRenewalLogDeleteReq, p *actions.DataPer
|
|||||||
actions.Permission(data.TableName(), p),
|
actions.Permission(data.TableName(), p),
|
||||||
).Delete(&data, d.GetId())
|
).Delete(&data, d.GetId())
|
||||||
if err := db.Error; err != nil {
|
if err := db.Error; err != nil {
|
||||||
e.Log.Errorf("Service RemoveSmsRenewalLog error:%s \r\n", err)
|
e.Log.Errorf("Service RemoveSmsRenewalLog error:%s \r\n", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if db.RowsAffected == 0 {
|
if db.RowsAffected == 0 {
|
||||||
return errors.New("无权删除该数据")
|
return errors.New("无权删除该数据")
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@ -372,16 +372,19 @@ func (e *SmsTextVerified) GetNumberAndWakeUp(tye int, serviceCode string, price
|
|||||||
return resp, code
|
return resp, code
|
||||||
}
|
}
|
||||||
|
|
||||||
wakeUpResp, code := e.getExtraActivation(resp.Id, apiInfo)
|
wakeUpResp, code := e.getExtraActivation(resp.Id, apiInfo, 0)
|
||||||
|
|
||||||
if code != statuscode.Success {
|
if code != statuscode.Success {
|
||||||
return resp, code
|
//唤醒失败不退出
|
||||||
|
now := time.Now()
|
||||||
|
resp.StartTime = &now
|
||||||
|
resp.EndTime = &now
|
||||||
|
} else {
|
||||||
|
resp.MessageId = wakeUpResp.Id
|
||||||
|
resp.StartTime = wakeUpResp.UsageWindowStart
|
||||||
|
resp.EndTime = wakeUpResp.UsageWindowEnd
|
||||||
}
|
}
|
||||||
|
|
||||||
resp.MessageId = wakeUpResp.Id
|
|
||||||
resp.StartTime = wakeUpResp.UsageWindowStart
|
|
||||||
resp.EndTime = wakeUpResp.UsageWindowEnd
|
|
||||||
|
|
||||||
return resp, code
|
return resp, code
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -579,7 +582,7 @@ func (e *SmsTextVerified) GetRentalDetail(id string, apiInfo *dto.SmsPlatformKey
|
|||||||
|
|
||||||
// 唤醒号码
|
// 唤醒号码
|
||||||
// returns activationId,messageId,startTime(可用开始时间),endTime(可用结束时间), code,
|
// returns activationId,messageId,startTime(可用开始时间),endTime(可用结束时间), code,
|
||||||
func (e SmsTextVerified) getExtraActivation(id string, apiInfo *dto.SmsPlatformKeyQueueDto) (dto.TextVerifiedWakeUpResp, int) {
|
func (e SmsTextVerified) getExtraActivation(id string, apiInfo *dto.SmsPlatformKeyQueueDto, retry int) (dto.TextVerifiedWakeUpResp, int) {
|
||||||
client, code := e.GetTextVerifiedAuthClient(apiInfo)
|
client, code := e.GetTextVerifiedAuthClient(apiInfo)
|
||||||
result := dto.TextVerifiedWakeUpResp{}
|
result := dto.TextVerifiedWakeUpResp{}
|
||||||
|
|
||||||
@ -598,8 +601,13 @@ func (e SmsTextVerified) getExtraActivation(id string, apiInfo *dto.SmsPlatformK
|
|||||||
status, err := client.Post(wakeUp, req, headers, &resp)
|
status, err := client.Post(wakeUp, req, headers, &resp)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
e.Log.Errorf("唤醒号码失败 id:%s error: %v", id, err)
|
if strings.Contains(err.Error(), "Line is currently busy. Please try this line again later") && retry < 3 {
|
||||||
return result, statuscode.ServerError
|
time.Sleep(300 * time.Millisecond)
|
||||||
|
return e.getExtraActivation(id, apiInfo, retry+1)
|
||||||
|
} else {
|
||||||
|
e.Log.Errorf("唤醒号码失败 id:%s error: %v", id, err)
|
||||||
|
return result, statuscode.ServerError
|
||||||
|
}
|
||||||
} else if status == http.StatusCreated || status == http.StatusOK {
|
} else if status == http.StatusCreated || status == http.StatusOK {
|
||||||
if resp.Method != "" && resp.Href != "" {
|
if resp.Method != "" && resp.Href != "" {
|
||||||
bytes, err := e.doRequest(&resp, apiInfo)
|
bytes, err := e.doRequest(&resp, apiInfo)
|
||||||
@ -1030,6 +1038,7 @@ func (e *SmsTextVerified) GetNumbers(apiInfo *dto.SmsPlatformKeyQueueDto) ([]dto
|
|||||||
// 添加第一页数据
|
// 添加第一页数据
|
||||||
for _, item := range resp.Data {
|
for _, item := range resp.Data {
|
||||||
item.Number = "1" + item.Number
|
item.Number = "1" + item.Number
|
||||||
|
item.ApiKey = apiInfo.ApiKey
|
||||||
|
|
||||||
result = append(result, item)
|
result = append(result, item)
|
||||||
}
|
}
|
||||||
@ -1074,6 +1083,7 @@ func (e *SmsTextVerified) fetchPaginatedData(nextLink *dto.TextVerifiedResp, api
|
|||||||
|
|
||||||
for _, item := range nextResp.Data {
|
for _, item := range nextResp.Data {
|
||||||
item.Number = "1" + item.Number
|
item.Number = "1" + item.Number
|
||||||
|
item.ApiKey = apiInfo.ApiKey
|
||||||
result = append(result, item)
|
result = append(result, item)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user