main.go 4.1 KB

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