1
This commit is contained in:
78
services/scriptservice/order.go
Normal file
78
services/scriptservice/order.go
Normal file
@ -0,0 +1,78 @@
|
||||
package scriptservice
|
||||
|
||||
import (
|
||||
"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"
|
||||
"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"
|
||||
"gorm.io/gorm"
|
||||
"strings"
|
||||
"sync"
|
||||
)
|
||||
|
||||
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)
|
||||
go 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
|
||||
}
|
||||
Reference in New Issue
Block a user