| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- package main
- import (
- "crypto/sha256"
- "encoding/hex"
- "flag"
- "fmt"
- "log"
- "os"
- "time"
- log2 "github.com/sirupsen/logrus"
- "gorm.io/driver/mysql"
- "gorm.io/gorm"
- "gorm.io/gorm/logger"
- "gorm.io/gorm/schema"
- )
- // 激活链账户
- var apiUrl, dsn, phone string
- var size int
- func main() {
- flag.StringVar(&apiUrl, "url", " https://test-dna.bitfactory.cn/registration/api/v2/account/upload", "激活接口地址")
- flag.StringVar(&dsn, "dsn", "root:rootPassword@tcp(192.168.150.40:23306)/dna_test", "mysql连接地址")
- flag.StringVar(&phone, "phone", "", "激活bid的手机号")
- flag.IntVar(&size, "size", 1, "每次激活的链账户数")
- flag.Parse()
- if size < 1 || size > 100 {
- log2.Error("size must be between 1 and 100")
- return
- }
- if phone == "" {
- log2.Error("phone is required")
- return
- }
- data := []byte(phone)
- // 使用SHA-256哈希算法计算哈希值
- hash := sha256.Sum256(data)
- // 将哈希值转换为十六进制字符串
- phoneHash := hex.EncodeToString(hash[:])
- // 连接mysql
- newLogger := logger.New(
- log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer
- logger.Config{
- SlowThreshold: time.Second, // 慢 SQL 阈值
- LogLevel: logger.Silent, // Log level
- Colorful: false, // 禁用彩色打印
- },
- )
- dsn := fmt.Sprintf("%s?charset=utf8&parseTime=True", dsn)
- db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{Logger: newLogger,
- NamingStrategy: schema.NamingStrategy{
- TablePrefix: "t_",
- SingularTable: false,
- },
- })
- if err != nil {
- log2.WithError(err).Error("init db failed")
- return
- }
- var total int64
- err = db.Model(&AccountBid{}).Select("Max(id)").Where("status", 2).Scan(&total).Error
- if err != nil {
- log2.WithError(err).Error("query bid total number failed")
- return
- }
- var minId int64
- for minId < total {
- fmt.Println(minId)
- var list []AccountBid
- err = db.Debug().Model(&AccountBid{}).Where("status", 2).Where("id > ?", minId).Limit(size).Order("id asc").Find(&list).Error
- if err != nil {
- log2.WithError(err).Error("query not active bid failed")
- return
- }
- if len(list) == 0 {
- log2.Info("there is no unverified data left")
- break
- }
- for _, item := range list {
- fmt.Println(item)
- }
- err = db.Transaction(func(tx *gorm.DB) error {
- // var bidReq []Bid
- result := tx.Debug().Model(&AccountBid{}).Where("status", 2).Where("id > ?", minId).Limit(size).Order("id asc").Update("status", 3)
- if result.Error != nil {
- log2.WithError(err).Error("update bid status failed")
- return err
- }
- fmt.Println("影响行数:", result.RowsAffected)
- // for j := 0; j < len(list); j++ {
- // bidReq = append(bidReq, Bid{
- // Phone: phoneHash,
- // Bid: list[j].Bid,
- // })
- // fmt.Println(list[j])
- // }
- fmt.Println(phoneHash)
- return nil
- })
- if err != nil {
- return
- }
- minId = list[len(list)-1].Id
- }
- log2.Info("finish")
- }
- type Req struct {
- Data []Bid `json:"data"`
- }
- type Bid struct {
- Phone string `json:"phone"`
- Bid string `json:"bid"`
- }
- type Resp struct {
- RetCode int `json:"retCode"`
- RetMsg string `json:"retMsg"`
- }
- // 链账户关联表
- type AccountBid struct {
- Id int64 `gorm:"column:id;type:bigint(20) unsigned;primary_key;AUTO_INCREMENT;comment:主键id" json:"id"`
- Bid string `gorm:"column:bid;type:char(40);comment:星火bid;NOT NULL" json:"bid"`
- PublicKey string `gorm:"column:public_key;type:varchar(100);comment:公钥;NOT NULL" json:"public_key"`
- PrivateKey string `gorm:"column:private_key;type:varchar(100);comment:私钥;NOT NULL" json:"private_key"`
- Status int `gorm:"column:status;type:tinyint(4);default:2;comment:激活状态 1:已激活 2:未激活;NOT NULL" json:"status"`
- Account string `gorm:"column:account;type:char(42);comment:文昌链链账户地址;NOT NULL" json:"account"`
- ErrMsg string `gorm:"column:err_msg;type:varchar(255);comment:异常信息;NOT NULL" json:"err_msg"`
- CreatedAt time.Time `gorm:"<-:false"`
- UpdatedAt time.Time `gorm:"<-:false"`
- }
|