first
This commit is contained in:
commit
f85fff80be
|
|
@ -0,0 +1,8 @@
|
||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<profile version="1.0">
|
||||||
|
<option name="myName" value="Project Default" />
|
||||||
|
<inspection_tool class="AliAccessStaticViaInstance" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
|
<inspection_tool class="AlibabaAbstractClassShouldStartWithAbstractNaming" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
|
<inspection_tool class="AlibabaAvoidApacheBeanUtilsCopy" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
|
<inspection_tool class="AlibabaAvoidCallStaticSimpleDateFormat" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
|
<inspection_tool class="AlibabaAvoidComplexCondition" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
|
<inspection_tool class="AlibabaAvoidNewDateGetTime" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
|
<inspection_tool class="AlibabaAvoidPatternCompileInMethod" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
|
<inspection_tool class="AlibabaAvoidUseTimer" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
|
<inspection_tool class="AlibabaClassMustHaveAuthor" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
|
<inspection_tool class="AlibabaLockShouldWithTryFinally" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
|
<inspection_tool class="AlibabaMethodTooLong" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
|
<inspection_tool class="AlibabaPackageNaming" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
|
<inspection_tool class="AlibabaSneakyThrowsWithoutExceptionType" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
|
<inspection_tool class="AlibabaTestClassShouldEndWithTestNaming" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
|
<inspection_tool class="AlibabaTransactionMustHaveRollback" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
|
<inspection_tool class="AlibabaUseRightCaseForDateFormat" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
|
</profile>
|
||||||
|
</component>
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectRootManager">
|
||||||
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/video_data_copy.iml" filepath="$PROJECT_DIR$/video_data_copy.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,63 @@
|
||||||
|
package data
|
||||||
|
|
||||||
|
type (
|
||||||
|
Orders struct {
|
||||||
|
OrdersId int64 `json:"orders_id" gorm:"primary_key;column:orders_id"`
|
||||||
|
OrdersNo string `json:"orders_no" gorm:"column:orders_no"`
|
||||||
|
TradeNo string `json:"trade_no" gorm:"column:trade_no"`
|
||||||
|
UserId int64 `json:"user_id" gorm:"column:user_id"`
|
||||||
|
CourseId int64 `json:"course_id" gorm:"column:course_id"`
|
||||||
|
PayMoney float64 `json:"pay_money" gorm:"column:pay_money"`
|
||||||
|
PayWay int `json:"pay_way" gorm:"column:pay_way"`
|
||||||
|
Status int `json:"status" gorm:"column:status"`
|
||||||
|
CreateTime string `json:"create_time" gorm:"column:create_time"`
|
||||||
|
RefundContent string `json:"refund_content" gorm:"column:refund_content"`
|
||||||
|
OrdersType int `json:"orders_type" gorm:"column:orders_type"`
|
||||||
|
VipNameType int `json:"vip_name_type" gorm:"column:vip_name_type"`
|
||||||
|
CourseDetailsId int64 `json:"course_details_id" gorm:"column:course_details_id"`
|
||||||
|
CourseDetailsIds string `json:"course_details_ids" gorm:"column:course_details_ids"`
|
||||||
|
QdMoney float64 `json:"qd_money" gorm:"column:qd_money"`
|
||||||
|
SysUserId int64 `json:"sys_user_id" gorm:"column:sys_user_id"`
|
||||||
|
OneMoney float64 `json:"one_money" gorm:"column:one_money"`
|
||||||
|
OneUserId int64 `json:"one_user_id" gorm:"column:one_user_id"`
|
||||||
|
TwoMoney float64 `json:"two_money" gorm:"column:two_money"`
|
||||||
|
TwoUserId int64 `json:"two_user_id" gorm:"column:two_user_id"`
|
||||||
|
PayTime string `json:"pay_time" gorm:"column:pay_time"`
|
||||||
|
PayDiamond float64 `json:"pay_diamond" gorm:"column:pay_diamond"`
|
||||||
|
Diamond int32 `json:"diamond" gorm:"column:diamond"`
|
||||||
|
}
|
||||||
|
|
||||||
|
OrdersCopy1 struct {
|
||||||
|
OrdersId int64 `json:"orders_id" gorm:"primary_key;column:orders_id"`
|
||||||
|
OrdersNo string `json:"orders_no" gorm:"column:orders_no"`
|
||||||
|
TradeNo string `json:"trade_no" gorm:"column:trade_no"`
|
||||||
|
UserId int64 `json:"user_id" gorm:"column:user_id"`
|
||||||
|
CourseId int64 `json:"course_id" gorm:"column:course_id"`
|
||||||
|
PayMoney float64 `json:"pay_money" gorm:"column:pay_money"`
|
||||||
|
PayWay int `json:"pay_way" gorm:"column:pay_way"`
|
||||||
|
Status int `json:"status" gorm:"column:status"`
|
||||||
|
CreateTime string `json:"create_time" gorm:"column:create_time"`
|
||||||
|
RefundContent string `json:"refund_content" gorm:"column:refund_content"`
|
||||||
|
OrdersType int `json:"orders_type" gorm:"column:orders_type"`
|
||||||
|
VipNameType int `json:"vip_name_type" gorm:"column:vip_name_type"`
|
||||||
|
CourseDetailsId int64 `json:"course_details_id" gorm:"column:course_details_id"`
|
||||||
|
CourseDetailsIds string `json:"course_details_ids" gorm:"column:course_details_ids"`
|
||||||
|
QdMoney float64 `json:"qd_money" gorm:"column:qd_money"`
|
||||||
|
SysUserId int64 `json:"sys_user_id" gorm:"column:sys_user_id"`
|
||||||
|
OneMoney float64 `json:"one_money" gorm:"column:one_money"`
|
||||||
|
OneUserId int64 `json:"one_user_id" gorm:"column:one_user_id"`
|
||||||
|
TwoMoney float64 `json:"two_money" gorm:"column:two_money"`
|
||||||
|
TwoUserId int64 `json:"two_user_id" gorm:"column:two_user_id"`
|
||||||
|
PayTime string `json:"pay_time" gorm:"column:pay_time"`
|
||||||
|
PayDiamond float64 `json:"pay_diamond" gorm:"column:pay_diamond"`
|
||||||
|
Diamond int32 `json:"diamond" gorm:"column:diamond"`
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
func (o *Orders) TableName() string {
|
||||||
|
return "orders"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *OrdersCopy1) TableName() string {
|
||||||
|
return "orders_copy1"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,45 @@
|
||||||
|
package data
|
||||||
|
|
||||||
|
type (
|
||||||
|
PayDetails struct {
|
||||||
|
Id int64 `json:"id" gorm:"primary_key;column:id"`
|
||||||
|
Classify int `json:"classify" gorm:"column:classify"`
|
||||||
|
TradeNo string `json:"trade_no" gorm:"column:trade_no"`
|
||||||
|
Money float64 `json:"money" gorm:"column:money"`
|
||||||
|
UserId int64 `json:"user_id" gorm:"column:user_id"`
|
||||||
|
CreateTime string `json:"create_time" gorm:"column:create_time"`
|
||||||
|
PayTime string `json:"pay_time" gorm:"column:pay_time"`
|
||||||
|
Type int `json:"type" gorm:"column:type"`
|
||||||
|
Remark string `json:"remark" gorm:"column:remark"`
|
||||||
|
OrderId string `json:"order_id" gorm:"column:order_id"`
|
||||||
|
ProductId string `json:"product_id" gorm:"column:product_id"`
|
||||||
|
PayDiamond float64 `json:"pay_diamond" gorm:"column:pay_diamond"`
|
||||||
|
Diamond int `json:"diamond" gorm:"column:diamond"`
|
||||||
|
ThirdOrderNo string `json:"third_order_no" gorm:"column:third_order_no"`
|
||||||
|
}
|
||||||
|
|
||||||
|
PayDetailsCopy1 struct {
|
||||||
|
Id int64 `json:"id" gorm:"primary_key;column:id"`
|
||||||
|
Classify int `json:"classify" gorm:"column:classify"`
|
||||||
|
TradeNo string `json:"trade_no" gorm:"column:trade_no"`
|
||||||
|
Money float64 `json:"money" gorm:"column:money"`
|
||||||
|
UserId int64 `json:"user_id" gorm:"column:user_id"`
|
||||||
|
CreateTime string `json:"create_time" gorm:"column:create_time"`
|
||||||
|
PayTime string `json:"pay_time" gorm:"column:pay_time"`
|
||||||
|
Type int `json:"type" gorm:"column:type"`
|
||||||
|
Remark string `json:"remark" gorm:"column:remark"`
|
||||||
|
OrderId string `json:"order_id" gorm:"column:order_id"`
|
||||||
|
ProductId string `json:"product_id" gorm:"column:product_id"`
|
||||||
|
PayDiamond float64 `json:"pay_diamond" gorm:"column:pay_diamond"`
|
||||||
|
Diamond int `json:"diamond" gorm:"column:diamond"`
|
||||||
|
ThirdOrderNo string `json:"third_order_no" gorm:"column:third_order_no"`
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
func (PayDetails) TableName() string {
|
||||||
|
return "pay_details"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (PayDetailsCopy1) TableName() string {
|
||||||
|
return "pay_details_copy1"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,45 @@
|
||||||
|
package data
|
||||||
|
|
||||||
|
type (
|
||||||
|
UserMoneyDetails struct {
|
||||||
|
Id int64 `json:"id" gorm:"column:id;primary_key"`
|
||||||
|
UserId int64 `json:"user_id" gorm:"column:user_id"`
|
||||||
|
SysUserId int64 `json:"sys_user_id" gorm:"column:sys_user_id"`
|
||||||
|
ByUserId int64 `json:"by_user_id" gorm:"column:by_user_id"`
|
||||||
|
Title string `json:"title" gorm:"column:title"`
|
||||||
|
Classify int `json:"classify" gorm:"column:classify"`
|
||||||
|
Type int `json:"type" gorm:"column:type"`
|
||||||
|
State int `json:"state" gorm:"column:state"`
|
||||||
|
Money float64 `json:"money" gorm:"column:money"`
|
||||||
|
Content string `json:"content" gorm:"column:content"`
|
||||||
|
MoneyType int `json:"money_type" gorm:"column:money_type"`
|
||||||
|
CreateTime string `json:"create_time" gorm:"column:create_time"`
|
||||||
|
SourceId int64 `json:"source_id" gorm:"column:source_id"`
|
||||||
|
AwardCount int `json:"award_count" gorm:"column:award_count"`
|
||||||
|
}
|
||||||
|
|
||||||
|
UserMoneyDetailsCopy1 struct {
|
||||||
|
Id int64 `json:"id" gorm:"column:id;primary_key"`
|
||||||
|
UserId int64 `json:"user_id" gorm:"column:user_id"`
|
||||||
|
SysUserId int64 `json:"sys_user_id" gorm:"column:sys_user_id"`
|
||||||
|
ByUserId int64 `json:"by_user_id" gorm:"column:by_user_id"`
|
||||||
|
Title string `json:"title" gorm:"column:title"`
|
||||||
|
Classify int `json:"classify" gorm:"column:classify"`
|
||||||
|
Type int `json:"type" gorm:"column:type"`
|
||||||
|
State int `json:"state" gorm:"column:state"`
|
||||||
|
Money float64 `json:"money" gorm:"column:money"`
|
||||||
|
Content string `json:"content" gorm:"column:content"`
|
||||||
|
MoneyType int `json:"money_type" gorm:"column:money_type"`
|
||||||
|
CreateTime string `json:"create_time" gorm:"column:create_time"`
|
||||||
|
SourceId int64 `json:"source_id" gorm:"column:source_id"`
|
||||||
|
AwardCount int `json:"award_count" gorm:"column:award_count"`
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
func (UserMoneyDetails) TableName() string {
|
||||||
|
return "user_money_details"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (UserMoneyDetailsCopy1) TableName() string {
|
||||||
|
return "user_money_details_copy1"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,125 @@
|
||||||
|
package db
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"github.com/jinzhu/copier"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
"time"
|
||||||
|
"video_data_copy/data"
|
||||||
|
)
|
||||||
|
|
||||||
|
func copyOrders(db *gorm.DB, timeNow time.Time) {
|
||||||
|
order := &data.Orders{}
|
||||||
|
db.Model(order).Where("create_time < ?", timeNow.Format("2006-01-02 15:04:05")).Order("create_time asc").First(order)
|
||||||
|
|
||||||
|
parse, err := time.Parse("2006-01-02T15:04:05Z07:00", order.CreateTime)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("parse order create_time error:", err)
|
||||||
|
}
|
||||||
|
format := parse.Format("2006-01-02 15:04:05")
|
||||||
|
fmt.Println("copy orders from:", format)
|
||||||
|
db.Debug().Where("create_time >= ?", format).Delete(&data.OrdersCopy1{})
|
||||||
|
|
||||||
|
_execOrders(db, timeNow.Format("2006-01-02 15:04:05"), 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _execOrders(db *gorm.DB, timeNow string, index int) {
|
||||||
|
var orders []*data.Orders
|
||||||
|
|
||||||
|
db.Debug().Where("create_time < ?", timeNow).Limit(1000).Offset(index * 1000).Find(&orders)
|
||||||
|
|
||||||
|
fmt.Printf("index: %d, timeNow: %s ,orders count: %d\n", index, timeNow, len(orders))
|
||||||
|
if len(orders) == 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var copyList []*data.OrdersCopy1
|
||||||
|
for _, order := range orders {
|
||||||
|
copyOrder := &data.OrdersCopy1{}
|
||||||
|
CopyStruct(order, copyOrder)
|
||||||
|
copyList = append(copyList, copyOrder)
|
||||||
|
}
|
||||||
|
|
||||||
|
db.Create(©List)
|
||||||
|
|
||||||
|
_execOrders(db, timeNow, index+1)
|
||||||
|
}
|
||||||
|
|
||||||
|
func copyPayDetails(db *gorm.DB, timeNow time.Time) {
|
||||||
|
detail := &data.PayDetails{}
|
||||||
|
db.Model(detail).Where("create_time < ?", timeNow.Format("2006-01-02 15:04:05")).Order("create_time asc").First(detail)
|
||||||
|
|
||||||
|
parse, err := time.Parse("2006-01-02T15:04:05Z07:00", detail.CreateTime)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("parse pay_details create_time error:", err)
|
||||||
|
}
|
||||||
|
format := parse.Format("2006-01-02 15:04:05")
|
||||||
|
fmt.Println("copy pay_details from:", format)
|
||||||
|
db.Debug().Where("create_time >= ?", format).Delete(&data.PayDetailsCopy1{})
|
||||||
|
|
||||||
|
_execPayDetails(db, timeNow.Format("2006-01-02 15:04:05"), 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _execPayDetails(db *gorm.DB, timeNow string, index int) {
|
||||||
|
var details []*data.PayDetails
|
||||||
|
|
||||||
|
db.Debug().Where("create_time < ?", timeNow).Limit(1000).Offset(index * 1000).Find(&details)
|
||||||
|
|
||||||
|
fmt.Printf("index: %d, timeNow: %s ,pay_details count: %d\n", index, timeNow, len(details))
|
||||||
|
if len(details) == 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var copyList []*data.PayDetailsCopy1
|
||||||
|
for _, detail := range details {
|
||||||
|
detailCopy := &data.PayDetailsCopy1{}
|
||||||
|
CopyStruct(detail, detailCopy)
|
||||||
|
copyList = append(copyList, detailCopy)
|
||||||
|
}
|
||||||
|
|
||||||
|
db.Create(©List)
|
||||||
|
|
||||||
|
_execPayDetails(db, timeNow, index+1)
|
||||||
|
}
|
||||||
|
|
||||||
|
func copyUserMoneyDetails(db *gorm.DB, timeNow time.Time) {
|
||||||
|
detail := &data.UserMoneyDetails{}
|
||||||
|
db.Model(detail).Where("create_time < ?", timeNow.Format("2006-01-02 15:04:05")).Order("create_time asc").First(detail)
|
||||||
|
|
||||||
|
parse, err := time.Parse("2006-01-02T15:04:05Z07:00", detail.CreateTime)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("parse pay_details create_time error:", err)
|
||||||
|
}
|
||||||
|
format := parse.Format("2006-01-02 15:04:05")
|
||||||
|
fmt.Println("copy pay_details from:", format)
|
||||||
|
db.Debug().Where("create_time >= ?", format).Delete(&data.UserMoneyDetailsCopy1{})
|
||||||
|
|
||||||
|
_execUserMoneyDetails(db, timeNow.Format("2006-01-02 15:04:05"), 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _execUserMoneyDetails(db *gorm.DB, timeNow string, index int) {
|
||||||
|
var details []*data.UserMoneyDetails
|
||||||
|
|
||||||
|
db.Debug().Where("create_time < ?", timeNow).Limit(1000).Offset(index * 1000).Find(&details)
|
||||||
|
|
||||||
|
fmt.Printf("index: %d, timeNow: %s ,pay_details count: %d\n", index, timeNow, len(details))
|
||||||
|
if len(details) == 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var copyList []*data.UserMoneyDetailsCopy1
|
||||||
|
for _, detail := range details {
|
||||||
|
detailCopy := &data.UserMoneyDetailsCopy1{}
|
||||||
|
CopyStruct(detail, detailCopy)
|
||||||
|
copyList = append(copyList, detailCopy)
|
||||||
|
}
|
||||||
|
|
||||||
|
db.Create(©List)
|
||||||
|
|
||||||
|
_execUserMoneyDetails(db, timeNow, index+1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CopyStruct 使用反射复制结构体
|
||||||
|
func CopyStruct(src, dst interface{}) {
|
||||||
|
_ = copier.Copy(dst, src)
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
package db
|
||||||
|
|
||||||
|
type (
|
||||||
|
ConnectInfo struct {
|
||||||
|
Host string `yaml:"host" json:"host"`
|
||||||
|
Name string `yaml:"name" json:"name"`
|
||||||
|
Password string `yaml:"password" json:"password"`
|
||||||
|
Port string `yaml:"port" json:"port"`
|
||||||
|
Dbs []string `yaml:"dbs" json:"dbs"`
|
||||||
|
}
|
||||||
|
|
||||||
|
Config struct {
|
||||||
|
Env string `yaml:"env" json:"env"`
|
||||||
|
Dev *ConnectInfo `yaml:"dev" json:"dev"`
|
||||||
|
Prod *ConnectInfo `yaml:"prod" json:"prod"`
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
@ -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"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
env: dev
|
||||||
|
|
||||||
|
dev:
|
||||||
|
host: rm-gc712o11yndj78x6a6o.mysql.cn-chengdu.rds.aliyuncs.com
|
||||||
|
name: video_user
|
||||||
|
password: VideoUser@1
|
||||||
|
port: 3306
|
||||||
|
dbs:
|
||||||
|
- duanju-0
|
||||||
|
- duanju-1
|
||||||
|
- duanju-2
|
||||||
|
- duanju-3
|
||||||
|
- duanju-4
|
||||||
|
|
||||||
|
prod:
|
||||||
|
host: rm-gc7xx913734hv5w5qxo.mysql.cn-chengdu.rds.aliyuncs.com
|
||||||
|
name: video_user
|
||||||
|
password: VideoUser@1
|
||||||
|
port: 3306
|
||||||
|
dbs:
|
||||||
|
- duanju-0
|
||||||
|
- duanju-1
|
||||||
|
- duanju-2
|
||||||
|
- duanju-3
|
||||||
|
- duanju-4
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
module video_data_copy
|
||||||
|
|
||||||
|
go 1.23.4
|
||||||
|
|
||||||
|
require (
|
||||||
|
filippo.io/edwards25519 v1.1.0 // indirect
|
||||||
|
github.com/go-sql-driver/mysql v1.9.0 // indirect
|
||||||
|
github.com/jinzhu/copier v0.4.0 // indirect
|
||||||
|
github.com/jinzhu/inflection v1.0.0 // indirect
|
||||||
|
github.com/jinzhu/now v1.1.5 // indirect
|
||||||
|
github.com/robfig/cron/v3 v3.0.1 // indirect
|
||||||
|
golang.org/x/text v0.23.0 // indirect
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
|
gorm.io/driver/mysql v1.5.7 // indirect
|
||||||
|
gorm.io/gorm v1.25.12 // indirect
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
|
||||||
|
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
|
||||||
|
github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
|
||||||
|
github.com/go-sql-driver/mysql v1.9.0 h1:Y0zIbQXhQKmQgTp44Y1dp3wTXcn804QoTptLZT1vtvo=
|
||||||
|
github.com/go-sql-driver/mysql v1.9.0/go.mod h1:pDetrLJeA3oMujJuvXc8RJoasr589B6A9fwzD3QMrqw=
|
||||||
|
github.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8=
|
||||||
|
github.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg=
|
||||||
|
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
|
||||||
|
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
|
||||||
|
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
|
||||||
|
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
||||||
|
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
|
||||||
|
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
|
||||||
|
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
|
||||||
|
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
gorm.io/driver/mysql v1.5.7 h1:MndhOPYOfEp2rHKgkZIhJ16eVUIRf2HmzgoPmh7FCWo=
|
||||||
|
gorm.io/driver/mysql v1.5.7/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM=
|
||||||
|
gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
|
||||||
|
gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8=
|
||||||
|
gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"github.com/robfig/cron/v3"
|
||||||
|
"time"
|
||||||
|
"video_data_copy/db"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
c := cron.New()
|
||||||
|
_, err := c.AddFunc("0 4 * * *", func() {
|
||||||
|
fmt.Println("定时任务开始执行")
|
||||||
|
_startCopyData()
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("添加定时任务出错: %v\n", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("定时任务启动成功")
|
||||||
|
c.Start()
|
||||||
|
|
||||||
|
select {}
|
||||||
|
}
|
||||||
|
|
||||||
|
func _startCopyData() {
|
||||||
|
db.ConnectDB()
|
||||||
|
db.CopyData()
|
||||||
|
time.Sleep(10 * time.Second)
|
||||||
|
db.DisconnectDB()
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="WEB_MODULE" version="4">
|
||||||
|
<component name="Go" enabled="true" />
|
||||||
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
Binary file not shown.
Loading…
Reference in New Issue