main.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. package main
  2. import (
  3. "errors"
  4. "github.com/sirupsen/logrus"
  5. "github.com/xuri/excelize/v2"
  6. "strconv"
  7. "time"
  8. )
  9. var (
  10. log = logrus.WithField("module", "main")
  11. excelHandle *excelize.File
  12. ids = []string{"20251204", "20251205", "20251208"}
  13. startId = 16127287
  14. endId = 16127485
  15. )
  16. func init() {
  17. logrus.SetReportCaller(true)
  18. logrus.SetFormatter(&logrus.TextFormatter{
  19. //以下设置只是为了使输出更美观
  20. DisableColors: false,
  21. DisableTimestamp: false,
  22. TimestampFormat: "2006-01-02 15:04:05",
  23. })
  24. //logger := &lumberjack.Logger{
  25. // Filename: "./pest.log",
  26. // MaxSize: 500, // 日志文件大小,单位是 MB
  27. // MaxBackups: 3, // 最大过期日志保留个数
  28. // MaxAge: 28, // 保留过期文件最大时间,单位 天
  29. // LocalTime: true, // 使用本地时间
  30. // Compress: true, // 是否压缩日志,默认是不压缩。这里设置为true,压缩日志
  31. //}
  32. //logrus.SetOutput(logger) // logrus 设置日志的输出方式
  33. for i := startId; i <= endId; i++ {
  34. ids = append(ids, strconv.Itoa(i))
  35. }
  36. }
  37. func addSheetHeader(id string, row string) error {
  38. var tmp []interface{}
  39. tmp = append(tmp, "id")
  40. for i := 0; i < 21; i++ {
  41. tmp = append(tmp, "通用数据-"+strconv.Itoa(i))
  42. }
  43. tmp = append(tmp, "更新时间")
  44. if err := excelHandle.SetSheetRow(id, row, &tmp); err != nil {
  45. log.Errorf("插入表格错误(%s):%v", id, err)
  46. return err
  47. }
  48. return nil
  49. }
  50. func putDataToSheet(id string, row string, data []SDData) error {
  51. var tmp []interface{}
  52. if len(data) != 21 {
  53. return errors.New("数据长度不对")
  54. }
  55. tmp = append(tmp, id)
  56. for _, d := range data {
  57. tmp = append(tmp, d.Data)
  58. }
  59. tmp = append(tmp, data[0].Time)
  60. if err := excelHandle.SetSheetRow(id, row, &tmp); err != nil {
  61. log.Errorf("插入表格错误(%s):%v", id, err)
  62. return err
  63. }
  64. return nil
  65. }
  66. func main() {
  67. var err error
  68. log.Info("start")
  69. //excelHandle, err = excelize.OpenFile("real.xlsx")
  70. //if err != nil {
  71. // log.Errorf("打开Excel失败", err)
  72. //}
  73. log.Info("新建 excel 表格")
  74. excelHandle = excelize.NewFile()
  75. defer excelHandle.Close()
  76. err = excelHandle.SaveAs(time.Now().Format("20060102150405") + ".xlsx")
  77. if err != nil {
  78. log.Errorf("保存文件失败%v", err)
  79. }
  80. //新建所有sheet
  81. for _, id := range ids {
  82. if _, err := excelHandle.NewSheet(id); err != nil {
  83. log.Errorf("新建表格错误(%s):%v", id, err)
  84. continue
  85. }
  86. if err := addSheetHeader(id, "A1"); err != nil {
  87. log.Errorf("增加表头错误(%s):%v", id, err)
  88. }
  89. }
  90. err = excelHandle.DeleteSheet("Sheet1")
  91. if err != nil {
  92. log.Error("删除默认sheet 失败", err)
  93. }
  94. //base := "http://dataupload.nongtt.com/devdata/GetSensorData?key=Nongtt0020251204"
  95. base := "http://dataupload.nongtt.com/devdata/GetSensorData?key=Nongtt00"
  96. col := 2
  97. for true {
  98. for _, id := range ids {
  99. url := base + id
  100. log.WithField("id", id).Info("获取数据")
  101. data, err := FetchAndParseData(url)
  102. if err != nil {
  103. log.Errorf("获取数据失败%v", err)
  104. continue
  105. }
  106. log.WithField("id", id).Info("获取完成, 准备插入数据")
  107. //for i, datum := range data.Data {
  108. // var tmp []interface{}
  109. // tmp = append(tmp, datum.Key, datum.Addr, datum.Code, datum.Name, datum.Data, datum.Time)
  110. //
  111. // if err := excelHandle.SetSheetRow(id, "A"+strconv.Itoa(i+1), &tmp); err != nil {
  112. // log.Errorf("插入表格错误(%s):%v", id, err)
  113. // }
  114. //}
  115. if err := putDataToSheet(id, "A"+strconv.Itoa(col), data.Data); err != nil {
  116. log.Error("插入表格错误(%s):%v", id, err)
  117. continue
  118. }
  119. log.WithField("id", id).Info("插入数据 完成")
  120. }
  121. if err := excelHandle.Save(); err != nil {
  122. log.Error("保存文件失败%v", err)
  123. continue
  124. }
  125. log.Info("保存 完成")
  126. time.Sleep(time.Minute)
  127. col++
  128. }
  129. }