|
@@ -3,6 +3,7 @@ package models
|
|
|
|
|
|
import (
|
|
|
"errors"
|
|
|
+ "eta/eta_index_lib/utils"
|
|
|
"github.com/beego/beego/v2/client/orm"
|
|
|
)
|
|
|
|
|
@@ -69,3 +70,53 @@ func UpdateRzdData(item *BaseFromRzdData) (err error) {
|
|
|
_, err = o.Update(item)
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+// GetRzdDataMaxAndMinDateByIndexCodes 查询数据时间最新值,数据时间最小值和最新值对应的value值
|
|
|
+func GetRzdDataMaxAndMinDateByIndexCodes(indexCodes []string) (resultMap map[string]*EdbInfoMaxAndMinInfo, err error) {
|
|
|
+ resultMap = make(map[string]*EdbInfoMaxAndMinInfo)
|
|
|
+
|
|
|
+ o := orm.NewOrm()
|
|
|
+ sql := ` SELECT index_code, MIN(data_time) AS min_date,MAX(data_time) AS max_date,MIN(value) AS min_value,MAX(value) AS max_value FROM base_from_rzd_data WHERE index_code in (` + utils.GetOrmInReplace(len(indexCodes)) + `) GROUP BY index_code`
|
|
|
+ var items []EdbInfoMaxAndMinInfo
|
|
|
+ _, err = o.Raw(sql, indexCodes).QueryRows(&items)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, row := range items {
|
|
|
+ resultMap[row.IndexCode] = &EdbInfoMaxAndMinInfo{
|
|
|
+ MinDate: row.MinDate,
|
|
|
+ MaxDate: row.MaxDate,
|
|
|
+ MinValue: row.MinValue,
|
|
|
+ MaxValue: row.MaxValue,
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查询最新的值(最新数据时间对应的 value)
|
|
|
+ sql = `SELECT a.index_code, a.value AS latest_value
|
|
|
+ FROM base_from_rzd_data a
|
|
|
+ JOIN (
|
|
|
+ SELECT index_code, MAX(data_time) AS latest_time
|
|
|
+ FROM base_from_rzd_data
|
|
|
+ WHERE index_code IN (` + utils.GetOrmInReplace(len(indexCodes)) + `)
|
|
|
+ GROUP BY index_code
|
|
|
+ ) b ON a.index_code = b.index_code AND a.data_time = b.latest_time`
|
|
|
+ _, err = o.Raw(sql, indexCodes).QueryRows(&items)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ for _, row := range items {
|
|
|
+ if _, ok := resultMap[row.IndexCode]; ok {
|
|
|
+ resultMap[row.IndexCode].LatestValue = row.LatestValue
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return resultMap, nil
|
|
|
+}
|
|
|
+
|
|
|
+func UpdateRzdEdbDataByIndexCodes(indexCode string, info *EdbInfoMaxAndMinInfo) error {
|
|
|
+ o := orm.NewOrm()
|
|
|
+ sql := `UPDATE base_from_rzd_index SET start_date=?, end_date=?, latest_value=? WHERE index_code=?`
|
|
|
+ _, err := o.Raw(sql, info.MinDate, info.MaxDate, info.LatestValue, indexCode).Exec()
|
|
|
+ return err
|
|
|
+}
|