Files
exchange_go/services/scriptservice/order.go
2025-03-11 15:51:40 +08:00

82 lines
1.9 KiB
Go

package scriptservice
import (
"go-admin/app/admin/models"
"go-admin/app/admin/service"
"go-admin/app/admin/service/dto"
"go-admin/common/const/rediskey"
"go-admin/common/helper"
"go-admin/pkg/utility"
"strings"
"sync"
"github.com/bytedance/sonic"
log "github.com/go-admin-team/go-admin-core/logger"
sysservice "github.com/go-admin-team/go-admin-core/sdk/service"
"gorm.io/gorm"
)
type PreOrder struct {
}
const GoroutineNum = 5
func (receiver *PreOrder) AddOrder(orm *gorm.DB) {
var wg sync.WaitGroup
for i := 1; i <= GoroutineNum; i++ {
wg.Add(1)
utility.SafeGo(func() {
workerWithLock(orm, &wg)
})
}
wg.Wait()
}
func workerWithLock(orm *gorm.DB, wg *sync.WaitGroup) {
defer func() {
wg.Done()
}()
scriptId, err := helper.DefaultRedis.LPopList(rediskey.PreOrderScriptList)
if err != nil {
return
}
var scriptInfo models.LinePreScript
err = orm.Model(&models.LinePreScript{}).Where("id = ? AND status = '0'", scriptId).Find(&scriptInfo).Error
if err != nil {
log.Error("获取脚本记录失败mysql err:", err)
return
}
if scriptInfo.Id > 0 {
orm.Model(&models.LinePreScript{}).Where("id = ?", scriptId).Update("status", "1")
}
params := scriptInfo.ScriptParams
var batchReq dto.LineBatchAddPreOrderReq
sonic.Unmarshal([]byte(params), &batchReq)
errs := make([]error, 0)
errStr := make([]string, 0)
order := service.LinePreOrder{
Service: sysservice.Service{Orm: orm},
}
order.AddBatchPreOrder(&batchReq, nil, &errs)
if len(errs) > 0 {
//e.Logger.Error(err)
for _, err2 := range errs {
errStr = append(errStr, err2.Error())
}
//e.Error(500, nil, strings.Join(errStr, ","))
orm.Model(&models.LinePreScript{}).Where("id = ?", scriptId).Updates(map[string]interface{}{
"status": "2",
"desc": strings.Join(errStr, ","),
})
return
} else {
orm.Model(&models.LinePreScript{}).Where("id = ?", scriptId).Updates(map[string]interface{}{
"status": "2",
"desc": "执行成功",
})
}
return
}