task.go 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. package services
  2. import (
  3. ccfService "eta/eta_data_analysis/services/base_from_ccf"
  4. hisugarService "eta/eta_data_analysis/services/base_from_hisugar"
  5. oilchemService "eta/eta_data_analysis/services/base_from_oilchem"
  6. "eta/eta_data_analysis/utils"
  7. "fmt"
  8. "github.com/beego/beego/v2/task"
  9. "github.com/patrickmn/go-cache"
  10. "github.com/robfig/cron/v3"
  11. "io/fs"
  12. "os"
  13. "path/filepath"
  14. "strings"
  15. "syscall"
  16. "time"
  17. )
  18. func Task() {
  19. fmt.Println("task start")
  20. if utils.YongyiOpen == "1" {
  21. // 每隔两分钟检测文件是否变动,如果发生变动,则自动解析数据到库里
  22. readWatchYongyiFile := task.NewTask("ReadWatchYongyiFile", "0 */2 * * * *", ReadWatchYongyiFile)
  23. task.AddTask("监听涌溢咨询文件夹并解析Excel", readWatchYongyiFile)
  24. yongyiDownloadDaily := task.NewTask("YongyiDownloadDaily", "0 */25 13-23 * * *", YongyiDownloadDaily)
  25. task.AddTask("涌益咨询日度指标下载", yongyiDownloadDaily)
  26. yongyiDownloadWeekly := task.NewTask("YongyiDownloadWeekly", "0 */30 16-23 * * 4,5,6,0", YongyiDownloadWeekyly)
  27. task.AddTask("涌益咨询周度指标下载", yongyiDownloadWeekly)
  28. }
  29. if utils.CoalMineOpen == "1" {
  30. c := cron.New(cron.WithSeconds())
  31. //每2分钟检测一次指标文件是否更新
  32. _, err := c.AddFunc("0 */2 * * * *", ReadWatchIndexFile)
  33. if err != nil {
  34. fmt.Println("watch.ReadWatchIndexFile err" + err.Error())
  35. utils.FileLog.Info("watch.ReadWatchIndexFile err" + err.Error())
  36. }
  37. c.Start()
  38. }
  39. // 汾渭数据
  40. if utils.FenweiOpen == "1" {
  41. // 每5分钟检测一次目录是否有新文件
  42. fenWeiReadWatchIndexFile := task.NewTask("fenWeiReadWatchIndexFile", "0 */5 * * * *", FenweiReadWatchIndexFile)
  43. task.AddTask("汾渭数据指标文件检测", fenWeiReadWatchIndexFile)
  44. }
  45. if utils.MtjhOpen == "1" {
  46. c := cron.New(cron.WithSeconds())
  47. //每2分钟检测一次指标文件是否更新
  48. _, err := c.AddFunc("0 */2 * * * *", mtjhWatch)
  49. if err != nil {
  50. fmt.Println("watch.mtjhWatch err" + err.Error())
  51. utils.FileLog.Info("watch.mtjhWatch err" + err.Error())
  52. }
  53. c.Start()
  54. }
  55. if utils.CoalMailAttachmentOpen == "1" {
  56. mailAttachment := task.NewTask("MailAttachment", utils.CoalMailAttachmentTime, MailAttachment)
  57. task.AddTask("启动获取邮件附件脚本", mailAttachment)
  58. }
  59. // CCF化纤信息
  60. if utils.CCFOpen == "1" {
  61. // 原油石化早报-默认每日9:00
  62. ccfDailyTime := utils.CCFDailyTaskTime
  63. if ccfDailyTime == "" {
  64. ccfDailyTime = "0 0 9 * * *"
  65. }
  66. taskCCFOilDailyEdb := task.NewTask("taskCCFOilDailyEdb", ccfDailyTime, ccfService.TaskOilDailyEdb)
  67. task.AddTask("CCF原油石化早报", taskCCFOilDailyEdb)
  68. // 各品种周报-默认每周五17-19点每隔半小时
  69. ccfWeeklyTime := utils.CCFWeeklyTaskTime
  70. if ccfWeeklyTime == "" {
  71. ccfWeeklyTime = "0 */30 17-19 * * 5"
  72. }
  73. taskCCFWeeklyEdb := task.NewTask("taskCCFWeeklyEdb", ccfWeeklyTime, ccfService.TaskWeeklyEdb)
  74. task.AddTask("CCF周度指标", taskCCFWeeklyEdb)
  75. // 各品种装置-默认每周四15-18点每隔半小时
  76. ccfStockTime := utils.CCFStockTaskTime
  77. if ccfStockTime == "" {
  78. ccfStockTime = "0 */30 15-18 * * 4"
  79. }
  80. taskCCFStockTable := task.NewTask("taskCCFStockTable", ccfStockTime, ccfService.TaskStockTable)
  81. task.AddTask("CCF装置检修", taskCCFStockTable)
  82. }
  83. // 隆众资讯
  84. if utils.OilchemDataInit == "1" && utils.OilchemOpen == "1" {
  85. err := oilchemService.OilchemList(nil)
  86. if err != nil {
  87. utils.FileLog.Info("InitOilchemList Err:" + err.Error())
  88. }
  89. } else if utils.OilchemOpen == "1" {
  90. oilchemData := task.NewTask("oilchemData", "0 0 16 * * *", oilchemService.OilchemList)
  91. task.AddTask("卓创资讯", oilchemData)
  92. }
  93. if utils.HisugarOpen == "1" {
  94. hisugarData := task.NewTask("hisugarData", "0 30 16 * * *", hisugarService.HiugarCrawler)
  95. task.AddTask("泛糖科技", hisugarData)
  96. }
  97. task.StartTask()
  98. fmt.Println("task end")
  99. }
  100. func ReadWatchIndexFile() {
  101. fmt.Println("ReadWatchIndexFile start")
  102. var err error
  103. defer func() {
  104. if err != nil {
  105. fmt.Println("ReadWatchIndexFile Err:" + err.Error())
  106. }
  107. }()
  108. var cacheClient *cache.Cache
  109. if cacheClient == nil {
  110. cacheClient = cache.New(365*24*time.Hour, 365*24*time.Hour)
  111. }
  112. err = filepath.Walk(utils.CoalMineFilePath, func(path string, info fs.FileInfo, err error) error {
  113. if err != nil {
  114. return err
  115. }
  116. if !info.IsDir() {
  117. fileInfo, err := os.Stat(path)
  118. if err != nil {
  119. fmt.Println("os.Stat:", err.Error())
  120. }
  121. winFileAttr := fileInfo.Sys().(*syscall.Win32FileAttributeData)
  122. modifyTimeStr := utils.SecondToTime(winFileAttr.LastWriteTime.Nanoseconds() / 1e9).Format(utils.FormatDateTime)
  123. existModifyTime, ok := cacheClient.Get(path)
  124. if ok {
  125. existModifyTimeStr := existModifyTime.(string)
  126. if existModifyTimeStr != modifyTimeStr {
  127. if strings.Contains(path, "442家晋陕蒙煤矿周度产量数据") {
  128. err = Jsm(path)
  129. } else if strings.Contains(path, "内陆17省动力煤终端用户供耗存") {
  130. err = Inland(path)
  131. } else if strings.Contains(path, "沿海八省动力煤终端用户供耗存数据更新") {
  132. err = Coastal(path)
  133. } else if strings.Contains(path, "442家晋陕蒙历史数据") {
  134. err = JsmHistory(path)
  135. } else if strings.Contains(path, "CⅢ-8-16 25省市库存和日耗情况") {
  136. err = CoastalHistory(path)
  137. time.Sleep(time.Second * 10)
  138. err = InlandHistory(path)
  139. } else if strings.Contains(path, "分企业煤炭产量旬度数据") {
  140. err = Firm(path)
  141. }
  142. }
  143. } else {
  144. if strings.Contains(path, "442家晋陕蒙煤矿周度产量数据") {
  145. err = Jsm(path)
  146. } else if strings.Contains(path, "内陆17省动力煤终端用户供耗存") {
  147. err = Inland(path)
  148. } else if strings.Contains(path, "沿海八省动力煤终端用户供耗存数据更新") {
  149. err = Coastal(path)
  150. } else if strings.Contains(path, "442家晋陕蒙历史数据") {
  151. err = JsmHistory(path)
  152. } else if strings.Contains(path, "CⅢ-8-16 25省市库存和日耗情况") {
  153. err = CoastalHistory(path)
  154. time.Sleep(time.Second * 10)
  155. err = InlandHistory(path)
  156. } else if strings.Contains(path, "分企业煤炭产量旬度数据") {
  157. err = Firm(path)
  158. }
  159. }
  160. cacheClient.Delete(path)
  161. cacheClient.Set(path, modifyTimeStr, 24*time.Hour)
  162. }
  163. return nil
  164. })
  165. }