111 lines
1.9 KiB
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"
|
|
}
|