Browse Source

新增日度,月度指标

longyu 2 năm trước cách đây
mục cha
commit
47a231e0bf
4 tập tin đã thay đổi với 262 bổ sung8 xóa
  1. 1 2
      init_serve/task.go
  2. 40 0
      models/index/index.go
  3. 1 1
      services/index.go
  4. 220 5
      services/index_merge.go

+ 1 - 2
init_serve/task.go

@@ -21,7 +21,6 @@ func InitTask() {
 	//}
 
 	////每30分钟检测一次,周度指标刷新
-
 	//_, err = c.AddFunc("0 */30 * * * *", services.IndexRefreshWeek)
 	//if err != nil {
 	//	global.LOG.Info("DownloadCvTask err" + err.Error())
@@ -53,7 +52,7 @@ func InitTask() {
 	//filePath := utils.IndexMsergeSaveDir + "season.xlsx"
 	//services.DataAnalysis(filePath)
 
-	//services.IndexSeasonMerge()
+	//services.IndexDayMerge()
 	fmt.Println("end services.Merge")
 }
 

+ 40 - 0
models/index/index.go

@@ -26,6 +26,7 @@ type BaseFromMysteelChemicalIndex struct {
 	SysUserRealName                string    `gorm:"column:sys_user_real_name" json:"sys_user_real_name"`
 	FilePath                       string    `gorm:"column:file_path" json:"file_path"`
 	MergeFilePath                  string    `gorm:"column:merge_file_path" json:"merge_file_path"`
+	FileIndex                      int       `gorm:"column:file_index" json:"file_index"`
 	base.TimeBase
 }
 
@@ -104,3 +105,42 @@ func (d *BaseFromMysteelChemicalIndex) GetIndexByFrequency(frequency string) (it
 	err = global.MYSQL["hzdata"].WithContext(context.TODO()).Model(d).Where("frequency=? AND merge_file_path='' ", frequency).Find(&item).Error
 	return
 }
+
+func (d *BaseFromMysteelChemicalIndex) GetIndexByFrequencyCount(frequency string) (total int64, err error) {
+	err = global.MYSQL["hzdata"].WithContext(context.TODO()).Model(d).
+		Where("frequency=? ", frequency).
+		Count(&total).Error
+	return
+}
+
+func (d *BaseFromMysteelChemicalIndex) GetIndexByFrequencyPage(frequency string, offset, limit int) (item []*BaseFromMysteelChemicalIndex, err error) {
+	err = global.MYSQL["hzdata"].WithContext(context.TODO()).Model(d).
+		Where("frequency=? ", frequency).
+		Offset(offset).
+		Limit(limit).
+		Scan(&item).Error
+	return
+}
+
+func (d *BaseFromMysteelChemicalIndex) GetIndexCountByMergeFilePath(mergeFilePath string) (total int64, err error) {
+	err = global.MYSQL["hzdata"].WithContext(context.TODO()).Model(d).
+		Where("merge_file_path=?", mergeFilePath).
+		Count(&total).Error
+	return
+}
+
+func (d *BaseFromMysteelChemicalIndex) GetIndexLatestMergeFilePath(frequency string) (item *BaseFromMysteelChemicalIndex, err error) {
+	err = global.MYSQL["hzdata"].WithContext(context.TODO()).Model(d).
+		Where("frequency=? AND merge_file_path<>'' ", frequency).
+		Order("ORDER BY base_from_mysteel_chemical_index_id ASC").
+		First(&item).Error
+	return
+}
+
+func (d *BaseFromMysteelChemicalIndex) GetMaxFileIndex(frequency string) (item *BaseFromMysteelChemicalIndex, err error) {
+	err = global.MYSQL["hzdata"].WithContext(context.TODO()).Model(d).
+		Where("frequency=?", frequency).
+		Order("file_index DESC").
+		First(&item).Error
+	return
+}

+ 1 - 1
services/index.go

@@ -32,7 +32,7 @@ func IndexCreateCheck() (err error) {
 	fmt.Println("IndexCreateCheck")
 	indexObj := new(index.BaseFromMysteelChemicalIndex)
 	list, err := indexObj.GetIndexCreate()
-	if err != nil && err !=utils.ErrNoRow {
+	if err != nil {
 		return
 	}
 	fmt.Println("listLen:", len(list))

+ 220 - 5
services/index_merge.go

@@ -6,10 +6,12 @@ import (
 	"hongze/mysteel_watch/global"
 	"hongze/mysteel_watch/models/index"
 	"hongze/mysteel_watch/utils"
+	"strconv"
 	"strings"
 	"sync"
 	"time"
 
+	"github.com/rdlucklib/rdluck_tools/paging"
 	"github.com/xuri/excelize/v2"
 )
 
@@ -48,7 +50,7 @@ func IndexYearMerge() {
 		return
 	}
 
-	commentResult, err := GetIndexComment(yearIndexFilePath, yearList)
+	commentResult, err := GetIndexComment(yearIndexFilePath, yearList, 1)
 	if err != nil {
 		fmt.Println("GetIndexComment Err:" + err.Error())
 		return
@@ -102,7 +104,7 @@ func IndexSeasonMerge() {
 		return
 	}
 
-	commentResult, err := GetIndexComment(seasonIndexFilePath, seasonList)
+	commentResult, err := GetIndexComment(seasonIndexFilePath, seasonList, 1)
 	if err != nil {
 		fmt.Println("GetIndexComment Err:" + err.Error())
 		return
@@ -141,11 +143,208 @@ func IndexSeasonMerge() {
 	//处理excel数据
 }
 
-func GetIndexComment(yearIndexFilePath string, list []*index.BaseFromMysteelChemicalIndex) (commentResult string, err error) {
+//月度
+func IndexMonthMerge() {
+	frequency := "月度"
+	filePre := "month"
+	pageSize := 30
+	var err error
+
+	indexObj := new(index.BaseFromMysteelChemicalIndex)
+	total, err := indexObj.GetIndexByFrequencyCount(frequency)
+	if err != nil {
+		fmt.Println("GetIndexByFrequencyCount Err:" + err.Error())
+		return
+	}
+
+	maxFileIndexItem, err := indexObj.GetMaxFileIndex(frequency)
+	if err != nil {
+		fmt.Println("GetMaxFileIndex Err:" + err.Error())
+		return
+	}
+
+	maxFileIndex := maxFileIndexItem.FileIndex
+	if maxFileIndex <= 0 {
+		maxFileIndex = 1
+	}
+
+	fileName := filePre + "_" + strconv.Itoa(maxFileIndex) + ".xlsx" //保存的文件名称
+	monthIndexFilePath := utils.IndexMsergeSaveDir + fileName
+
+	indexTotal, err := indexObj.GetIndexCountByMergeFilePath(monthIndexFilePath)
+	if err != nil {
+		fmt.Println("GetIndexCountByMergeFilePath Err:" + err.Error())
+		return
+	}
+
+	if (indexTotal > int64(pageSize)/2) && maxFileIndex != 1 {
+		maxFileIndex += 1
+	}
+
+	fmt.Println("maxFileIndex:", maxFileIndex)
+	totalPage := paging.PageCount(int(total), pageSize)
+	fmt.Println("total:", total)
+	fmt.Println("totalPage:", totalPage)
+	for i := 1; i <= totalPage; i++ {
+
+		offset := (i - 1) * pageSize
+
+		fileName = filePre + "_" + strconv.Itoa(maxFileIndex) + ".xlsx" //保存的文件名称
+		monthIndexFilePath := utils.IndexMsergeSaveDir + fileName
+		fmt.Println(monthIndexFilePath)
+
+		fmt.Println(offset, pageSize)
+		pageList, err := indexObj.GetIndexByFrequencyPage(frequency, offset, pageSize)
+		if err != nil {
+			fmt.Println("GetIndexByFrequency Err:" + err.Error())
+			return
+		}
+
+		commentResult, err := GetIndexComment(monthIndexFilePath, pageList, maxFileIndex)
+		if err != nil {
+			fmt.Println("GetIndexComment Err:" + err.Error())
+			return
+		}
+		if utils.FileIsExist(monthIndexFilePath) { //修改文件
+			fileObj, err := excelize.OpenFile(monthIndexFilePath)
+			if err != nil {
+				fmt.Println("打开文件失败,Err:" + err.Error())
+				return
+			}
+
+			fileObj.DeleteComment("Sheet1", "A1")
+			fileObj.AddComment("Sheet1", "A1", commentResult)
+			if err := fileObj.SaveAs(monthIndexFilePath); err != nil {
+				fmt.Println("保存失败,Err:" + err.Error())
+				fileObj.Close()
+				return
+			}
+			fileObj.Close()
+		} else { //新增文件
+			templatePath := utils.IndexSaveDir + "index_template.xlsx"
+			templateFile, err := excelize.OpenFile(templatePath)
+			if err != nil {
+				fmt.Println("打开文件失败,Err:" + err.Error())
+				return
+			}
+			templateFile.DeleteComment("Sheet1", "A1")
+			templateFile.AddComment("Sheet1", "A1", commentResult)
+			if err := templateFile.SaveAs(monthIndexFilePath); err != nil {
+				fmt.Println("保存失败,Err:" + err.Error())
+				templateFile.Close()
+				return
+			}
+			templateFile.Close()
+		}
+		maxFileIndex += 1
+		time.Sleep(1 * time.Second)
+	}
+}
+
+//日度
+func IndexDayMerge() {
+	frequency := "日度"
+	filePre := "day"
+	pageSize := 30
+	var err error
+
+	indexObj := new(index.BaseFromMysteelChemicalIndex)
+	total, err := indexObj.GetIndexByFrequencyCount(frequency)
+	if err != nil {
+		fmt.Println("GetIndexByFrequencyCount Err:" + err.Error())
+		return
+	}
+
+	maxFileIndexItem, err := indexObj.GetMaxFileIndex(frequency)
+	if err != nil {
+		fmt.Println("GetMaxFileIndex Err:" + err.Error())
+		return
+	}
+
+	maxFileIndex := maxFileIndexItem.FileIndex
+	if maxFileIndex <= 0 {
+		maxFileIndex = 1
+	}
+
+	fileName := filePre + "_" + strconv.Itoa(maxFileIndex) + ".xlsx" //保存的文件名称
+	monthIndexFilePath := utils.IndexMsergeSaveDir + fileName
+
+	indexTotal, err := indexObj.GetIndexCountByMergeFilePath(monthIndexFilePath)
+	if err != nil {
+		fmt.Println("GetIndexCountByMergeFilePath Err:" + err.Error())
+		return
+	}
+
+	if (indexTotal > int64(pageSize)/2) && maxFileIndex != 1 {
+		maxFileIndex += 1
+	}
+
+	fmt.Println("maxFileIndex:", maxFileIndex)
+	totalPage := paging.PageCount(int(total), pageSize)
+	fmt.Println("total:", total)
+	fmt.Println("totalPage:", totalPage)
+	for i := 1; i <= totalPage; i++ {
+
+		offset := (i - 1) * pageSize
+
+		fileName = filePre + "_" + strconv.Itoa(maxFileIndex) + ".xlsx" //保存的文件名称
+		monthIndexFilePath := utils.IndexMsergeSaveDir + fileName
+		fmt.Println(monthIndexFilePath)
+
+		fmt.Println(offset, pageSize)
+		pageList, err := indexObj.GetIndexByFrequencyPage(frequency, offset, pageSize)
+		if err != nil {
+			fmt.Println("GetIndexByFrequency Err:" + err.Error())
+			return
+		}
+
+		commentResult, err := GetIndexComment(monthIndexFilePath, pageList, maxFileIndex)
+		if err != nil {
+			fmt.Println("GetIndexComment Err:" + err.Error())
+			return
+		}
+		if utils.FileIsExist(monthIndexFilePath) { //修改文件
+			fileObj, err := excelize.OpenFile(monthIndexFilePath)
+			if err != nil {
+				fmt.Println("打开文件失败,Err:" + err.Error())
+				return
+			}
+
+			fileObj.DeleteComment("Sheet1", "A1")
+			fileObj.AddComment("Sheet1", "A1", commentResult)
+			if err := fileObj.SaveAs(monthIndexFilePath); err != nil {
+				fmt.Println("保存失败,Err:" + err.Error())
+				fileObj.Close()
+				return
+			}
+			fileObj.Close()
+		} else { //新增文件
+			templatePath := utils.IndexSaveDir + "index_template.xlsx"
+			templateFile, err := excelize.OpenFile(templatePath)
+			if err != nil {
+				fmt.Println("打开文件失败,Err:" + err.Error())
+				return
+			}
+			templateFile.DeleteComment("Sheet1", "A1")
+			templateFile.AddComment("Sheet1", "A1", commentResult)
+			if err := templateFile.SaveAs(monthIndexFilePath); err != nil {
+				fmt.Println("保存失败,Err:" + err.Error())
+				templateFile.Close()
+				return
+			}
+			templateFile.Close()
+		}
+		maxFileIndex += 1
+		time.Sleep(1 * time.Second)
+	}
+}
+
+func GetIndexComment(indexFilePath string, list []*index.BaseFromMysteelChemicalIndex, fileIndex int) (commentResult string, err error) {
+	runMode := "release"
 	indexInfo := new(IndexObj)
-	if utils.FileIsExist(yearIndexFilePath) { //文件存在
+	if utils.FileIsExist(indexFilePath) { //文件存在
 		fmt.Println("utils.FileIsExist")
-		getCommentStr := GetComment(yearIndexFilePath)
+		getCommentStr := GetComment(indexFilePath)
 		fmt.Println(getCommentStr)
 
 		err = json.Unmarshal([]byte(getCommentStr), &indexInfo)
@@ -189,6 +388,8 @@ func GetIndexComment(yearIndexFilePath string, list []*index.BaseFromMysteelChem
 	modelsList := make([]IndexModels, 0)
 	startDate := "1990-01-01"
 
+	indexObj := new(index.BaseFromMysteelChemicalIndex)
+
 	for k, v := range list {
 		fmt.Println(k, v)
 		item := new(IndexModels)
@@ -206,6 +407,20 @@ func GetIndexComment(yearIndexFilePath string, list []*index.BaseFromMysteelChem
 		item.PointValue = 0
 		item.UnionStart = ""
 		modelsList = append(modelsList, *item)
+
+		indexObj.IndexCode = v.IndexCode
+		indexObj.MergeFilePath = indexFilePath
+		indexObj.FileIndex = fileIndex
+
+		updateColsArr := make([]string, 0)
+		updateColsArr = append(updateColsArr, "merge_file_path")
+		updateColsArr = append(updateColsArr, "file_index")
+
+		err = indexObj.Update(runMode, updateColsArr)
+		if err != nil {
+			fmt.Println("indexObj.Update err:" + err.Error())
+			return
+		}
 	}
 
 	indexInfo.Models = modelsList