package data_manage import ( "eta/eta_hub/models/mgo" "eta/eta_hub/utils" "fmt" "github.com/beego/beego/v2/client/orm" "go.mongodb.org/mongo-driver/bson" "strings" "time" ) // GetEdbDataTableName 指标数据->存储表 func GetEdbDataTableName(source, subSource int) (tableName string) { switch source { case utils.DATA_SOURCE_THS: switch subSource { case utils.DATA_SUB_SOURCE_DATE: tableName = "edb_data_ths_ds" case utils.DATA_SUB_SOURCE_HIGH_FREQUENCY: tableName = "edb_data_ths_hf" default: tableName = "edb_data_ths" } case utils.DATA_SOURCE_WIND: if subSource == utils.DATA_SUB_SOURCE_DATE { tableName = "edb_data_wind_wsd" } else { tableName = "edb_data_wind" } case utils.DATA_SOURCE_PB, utils.DATA_SOURCE_PB_FINANCE: //彭博经济数据、彭博财务数据 tableName = "edb_data_pb" case utils.DATA_SOURCE_CALCULATE: tableName = "edb_data_calculate" case utils.DATA_SOURCE_CALCULATE_LJZZY: tableName = "edb_data_calculate_ljzzy" case utils.DATA_SOURCE_CALCULATE_TBZ: tableName = "edb_data_calculate_tbz" case utils.DATA_SOURCE_CALCULATE_TCZ: tableName = "edb_data_calculate_tcz" case utils.DATA_SOURCE_CALCULATE_NSZYDPJJS: tableName = "edb_data_calculate_nszydpjjs" case utils.DATA_SOURCE_MANUAL: tableName = "edb_data_manual" case utils.DATA_SOURCE_LZ: tableName = "edb_data_lz" case utils.DATA_SOURCE_YS: tableName = "edb_data_ys" case utils.DATA_SOURCE_CALCULATE_HBZ: tableName = "edb_data_calculate_hbz" case utils.DATA_SOURCE_CALCULATE_HCZ: tableName = "edb_data_calculate_hcz" case utils.DATA_SOURCE_CALCULATE_BP: 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" case utils.DATA_SOURCE_LT: tableName = "edb_data_lt" case utils.DATA_SOURCE_COAL: tableName = "edb_data_coal" case utils.DATA_SOURCE_PYTHON: tableName = "edb_data_python" case utils.DATA_SOURCE_GOOGLE_TRAVEL: tableName = "edb_data_google_travel" case utils.DATA_SOURCE_PREDICT_CALCULATE: tableName = "edb_data_predict_calculate" case utils.DATA_SOURCE_PREDICT_CALCULATE_TBZ: tableName = "edb_data_predict_calculate_tbz" case utils.DATA_SOURCE_PREDICT_CALCULATE_TCZ: tableName = "edb_data_predict_calculate_tcz" case utils.DATA_SOURCE_MYSTEEL_CHEMICAL: tableName = "edb_data_mysteel_chemical" case utils.DATA_SOURCE_CALCULATE_CJJX: tableName = "edb_data_calculate_cjjx" case utils.DATA_SOURCE_EIA_STEO: tableName = "edb_data_eia_steo" case utils.DATA_SOURCE_CALCULATE_NHCC: tableName = "edb_data_calculate_nhcc" case utils.DATA_SOURCE_COM_TRADE: tableName = "edb_data_com_trade" case utils.DATA_SOURCE_PREDICT_CALCULATE_NSZYDPJJS: tableName = "edb_data_predict_calculate_nszydpjjs" case utils.DATA_SOURCE_CALCULATE_ADJUST: tableName = "edb_data_calculate_adjust" case utils.DATA_SOURCE_SCI: tableName = "edb_data_sci" case utils.DATA_SOURCE_PREDICT_CALCULATE_LJZZY: tableName = "edb_data_predict_calculate_ljzzy" case utils.DATA_SOURCE_PREDICT_CALCULATE_TIME_SHIFT: tableName = "edb_data_predict_calculate_time_shift" case utils.DATA_SOURCE_PREDICT_CALCULATE_ZJPJ: tableName = "edb_data_predict_calculate_zjpj" case utils.DATA_SOURCE_PREDICT_CALCULATE_LJZTBPJ: tableName = "edb_data_predict_calculate_ljztbpj" case utils.DATA_SOURCE_PREDICT_CALCULATE_NHCC: tableName = "edb_data_predict_calculate_nhcc" case utils.DATA_SOURCE_PREDICT_CALCULATE_CJJX: tableName = "edb_data_predict_calculate_cjjx" case utils.DATA_SOURCE_PREDICT_CALCULATE_HBZ: tableName = "edb_data_predict_calculate_hbz" case utils.DATA_SOURCE_PREDICT_CALCULATE_HCZ: tableName = "edb_data_predict_calculate_hcz" case utils.DATA_SOURCE_PREDICT_CALCULATE_BP: tableName = "edb_data_predict_calculate_bp" case utils.DATA_SOURCE_CALCULATE_JP: tableName = "edb_data_calculate_jp" case utils.DATA_SOURCE_CALCULATE_NH: tableName = "edb_data_calculate_nh" case utils.DATA_SOURCE_CALCULATE_KSZS: tableName = "edb_data_calculate_kszs" case utils.DATA_SOURCE_PREDICT_CALCULATE_JP: tableName = "edb_data_predict_calculate_jp" case utils.DATA_SOURCE_PREDICT_CALCULATE_NH: tableName = "edb_data_predict_calculate_nh" case utils.DATA_SOURCE_PREDICT_CALCULATE_KSZS: tableName = "edb_data_predict_calculate_kszs" case utils.DATA_SOURCE_BAIINFO: tableName = "edb_data_baiinfo" case utils.DATA_SOURCE_STOCK_PLANT: tableName = "edb_data_stock_plant" case utils.DATA_SOURCE_CALCULATE_CORRELATION: tableName = "edb_data_calculate_correlation" case utils.DATA_SOURCE_NATIONAL_STATISTICS: tableName = "edb_data_national_statistics" case utils.DATA_SOURCE_CALCULATE_LJZZJ: //累计值转季 -> 61 tableName = "edb_data_calculate_ljzzj" case utils.DATA_SOURCE_CALCULATE_LJZ: //累计值 -> 62 tableName = "edb_data_calculate_ljz" case utils.DATA_SOURCE_CALCULATE_LJZNCZJ: //累计值(年初至今) -> 63 tableName = "edb_data_calculate_ljznczj" case utils.DATA_SOURCE_PREDICT_CALCULATE_LJZZJ: // 预测指标 - 累计值 -> 65 tableName = "edb_data_predict_calculate_ljzzj" case utils.DATA_SOURCE_PREDICT_CALCULATE_LJZ: //预测指标 - 累计值转季->64 tableName = "edb_data_predict_calculate_ljz" case utils.DATA_SOURCE_PREDICT_CALCULATE_LJZNCZJ: //预测指标 - 累计值(年初至今) -> 66 tableName = "edb_data_predict_calculate_ljznczj" case utils.DATA_SOURCE_CALCULATE_STANDARD_DEVIATION: //标准差->67 tableName = "edb_data_calculate_standard_deviation" case utils.DATA_SOURCE_CALCULATE_PERCENTILE: //百分位->68 tableName = "edb_data_calculate_percentile" case utils.DATA_SOURCE_PREDICT_CALCULATE_STANDARD_DEVIATION: //预测标准差->69 tableName = "edb_data_predict_ccalculate_standard_deviation" case utils.DATA_SOURCE_PREDICT_CALCULATE_PERCENTILE: //预测百分位->70 tableName = "edb_data_predict_ccalculate_percentile" case utils.DATA_SOURCE_FUBAO: //富宝-71 tableName = "edb_data_fubao" case utils.DATA_SOURCE_CALCULATE_ZSXY: tableName = "edb_data_calculate_zsxy" // 指数修匀->72 case utils.DATA_SOURCE_PREDICT_CALCULATE_ZSXY: tableName = "edb_data_predict_calculate_zsxy" // 预测指数修匀->73 case utils.DATA_SOURCE_CALCULATE_ZDYFX: tableName = "edb_data_calculate_zdyfx" // 自定义分析->74 case utils.DATA_SOURCE_CALCULATE_RJZ: //日均值->75 tableName = "edb_data_calculate_rjz" case utils.DATA_SOURCE_PREDICT: // 基础预测指标->30 tableName = "edb_data_predict_base" default: edbSource := EdbSourceIdMap[source] if edbSource != nil { tableName = edbSource.TableName } } return } type EdbData struct { EdbDataId int `orm:"column(edb_data_id);pk"` EdbInfoId int `description:"指标信息ID"` EdbCode string `description:"指标编码"` DataTime time.Time `description:"数据日期"` Value float64 `description:"数据值"` CreateTime time.Time `description:"创建时间"` ModifyTime time.Time `description:"修改时间"` DataTimestamp int64 `description:"数据日期时间戳"` } // EdbDataItem 指标数据 type EdbDataItem struct { DataTime string `description:"数据日期"` Value float64 `description:"数据值"` UpdateTime string `description:"更新时间"` } func (m *EdbData) GetItemsBySourceAndCode(source, subSource int, edbCode, startDate string, fieldArr []string, orderRule string) (items []*EdbData, err error) { // 自有数据需要额外处理(从mongo获取) if source == utils.DATA_SOURCE_BUSINESS && utils.UseMongo { return m.getEdbDataListByMongo(source, subSource, edbCode, startDate, "", fieldArr, orderRule) } if source == utils.DATA_SOURCE_THS && subSource == utils.DATA_SUB_SOURCE_HIGH_FREQUENCY && utils.UseMongo { return m.getThsHfEdbDataListByMongo(source, subSource, edbCode, startDate, "", fieldArr, orderRule) } return m.getItemsBySourceAndCodeByMysql(source, subSource, edbCode, startDate, fieldArr, orderRule) } func (m *EdbData) getItemsBySourceAndCodeByMysql(source, subSource int, edbCode, startDate string, fieldArr []string, orderRule string) (items []*EdbData, err error) { tableName := GetEdbDataTableName(source, subSource) if tableName == "" { err = fmt.Errorf("table name empty") return } o := orm.NewOrmUsingDB("data") fields := strings.Join(fieldArr, ",") if len(fieldArr) == 0 { fields = `*` } order := `ORDER BY data_time DESC` if orderRule != "" { order = ` ORDER BY ` + orderRule } cond := ` edb_code = ?` pars := make([]interface{}, 0) pars = append(pars, edbCode) if startDate != "" { cond += ` AND data_time >= ?` pars = append(pars, startDate) } sql := fmt.Sprintf(`SELECT %s FROM %s WHERE %s %s`, fields, tableName, cond, order) _, err = o.Raw(sql, pars).QueryRows(&items) return } // getEdbDataListByMongo // @Description: 通过mongo查询指标数据 // @author: Roc // @datetime 2024-05-07 10:40:43 // @param source int // @param subSource int // @param endInfoId int // @param startDate string // @param endDate string // @return list []*EdbDataList // @return err error func (m *EdbData) getEdbDataListByMongo(source, subSource int, edbCode, startDate, endDate string, fieldArr []string, orderRule string) (list []*EdbData, err error) { list = make([]*EdbData, 0) mogDataObj := mgo.EdbDataBusiness{} // 构建查询条件 queryConditions := bson.M{ "edb_code": edbCode, } // 数据日期 dateCondition, err := mgo.BuildDateCondition(startDate, endDate) if err != nil { return } if len(dateCondition) > 0 { queryConditions["data_time"] = dateCondition } // 获取列表数据 tmpDataList, tmpErr := mogDataObj.GetAllDataList(queryConditions, []string{"data_time"}) if tmpErr != nil { err = tmpErr return } for k, v := range tmpDataList { list = append(list, &EdbData{ EdbDataId: k + 1, EdbInfoId: v.EdbInfoId, EdbCode: v.EdbCode, DataTime: v.DataTime, Value: v.Value, CreateTime: v.CreateTime, ModifyTime: v.ModifyTime, DataTimestamp: v.DataTimestamp, }) } return } func FormatEdbData2Item(origin *EdbData) (item *EdbDataItem) { if origin == nil { return } item = new(EdbDataItem) item.DataTime = utils.TimeTransferString(utils.FormatDate, origin.DataTime) item.Value = origin.Value item.UpdateTime = utils.TimeTransferString(utils.FormatDateTime, origin.ModifyTime) return } func (m *EdbData) getThsHfEdbDataListByMongo(source, subSource int, edbCode, startDate, endDate string, fieldArr []string, orderRule string) (list []*EdbData, err error) { list = make([]*EdbData, 0) mogDataObj := mgo.EdbDataThsHf{} // 构建查询条件 queryConditions := bson.M{ "edb_code": edbCode, } // 数据日期 dateCondition, err := mgo.BuildDateCondition(startDate, endDate) if err != nil { return } if len(dateCondition) > 0 { queryConditions["data_time"] = dateCondition } // 获取列表数据 tmpDataList, tmpErr := mogDataObj.GetAllDataList(queryConditions, []string{"data_time"}) if tmpErr != nil { err = tmpErr return } for k, v := range tmpDataList { list = append(list, &EdbData{ EdbDataId: k + 1, EdbInfoId: v.EdbInfoId, EdbCode: v.EdbCode, DataTime: v.DataTime, Value: v.Value, CreateTime: v.CreateTime, ModifyTime: v.ModifyTime, DataTimestamp: v.DataTimestamp, }) } return } // EdbInfoDataSeasonalResp 指标季节性数据返回 type EdbInfoDataSeasonalResp struct { //EdbInfo *EdbInfo DataList interface{} } type EdbInfoDataResp struct { //EdbInfo *EdbInfo DataList []*EdbDataList } type EdbDataList struct { //EdbDataId int `description:" 指标数据ID"` // EdbInfoId int `description:"指标ID"` DataTime string //`json:"-" description:"数据日期"` DataTimestamp int64 `description:"数据日期"` UpdateTime string `description:"修改时间"` Value float64 `description:"数据值"` } func FormatEdbData2List(origin *EdbData) (item *EdbDataList) { if origin == nil { return } item = new(EdbDataList) //item.EdbDataId = origin.EdbDataId //item.EdbInfoId = origin.EdbInfoId item.DataTime = utils.TimeTransferString(utils.FormatDate, origin.DataTime) item.Value = origin.Value item.DataTimestamp = origin.DataTimestamp item.UpdateTime = utils.TimeTransferString(utils.FormatDateTime, origin.ModifyTime) return }