first
This commit is contained in:
95
db/db_manager.go
Normal file
95
db/db_manager.go
Normal file
@@ -0,0 +1,95 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"gopkg.in/yaml.v3"
|
||||
"gorm.io/driver/mysql"
|
||||
"gorm.io/gorm"
|
||||
"os"
|
||||
"time"
|
||||
)
|
||||
|
||||
var (
|
||||
config *Config
|
||||
dbList []*gorm.DB
|
||||
)
|
||||
|
||||
func ConnectDB() {
|
||||
_loadConfig()
|
||||
_goConnectDB()
|
||||
}
|
||||
|
||||
func CopyData() {
|
||||
if len(dbList) == 0 {
|
||||
panic("dbList is nil")
|
||||
}
|
||||
|
||||
timeNow := time.Now().Add(-30 * 24 * time.Hour)
|
||||
|
||||
for _, db := range dbList {
|
||||
copyOrders(db, timeNow)
|
||||
copyPayDetails(db, timeNow)
|
||||
copyUserMoneyDetails(db, timeNow)
|
||||
}
|
||||
}
|
||||
|
||||
func DisconnectDB() {
|
||||
for _, db := range dbList {
|
||||
s, err := db.DB()
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
_ = s.Close()
|
||||
}
|
||||
}
|
||||
|
||||
func _loadConfig() {
|
||||
// 读取YAML文件内容
|
||||
yamlFile, err := os.ReadFile("db_config.yml")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
c := &Config{}
|
||||
err = yaml.Unmarshal(yamlFile, c)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
config = c
|
||||
}
|
||||
|
||||
func _goConnectDB() {
|
||||
if config == nil {
|
||||
panic("config is nil")
|
||||
}
|
||||
|
||||
if config.Env != "dev" && config.Env != "prod" {
|
||||
panic("config.Env is not valid")
|
||||
}
|
||||
|
||||
configInfo := config.Dev
|
||||
if config.Env == "prod" {
|
||||
configInfo = config.Prod
|
||||
}
|
||||
|
||||
for _, dbInfo := range configInfo.Dbs {
|
||||
connectUrl := _getDbConnectUrl(configInfo, dbInfo)
|
||||
db, err := gorm.Open(mysql.Open(connectUrl))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
dbList = append(dbList, db)
|
||||
}
|
||||
|
||||
fmt.Println("Connect to DB success")
|
||||
}
|
||||
|
||||
func _getDbConnectUrl(configInfo *ConnectInfo, dbName string) string {
|
||||
return configInfo.Name +
|
||||
":" +
|
||||
configInfo.Password +
|
||||
"@tcp(" + configInfo.Host + ":" + configInfo.Port + ")/" +
|
||||
dbName +
|
||||
"?charset=utf8mb4&parseTime=True&loc=Local"
|
||||
}
|
||||
Reference in New Issue
Block a user