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{} start := timeNow.Format("2006-01-02 15:04:05") first := db.Debug().Where("create_time < ?", start).Order("create_time asc").First(order) if first.RowsAffected == 0 { fmt.Println("no orders data") return } deleteTime := order.CreateTime fmt.Println("copy orders from:", deleteTime) db.Debug().Where("create_time >= ?", deleteTime).Delete(&data.OrdersCopy1{}) _execOrders(db, start, 0) db.Debug().Where("create_time < ?", start).Delete(&data.Orders{}) } 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{} start := timeNow.Format("2006-01-02 15:04:05") first := db.Model(detail).Where("create_time < ?", start).Order("create_time asc").First(detail) if first.RowsAffected == 0 { fmt.Println("no pay_details data") return } deleteTime := detail.CreateTime db.Debug().Where("create_time >= ?", deleteTime).Delete(&data.PayDetailsCopy1{}) _execPayDetails(db, start, 0) db.Debug().Where("create_time < ?", start).Delete(&data.PayDetails{}) } 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{} start := timeNow.Format("2006-01-02 15:04:05") first := db.Model(detail).Where("create_time < ?", start).Order("create_time asc").First(detail) if first.RowsAffected == 0 { fmt.Println("no user_money_details data") return } deleteTime := detail.CreateTime db.Debug().Where("create_time >= ?", deleteTime).Delete(&data.UserMoneyDetailsCopy1{}) _execUserMoneyDetails(db, start, 0) db.Debug().Where("create_time < ?", start).Delete(&data.UserMoneyDetails{}) } 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) } func copyCourseCollect(db *gorm.DB, timeNow time.Time) { collect := &data.CourseCollect{} start := timeNow.Format("2006-01-02 15:04:05") first := db.Model(collect).Where("create_time < ?", start).Order("create_time asc").First(collect) if first.RowsAffected == 0 { fmt.Println("no course_collect data") return } deleteTime := collect.CreateTime db.Debug().Where("create_time >= ?", deleteTime).Delete(&data.CourseCollectCopy1{}) _execCourseCollect(db, start, 0) db.Debug().Where("create_time < ?", start).Delete(&data.CourseCollect{}) } func _execCourseCollect(db *gorm.DB, timeNow string, index int) { var collects []*data.CourseCollect db.Debug().Where("create_time < ?", timeNow).Limit(1000).Offset(index * 1000).Find(&collects) fmt.Printf("index: %d, timeNow: %s ,course_collect count: %d\n", index, timeNow, len(collects)) if len(collects) == 0 { return } var copyList []*data.CourseCollectCopy1 for _, collect := range collects { collectCopy := &data.CourseCollectCopy1{} CopyStruct(collect, collectCopy) copyList = append(copyList, collectCopy) } db.Create(©List) _execCourseCollect(db, timeNow, index+1) } func copyCourseUser(db *gorm.DB, timeNow time.Time) { user := &data.CourseUser{} start := timeNow.Format("2006-01-02 15:04:05") first := db.Model(user).Where("create_time < ?", start).Order("create_time asc").First(user) if first.RowsAffected == 0 { fmt.Println("no course_user data") return } deleteTime := user.CreateTime db.Debug().Where("create_time >= ?", deleteTime).Delete(&data.CourseUserCopy1{}) _execCourseUser(db, start, 0) db.Debug().Where("create_time < ?", start).Delete(&data.CourseUser{}) } func _execCourseUser(db *gorm.DB, timeNow string, index int) { var users []*data.CourseUser db.Debug().Where("create_time < ?", timeNow).Limit(1000).Offset(index * 1000).Find(&users) fmt.Printf("index: %d, timeNow: %s ,course_user count: %d\n", index, timeNow, len(users)) if len(users) == 0 { return } var copyList []*data.CourseUserCopy1 for _, user := range users { userCopy := &data.CourseUserCopy1{} CopyStruct(user, userCopy) copyList = append(copyList, userCopy) } db.Create(©List) _execCourseUser(db, timeNow, index+1) } func copyDiscSpinningRecord(db *gorm.DB, timeNow time.Time) { record := &data.DiscSpinningRecord{} start := timeNow.Format("2006-01-02 15:04:05") first := db.Model(record).Where("create_time < ?", start).Order("create_time asc").First(record) if first.RowsAffected == 0 { fmt.Println("no disc_spinning_record data") return } deleteTime := record.CreateTime db.Debug().Where("create_time >= ?", deleteTime).Delete(&data.DiscSpinningRecordCopy1{}) _execDiscSpinningRecord(db, start, 0) db.Debug().Where("create_time < ?", start).Delete(&data.DiscSpinningRecord{}) } func _execDiscSpinningRecord(db *gorm.DB, timeNow string, index int) { var records []*data.DiscSpinningRecord db.Debug().Where("create_time < ?", timeNow).Limit(1000).Offset(index * 1000).Find(&records) fmt.Printf("index: %d, timeNow: %s ,disc_spinning_record count: %d\n", index, timeNow, len(records)) if len(records) == 0 { return } var copyList []*data.DiscSpinningRecordCopy1 for _, record := range records { recordCopy := &data.DiscSpinningRecordCopy1{} CopyStruct(record, recordCopy) copyList = append(copyList, recordCopy) } db.Create(©List) _execDiscSpinningRecord(db, timeNow, index+1) } // CopyStruct 使用反射复制结构体 func CopyStruct(src, dst interface{}) { _ = copier.Copy(dst, src) }