浏览代码

fix:钢联刷新逻辑调整

Roc 1 年之前
父节点
当前提交
c6b522ce99
共有 5 个文件被更改,包括 194 次插入4 次删除
  1. 6 0
      init_serve/task.go
  2. 105 0
      services/edb_refresh.go
  3. 3 3
      services/index_merge.go
  4. 26 1
      services/index_merge_v2.go
  5. 54 0
      watch/edb_lib.go

+ 6 - 0
init_serve/task.go

@@ -58,6 +58,12 @@ func InitTask() {
 		global.LOG.Error("ServerCheck err" + err.Error())
 	}
 
+	// 每30分钟检测一次是否需要刷新数据
+	_, err = c.AddFunc("0 */30 * * * *", services.CheckRefreshConfig)
+	if err != nil {
+		global.LOG.Error("services.CheckRefreshConfig err" + err.Error())
+	}
+
 	// 指标更新检测
 	if global.CONFIG.Serve.IsCheckIndexUpdate {
 		services.IndexUpdateCheck()

+ 105 - 0
services/edb_refresh.go

@@ -0,0 +1,105 @@
+package services
+
+import (
+	"eta/mysteel_watch/global"
+	"eta/mysteel_watch/utils"
+	"eta/mysteel_watch/watch"
+	"fmt"
+	"strings"
+	"time"
+)
+
+var BaseStartDate = "1991-01-01"
+
+// CheckRefreshConfig
+// @Description: 定时检查刷新配置
+// @author: Roc
+// @datetime 2024-01-11 14:04:08
+func CheckRefreshConfig() {
+	var err error
+	errMsgList := make([]string, 0)
+
+	defer func() {
+		if err != nil {
+			global.LOG.Info("定时检查刷新配置失败:", err.Error())
+		}
+		if len(errMsgList) > 0 {
+			global.LOG.Info("定时检查刷新配置异常:\n", strings.Join(errMsgList, "\n"))
+		}
+	}()
+
+	resp, err := watch.GetRefreshConfigList()
+	if err != nil {
+		fmt.Println("获取刷新配置失败:", err.Error())
+		return
+	}
+
+	list := resp.Data
+	if len(resp.Data) <= 0 {
+		return
+	}
+
+	now := time.Now()
+	frequencyMap := make(map[string]string)
+	for _, item := range list {
+		fmt.Println(item)
+		if _, ok := frequencyMap[item.Frequency]; ok {
+			continue
+		}
+		frequencyMap[item.Frequency] = item.Frequency
+
+		startDate := BaseStartDate // 默认全部刷新
+		endDate := time.Now().Format(utils.FormatDate)
+		filePre := item.Frequency
+
+		switch item.Frequency {
+		case "日度":
+			filePre = "day"
+			endDate = time.Now().AddDate(0, 0, 1).Format(utils.FormatDate)
+			if item.RefreshAllData == 0 {
+				startDate = now.AddDate(0, 0, -item.RefreshDataNum).Format(utils.FormatDate)
+			}
+		case "周度":
+			filePre = "week"
+			endDate = utils.GetNowWeekMonday().Format(utils.FormatDate)
+			if item.RefreshAllData == 0 {
+				startDate = now.AddDate(0, 0, -item.RefreshDataNum*7).Format(utils.FormatDate)
+			}
+		case "旬度":
+			filePre = "tendan"
+			if item.RefreshAllData == 0 {
+				startDate = now.AddDate(0, 0, -item.RefreshDataNum*10).Format(utils.FormatDate)
+			}
+		case "月度":
+			filePre = "month"
+			if item.RefreshAllData == 0 {
+				startDate = now.AddDate(0, -item.RefreshDataNum, 0).Format(utils.FormatDate)
+			}
+		case "季度":
+			filePre = "season"
+			if item.RefreshAllData == 0 {
+				startDate = now.AddDate(0, -item.RefreshDataNum*3, 0).Format(utils.FormatDate)
+			}
+		case "半年度":
+			filePre = "half_year"
+			if item.RefreshAllData == 0 {
+				startDate = now.AddDate(0, -item.RefreshDataNum*6, 0).Format(utils.FormatDate)
+			}
+		case "年度":
+			filePre = "year"
+			if item.RefreshAllData == 0 {
+				startDate = now.AddDate(-item.RefreshDataNum, 0, 0).Format(utils.FormatDate)
+			}
+		default:
+			continue
+		}
+
+		// 加入到待刷新列表
+		err = indexMergeV2(item.Frequency, startDate, endDate, filePre)
+		if err != nil {
+			errMsgList = append(errMsgList, fmt.Sprintf("合并刷新%s指标失败,err:%s", item.Frequency, err.Error()))
+		}
+	}
+
+	fmt.Println("刷新结束")
+}

+ 3 - 3
services/index_merge.go

@@ -933,7 +933,7 @@ func GetIndexCommentV3(indexFilePath, StartDate string, list []index.BaseFromMys
 	indexInfo.IsNewWorkbook = false
 	indexInfo.Position = "A1"
 	indexInfo.ShowBlankLines = false
-	indexInfo.StartDate = StartDate
+	indexInfo.StartDate = StartDate // 这个是定义数据开始刷新的日期
 	indexInfo.Transpose = false
 	indexInfo.UpdateMode = 1
 	indexInfo.LookModel.IsLast = false
@@ -954,9 +954,9 @@ func GetIndexCommentV3(indexFilePath, StartDate string, list []index.BaseFromMys
 		item := new(IndexModels)
 		item.DataFormat = 0
 		if v.IndexName == "" {
-			item.DataStartDate = startDate
+			item.DataStartDate = startDate // 数据的开始日期
 		} else {
-			item.DataStartDate = v.EndDate.AddDate(0, 0, -7).Format(utils.FormatDate)
+			item.DataStartDate = v.StartDate.Format(utils.FormatDate) // 数据的开始日期
 		}
 		item.DefineName = ""
 		item.DefineUnit = ""

+ 26 - 1
services/index_merge_v2.go

@@ -53,6 +53,10 @@ func MergeMonthSeasonYear() {
 		return
 	}
 	fmt.Println("MergeMonthSeasonYear start")
+
+	// 旬度
+	IndexTendanMergeV2()
+
 	//月度
 	IndexMonthMergeV2()
 	//季度
@@ -86,6 +90,19 @@ func IndexWeekMergeV2() {
 	}
 }
 
+// IndexTendanMergeV2 月度指标合并
+func IndexTendanMergeV2() {
+	frequency := "旬度"
+	filePre := "tendan"
+	// 7期的数据,就是2个月零10天嘛
+	startDate := time.Now().AddDate(0, -2, -10).Format(utils.FormatDate)
+	endDate := time.Now().Format(utils.FormatDate)
+	err := indexMergeV2(frequency, startDate, endDate, filePre)
+	if err != nil {
+		fmt.Println("合并旬度指标失败,err:", err)
+	}
+}
+
 // IndexYearMergeV2 年度指标合并
 func IndexYearMergeV2() {
 	frequency := "年度"
@@ -127,7 +144,6 @@ func IndexMonthMergeV2() {
 // @params filePre string 文件名前缀
 // @params pageSize int 每个excel表中的指标数量
 func indexMergeV2(frequency, startDate, endDate, filePre string) (err error) {
-
 	firstIndexCount := IndexPageSize //第一个添加的excel表需要的指标数
 
 	frequencyReq := watch.GetMaxFileIndexReq{
@@ -156,6 +172,15 @@ func indexMergeV2(frequency, startDate, endDate, filePre string) (err error) {
 	//	return
 	//}
 
+	// 判断目录是否存在,不存在则创建
+	if !utils.FileIsExist(global.CONFIG.Serve.IndexMergeSaveDir) {
+		err = os.Mkdir(global.CONFIG.Serve.IndexMergeSaveDir, os.ModePerm)
+		if err != nil {
+			fmt.Println("os.Mkdir Err:" + err.Error())
+			return
+		}
+	}
+
 	mergeIndexFilePath := global.CONFIG.Serve.IndexMergeSaveDir + fileName
 
 	templateFile := excelize.NewFile()

+ 54 - 0
watch/edb_lib.go

@@ -10,6 +10,7 @@ import (
 	"io/ioutil"
 	"net/http"
 	"strings"
+	"time"
 )
 
 type BaseResponse struct {
@@ -473,6 +474,59 @@ func MultiUpdateIndex(req []UpdateIndexReq) (err error) {
 	return
 }
 
+// RefreshConfigResponse
+// @Description: 获取刷新配置列表
+type RefreshConfigResponse struct {
+	Ret         int
+	Msg         string
+	ErrMsg      string
+	ErrCode     string
+	Data        []EdbRefreshDefaultConfig
+	Success     bool `description:"true 执行成功,false 执行失败"`
+	IsSendEmail bool `json:"-" description:"true 发送邮件,false 不发送邮件"`
+	IsAddLog    bool `json:"-" description:"true 新增操作日志,false 不新增操作日志" `
+}
+
+// EdbRefreshDefaultConfig
+// @Description: 指标的默认刷新时间配置
+type EdbRefreshDefaultConfig struct {
+	Id                  int       `orm:"column(id);pk"`
+	Source              int       `description:"来源"`
+	SubSource           int       `description:"来源名称"`
+	Frequency           string    `description:"频度"`
+	RefreshFrequency    string    `description:"刷新频率"`
+	RefreshFrequencyDay int       `description:"具体刷新的日期"`
+	RefreshTime         string    `description:"刷新时间"`
+	RefreshAllData      int       `description:"是否刷新所有数据,0:否,1:刷新所有数据"`
+	RefreshDataNum      int       `description:"刷新单元格数"`
+	ModifyTime          time.Time `description:"最晚一次的更新时间"`
+	CreateTime          time.Time `description:"添加时间"`
+}
+
+// GetRefreshConfigList 获取刷新配置列表
+func GetRefreshConfigList() (resp *RefreshConfigResponse, err error) {
+	urlStr := "/edb_refresh/config/mysteel_index/list"
+
+	if global.CONFIG.Serve.EdbLibUrl == `` {
+		err = errors.New("刷新未配置")
+		return
+	}
+	postUrl := global.CONFIG.Serve.EdbLibUrl + urlStr
+	result, err := HttpPost(postUrl, ``, "application/json")
+	if err != nil {
+		return
+	}
+	if result != nil {
+		global.LOG.Debug(" GetRefreshConfigList Result: " + string(result))
+		err = json.Unmarshal(result, &resp)
+		if err != nil {
+			return
+		}
+		return resp, nil
+	}
+	return nil, err
+}
+
 type RefreshCheckByDayReq struct {
 	Source         int    `description:"来源id"`
 	LatestDate     string `description:"数据最新日期"`