clarksons_watch.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. package services
  2. import (
  3. "encoding/json"
  4. "eta/eta_data_analysis/models"
  5. "eta/eta_data_analysis/utils"
  6. "fmt"
  7. "github.com/patrickmn/go-cache"
  8. "github.com/tealeg/xlsx"
  9. "io/fs"
  10. "os"
  11. "path/filepath"
  12. "syscall"
  13. "time"
  14. )
  15. func clarksonsWatch() {
  16. fmt.Println("clarksonsWatch start")
  17. utils.FileLog.Info("clarksonsWatch start")
  18. var err error
  19. defer func() {
  20. if err != nil {
  21. fmt.Println("clarksonsWatch Err:" + err.Error())
  22. utils.FileLog.Info(fmt.Sprintf("clarksonsWatch, Err: %s", err))
  23. }
  24. }()
  25. var cacheClient *cache.Cache
  26. if cacheClient == nil {
  27. cacheClient = cache.New(365*24*time.Hour, 365*24*time.Hour)
  28. }
  29. err = filepath.Walk(utils.ClarkSonsFilePath, func(path string, info fs.FileInfo, err error) error {
  30. if err != nil {
  31. return err
  32. }
  33. if !info.IsDir() {
  34. fileInfo, e := os.Stat(path)
  35. if e != nil {
  36. err = e
  37. fmt.Println("os.Stat:", err.Error())
  38. utils.FileLog.Info(fmt.Sprintf("os.Stat, Err: %s", err))
  39. return err
  40. }
  41. winFileAttr := fileInfo.Sys().(*syscall.Win32FileAttributeData)
  42. modifyTimeStr := utils.SecondToTime(winFileAttr.LastWriteTime.Nanoseconds() / 1e9).Format(utils.FormatDateTime)
  43. existModifyTime, ok := cacheClient.Get(path)
  44. if ok {
  45. existModifyTimeStr := existModifyTime.(string)
  46. if existModifyTimeStr != modifyTimeStr {
  47. err = Clarksons(path)
  48. }
  49. } else {
  50. err = Clarksons(path)
  51. }
  52. cacheClient.Delete(path)
  53. cacheClient.Set(path, modifyTimeStr, 24*time.Hour)
  54. }
  55. return nil
  56. })
  57. }
  58. func Clarksons(path string) (err error) {
  59. defer func() {
  60. if err != nil {
  61. fmt.Println("Clarksons Err:" + err.Error())
  62. utils.FileLog.Info(fmt.Sprintf("Clarksons, Err: %s", err))
  63. }
  64. }()
  65. //path = "/Users/xi/Desktop/SIN_Timeseries_20241129063320.xlsx"
  66. var xlFile *xlsx.File
  67. exist, err := PathExists(path)
  68. if err != nil {
  69. fmt.Println(err)
  70. return
  71. }
  72. if exist {
  73. xlFile, err = xlsx.OpenFile(path)
  74. if err != nil {
  75. fmt.Println("OpenFile err:", err)
  76. utils.FileLog.Info(fmt.Sprintf("OpenFile, Err: %s", err))
  77. return
  78. }
  79. } else {
  80. fmt.Println("Not Exist")
  81. utils.FileLog.Info("Not Exist")
  82. return
  83. }
  84. sheetDatas := make([]models.SheetData, 0)
  85. for i, sheet := range xlFile.Sheets {
  86. if i > 0 {
  87. break
  88. }
  89. data := sheet
  90. sheetData := models.SheetData{
  91. Name: data.Name,
  92. MaxRow: data.MaxRow,
  93. MaxCol: data.MaxCol,
  94. Hidden: data.Hidden,
  95. Selected: data.Selected,
  96. }
  97. rows := make([]models.Row, 0)
  98. for _, v := range data.Rows {
  99. cells := make([]models.Cell, 0)
  100. for _, cell := range v.Cells {
  101. cells = append(cells, models.Cell{
  102. Value: cell.String(),
  103. })
  104. }
  105. row := models.Row{
  106. Cells: cells,
  107. }
  108. rows = append(rows, row)
  109. }
  110. sheetData.Rows = rows
  111. sheetDatas = append(sheetDatas, sheetData)
  112. }
  113. params := make(map[string]interface{})
  114. params["SheetData"] = sheetDatas
  115. result, e := PostEdbLib(params, utils.LIB_ROUTE_CLARKSONS)
  116. if e != nil {
  117. b, _ := json.Marshal(params)
  118. fmt.Println(e)
  119. utils.FileLog.Info(fmt.Sprintf("PostEdbLib err: %s, params: %s", e.Error(), string(b)))
  120. return
  121. }
  122. resp := new(models.BaseEdbLibResponse)
  123. if e := json.Unmarshal(result, &resp); e != nil {
  124. utils.FileLog.Info(fmt.Sprintf("json.Unmarshal err: %s", e))
  125. return
  126. }
  127. if resp.Ret != 200 {
  128. utils.FileLog.Info(fmt.Sprintf("Msg: %s, ErrMsg: %s", resp.Msg, resp.ErrMsg))
  129. return
  130. }
  131. return
  132. }