activate.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. package main
  2. import (
  3. "crypto/sha256"
  4. "encoding/hex"
  5. "flag"
  6. "fmt"
  7. "log"
  8. "os"
  9. "time"
  10. log2 "github.com/sirupsen/logrus"
  11. "gorm.io/driver/mysql"
  12. "gorm.io/gorm"
  13. "gorm.io/gorm/logger"
  14. "gorm.io/gorm/schema"
  15. )
  16. // 激活链账户
  17. var apiUrl, dsn, phone string
  18. var size int
  19. func main() {
  20. flag.StringVar(&apiUrl, "url", " https://test-dna.bitfactory.cn/registration/api/v2/account/upload", "激活接口地址")
  21. flag.StringVar(&dsn, "dsn", "root:rootPassword@tcp(192.168.150.40:23306)/dna_test", "mysql连接地址")
  22. flag.StringVar(&phone, "phone", "", "激活bid的手机号")
  23. flag.IntVar(&size, "size", 1, "每次激活的链账户数")
  24. flag.Parse()
  25. if size < 1 || size > 100 {
  26. log2.Error("size must be between 1 and 100")
  27. return
  28. }
  29. if phone == "" {
  30. log2.Error("phone is required")
  31. return
  32. }
  33. data := []byte(phone)
  34. // 使用SHA-256哈希算法计算哈希值
  35. hash := sha256.Sum256(data)
  36. // 将哈希值转换为十六进制字符串
  37. phoneHash := hex.EncodeToString(hash[:])
  38. // 连接mysql
  39. newLogger := logger.New(
  40. log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer
  41. logger.Config{
  42. SlowThreshold: time.Second, // 慢 SQL 阈值
  43. LogLevel: logger.Silent, // Log level
  44. Colorful: false, // 禁用彩色打印
  45. },
  46. )
  47. dsn := fmt.Sprintf("%s?charset=utf8&parseTime=True", dsn)
  48. db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{Logger: newLogger,
  49. NamingStrategy: schema.NamingStrategy{
  50. TablePrefix: "t_",
  51. SingularTable: false,
  52. },
  53. })
  54. if err != nil {
  55. log2.WithError(err).Error("init db failed")
  56. return
  57. }
  58. var total int64
  59. err = db.Model(&AccountBid{}).Select("Max(id)").Where("status", 2).Scan(&total).Error
  60. if err != nil {
  61. log2.WithError(err).Error("query bid total number failed")
  62. return
  63. }
  64. var minId int64
  65. for minId < total {
  66. fmt.Println(minId)
  67. var list []AccountBid
  68. err = db.Debug().Model(&AccountBid{}).Where("status", 2).Where("id > ?", minId).Limit(size).Order("id asc").Find(&list).Error
  69. if err != nil {
  70. log2.WithError(err).Error("query not active bid failed")
  71. return
  72. }
  73. if len(list) == 0 {
  74. log2.Info("there is no unverified data left")
  75. break
  76. }
  77. for _, item := range list {
  78. fmt.Println(item)
  79. }
  80. err = db.Transaction(func(tx *gorm.DB) error {
  81. // var bidReq []Bid
  82. result := tx.Debug().Model(&AccountBid{}).Where("status", 2).Where("id > ?", minId).Limit(size).Order("id asc").Update("status", 3)
  83. if result.Error != nil {
  84. log2.WithError(err).Error("update bid status failed")
  85. return err
  86. }
  87. fmt.Println("影响行数:", result.RowsAffected)
  88. // for j := 0; j < len(list); j++ {
  89. // bidReq = append(bidReq, Bid{
  90. // Phone: phoneHash,
  91. // Bid: list[j].Bid,
  92. // })
  93. // fmt.Println(list[j])
  94. // }
  95. fmt.Println(phoneHash)
  96. return nil
  97. })
  98. if err != nil {
  99. return
  100. }
  101. minId = list[len(list)-1].Id
  102. }
  103. log2.Info("finish")
  104. }
  105. type Req struct {
  106. Data []Bid `json:"data"`
  107. }
  108. type Bid struct {
  109. Phone string `json:"phone"`
  110. Bid string `json:"bid"`
  111. }
  112. type Resp struct {
  113. RetCode int `json:"retCode"`
  114. RetMsg string `json:"retMsg"`
  115. }
  116. // 链账户关联表
  117. type AccountBid struct {
  118. Id int64 `gorm:"column:id;type:bigint(20) unsigned;primary_key;AUTO_INCREMENT;comment:主键id" json:"id"`
  119. Bid string `gorm:"column:bid;type:char(40);comment:星火bid;NOT NULL" json:"bid"`
  120. PublicKey string `gorm:"column:public_key;type:varchar(100);comment:公钥;NOT NULL" json:"public_key"`
  121. PrivateKey string `gorm:"column:private_key;type:varchar(100);comment:私钥;NOT NULL" json:"private_key"`
  122. Status int `gorm:"column:status;type:tinyint(4);default:2;comment:激活状态 1:已激活 2:未激活;NOT NULL" json:"status"`
  123. Account string `gorm:"column:account;type:char(42);comment:文昌链链账户地址;NOT NULL" json:"account"`
  124. ErrMsg string `gorm:"column:err_msg;type:varchar(255);comment:异常信息;NOT NULL" json:"err_msg"`
  125. CreatedAt time.Time `gorm:"<-:false"`
  126. UpdatedAt time.Time `gorm:"<-:false"`
  127. }