支付宝 接入一系列修改
This commit is contained in:
@@ -17,6 +17,14 @@ var (
|
||||
modelDB *gorm.DB
|
||||
)
|
||||
|
||||
func init() {
|
||||
|
||||
// 启动异步处理
|
||||
go ExecuteCreateChan()
|
||||
go ExecuteSaveChan()
|
||||
go ExecuteDeleteChan()
|
||||
}
|
||||
|
||||
// RegisterDBModel 注册数据库模型到全局变量dbModelMap中。
|
||||
// 这个函数接受一个interface{}类型的参数dbModel,表示数据库模型。
|
||||
// 函数的目的是将传入的数据库模型添加到全局变量dbModelMap中,
|
||||
@@ -27,7 +35,7 @@ func RegisterDBModel(dbModel interface{}) {
|
||||
dbModelMap = append(dbModelMap, &dbModel)
|
||||
}
|
||||
|
||||
// 设置modelDB 类型
|
||||
// SetModelDB 设置modelDB 类型
|
||||
func SetModelDB(db *gorm.DB) {
|
||||
modelDB = db
|
||||
}
|
||||
@@ -138,38 +146,120 @@ func Save(db *gorm.DB, value interface{}, dbIndex int32) *gorm.DB {
|
||||
return result
|
||||
}
|
||||
|
||||
// DBData 添加数据通道
|
||||
type DBData struct {
|
||||
DB *gorm.DB
|
||||
Value any
|
||||
}
|
||||
|
||||
var (
|
||||
|
||||
// 添加数据通道
|
||||
createChan = make(chan DBData)
|
||||
|
||||
// 保存数据通道
|
||||
saveChan = make(chan DBData)
|
||||
|
||||
// 删除数据通道
|
||||
deleteChan = make(chan DBData)
|
||||
)
|
||||
|
||||
// AsyncCreate 异步创建数据
|
||||
func AsyncCreate(db *gorm.DB, value interface{}) {
|
||||
|
||||
go func() {
|
||||
createChan <- DBData{
|
||||
DB: db,
|
||||
Value: value,
|
||||
}
|
||||
}
|
||||
|
||||
//检查表是否存在
|
||||
CheckTableExists(db, value)
|
||||
result := db.Create(value)
|
||||
if result.Error != nil {
|
||||
logUtilPlus.ErrorLog("AsyncCreate is err: %v", result.Error)
|
||||
// ExecuteCreateChan 执行添加数据通道
|
||||
func ExecuteCreateChan() {
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
logUtilPlus.ErrorLog("AsyncCreate is err: %v", err)
|
||||
|
||||
//停止程序
|
||||
panic(err)
|
||||
}
|
||||
}()
|
||||
|
||||
for {
|
||||
select {
|
||||
case createData := <-createChan:
|
||||
db := createData.DB
|
||||
value := createData.Value
|
||||
|
||||
//检查表是否存在
|
||||
CheckTableExists(db, value)
|
||||
result := db.Create(value)
|
||||
if result.Error != nil {
|
||||
logUtilPlus.ErrorLog("AsyncCreate is err: %v", result.Error)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// AsyncSave 异步保存数据
|
||||
func AsyncSave(db *gorm.DB, value interface{}) {
|
||||
|
||||
go func() {
|
||||
result := db.Save(value)
|
||||
if result.Error != nil {
|
||||
logUtilPlus.ErrorLog("AsyncSave is err : %v", result.Error)
|
||||
saveChan <- DBData{
|
||||
DB: db,
|
||||
Value: value,
|
||||
}
|
||||
}
|
||||
|
||||
// ExecuteSaveChan 执行保存数据通道
|
||||
func ExecuteSaveChan() {
|
||||
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
logUtilPlus.ErrorLog("AsyncSave is err: %v", err)
|
||||
panic(err)
|
||||
}
|
||||
}()
|
||||
for {
|
||||
select {
|
||||
case saveData := <-saveChan:
|
||||
db := saveData.DB
|
||||
value := saveData.Value
|
||||
|
||||
result := db.Save(value)
|
||||
if result.Error != nil {
|
||||
logUtilPlus.ErrorLog("AsyncSave is err : %v", result.Error)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// AsyncDelete 异步删除数据
|
||||
func AsyncDelete(db *gorm.DB, value interface{}) {
|
||||
|
||||
go func() {
|
||||
result := db.Delete(value)
|
||||
if result.Error != nil {
|
||||
logUtilPlus.ErrorLog("AsyncDelete is err : %v", result.Error)
|
||||
deleteChan <- DBData{
|
||||
DB: db,
|
||||
Value: value,
|
||||
}
|
||||
}
|
||||
|
||||
// ExecuteDeleteChan 执行删除数据通道
|
||||
func ExecuteDeleteChan() {
|
||||
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
logUtilPlus.ErrorLog("AsyncDelete is err: %v", err)
|
||||
panic(err)
|
||||
}
|
||||
}()
|
||||
for {
|
||||
select {
|
||||
case deleteData := <-deleteChan:
|
||||
db := deleteData.DB
|
||||
value := deleteData.Value
|
||||
|
||||
result := db.Delete(value)
|
||||
if result.Error != nil {
|
||||
logUtilPlus.ErrorLog("AsyncDelete is err : %v", result.Error)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user