data_copy/db/db_manager.go

96 lines
1.5 KiB
Go

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"
}