data_copy/db/db_manager.go

111 lines
1.9 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(-4 * 24 * time.Hour)
format := timeNow.Format("2006-01-02")
parse, _ := time.Parse("2006-01-02", format)
fmt.Println("Copy data from", parse)
for _, db := range dbList {
copyOrders(db, parse)
time.Sleep(time.Second * 2)
copyPayDetails(db, parse)
time.Sleep(time.Second * 2)
copyUserMoneyDetails(db, parse)
time.Sleep(time.Second * 2)
copyCourseCollect(db, parse)
time.Sleep(time.Second * 2)
copyCourseUser(db, parse)
time.Sleep(time.Second * 2)
copyDiscSpinningRecord(db, parse)
time.Sleep(time.Second * 2)
}
}
func DisconnectDB() {
for _, db := range dbList {
s, err := db.DB()
if err != nil {
continue
}
_ = s.Close()
}
fmt.Println("Disconnect to DB success")
}
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"
}