|
@@ -0,0 +1,237 @@
|
|
|
+package watch
|
|
|
+
|
|
|
+import (
|
|
|
+ "fmt"
|
|
|
+ "hongze/mysteel_watch/models/index"
|
|
|
+ "hongze/mysteel_watch/utils"
|
|
|
+ "log"
|
|
|
+ "strings"
|
|
|
+ "time"
|
|
|
+
|
|
|
+ "github.com/fsnotify/fsnotify"
|
|
|
+ "github.com/xuri/excelize/v2"
|
|
|
+)
|
|
|
+
|
|
|
+func ListenFolderNew() {
|
|
|
+ fmt.Println("-----文件夹监听-------")
|
|
|
+ watcher, err := fsnotify.NewWatcher()
|
|
|
+ if err != nil {
|
|
|
+ log.Fatal(err)
|
|
|
+ }
|
|
|
+ defer watcher.Close()
|
|
|
+
|
|
|
+ done2 := make(chan bool)
|
|
|
+ go func() {
|
|
|
+ for {
|
|
|
+ select {
|
|
|
+ case event, ok := <-watcher.Events:
|
|
|
+ if ok && event.Op == fsnotify.Create &&
|
|
|
+ !strings.Contains(event.Name, "tmp") &&
|
|
|
+ !strings.Contains(event.Name, ".TMP") &&
|
|
|
+ !strings.Contains(event.Name, "~") &&
|
|
|
+ (strings.Contains(event.Name, "xlsx") || strings.Contains(event.Name, "xls")) {
|
|
|
+ WatchIndexFile(event.Name)
|
|
|
+ }
|
|
|
+ case err := <-watcher.Errors:
|
|
|
+ log.Println("error:", err)
|
|
|
+ case <-time.After(60 * time.Second):
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ err = watcher.Add(utils.IndexSaveDir)
|
|
|
+ if err != nil {
|
|
|
+ log.Fatal(err)
|
|
|
+ }
|
|
|
+ <-done2
|
|
|
+}
|
|
|
+
|
|
|
+//检测指标文件
|
|
|
+func WatchIndexFile(filePath string) {
|
|
|
+ fmt.Println("filePath:", filePath)
|
|
|
+ time.Sleep(2 * time.Second)
|
|
|
+ //读取文件内容
|
|
|
+ f, err := excelize.OpenFile(filePath)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("OpenFile:" + filePath + ",Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer func() {
|
|
|
+ if err := f.Close(); err != nil {
|
|
|
+ fmt.Println("FileClose Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+ sheetList := f.GetSheetList()
|
|
|
+ for _, sv := range sheetList {
|
|
|
+
|
|
|
+ var indexName, indexCode, unit, source, frequency, startDate, endDate, describe string
|
|
|
+ var indexId int64
|
|
|
+ rows, err := f.GetRows(sv)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("f.GetRows:err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ indexObj := new(index.BaseFromMysteelChemicalIndex)
|
|
|
+ dataList := make([]index.BaseFromMysteelChemicalData, 0)
|
|
|
+
|
|
|
+ dataMap := make(map[string]string)
|
|
|
+ for rk, row := range rows {
|
|
|
+ if rk > 0 {
|
|
|
+ if rk < 10 {
|
|
|
+ for ck, colCell := range row {
|
|
|
+ if ck == 1 {
|
|
|
+ if rk == 1 {
|
|
|
+ indexName = colCell
|
|
|
+ }
|
|
|
+ if rk == 2 {
|
|
|
+ unit = colCell
|
|
|
+ }
|
|
|
+ if rk == 3 {
|
|
|
+ source = colCell
|
|
|
+ }
|
|
|
+ if rk == 4 {
|
|
|
+ indexCode = colCell
|
|
|
+ }
|
|
|
+ if rk == 5 {
|
|
|
+ frequency = colCell
|
|
|
+ }
|
|
|
+ if rk == 6 {
|
|
|
+ dateArr := strings.Split(colCell, "~")
|
|
|
+ if len(dateArr) >= 2 {
|
|
|
+ startDate = dateArr[0]
|
|
|
+ endDate = dateArr[1]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if rk == 7 {
|
|
|
+ describe = colCell
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if rk == 9 {
|
|
|
+ //判断指标是否存在
|
|
|
+ var isAdd int
|
|
|
+ item, err := indexObj.GetIndexItem(indexCode)
|
|
|
+ if err != nil {
|
|
|
+ if err.Error() == "record not found" {
|
|
|
+ isAdd = 1
|
|
|
+ } else {
|
|
|
+ isAdd = -1
|
|
|
+ fmt.Println("GetIndexItem Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if item != nil && item.BaseFromMysteelChemicalIndexId > 0 {
|
|
|
+ fmt.Println("item:", item)
|
|
|
+ isAdd = 2
|
|
|
+ } else {
|
|
|
+ isAdd = 1
|
|
|
+ }
|
|
|
+
|
|
|
+ fmt.Println("isAdd:", isAdd)
|
|
|
+
|
|
|
+ if isAdd == 1 {
|
|
|
+ indexObj.IndexCode = indexCode
|
|
|
+ indexObj.IndexName = indexName
|
|
|
+ indexObj.Unit = unit
|
|
|
+ indexObj.Source = source
|
|
|
+ indexObj.Describe = describe
|
|
|
+ indexObj.StartDate = startDate
|
|
|
+ indexObj.EndDate = endDate
|
|
|
+ indexObj.Frequency = frequency
|
|
|
+ err = indexObj.Add()
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("add err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ indexId = indexObj.BaseFromMysteelChemicalIndexId
|
|
|
+ } else if isAdd == 2 {
|
|
|
+ indexObj.IndexCode = indexCode
|
|
|
+ indexObj.IndexName = indexName
|
|
|
+ indexObj.Unit = unit
|
|
|
+ indexObj.Source = source
|
|
|
+ indexObj.Describe = describe
|
|
|
+ indexObj.StartDate = startDate
|
|
|
+ indexObj.EndDate = endDate
|
|
|
+ indexObj.Frequency = frequency
|
|
|
+ indexObj.ModifyTime = time.Now()
|
|
|
+ indexId = item.BaseFromMysteelChemicalIndexId
|
|
|
+ //修改数据
|
|
|
+ updateColsArr := make([]string, 0)
|
|
|
+ updateColsArr = append(updateColsArr, "index_name")
|
|
|
+ updateColsArr = append(updateColsArr, "unit")
|
|
|
+ updateColsArr = append(updateColsArr, "source")
|
|
|
+ updateColsArr = append(updateColsArr, "frequency")
|
|
|
+ updateColsArr = append(updateColsArr, "start_date")
|
|
|
+ updateColsArr = append(updateColsArr, "end_date")
|
|
|
+ updateColsArr = append(updateColsArr, "describe")
|
|
|
+ updateColsArr = append(updateColsArr, "end_date")
|
|
|
+ updateColsArr = append(updateColsArr, "modify_time")
|
|
|
+ indexObj.Update(updateColsArr)
|
|
|
+
|
|
|
+ dataObj := new(index.BaseFromMysteelChemicalData)
|
|
|
+ //获取已存在的所有数据
|
|
|
+ dataList, err := dataObj.GetIndexDataList(indexCode)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("GetIndexDataList Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ fmt.Println("dataListLen:", len(dataList))
|
|
|
+ for _, v := range dataList {
|
|
|
+ dateStr := v.DataTime.Format(utils.FormatDate)
|
|
|
+ dataMap[dateStr] = v.Value
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ var date, value string
|
|
|
+ for ck, colCell := range row {
|
|
|
+ if ck == 0 {
|
|
|
+ date = colCell
|
|
|
+ } else {
|
|
|
+ value = colCell
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if _, ok := dataMap[date]; !ok {
|
|
|
+ dateTime, err := time.ParseInLocation(utils.FormatDate, date, time.Local)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("time.ParseInLocation Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ dataItem := new(index.BaseFromMysteelChemicalData)
|
|
|
+ dataItem.BaseFromMysteelChemicalIndexId = indexId
|
|
|
+ dataItem.IndexCode = indexCode
|
|
|
+ dataItem.DataTime = dateTime
|
|
|
+ dataItem.Value = value
|
|
|
+ dataItem.CreateTime = time.Now()
|
|
|
+ dataItem.ModifyTime = time.Now()
|
|
|
+ dataList = append(dataList, *dataItem)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(dataList) > 0 {
|
|
|
+ dataObj := new(index.BaseFromMysteelChemicalData)
|
|
|
+ err = dataObj.Add(dataList)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("dataObj.Add() Err:" + err.Error())
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestWatch() {
|
|
|
+ filePath := `D:\hz\mysteel_data\钢联数据_煤炭:运费价格:印尼→中国:巴拿马型(日)_2022-9-4_1662303985672.xlsx`
|
|
|
+ WatchIndexFile(filePath)
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+CREATE动作即临时文件的创建
|
|
|
+WRITE写文件动作
|
|
|
+CHMOD修改文件属性
|
|
|
+REMOVE删除临时文件。
|
|
|
+*/
|