task.go 7.7 KB

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