Przeglądaj źródła

fix:新增时间位移、直接拼接、累计值同比拼接定时更新;调整环比值指标更新

Roc 3 lat temu
rodzic
commit
72022603ab

+ 20 - 2
models/data_manage/edb_data_base.go

@@ -41,6 +41,24 @@ func GetEdbDataTableName(source int) (tableName string) {
 		tableName = "edb_data_calculate_bp"
 	case utils.DATA_SOURCE_GL:
 		tableName = "edb_data_gl"
+	case utils.DATA_SOURCE_ZZ:
+		tableName = "edb_data_zz"
+	case utils.DATA_SOURCE_DL:
+		tableName = "edb_data_dl"
+	case utils.DATA_SOURCE_SH:
+		tableName = "edb_data_sh"
+	case utils.DATA_SOURCE_CFFEX:
+		tableName = "edb_data_cffex"
+	case utils.DATA_SOURCE_SHFE:
+		tableName = "edb_data_ine"
+	case utils.DATA_SOURCE_GIE:
+		tableName = "edb_data_gie"
+	case utils.DATA_SOURCE_CALCULATE_ZJPJ:
+		tableName = "edb_data_calculate_zjpj"
+	case utils.DATA_SOURCE_CALCULATE_TIME_SHIFT:
+		tableName = "edb_data_calculate_time_shift"
+	case utils.DATA_SOURCE_CALCULATE_LJZTBPJ:
+		tableName = "edb_data_calculate_ljztbpj"
 	default:
 		tableName = ""
 		errors.New("无效的渠道:" + strconv.Itoa(source))
@@ -75,7 +93,7 @@ func GetEdbInfoCalculateTableName(source int) (tableName string) {
 	return
 }
 
-func GetAddSql(edbInfoId, edbCode, dataTime, timestampStr,value string) (addSql string) {
+func GetAddSql(edbInfoId, edbCode, dataTime, timestampStr, value string) (addSql string) {
 	nowStr := time.Now().Format(utils.FormatDateTime)
 	addSql += "("
 	addSql += edbInfoId + "," + "'" + edbCode + "'" + "," + "'" + dataTime + "'" + "," + value + "," + "'" + nowStr + "'" +
@@ -105,4 +123,4 @@ type EdbDataBase struct {
 	CreateTime    time.Time
 	ModifyTime    time.Time
 	DataTimestamp int64
-}
+}

+ 0 - 23
models/data_manage/edb_data_calculate_ljztbpj.go

@@ -18,29 +18,6 @@ type EdbDataCalculateLjztbpj struct {
 	DataTimestamp int64
 }
 
-func AddEdbDataCalculateLjztbpjBySql(sqlStr string) (err error) {
-	o := orm.NewOrm()
-	o.Using("data")
-	_, err = o.Raw(sqlStr).Exec()
-	return
-}
-
-func GetEdbDataCalculateLjztbpjMaxOrMinDate(edbCode string) (min_date, max_date string, err error) {
-	o := orm.NewOrm()
-	o.Using("data")
-	sql := ` SELECT MIN(data_time) AS min_date,MAX(data_time) AS max_date FROM edb_data_calculate_ljztbpj WHERE edb_code=? `
-	err = o.Raw(sql, edbCode).QueryRow(&min_date, &max_date)
-	return
-}
-
-func GetEdbDataCalculateLjztbpjByCode(edbCode string, size int) (items []*EdbInfoSearchData, err error) {
-	o := orm.NewOrm()
-	o.Using("data")
-	sql := ` SELECT * FROM edb_data_calculate_ljztbpj WHERE edb_code=? ORDER BY data_time DESC LIMIT ? `
-	_, err = o.Raw(sql, edbCode, size).QueryRows(&items)
-	return
-}
-
 // GetAllEdbDataCalculateLjztbpjByEdbInfoId 根据指标id获取全部的数据
 func GetAllEdbDataCalculateLjztbpjByEdbInfoId(edbInfoId int) (items []*EdbDataCalculateLjztbpj, err error) {
 	o := orm.NewOrm()

+ 0 - 30
models/data_manage/edb_data_calculate_zjpj.go

@@ -18,29 +18,6 @@ type EdbDataCalculateZjpj struct {
 	DataTimestamp int64
 }
 
-func AddEdbDataCalculateZjpjBySql(sqlStr string) (err error) {
-	o := orm.NewOrm()
-	o.Using("data")
-	_, err = o.Raw(sqlStr).Exec()
-	return
-}
-
-func GetEdbDataCalculateZjpjMaxOrMinDate(edbCode string) (min_date, max_date string, err error) {
-	o := orm.NewOrm()
-	o.Using("data")
-	sql := ` SELECT MIN(data_time) AS min_date,MAX(data_time) AS max_date FROM edb_data_calculate_zjpj WHERE edb_code=? `
-	err = o.Raw(sql, edbCode).QueryRow(&min_date, &max_date)
-	return
-}
-
-func GetEdbDataCalculateZjpjByCode(edbCode string, size int) (items []*EdbInfoSearchData, err error) {
-	o := orm.NewOrm()
-	o.Using("data")
-	sql := ` SELECT * FROM edb_data_calculate_zjpj WHERE edb_code=? ORDER BY data_time DESC LIMIT ? `
-	_, err = o.Raw(sql, edbCode, size).QueryRows(&items)
-	return
-}
-
 // GetAllEdbDataCalculateZjpjByEdbInfoId 根据指标id获取全部的数据
 func GetAllEdbDataCalculateZjpjByEdbInfoId(edbInfoId int) (items []*EdbDataCalculateZjpj, err error) {
 	o := orm.NewOrm()
@@ -49,10 +26,3 @@ func GetAllEdbDataCalculateZjpjByEdbInfoId(edbInfoId int) (items []*EdbDataCalcu
 	_, err = o.Raw(sql, edbInfoId).QueryRows(&items)
 	return
 }
-
-type EdbDataFromZjpj struct {
-	Date   map[string]int64   `json:"date"`
-	Ticker map[string]string  `json:"ticker"`
-	Field  map[string]string  `json:"field"`
-	Value  map[string]float64 `json:"value"`
-}

+ 11 - 11
models/data_manage/edb_info_calculate_hbz.go

@@ -38,7 +38,7 @@ func HbzDiv(current, pre float64) string {
 }
 
 //刷新环比值数据
-func RefreshCalculateHbz(edbInfoId, source int, fromEdbInfo *EdbInfo, edbCode, startDate, endDate string) (err error) {
+func RefreshCalculateHbz(edbInfoId, source int, fromEdbInfo *EdbInfo, edbCode string, formulaInt int) (err error) {
 	o := orm.NewOrm()
 	o.Using("data")
 	o.Begin()
@@ -60,14 +60,14 @@ func RefreshCalculateHbz(edbInfoId, source int, fromEdbInfo *EdbInfo, edbCode, s
 	condition += " AND edb_info_id=? "
 	pars = append(pars, fromEdbInfo.EdbInfoId)
 
-	if startDate != "" {
-		condition += " AND data_time>=? "
-		pars = append(pars, startDate)
-	}
-	if endDate != "" {
-		condition += " AND data_time<=? "
-		pars = append(pars, endDate)
-	}
+	//if startDate != "" {
+	//	condition += " AND data_time>=? "
+	//	pars = append(pars, startDate)
+	//}
+	//if endDate != "" {
+	//	condition += " AND data_time<=? "
+	//	pars = append(pars, endDate)
+	//}
 
 	dataList, err := GetEdbDataListAll(condition, pars, fromEdbInfo.Source, 0)
 	if err != nil {
@@ -94,7 +94,7 @@ func RefreshCalculateHbz(edbInfoId, source int, fromEdbInfo *EdbInfo, edbCode, s
 	dataLen := len(dataList)
 	fmt.Println("dataLen:", dataLen)
 	for i := 0; i < dataLen; i++ {
-		j := i + 1
+		j := i + formulaInt
 		if j < dataLen {
 			//当期
 			currentItem := dataList[i]
@@ -161,4 +161,4 @@ func GetEdbInfoCalculateHbzDetail(edbInfoId int) (item *EdbInfoCalculateTbzDetai
 			WHERE a.edb_info_id=? `
 	err = o.Raw(sql, edbInfoId).QueryRow(&item)
 	return
-}
+}

+ 2 - 12
models/data_manage/edb_info_calculate_ljztbpj.go

@@ -28,18 +28,8 @@ type EdbInfoCalculateLjztbpjDetail struct {
 	EndDate              string    `description:"结束日期"`
 }
 
-func GetEdbInfoCalculateLjztbpjDetail(edbInfoId int) (item *EdbInfoCalculateTbzDetail, err error) {
-	o := orm.NewOrm()
-	o.Using("data")
-	sql := ` SELECT a.*,b.start_date,b.end_date FROM edb_info_calculate_mapping AS a
-			INNER JOIN edb_info AS b ON a.from_edb_info_id=b.edb_info_id
-			WHERE a.edb_info_id=? `
-	err = o.Raw(sql, edbInfoId).QueryRow(&item)
-	return
-}
-
 // RefreshAllCalculateLjztbpj 刷新所有 累计值同比拼接 数据
-func RefreshAllCalculateLjztbpj(edbInfo *EdbInfo) (err error) {
+func RefreshAllCalculateLjztbpj(edbInfo *EdbInfoList) (err error) {
 	o := orm.NewOrm()
 	o.Using("data")
 	o.Begin()
@@ -207,7 +197,7 @@ func RefreshAllCalculateLjztbpj(edbInfo *EdbInfo) (err error) {
 				tbzDataValue := tbzEdbDataMap[v] //同比值
 				currValue := pjDataValue * (1 + tbzDataValue/100)
 
-				currValue, _ = decimal.NewFromFloat(currValue).Round(4).Float64()
+				currValue, _ = decimal.NewFromFloat(currValue).Truncate(4).Float64()
 				//将计算后的数据存入已入库指标map里面,以便后续计算
 				nowEdbDataMap[v] = currValue
 

+ 32 - 0
models/data_manage/edb_info_calculate_mapping.go

@@ -80,3 +80,35 @@ func FixEdbInfoCalculateMapping() {
 		}
 	}
 }
+
+type EdbInfoCalculateMappingView struct {
+	EdbInfoCalculateMappingId int       `orm:"column(edb_info_calculate_mapping_id);pk"`
+	EdbInfoId                 int       `description:"计算指标id"`
+	Source                    int       `description:"计算指标来源"`
+	SourceName                string    `description:"计算指标来源名称"`
+	EdbCode                   string    `description:"计算指标编码"`
+	FromEdbInfoId             int       `description:"基础指标id"`
+	FromEdbCode               string    `description:"基础指标编码"`
+	FromEdbName               string    `description:"基础指标名称"`
+	FromSource                int       `description:"基础指标来源"`
+	FromSourceName            string    `description:"基础指标来源名称"`
+	FromTag                   string    `description:"来源指标标签"`
+	Sort                      int       `description:"计算指标名称排序"`
+	CreateTime                time.Time `description:"创建时间"`
+	ModifyTime                time.Time `description:"修改时间"`
+	StartDate                 string    `description:"开始日期"`
+	EndDate                   string    `description:"结束日期"`
+	CalculateFormula          string    `description:"N值"`
+	MoveType                  int       `description:"移动方式:1:领先(默认),2:滞后"`
+	MoveFrequency             string    `description:"移动频度"`
+}
+
+func GetEdbInfoCalculateMappingDetail(edbInfoId int) (item *EdbInfoCalculateMappingView, err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	sql := ` SELECT a.*,b.start_date,b.end_date,b.calculate_formula,b.move_type,b.move_frequency FROM edb_info_calculate_mapping AS a
+			INNER JOIN edb_info AS b ON a.from_edb_info_id=b.edb_info_id
+			WHERE a.edb_info_id=? `
+	err = o.Raw(sql, edbInfoId).QueryRow(&item)
+	return
+}

+ 1 - 11
models/data_manage/edb_info_calculate_zjpj.go

@@ -26,18 +26,8 @@ type EdbInfoCalculateZjpjDetail struct {
 	EndDate              string    `description:"结束日期"`
 }
 
-func GetEdbInfoCalculateZjpjDetail(edbInfoId int) (item *EdbInfoCalculateTbzDetail, err error) {
-	o := orm.NewOrm()
-	o.Using("data")
-	sql := ` SELECT a.*,b.start_date,b.end_date FROM edb_info_calculate_mapping AS a
-			INNER JOIN edb_info AS b ON a.from_edb_info_id=b.edb_info_id
-			WHERE a.edb_info_id=? `
-	err = o.Raw(sql, edbInfoId).QueryRow(&item)
-	return
-}
-
 // RefreshAllCalculateZjpj 刷新所有 直接拼接 数据
-func RefreshAllCalculateZjpj(edbInfo *EdbInfo) (err error) {
+func RefreshAllCalculateZjpj(edbInfo *EdbInfoList) (err error) {
 	o := orm.NewOrm()
 	o.Using("data")
 	o.Begin()

+ 4 - 0
models/db.go

@@ -83,5 +83,9 @@ func init() {
 		new(Edbdata),
 		new(data_manage.EdbInfoCalculateMapping),
 		new(UserViewStatistics),
+		new(data_manage.EdbInfo), //hz_data库的edb_info表
+		new(data_manage.EdbInfoCalculateMapping),
+		new(data_manage.EdbDataCalculateZjpj),    //直接拼接
+		new(data_manage.EdbDataCalculateLjztbpj), //累计同比值拼接
 	)
 }

+ 31 - 3
services/data/edb_info.go

@@ -355,9 +355,10 @@ func RefreshDataFromCalculateAll() (err error) {
 			if err != nil {
 				return errors.New("GetEdbInfoById Err:" + err.Error())
 			}
-			startDate := time.Now().AddDate(-2, -2, 0).Format(utils.FormatDate)
-			endDate := "" //time.Now().Format(utils.FormatDate)
-			err = data_manage.RefreshCalculateHbz(edbInfoId, source, fromEdbInfo, calculateHbz.EdbCode, startDate, endDate)
+			//startDate := time.Now().AddDate(-2, -2, 0).Format(utils.FormatDate)
+			//endDate := "" //time.Now().Format(utils.FormatDate)
+			formulaInt, _ := strconv.Atoi(v.CalculateFormula)
+			err = data_manage.RefreshCalculateHbz(edbInfoId, source, fromEdbInfo, calculateHbz.EdbCode, formulaInt)
 			if err != nil {
 				return errors.New("RefreshCalculateTbz Err:" + err.Error())
 			}
@@ -393,6 +394,33 @@ func RefreshDataFromCalculateAll() (err error) {
 					return errors.New("RefreshCalculateTbz Err:" + err.Error())
 				}
 			}
+		} else if source == utils.DATA_SOURCE_CALCULATE_TIME_SHIFT {
+			calculate, err := data_manage.GetEdbInfoCalculateMappingDetail(edbInfoId)
+			if err != nil {
+				return fmt.Errorf("GetEdbInfoCalculateTbzDetail Err:" + err.Error())
+			}
+			fromEdbInfo, err := data_manage.GetEdbInfoById(calculate.FromEdbInfoId)
+			if err != nil {
+				return fmt.Errorf("GetEdbInfoById Err:" + err.Error())
+			}
+			startDate := v.StartDate.Format(utils.FormatDate)
+			endDate := time.Now().Format(utils.FormatDate)
+			formulaInt, _ := strconv.Atoi(calculate.CalculateFormula)
+			err = data_manage.RefreshAllCalculateTimeShift(edbInfoId, source, formulaInt, calculate.MoveType, fromEdbInfo, calculate.EdbCode, startDate, endDate, calculate.MoveFrequency)
+			if err != nil {
+				return fmt.Errorf("RefreshAllCalculateTimeShift Err:" + err.Error())
+			}
+
+		} else if source == utils.DATA_SOURCE_CALCULATE_ZJPJ { //刷新直接拼接
+			err = data_manage.RefreshAllCalculateZjpj(v)
+			if err != nil {
+				return fmt.Errorf("RefreshAllCalculateZjpj Err:" + err.Error())
+			}
+		} else if source == utils.DATA_SOURCE_CALCULATE_LJZTBPJ { //刷新累计值同比拼接
+			err = data_manage.RefreshAllCalculateLjztbpj(v)
+			if err != nil {
+				return fmt.Errorf("RefreshAllCalculateLjztbpj Err:" + err.Error())
+			}
 		} else {
 			msg := "刷新失败,无效的指标渠道:source:" + strconv.Itoa(source) + " EdbCode:" + v.EdbCode
 			err = errors.New(msg)

+ 24 - 21
utils/constants.go

@@ -63,27 +63,30 @@ const (
 
 //数据来源渠道
 const (
-	DATA_SOURCE_THS                 = iota + 1 //同花顺
-	DATA_SOURCE_WIND                           //wind
-	DATA_SOURCE_PB                             //彭博
-	DATA_SOURCE_CALCULATE                      //计算指标
-	DATA_SOURCE_CALCULATE_LJZZY                //累计值转月
-	DATA_SOURCE_CALCULATE_TBZ                  //同比值
-	DATA_SOURCE_CALCULATE_TCZ                  //同差值
-	DATA_SOURCE_CALCULATE_NSZYDPJJS            //N数值移动平均计算
-	DATA_SOURCE_MANUAL                         //手工指标
-	DATA_SOURCE_LZ                             //隆众
-	DATA_SOURCE_YS                             //有色
-	DATA_SOURCE_CALCULATE_HBZ                  //环比值->12
-	DATA_SOURCE_CALCULATE_HCZ                  //环差值->13
-	DATA_SOURCE_CALCULATE_BP                   //变频->14
-	DATA_SOURCE_GL                             //钢联->15
-	DATA_SOURCE_ZZ                             //郑商所->16
-	DATA_SOURCE_DL                             //大商所->17
-	DATA_SOURCE_SH                             //上期所->18
-	DATA_SOURCE_CFFEX                          //中金所->19
-	DATA_SOURCE_SHFE                           //上期能源->20
-	DATA_SOURCE_GIE                            //欧洲天然气->21
+	DATA_SOURCE_THS                  = iota + 1 //同花顺
+	DATA_SOURCE_WIND                            //wind
+	DATA_SOURCE_PB                              //彭博
+	DATA_SOURCE_CALCULATE                       //计算指标
+	DATA_SOURCE_CALCULATE_LJZZY                 //累计值转月
+	DATA_SOURCE_CALCULATE_TBZ                   //同比值
+	DATA_SOURCE_CALCULATE_TCZ                   //同差值
+	DATA_SOURCE_CALCULATE_NSZYDPJJS             //N数值移动平均计算
+	DATA_SOURCE_MANUAL                          //手工指标
+	DATA_SOURCE_LZ                              //隆众
+	DATA_SOURCE_YS                              //有色
+	DATA_SOURCE_CALCULATE_HBZ                   //环比值->12
+	DATA_SOURCE_CALCULATE_HCZ                   //环差值->13
+	DATA_SOURCE_CALCULATE_BP                    //变频->14
+	DATA_SOURCE_GL                              //钢联->15
+	DATA_SOURCE_ZZ                              //郑商所->16
+	DATA_SOURCE_DL                              //大商所->17
+	DATA_SOURCE_SH                              //上期所->18
+	DATA_SOURCE_CFFEX                           //中金所->19
+	DATA_SOURCE_SHFE                            //上期能源->20
+	DATA_SOURCE_GIE                             //欧洲天然气->21
+	DATA_SOURCE_CALCULATE_TIME_SHIFT            //时间移位->22
+	DATA_SOURCE_CALCULATE_ZJPJ                  //直接拼接->23
+	DATA_SOURCE_CALCULATE_LJZTBPJ               //累计值同比拼接->24
 )
 
 //http://datawind.hzinsights.com:8040/hz_server