Ver código fonte

优化钢联指标刷新

tuoling805 1 ano atrás
pai
commit
4837e003d0
8 arquivos alterados com 868 adições e 70 exclusões
  1. 29 19
      init_serve/task.go
  2. 3 3
      services/index.go
  3. 175 42
      services/index_merge.go
  4. 162 0
      services/index_merge_v2.go
  5. 5 5
      utils/common.go
  6. 8 1
      watch/edb_lib.go
  7. 106 0
      watch/index_v2.go
  8. 380 0
      watch/watch_v2.go

+ 29 - 19
init_serve/task.go

@@ -30,32 +30,32 @@ func InitTask() {
 	//	panic("DownloadCvTask err" + err.Error())
 	//}
 
-	_, err = c.AddFunc("0 0 17 * * *", services.IndexRefreshAll)
+	_, err = c.AddFunc("0 0 17 * * *", services.MergeV2)
 	//_, err = c.AddFunc("0 */10 * * * *", services.IndexRefreshAll)
 	if err != nil {
 		global.LOG.Info("DownloadCvTask err" + err.Error())
 	}
 
-	//单独刷新甲醇指标
-	_, err = c.AddFunc("0 00 18 * * *", services.IndexRefreshMethanol)
-	//_, err = c.AddFunc("0 */12 * * * *", services.IndexRefreshMethanol)
-	if err != nil {
-		global.LOG.Info("DownloadCvTask err" + err.Error())
-	}
+	////单独刷新甲醇指标
+	//_, err = c.AddFunc("0 00 18 * * *", services.IndexRefreshMethanol)
+	////_, err = c.AddFunc("0 */12 * * * *", services.IndexRefreshMethanol)
+	//if err != nil {
+	//	global.LOG.Info("DownloadCvTask err" + err.Error())
+	//}
 
-	// 合并指标
-	_, err = c.AddFunc("0 */10 * * * *", services.Merge)
-	//_, err = c.AddFunc("0 */2 * * * *", services.Merge)
-	if err != nil {
-		global.LOG.Info("DownloadCvTask err" + err.Error())
-	}
+	//// 合并指标
+	//_, err = c.AddFunc("0 */10 * * * *", services.Merge)
+	////_, err = c.AddFunc("0 */2 * * * *", services.Merge)
+	//if err != nil {
+	//	global.LOG.Info("DownloadCvTask err" + err.Error())
+	//}
 
-	//检测需要及时刷新的指标
-	//_, err = c.AddFunc("0 30 17 * * *", services.IndexRefreshTimely)
-	_, err = c.AddFunc("0 */5 * * * *", services.IndexRefreshTimely)
-	if err != nil {
-		global.LOG.Info("DownloadCvTask err" + err.Error())
-	}
+	////检测需要及时刷新的指标
+	////_, err = c.AddFunc("0 30 17 * * *", services.IndexRefreshTimely)
+	//_, err = c.AddFunc("0 */5 * * * *", services.IndexRefreshTimely)
+	//if err != nil {
+	//	global.LOG.Info("DownloadCvTask err" + err.Error())
+	//}
 
 	//其他指标刷新
 	//_, err = c.AddFunc("0 30 12 * * *", services.IndexRefreshAll)
@@ -104,3 +104,13 @@ func CheckIndexCreate() {
 	}()
 	err = services.IndexCreateCheck()
 }
+
+func InitTask123() {
+	fmt.Println("InitTask start")
+	//services.MergeV2()
+
+	endDate := utils.GetNowWeekMonday().Format(utils.FormatDate)
+	fmt.Println(endDate)
+
+	fmt.Println("InitTask end")
+}

+ 3 - 3
services/index.go

@@ -436,10 +436,10 @@ func GetComment(filePath string) string {
 	}()
 
 	commentArr := excelFile.GetComments()
