Explorar o código

优化计算指标,计算逻辑

317699326@qq.com hai 3 meses
pai
achega
594b96f009
Modificáronse 2 ficheiros con 73 adicións e 1 borrados
  1. 70 0
      services/data/edb_info.go
  2. 3 1
      services/task.go

+ 70 - 0
services/data/edb_info.go

@@ -267,6 +267,8 @@ func RefreshDataFromCalculateAll() (err error) {
 	condition += " AND edb_type=?  AND edb_info_type=? AND no_update=0"
 	pars = append(pars, 2, 0)
 
+	condition += " AND edb_info_id NOT IN( SELECT edb_info_id FROM edb_info_calculate_mapping WHERE from_edb_info_id>edb_info_id) "
+
 	items, err := data_manage.GetEdbInfoByCondition(condition, pars, 0)
 	if err != nil {
 		return err
@@ -1375,3 +1377,71 @@ func RefreshDataFromTradeAnalysis(wg *sync.WaitGroup) (err error) {
 	utils.FileLog.Info(fmt.Sprintf("持仓分析指标刷新结束: %s", time.Now().Format(utils.FormatDateTime)))
 	return err
 }
+
+// 刷新计算指标-当比当前计算指标id大的依赖指标刷新完之后,再进行指标刷新
+func RefreshDataFromCalculateAfter() (err error) {
+	errMsgList := make([]string, 0)
+	defer func() {
+		if err != nil {
+			errMsg := "刷新所有计算指标失败 ErrMsg:" + err.Error()
+			utils.FileLog.Info(errMsg)
+			go alarm_msg.SendAlarmMsg(errMsg, 3)
+		}
+
+		if len(errMsgList) > 0 {
+			utils.FileLog.Info("刷新所有计算指标失败 ErrMsg:" + strings.Join(errMsgList, "\n"))
+			go alarm_msg.SendAlarmMsg("刷新所有计算指标失败 ErrMsg:"+strings.Join(errMsgList, "\n"), 3)
+		}
+	}()
+	var condition string
+	var pars []interface{}
+	// 查询 普通指标的计算指标
+	condition += " AND edb_type=?  AND edb_info_type=? AND no_update=0"
+	pars = append(pars, 2, 0)
+
+	condition += " AND edb_info_id IN( SELECT edb_info_id FROM edb_info_calculate_mapping WHERE from_edb_info_id>edb_info_id) "
+
+	items, err := data_manage.GetEdbInfoByCondition(condition, pars, 0)
+	if err != nil {
+		return err
+	}
+
+	nowStr := time.Now().AddDate(0, 0, -1).Format(utils.FormatDate)
+
+	startDateOfWeek := utils.GetNowWeekMonday()
+	endDateOfWeek := utils.GetNowWeekLastDay()
+
+	for _, v := range items {
+
+		if v.Frequency == "日度" {
+			if v.EndDate.Format(utils.FormatDate) == nowStr {
+				continue
+			}
+		} else if v.Frequency == "周度" {
+			if !v.EndDate.Before(startDateOfWeek) && !v.EndDate.After(endDateOfWeek) {
+				continue
+			}
+		}
+
+		source := v.Source
+		startDate := v.StartDate.Format(utils.FormatDate)
+		if startDate == "0001-01-01" {
+			continue
+		}
+		fmt.Println(v.EdbInfoId, v.EdbCode, v.EdbName, v.SourceName, source)
+
+		fmt.Println("RefreshEdbCalculateData", v.EdbInfoId, v.EdbCode, startDate)
+		result, tmpErr := RefreshEdbCalculateData(v.EdbInfoId, v.EdbCode, startDate)
+		if tmpErr != nil {
+			errMsgList = append(errMsgList, fmt.Sprintf("指标ID:%d;指标编码:%s;err:%s", v.EdbInfoId, v.EdbCode, tmpErr.Error()))
+			continue
+		}
+		if result.Ret != 200 {
+			errMsgList = append(errMsgList, fmt.Sprintf("指标ID:%d;指标编码:%s;msg:%s;errMsg:%s", v.EdbInfoId, v.EdbCode, result.Msg, result.ErrMsg))
+			//return err
+			continue
+		}
+
+	}
+	return err
+}

+ 3 - 1
services/task.go

@@ -15,7 +15,7 @@ import (
 
 func Task() {
 	fmt.Println("task start")
-	
+
 	//如果是生产环境,才需要走这些任务
 	if utils.RunMode == "release" {
 		releaseTask()
@@ -223,6 +223,8 @@ func RefreshData(cont context.Context) (err error) {
 	// 刷新商品利润曲线图表数据
 	_ = data.RefreshFutureGoodProfitChart()
 
+	// 刷新计算指标-依赖指标id大于当前计算指标id的计算指标
+	data.RefreshDataFromCalculateAfter()
 	time.Sleep(5 * time.Second)
 	//data.RefreshNotice()