-	for k, v := range commentArr {
-		fmt.Println(k, v)
+	for _, v := range commentArr {
+		//fmt.Println(k, v)
 		for _, sv := range v {
-			fmt.Println("text:", sv.Text)
+			//fmt.Println("text:", sv.Text)
 			if sv.Text != "" {
 				return sv.Text
 			}

+ 175 - 42
services/index_merge.go

@@ -7,6 +7,7 @@ import (
 	"hongze/mysteel_watch/models/index"
 	"hongze/mysteel_watch/utils"
 	"hongze/mysteel_watch/watch"
+	"os"
 	"strconv"
 	"strings"
 	"time"
@@ -667,7 +668,7 @@ func indexMerge(frequency, filePre string, pageSize int) (err error) {
 		time.Sleep(1 * time.Second)
 		//刷新数据
 		//MysteelChemicalRefresh(mergeIndexFilePath)
-		AddIndexRefreshToLpush(mergeIndexFilePath)
+		//AddIndexRefreshToLpush(mergeIndexFilePath)
 	}
 	return
 }
@@ -782,51 +783,60 @@ func indexMerge(frequency, filePre string, pageSize int) (err error) {
 //}
 
 func GetIndexCommentV2(indexFilePath string, list []index.BaseFromMysteelChemicalIndex, fileIndex int) (commentResult string, err error) {
+	fmt.Println("GetIndexCommentV2 start")
+	fmt.Println(indexFilePath)
+	fmt.Println("GetIndexCommentV2 end")
 	//runMode := "release"
 	indexInfo := new(IndexObj)
 	if utils.FileIsExist(indexFilePath) { //文件存在
-		fmt.Println("utils.FileIsExist")
-		getCommentStr := GetComment(indexFilePath)
-		fmt.Println(getCommentStr)
-
-		err = json.Unmarshal([]byte(getCommentStr), &indexInfo)
+		//fmt.Println("utils.FileIsExist")
+		//getCommentStr := GetComment(indexFilePath)
+		////fmt.Println(getCommentStr)
+		//
+		//err = json.Unmarshal([]byte(getCommentStr), &indexInfo)
+		//if err != nil {
+		//	fmt.Println("json.Unmarshal err:" + err.Error())
+		//	return
+		//}
+		err = os.Remove(indexFilePath)
 		if err != nil {
-			fmt.Println("json.Unmarshal err:" + err.Error())
+			fmt.Println("os.Remove Err:" + err.Error() + ";indexFilePath:" + indexFilePath)
 			return
 		}
-	} else { //文件不存在,
-		indexInfo.BlankValue = "0"
-		indexInfo.CanMark = true
-		indexInfo.ChartLineType = "0"
-		indexInfo.DateBlock = 0
-		indexInfo.DateBlockCount = 1
-		indexInfo.DateFormat = 0
-		indexInfo.DateTimeTag = "637973605613980000"
-		indexInfo.EndDate = ""
-		indexInfo.ExportType = 0
-		indexInfo.HasDescription = true
-		indexInfo.HasEmptyRows = false
-		indexInfo.HasFrequency = true
-		indexInfo.HasIndexID = true
-		indexInfo.HasLastDate = true
-		indexInfo.HasSourceName = true
-		indexInfo.HasTimeInterval = true
-		indexInfo.HasUnit = true
-		indexInfo.HasUpdateDate = true
-		indexInfo.IsCreateChart = false
-		indexInfo.IsDataSort = true
-		indexInfo.IsNewSheet = false
-		indexInfo.IsNewWorkbook = false
-		indexInfo.Position = "A1"
-		indexInfo.ShowBlankLines = false
-		indexInfo.StartDate = ""
-		indexInfo.Transpose = false
-		indexInfo.UpdateMode = 1
-		indexInfo.LookModel.IsLast = false
-		indexInfo.LookModel.LookValue = 0
-		indexInfo.LookModel.LookType = 0
-		indexInfo.Ver = 3
 	}
+
+	indexInfo.BlankValue = "0"
+	indexInfo.CanMark = true
+	indexInfo.ChartLineType = "0"
+	indexInfo.DateBlock = 0
+	indexInfo.DateBlockCount = 1
+	indexInfo.DateFormat = 0
+	indexInfo.DateTimeTag = "637973605613980000"
+	indexInfo.EndDate = ""
+	indexInfo.ExportType = 0
+	indexInfo.HasDescription = true
+	indexInfo.HasEmptyRows = false
+	indexInfo.HasFrequency = true
+	indexInfo.HasIndexID = true
+	indexInfo.HasLastDate = true
+	indexInfo.HasSourceName = true
+	indexInfo.HasTimeInterval = true
+	indexInfo.HasUnit = true
+	indexInfo.HasUpdateDate = true
+	indexInfo.IsCreateChart = false
+	indexInfo.IsDataSort = true
+	indexInfo.IsNewSheet = false
+	indexInfo.IsNewWorkbook = false
+	indexInfo.Position = "A1"
+	indexInfo.ShowBlankLines = false
+	indexInfo.StartDate = time.Now().AddDate(0, 0, -6).Format(utils.FormatDate)
+	indexInfo.Transpose = false
+	indexInfo.UpdateMode = 1
+	indexInfo.LookModel.IsLast = false
+	indexInfo.LookModel.LookValue = 0
+	indexInfo.LookModel.LookType = 0
+	indexInfo.Ver = 3
+
 	modelsList := make([]IndexModels, 0)
 	startDate := "1990-01-01"
 
@@ -835,14 +845,14 @@ func GetIndexCommentV2(indexFilePath string, list []index.BaseFromMysteelChemica
 
 	modelsList = append(modelsList, indexInfo.Models...)
 
-	for k, v := range list {
-		fmt.Println(k, v)
+	for _, v := range list {
+		//fmt.Println(k, v)
 		item := new(IndexModels)
 		item.DataFormat = 0
 		if v.IndexName == "" {
 			item.DataStartDate = startDate
 		} else {
-			item.DataStartDate = v.StartDate.Format(utils.FormatDate)
+			item.DataStartDate = v.EndDate.AddDate(0, 0, -7).Format(utils.FormatDate)
 		}
 		item.DefineName = ""
 		item.DefineUnit = ""
@@ -896,6 +906,129 @@ func GetIndexCommentV2(indexFilePath string, list []index.BaseFromMysteelChemica
 	return
 }
 
+func GetIndexCommentV3(indexFilePath, StartDate string, list []index.BaseFromMysteelChemicalIndex) (commentResult string, err error) {
+	fmt.Println("GetIndexCommentV2 start")
+	fmt.Println(indexFilePath)
+	fmt.Println("GetIndexCommentV2 end")
+	//runMode := "release"
+	indexInfo := new(IndexObj)
+	if utils.FileIsExist(indexFilePath) { //文件存在
+		//fmt.Println("utils.FileIsExist")
+		//getCommentStr := GetComment(indexFilePath)
+		////fmt.Println(getCommentStr)
+		//
+		//err = json.Unmarshal([]byte(getCommentStr), &indexInfo)
+		//if err != nil {
+		//	fmt.Println("json.Unmarshal err:" + err.Error())
+		//	return
+		//}
+		err = os.Remove(indexFilePath)
+		if err != nil {
+			fmt.Println("os.Remove Err:" + err.Error() + ";indexFilePath:" + indexFilePath)
+			return
+		}
+	}
+
+	indexInfo.BlankValue = "0"
+	indexInfo.CanMark = true
+	indexInfo.ChartLineType = "0"
+	indexInfo.DateBlock = 0
+	indexInfo.DateBlockCount = 1
+	indexInfo.DateFormat = 0
+	indexInfo.DateTimeTag = "637973605613980000"
+	indexInfo.EndDate = ""
+	indexInfo.ExportType = 0
+	indexInfo.HasDescription = true
+	indexInfo.HasEmptyRows = false
+	indexInfo.HasFrequency = true
+	indexInfo.HasIndexID = true
+	indexInfo.HasLastDate = true
+	indexInfo.HasSourceName = true
+	indexInfo.HasTimeInterval = true
+	indexInfo.HasUnit = true
+	indexInfo.HasUpdateDate = true
+	indexInfo.IsCreateChart = false
+	indexInfo.IsDataSort = true
+	indexInfo.IsNewSheet = false
+	indexInfo.IsNewWorkbook = false
+	indexInfo.Position = "A1"
+	indexInfo.ShowBlankLines = false
+	indexInfo.StartDate = StartDate
+	indexInfo.Transpose = false
+	indexInfo.UpdateMode = 1
+	indexInfo.LookModel.IsLast = false
+	indexInfo.LookModel.LookValue = 0
+	indexInfo.LookModel.LookType = 0
+	indexInfo.Ver = 3
+
+	modelsList := make([]IndexModels, 0)
+	startDate := "1990-01-01"
+
+	updateIndexes := make([]watch.UpdateIndexReq, 0)
+	updateCols := []string{"merge_file_path", "file_index"}
+
+	modelsList = append(modelsList, indexInfo.Models...)
+
+	for _, v := range list {
+		//fmt.Println(k, v)
+		item := new(IndexModels)
+		item.DataFormat = 0
+		if v.IndexName == "" {
+			item.DataStartDate = startDate
+		} else {
+			item.DataStartDate = v.EndDate.AddDate(0, 0, -7).Format(utils.FormatDate)
+		}
+		item.DefineName = ""
+		item.DefineUnit = ""
+		item.DisplayIndexCode = v.IndexCode
+		item.IndexCode = v.IndexCode
+		item.IndexFormula = v.IndexCode
+		item.PointValue = 0
+		item.UnionStart = ""
+		modelsList = append(modelsList, *item)
+
+		// 待更新的指标
+		var req watch.UpdateIndexReq
+		req.Item = new(index.BaseFromMysteelChemicalIndex)
+		req.Item.BaseFromMysteelChemicalIndexId = v.BaseFromMysteelChemicalIndexId
+		req.Item.IndexCode = v.IndexCode
+		req.Item.MergeFilePath = indexFilePath
+		req.UpdateCols = updateCols
+		updateIndexes = append(updateIndexes, req)
+	}
+
+	// 批量更新Index
+	if len(updateIndexes) > 0 {
+		e := watch.MultiUpdateIndex(updateIndexes)
+		if e != nil {
+			fmt.Println("UpdateIndexByIndexCode err: " + e.Error())
+			return
+		}
+	}
+
+	indexInfo.Models = modelsList
+
+	indexStr, err := json.Marshal(indexInfo)
+	if err != nil {
+		fmt.Println("json.Marshal err:" + err.Error())
+		return
+	}
+	text := string(indexStr)
+	text = strings.Trim(text, "{")
+
+	commentMap := make(map[string]interface{})
+	commentMap["author"] = "{"
+	commentMap["text"] = text
+	//commentMap["text"] = commentItem
+
+	commentJson, err := json.Marshal(commentMap)
+	if err != nil {
+		fmt.Println("json.Marshal err:" + err.Error())
+	}
+	commentResult = string(commentJson)
+	return
+}
+
 type IndexObj struct {
 	BlankValue      string        `json:"BlankValue"`
 	CanMark         bool          `json:"CanMark"`

+ 162 - 0
services/index_merge_v2.go

@@ -0,0 +1,162 @@
+package services
+
+import (
+	"fmt"
+	"github.com/rdlucklib/rdluck_tools/paging"
+	"github.com/xuri/excelize/v2"
+	"hongze/mysteel_watch/global"
+	"hongze/mysteel_watch/utils"
+	"hongze/mysteel_watch/watch"
+	"os"
+	"strconv"
+	"time"
+)
+
+// Merge 合并指标
+func MergeV2() {
+	fmt.Println("MergeV2 start")
+	/*
+		年底,季度,存放在一个excel中
+		月度30个指标存一个excel
+		周度25个指标存放一个excel
+		日度20个指标存一个excel
+	*/
+	//年度->38
+	//IndexYearMerge()
+	////季度->5
+	//IndexSeasonMerge()
+	////月度->86
+	//IndexMonthMerge()
+	////周度->292
+	//IndexWeekMerge()
+	//日度
+	IndexDayMergeV2()
+	//周度
+	IndexWeekMergeV2()
+	fmt.Println("MergeV2 end")
+}
+
+// IndexDayMerge 日度指标合并
+func IndexDayMergeV2() {
+	frequency := "日度"
+	filePre := "day"
+	pageSize := 150 //每个excel表需要的指标数
+	startDate := time.Now().AddDate(0, 0, -7).Format(utils.FormatDate)
+	endDate := time.Now().Format(utils.FormatDate)
+	err := indexMergeV2(frequency, startDate, endDate, filePre, pageSize)
+	if err != nil {
+		fmt.Println("合并日度指标失败,err:", err)
+	}
+}
+
+// IndexDayMerge 日度指标合并
+func IndexWeekMergeV2() {
+	frequency := "周度"
+	filePre := "week"
+	pageSize := 150 //每个excel表需要的指标数
+	startDate := time.Now().AddDate(0, 0, -49).Format(utils.FormatDate)
+	endDate := utils.GetNowWeekMonday().Format(utils.FormatDate)
+	err := indexMergeV2(frequency, startDate, endDate, filePre, pageSize)
+	if err != nil {
+		fmt.Println("合并日度指标失败,err:", err)
+	}
+}
+
+// indexMerge 指标合并
+// @params frequency string 频度
+// @params filePre string 文件名前缀
+// @params pageSize int 每个excel表中的指标数量
+func indexMergeV2(frequency, startDate, endDate, filePre string, pageSize int) (err error) {
+
+	firstIndexCount := pageSize //第一个添加的excel表需要的指标数
+
+	frequencyReq := watch.GetMaxFileIndexReq{
+		Frequency: frequency,
+	}
+	// 获取未合并的指标总数量
+	total, err := watch.GetIndexCountByFrequencyV2(frequencyReq)
+	if err != nil {
+		fmt.Println("GetIndexCountByFrequencyV2 Err:" + err.Error())
+		return
+	}
+	//未合并的指标总数量小于等于0,说明没有需要合并的指标
+	if total <= 0 {
+		return
+	}
+
+	fileName := filePre + ".xlsx" //保存的文件名称
+	templatePath := global.CONFIG.Serve.IndexSaveDir + "index_template.xlsx"
+	templateFile, tmpErr := excelize.OpenFile(templatePath)
+	if tmpErr != nil {
+		fmt.Println("打开文件失败,Err:" + tmpErr.Error())
+		err = tmpErr
+		return
+	}
+
+	mergeIndexFilePath := global.CONFIG.Serve.IndexMergeSaveDir + fileName
+
+	if utils.FileIsExist(mergeIndexFilePath) { //修改文件
+		err = os.Remove(mergeIndexFilePath)
+		if err != nil {
+			fmt.Println("os.Remove Err:" + err.Error() + "; mergeIndexFilePath:" + mergeIndexFilePath)
+			return err
+		}
+	}
+
+	// 除去第一个excel表的剩余需要添加的指标数量
+	nextTotal := int(total) - firstIndexCount
+	// 总文件数
+	totalPage := paging.PageCount(nextTotal, pageSize)
+	totalPage = totalPage + 1 //需要加上除去在外面的指标(第一张excel)
+	fmt.Println("total:", total)
+	fmt.Println("totalPage:", totalPage)
+	sheetMap := make(map[string]string)
+	for i := 1; i <= totalPage; i++ { //sheet
+		startSize := paging.StartIndex(i, pageSize)
+		// 当下需要合并到excel的指标
+		pageList, tmpErr := watch.GetIndexPageByFrequency(frequency, endDate, startSize, pageSize)
+		if tmpErr != nil {
+			fmt.Println("GetIndexLimitByFrequency Err:" + tmpErr.Error())
+			err = tmpErr
+			return
+		}
+
+		commentResult, tmpErr := GetIndexCommentV3(mergeIndexFilePath, startDate, pageList)
+		if tmpErr != nil {
+			fmt.Println("GetIndexCommentV2 Err:" + tmpErr.Error())
+			err = tmpErr
+			return
+		}
+
+		fmt.Println("Sheet" + strconv.Itoa(i))
+
+		sheetName := "Sheet" + strconv.Itoa(i)
+		sheetMap[sheetName] = sheetName
+		if i > 1 {
+			templateFile.NewSheet(sheetName)
+		}
+
+		templateFile.DeleteComment(sheetName, "A1")
+		templateFile.AddComment(sheetName, "A1", commentResult)
+
+		//刷新数据
+		//MysteelChemicalRefresh(mergeIndexFilePath)
+		//AddIndexRefreshToLpush(mergeIndexFilePath)
+	}
+
+	sheetList := templateFile.GetSheetList()
+	for _, v := range sheetList {
+		if _, ok := sheetMap[v]; !ok {
+			templateFile.DeleteSheet(v)
+		}
+	}
+
+	if err = templateFile.SaveAs(mergeIndexFilePath); err != nil {
+		fmt.Println("保存失败,Err:" + err.Error())
+		templateFile.Close()
+		return
+	}
+	templateFile.Close()
+	time.Sleep(1 * time.Second)
+	return
+}

+ 5 - 5
utils/common.go

@@ -47,7 +47,7 @@ func GenToken(account string) (accessToken string, err error) {
 	return
 }
 
-//随机数种子
+// 随机数种子
 var rnd = rand.New(rand.NewSource(time.Now().UnixNano()))
 
 // GetRandString 获取随机字符串
@@ -405,8 +405,8 @@ func TrimHtml(src string) string {
 	return strings.TrimSpace(src)
 }
 
-//1556164246  ->  2019-04-25 03:50:46 +0000
-//timestamp
+// 1556164246  ->  2019-04-25 03:50:46 +0000
+// timestamp
 // TimeToTimestamp
 func TimeToTimestamp() {
 	fmt.Println(time.Unix(1556164246, 0).Format("2006-01-02 15:04:05"))
@@ -466,7 +466,7 @@ func GetWilsonScore(p, n float64) float64 {
 	return toFixed(((p+1.9208)/(p+n)-1.96*math.Sqrt(p*n/(p+n)+0.9604)/(p+n))/(1+3.8416/(p+n)), 2)
 }
 
-//将中文数字转化成数字,比如 第三百四十五章,返回第345章 不支持一亿及以上
+// 将中文数字转化成数字,比如 第三百四十五章,返回第345章 不支持一亿及以上
 func ChangeWordsToNum(str string) (numStr string) {
 	words := ([]rune)(str)
 	num := 0
@@ -642,7 +642,7 @@ func GetMonthStartAndEnd(myYear string, myMonth string) (startDate, endDate stri
 	return t1, t2
 }
 
-//TrimStr 移除字符串中的空格
+// TrimStr 移除字符串中的空格
 func TrimStr(str string) (str2 string) {
 	return strings.Replace(str, " ", "", -1)
 }

+ 8 - 1
watch/edb_lib.go

@@ -173,6 +173,13 @@ type GetNoMergeIndexByFrequencyPageReq struct {
 	Limit     int
 }
 
+type GetNoMergeIndexByFrequencyPageReqV2 struct {
+	Frequency string
+	EndDate   string
+	StartSize int
+	PageSize  int
+}
+
 // GetNoMergeIndexByFrequencyPage 当下需要合并到excel的指标
 func GetNoMergeIndexByFrequencyPage(frequency string, limit int) (item []index.BaseFromMysteelChemicalIndex, err error) {
 	urlStr := "/mysteel_chemical/getNoMergeIndexByFrequencyPage"
@@ -479,7 +486,7 @@ func HttpPost(url, postData string, params ...string) ([]byte, error) {
 	if resp != nil {
 		defer resp.Body.Close()
 		b, err := ioutil.ReadAll(resp.Body)
-		fmt.Println("HttpPost:" + string(b))
+		//fmt.Println("HttpPost:" + string(b))
 		return b, err
 	}
 	return nil, err

+ 106 - 0
watch/index_v2.go

@@ -0,0 +1,106 @@
+package watch
+
+import (
+	"encoding/json"
+	"errors"
+	"hongze/mysteel_watch/global"
+	"hongze/mysteel_watch/models/index"
+)
+
+// GetNoMergeIndexByFrequencyCount 获取未合并的指标总数量
+func GetIndexCountByFrequencyV2(req GetMaxFileIndexReq) (total float64, err error) {
+	urlStr := "/mysteel_chemical/getIndexCountByFrequency"
+
+	if global.CONFIG.Serve.EdbLibUrl == `` {
+		err = errors.New("刷新未配置")
+		return
+	}
+	postUrl := global.CONFIG.Serve.EdbLibUrl + urlStr
+	postData, err := json.Marshal(req)
+	if err != nil {
+		return
+	}
+	result, err := HttpPost(postUrl, string(postData), "application/json")
+	if err != nil {
+		return
+	}
+
+	var resp BaseResponse
+	global.LOG.Info(" GetNoMergeIndexByFrequencyCountV2 Result: " + string(result))
+	err = json.Unmarshal(result, &resp)
+	if err != nil {
+		return
+	}
+
+	t, ok := resp.Data.(float64)
+	if ok {
+		total = t
+	}
+	return
+}
+
+// GetNoMergeIndexByFrequencyPage 当下需要合并到excel的指标
+func GetIndexLimitByFrequency(frequency string, limit int) (item []index.BaseFromMysteelChemicalIndex, err error) {
+	urlStr := "/mysteel_chemical/getIndexLimitByFrequency"
+
+	if global.CONFIG.Serve.EdbLibUrl == `` {
+		err = errors.New("刷新未配置")
+		return
+	}
+	postUrl := global.CONFIG.Serve.EdbLibUrl + urlStr
+	postData, err := json.Marshal(GetNoMergeIndexByFrequencyPageReq{
+		Frequency: frequency,
+		Limit:     limit,
+	})
+	if err != nil {
+		return
+	}
+	result, err := HttpPost(postUrl, string(postData), "application/json")
+	if err != nil {
+		return
+	}
+
+	var resp IndexesResponse
+	global.LOG.Info(" GetIndexLimitByFrequency Result: " + string(result))
+	err = json.Unmarshal(result, &resp)
+	if err != nil {
+		return
+	}
+
+	item = resp.Data
+	return
+}
+
+// GetNoMergeIndexByFrequencyPage 当下需要合并到excel的指标
+func GetIndexPageByFrequency(frequency, endDate string, startSize, pageSize int) (item []index.BaseFromMysteelChemicalIndex, err error) {
+	urlStr := "/mysteel_chemical/getIndexPageByFrequency"
+
+	if global.CONFIG.Serve.EdbLibUrl == `` {
+		err = errors.New("刷新未配置")
+		return
+	}
+	postUrl := global.CONFIG.Serve.EdbLibUrl + urlStr
+	postData, err := json.Marshal(GetNoMergeIndexByFrequencyPageReqV2{
+		Frequency: frequency,
+		StartSize: startSize,
+		PageSize:  pageSize,
+		EndDate:   endDate,
+	})
+	if err != nil {
+		return
+	}
+	result, err := HttpPost(postUrl, string(postData), "application/json")
+	if err != nil {
+		return
+	}
+
+	var resp IndexesResponse
+	//global.LOG.Info(" GetIndexLimitByFrequency Result: " + string(result))
+	err = json.Unmarshal(result, &resp)
+	if err != nil {
+		return
+	}
+
+	item = resp.Data
+	return
+}

+ 380 - 0
watch/watch_v2.go

@@ -0,0 +1,380 @@
+package watch
+
+import (
+	"fmt"
+	"hongze/mysteel_watch/global"
+	"hongze/mysteel_watch/utils"
+	"log"
+	"os"
+	"strings"
+	"sync"
+	"time"
+
+	"github.com/fsnotify/fsnotify"
+	"github.com/xuri/excelize/v2"
+)
+
+func ListenFolderNewV2() {
+	fmt.Println("-----文件夹监听-------")
+	watcher, err := fsnotify.NewWatcher()
+	if err != nil {
+		fmt.Println("fsnotify.NewWatcher err:" + err.Error())
+		log.Fatal(err)
+	}
+	defer watcher.Close()
+
+	done2 := make(chan bool)
+	go func() {
+		for {
+			select {
+			case event, ok := <-watcher.Events:
+				fmt.Println("event.Name", event.Name)
+				fmt.Println(event.Op)
+				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:
+				fmt.Println("watcher.Errors:", err)
+				log.Println("error:", err)
+			case <-time.After(60 * time.Second):
+				continue
+			}
+		}
+	}()
+	fmt.Println("watch dir:" + global.CONFIG.Serve.IndexSaveDir)
+	err = watcher.Add(global.CONFIG.Serve.IndexSaveDir)
+	if err != nil {
+		fmt.Println("watcher.Add:" + err.Error())
+		log.Fatal(err)
+	}
+	<-done2
+}
+
+// ListenFolderNewMerge  生产合并文件夹监听
+func ListenFolderNewMergeV2() {
+	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 || event.Op == fsnotify.Write) &&
+					!strings.Contains(event.Name, "tmp") &&
+					!strings.Contains(event.Name, ".TMP") &&
+					!strings.Contains(event.Name, "~") &&
+					(strings.Contains(event.Name, "xlsx") || strings.Contains(event.Name, "xls")) {
+					WatchIndexFileMergeRelease(event.Name)
+				}
+			case err := <-watcher.Errors:
+				log.Println("error:", err)
+			case <-time.After(60 * time.Second):
+				continue
+			}
+		}
+	}()
+	err = watcher.Add(global.CONFIG.Serve.IndexMergeSaveDir)
+	if err != nil {
+		log.Fatal(err)
+	}
+	<-done2
+}
+
+// WatchIndexFile 检测指标文件
+func WatchIndexFileV2(filePath string) {
+	fmt.Println("filePath:", filePath)
+	//filePath:D:\mysteel_data\CM0000568866_release.xlsx
+	time.Sleep(10 * time.Second)
+	if !utils.FileIsExist(filePath) {
+		fmt.Println("filePath is not exist:" + filePath)
+		return
+	}
+	//读取文件内容
+	global.LOG.Info("WatchFile:" + filePath)
+	f, err := excelize.OpenFile(filePath)
+	global.LOG.Info("OpenFile:" + filePath)
+	if err != nil {
+		fmt.Println("OpenFile:" + filePath + ",Err:" + err.Error())
+		return
+	}
+	var newFilePath string
+	defer func() {
+		if err := f.Close(); err != nil {
+			fmt.Println("FileClose Err:" + err.Error())
+			return
+		}
+		//重命名文件
+		if filePath != newFilePath {
+			err := os.Rename(filePath, newFilePath)
+			if err != nil {
+				fmt.Println("os.Rename Err:" + err.Error())
+			}
+		}
+	}()
+
+	reqList := make([]*HandleMysteelIndex, 0)
+
+	var wg = sync.WaitGroup{}
+	wg.Add(1)
+	go func() {
+		sheetList := f.GetSheetList()
+		for _, sv := range sheetList {
+
+			lenRow := 0 //指标数
+
+			// excel表的指标数据
+			indexExcelDataList := make([]map[string]string, 0)
+
+			indexNameMap := make(map[int]string)
+			indexCodeMap := make(map[int]string)
+			unitMap := make(map[int]string)
+			sourceMap := make(map[int]string)
+			frequencyMap := make(map[int]string)
+			startDateMap := make(map[int]string)
+			endDateMap := make(map[int]string)
+			describeMap := make(map[int]string)
+			updateDateMap := make(map[int]string)
+
+			rows, err := f.GetRows(sv)
+			if err != nil {
+				fmt.Println("GetRows Err:", err)
+				return
+			}
+
+			for row, cols := range rows {
+				if row == 0 {
+					// 第一行是 钢联数据的备注
+					continue
+				}
+				// 指标名称
+				if row == 1 {
+					lenRow = len(cols) - 1
+					for i := 1; i <= lenRow; i++ {
+						tmpIndexExcelDataList := make(map[string]string, 0)
+						indexExcelDataList = append(indexExcelDataList, tmpIndexExcelDataList)
+					}
+				}
+
+				if row < 10 {
+					for k, colCell := range cols {
+						switch row {
+						case 1: //指标名称
+							indexNameMap[k-1] = colCell
+						case 2: //单位
+							unitMap[k-1] = colCell
+						case 3: //数据来源
+							sourceMap[k-1] = colCell
+						case 4: //指标编码
+							indexCodeMap[k-1] = colCell
+						case 5: //频度
+							tmpFrequency := colCell
+							if !strings.Contains(tmpFrequency, "度") {
+								tmpFrequency = tmpFrequency + "度"
+							}
+							frequencyMap[k-1] = tmpFrequency
+						case 6: //时间区间
+							dateArr := strings.Split(colCell, "~")
+							if len(dateArr) >= 2 {
+								startDateMap[k-1] = dateArr[0]
+								endDateMap[k-1] = dateArr[1]
+							}
+						case 7: //备注
+							describeMap[k-1] = colCell
+						case 9:
+							updateDateMap[k-1] = colCell
+						}
+					}
+				} else {
+					date := ``
+					for k, col := range cols {
+						if k == 0 {
+							date = col
+							continue
+						}
+						if date == `` {
+							continue
+						}
+						if col != `` {
+							indexExcelDataList[k-1][date] = col
+						}
+					}
+				}
+
+			}
+
+			for k, excelDataMap := range indexExcelDataList {
+				indexItem := new(HandleMysteelIndex)
+				indexItem.IndexName = indexNameMap[k]
+				indexItem.IndexCode = indexCodeMap[k]
+				indexItem.Unit = unitMap[k]
+				indexItem.Source = sourceMap[k]
+				indexItem.Frequency = frequencyMap[k]
+				indexItem.StartDate = startDateMap[k]
+				indexItem.EndDate = endDateMap[k]
+				indexItem.Describe = describeMap[k]
+				indexItem.UpdateDate = updateDateMap[k]
+				indexItem.ExcelDataMap = excelDataMap
+				reqList = append(reqList, indexItem)
+				//mysteelIndexHandle(runMode, indexNameMap[k], indexCodeMap[k], unitMap[k], sourceMap[k], frequencyMap[k], startDateMap[k], endDateMap[k], describeMap[k], updateDateMap[k], excelDataMap)
+			}
+
+			resp := new(HandleMysteelIndexReq)
+			resp.List = reqList
+			postHandleMysteelIndex(resp)
+		}
+		wg.Done()
+	}()
+	wg.Wait()
+}
+
+// WatchIndexFileMergeRelease 监听生产的合并excel文件的处理
+func WatchIndexFileMergeReleaseV2(filePath string) {
+	fmt.Println("filePath:", filePath)
+
+	time.Sleep(5 * time.Second)
+	if !utils.FileIsExist(filePath) {
+		fmt.Println("filePath is not exist:" + filePath)
+		return
+	}
+	//读取文件内容
+	global.LOG.Info("WatchFile:" + filePath)
+	f, err := excelize.OpenFile(filePath)
+	global.LOG.Info("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
+		}
+	}()
+
+	//runMode := "release"
+	reqList := make([]*HandleMysteelIndex, 0)
+	var wg = sync.WaitGroup{}
+	wg.Add(1)
+	go func() {
+
+		sheetList := f.GetSheetList()
+		for _, sv := range sheetList {
+
+			lenRow := 0 //指标数
+
+			// excel表的指标数据
+			indexExcelDataList := make([]map[string]string, 0)
+
+			indexNameMap := make(map[int]string)
+			indexCodeMap := make(map[int]string)
+			unitMap := make(map[int]string)
+			sourceMap := make(map[int]string)
+			frequencyMap := make(map[int]string)
+			startDateMap := make(map[int]string)
+			endDateMap := make(map[int]string)
+			describeMap := make(map[int]string)
+			updateDateMap := make(map[int]string)
+
+			rows, err := f.GetRows(sv)
+			if err != nil {
+				fmt.Println("GetRows Err:", err)
+				return
+			}
+
+			for row, cols := range rows {
+				if row == 0 {
+					// 第一行是 钢联数据的备注
+					continue
+				}
+				// 指标名称
+				if row == 1 {
+					lenRow = len(cols) - 1
+					for i := 1; i <= lenRow; i++ {
+						tmpIndexExcelDataList := make(map[string]string, 0)
+						indexExcelDataList = append(indexExcelDataList, tmpIndexExcelDataList)
+					}
+				}
+
+				if row < 10 {
+					for k, colCell := range cols {
+						switch row {
+						case 1: //指标名称
+							indexNameMap[k-1] = colCell
+						case 2: //单位
+							unitMap[k-1] = colCell
+						case 3: //数据来源
+							sourceMap[k-1] = colCell
+						case 4: //指标编码
+							indexCodeMap[k-1] = colCell
+						case 5: //频度
+							tmpFrequency := colCell
+							if !strings.Contains(tmpFrequency, "度") {
+								tmpFrequency = tmpFrequency + "度"
+							}
+							frequencyMap[k-1] = tmpFrequency
+						case 6: //时间区间
+							dateArr := strings.Split(colCell, "~")
+							if len(dateArr) >= 2 {
+								startDateMap[k-1] = dateArr[0]
+								endDateMap[k-1] = dateArr[1]
+							}
+						case 7: //备注
+							describeMap[k-1] = colCell
+						case 9:
+							updateDateMap[k-1] = colCell
+						}
+					}
+				} else {
+					date := ``
+					for k, col := range cols {
+						if k == 0 {
+							date = col
+							continue
+						}
+						if date == `` {
+							continue
+						}
+						if col != `` {
+							indexExcelDataList[k-1][date] = col
+						}
+					}
+				}
+
+			}
+
+			for k, excelDataMap := range indexExcelDataList {
+				indexItem := new(HandleMysteelIndex)
+				indexItem.IndexName = indexNameMap[k]
+				indexItem.IndexCode = indexCodeMap[k]
+				indexItem.Unit = unitMap[k]
+				indexItem.Source = sourceMap[k]
+				indexItem.Frequency = frequencyMap[k]
+				indexItem.StartDate = startDateMap[k]
+				indexItem.EndDate = endDateMap[k]
+				indexItem.Describe = describeMap[k]
+				indexItem.UpdateDate = updateDateMap[k]
+				indexItem.ExcelDataMap = excelDataMap
+				reqList = append(reqList, indexItem)
+				//mysteelIndexHandle(runMode, indexNameMap[k], indexCodeMap[k], unitMap[k], sourceMap[k], frequencyMap[k], startDateMap[k], endDateMap[k], describeMap[k], updateDateMap[k], excelDataMap)
+			}
+
+			resp := new(HandleMysteelIndexReq)
+			resp.List = reqList
+			postHandleMysteelIndex(resp)
+		}
+
+		wg.Done()
+	}()
+	wg.Wait()
+
+}